Skip to content

docs: единый источник правды для счётчиков/фаз + онбординг (фаза 1) - #2

Merged
Socialpranker merged 12 commits into
mainfrom
docs/single-source-of-truth
Jun 13, 2026
Merged

docs: единый источник правды для счётчиков/фаз + онбординг (фаза 1)#2
Socialpranker merged 12 commits into
mainfrom
docs/single-source-of-truth

Conversation

@Socialpranker

Copy link
Copy Markdown
Owner

Фаза 1 «масштабнее и удобнее»: устранить рассинхрон документации и упростить вход для новичка. Дальше — фаза 2 (мульти-LLM runner), отдельным PR.

Проблема (вскрыта regex'ом)

Доки систематически врали, машиночитаемого источника не было:

Факт Было в доках Реально
Блоки 75 / 76 103
Источники 280+ 460 (был +1 template <main URL> в INDEX)
Каналы 28 / 29 29
API 30+ 39
Фазы «7» / «6» 9 (с 3.5 и 6.5); README-таблица роняла Phase 7

Решение — STAMP

Правда живёт в источнике, доки производны, CI стережёт:

  • scripts/catalog_counts.py — счётчики из файлов references/ выверенными regex (pure read).
  • phases.yaml + scripts/phases_manifest.py — единственный структурный источник 9 фаз; парсер на stdlib (гейт без PyYAML-зависимости). depth_gate вместо плоского optional.
  • scripts/stamp_docs.py — впечатывает значения в маркеры <!--gen:KEY-->…<!--/gen-->; --write правит, --check падает при рассинхроне. Защиты: отказ штамповать ноль, raise на неизвестном ключе / вложенных маркерах, warn на неиспользуемом ключе.
  • CI (validate.yml): pytest + stamp_docs.py --check на каждый PR. Без сети, без токенов.
  • QUICKSTART.md — установка → вызов → результат за ~5 минут, счётчики под маркерами.

⚠️ Про размер диффа

Дифф крупный, но почти весь — механическая перештамповка чисел (особенно docs/index.html, ~30 i18n-мест EN+RU). Содержательная логика — в трёх скриптах scripts/*.py (~290 строк) + тестах. Смотреть стоит коммиты b7607e2 (извлекатель), 5c1947a (манифест), a7d0f2b (штамповщик); c9ef04d — это и есть массовая замена чисел.

Проверено

  • python -m pytest tests/ -q22 passed.
  • python scripts/stamp_docs.py --check → rc 0.
  • Ручная поломка числа (103→104) → гейт краснеет с диффом; возврат → зелёный.
  • README-таблица показывает все 9 фаз (включая 6.5 Verify и 7 Refresh targets).
  • Финальное независимое код-ревью (opus) пройдено; 2 находки исправлены (inline-коммент в квотах парсера; template-URL в счёте источников → честные 460).

🤖 Generated with Claude Code

Socialpranker and others added 12 commits June 13, 2026 15:43
…аза 1)

Дизайн фазы «удобство для новичка»: STAMP-генератор впечатывает ground-truth
(блоки=103, источники=461, каналы=29, API=39) и фазы из phases.yaml в README/
SKILL/docs между маркерами; CI --check падает при рассинхроне. Согласовано
посекционно в брейншторме.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…4 группы)

TDD-план фазы 1: catalog_counts (regex ground-truth) + phases.yaml (stdlib-парсер)
+ stamp_docs (--write/--check) + маркеры в доках + первая штамповка правды +
CI-гейт + QUICKSTART. 20 тестов. Группы A→D, каждая = свой коммит.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
catalog_counts.counts() считает blocks/channels/stat_sources/api/genres
выверенными regex прямо из references/. Pure read. Golden-тест на 103/29/461/39/6.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…сключён, 1 канал)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…о optional)

Единственный структурный источник фаз. Парсер без PyYAML — гейт не тянет зависимость.
Поля выверены по SKILL.md:111-118 и runtime_verification.md:92 (6.5=haiku/low).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
render_values (счётчики+фазы, refuse на zero), stamp_text (unknown-key/unbalanced raise),
run (drift-детект + warn на unused key). 10 тестов на temp-файлах. Доки не тронуты.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…а ещё старые)

116 маркеров в 13 доках. Убран неиспользуемый ключ phases:list:en из render_values
(нечего штамповать → YAGNI; phases:table:en покрывает англ. рендер фаз).
--check показывает только DRIFT (числа корректирует следующий коммит), без warning.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…→461, каналы 28→29, API 30+→39, фазы→9)

- stamp_docs.py --write впечатал правду; вернул Phase 6.5+7 в таблицу README
- stamp_text усилен: падает на ВЛОЖЕННЫХ маркерах (regression — таблица фаз
  в README оборачивала count-маркеры); +тест test_nested_markers_raise
- ручные прозы-фиксы стале-счёта фаз вне маркеров (README:123, DESIGN:23,
  runtime_verification:89 6/7→9)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ассинхрона)

Два новых шага в structure-and-budget: прогон unit-тестов и проверка, что
счётчики/фазы в доках совпадают с источниками. Без сети, без токенов.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…чётчики под маркерами)

Короткая входная дорожка для новичка + ссылка из README. Счётчики в QUICKSTART
под gen-маркерами, подхватываются stamp_docs (TARGETS), стережётся CI --check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… в счёте источников

- phases_manifest._strip_quotes: квотированное значение с inline-комментом больше
  не портится ("1" # x → 1); +тест test_inline_comment_stripped
- catalog_counts._count_stat_sources: исключить INDEX/README (там template
  '**URL:** <main URL>' — не реальный источник) → честные 460 вместо 461
- перештампованы доки 461→460, golden-тест обновлён

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Socialpranker
Socialpranker merged commit 192edd9 into main Jun 13, 2026
2 checks passed
@Socialpranker
Socialpranker deleted the docs/single-source-of-truth branch June 13, 2026 14:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant