From 69373065e6cc6d9339b394f0560c1745e7c46f8a Mon Sep 17 00:00:00 2001 From: Creatman Date: Tue, 5 May 2026 07:09:00 -0400 Subject: [PATCH] =?UTF-8?q?chore:=20small=20polish=20=E2=80=94=20untrack?= =?UTF-8?q?=20.coverage,=20sister=20cross-links,=20author=20signature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove .coverage (86 KB binary Python coverage data) from tracking; add .coverage and htmlcov/ to .gitignore. The file should never have been committed. - Add "Related — Claude Code ecosystem by the same author" section to both README.md and README.ru.md, cross-linking to all 8 sister repos (anti-regression-setup, ai-context-hierarchy, claude-statusline, notebooklm-claude-workflows, lingua-companion, security-scanner, diabot, ghost-showcase). Consistent with footer pattern across all sister-repo READMEs. - Add Author signature to footer (Nick Podolyak with GitHub / Habr / dev.to / Telegram links). Was missing — every sister repo has it. This is small additive polish on a repo that was already at a high standard (CI matrix Linux/macOS/Windows, npm package, 20 topics, 113 tests, bilingual EN/RU, mermaid arch, 7 hero badges, public-beta status). Co-Authored-By: Claude Opus 4.7 (1M context) --- .coverage | Bin 86016 -> 0 bytes .gitignore | 48 +++++++++++++++++++++++------------------------- README.md | 24 ++++++++++++++++++++++++ README.ru.md | 24 ++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 25 deletions(-) delete mode 100644 .coverage diff --git a/.coverage b/.coverage deleted file mode 100644 index 6b666e8b6b89af465adb53a174dbf0e5d1e92071..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86016 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 diff --git a/.gitignore b/.gitignore index 66353fa..f4ce243 100644 --- a/.gitignore +++ b/.gitignore @@ -1,35 +1,33 @@ -# Skill state -.isolation-verified -fixtures/iso-test/ +# Build output (when we publish to npm) +# Editors / OS +# Local env +# Python +# Skill state # Test artefacts (the skill writes these into target projects, not into the skill repo, # but contributors may have them lying around when they hand-test) -node_modules/ -test-results/ -playwright-report/ -playwright/.auth/ -reports/ **/*.spec.ts.snap - -# Python -__pycache__/ +*.env.local *.pyc -.pytest_cache/ -.ruff_cache/ -.mypy_cache/ - -# Editors / OS -.vscode/ -.idea/ +*.tsbuildinfo .DS_Store -Thumbs.db - -# Local env +.coverage .env .env.local .env.test -*.env.local - -# Build output (when we publish to npm) +.idea/ +.isolation-verified +.mypy_cache/ +.pytest_cache/ +.ruff_cache/ +.vscode/ +Thumbs.db +__pycache__/ dist/ -*.tsbuildinfo +fixtures/iso-test/ +htmlcov/ +node_modules/ +playwright-report/ +playwright/.auth/ +reports/ +test-results/ diff --git a/README.md b/README.md index d447651..acd6222 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,21 @@ If you're researching AI-driven web testing in 2026, these are the canonical ref --- +## Related — Claude Code ecosystem by the same author + +If webtest-orch is interesting, these companion repos are likely too — same author, same voice, all built around Claude Code: + +- [`claude-code-antiregression-setup`](https://github.com/CreatmanCEO/claude-code-antiregression-setup) — `CLAUDE.md` + subagents + hooks pattern. Featured on [Habr](https://habr.com/ru/articles/1013330/) (top-5 of the day, 20K reads). +- [`ai-context-hierarchy`](https://github.com/CreatmanCEO/ai-context-hierarchy) — three-level context system. Featured in the [Graphify v5.0 roadmap](https://github.com/safishamsi/graphify/issues/425). +- [`claude-statusline`](https://github.com/CreatmanCEO/claude-statusline) — statusline for Claude Code with VPS health monitoring. Featured on [Habr](https://habr.com/ru/articles/1013414/). +- [`notebooklm-claude-workflows`](https://github.com/CreatmanCEO/notebooklm-claude-workflows) — seven slash-commands for Google NotebookLM research pipelines. +- [`lingua-companion`](https://github.com/CreatmanCEO/lingua-companion) — voice-first English tutor for Russian-speaking IT professionals (one of webtest-orch's validation targets). +- [`security-scanner`](https://github.com/CreatmanCEO/security-scanner) — mobile threat detection through VPN traffic analysis. +- [`diabot`](https://github.com/CreatmanCEO/diabot) — non-commercial Telegram bot for type 1 diabetes (food photo → carb counting). +- [`ghost-showcase`](https://github.com/CreatmanCEO/ghost-showcase) — invisible AI assistant for Windows (commercial product showcase). + +--- + ## License MIT — see [LICENSE](LICENSE). @@ -303,3 +318,12 @@ MIT — see [LICENSE](LICENSE). ## Contributing PRs welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). For OS-specific bug reports use the dedicated [issue template](.github/ISSUE_TEMPLATE/os-compatibility-report.md). + +## Author + +**Nick Podolyak** — Python developer and digital architect at [CREATMAN](https://creatman.site) + +- GitHub: [@CreatmanCEO](https://github.com/CreatmanCEO) +- Habr: [creatman](https://habr.com/ru/users/creatman/) +- dev.to: [@creatman](https://dev.to/creatman) +- Telegram: [@Creatman_it](https://t.me/Creatman_it) diff --git a/README.ru.md b/README.ru.md index f545306..2069d07 100644 --- a/README.ru.md +++ b/README.ru.md @@ -283,6 +283,21 @@ Lingua-dogfood выдал 6 feedback-айтемов, ставших `0.2.0` фи --- +## Связанные проекты — Claude Code-экосистема того же автора + +Если webtest-orch тебе интересен — эти sister-репо тоже скорее всего: тот же автор, тот же голос, всё построено вокруг Claude Code: + +- [`claude-code-antiregression-setup`](https://github.com/CreatmanCEO/claude-code-antiregression-setup) — `CLAUDE.md` + субагенты + хуки. [Habr](https://habr.com/ru/articles/1013330/) (топ-5 дня, 20K чтений). +- [`ai-context-hierarchy`](https://github.com/CreatmanCEO/ai-context-hierarchy) — трёхуровневая система контекста. Featured в [Graphify v5.0 roadmap](https://github.com/safishamsi/graphify/issues/425). +- [`claude-statusline`](https://github.com/CreatmanCEO/claude-statusline) — statusline для Claude Code с VPS-мониторингом. [Habr](https://habr.com/ru/articles/1013414/). +- [`notebooklm-claude-workflows`](https://github.com/CreatmanCEO/notebooklm-claude-workflows) — 7 slash-команд для Google NotebookLM research-пайплайнов. +- [`lingua-companion`](https://github.com/CreatmanCEO/lingua-companion) — voice-first English-tutor для русскоговорящих IT-специалистов (одна из validation-целей webtest-orch). +- [`security-scanner`](https://github.com/CreatmanCEO/security-scanner) — обнаружение мобильных угроз через анализ VPN-трафика. +- [`diabot`](https://github.com/CreatmanCEO/diabot) — non-commercial Telegram-бот для диабета 1 типа (фото еды → carb counting). +- [`ghost-showcase`](https://github.com/CreatmanCEO/ghost-showcase) — невидимый AI-ассистент для Windows (commercial product showcase). + +--- + ## Лицензия MIT — см. [LICENSE](LICENSE). @@ -290,3 +305,12 @@ MIT — см. [LICENSE](LICENSE). ## Contributing PR'ы приветствуются — см. [CONTRIBUTING.md](CONTRIBUTING.md). Для OS-specific bug reports используй [issue template](.github/ISSUE_TEMPLATE/os-compatibility-report.md). + +## Автор + +**Николай Подоляк (Nick Podolyak)** — Python-разработчик и цифровой архитектор в [CREATMAN](https://creatman.site) + +- GitHub: [@CreatmanCEO](https://github.com/CreatmanCEO) +- Habr: [creatman](https://habr.com/ru/users/creatman/) +- dev.to: [@creatman](https://dev.to/creatman) +- Telegram: [@Creatman_it](https://t.me/Creatman_it)