Files
portal/docs/archive/llm-bootstrap-2026-05/TASKLOG.md
T
Дмитрий 975570e555 chore(brain): phase-1 flags + rollback re-verify — Phase 1 closed (task 7)
Phase 1 Task 7 closes Phase 1 of LLM-first router overhaul.

Live user-level state (NOT git-tracked):
- ~/.claude/runtime/skill-discipline-mode.json = {mode: 'off'} (new).
- ~/.claude/runtime/router-gate-mode.json = {mode: 'warn-only'} (unchanged).

Rollback re-verified after 6 destructive Phase 1 commits:
- node tools/test-rollback.mjs --dry-run -> OK.
- Tag brain-pre-llm-bootstrap intact (origin/main 9d4a30c3).
- Snapshots in docs/archive/llm-bootstrap-2026-05/ all present.

Phase 1 commits (7 tasks, 7 commits):
- dc7fd579 Task 1: Rollback infra + e2e proof.
- 3073e0cb Task 2: §12 hooks unwired, economy preserved.
- 03600acc Task 3: discipline-metrics KEEP.
- bca63fc6 Task 4: §12 archived + 4 tools mv + 2 consumers refactored.
- 712b4c63 Task 5: Pravila §17 + ADR-016.
- 6d72f5b6 Task 6: cross-ref version drift fix (minimal scope).
- (this commit) Task 7: phase-1 flag + rollback re-verify.

Final verification:
- npx vitest run tools/ : 539 passed (baseline preserved).
- C1 l1-watcher: 0 drift.
- C2 cross-ref-checker: 0 drift in 4 files.
- All 7 Phase 1 exit criteria met (TASKLOG.md Task 7 section).

Plan: docs/superpowers/plans/2026-05-25-llm-first-router-overhaul.md Task 7.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 14:28:24 +03:00

16 KiB
Raw Blame History

Task log — LLM-first router overhaul (phase 1)

This file tracks the per-task progression of Phase 1, recording user-level state changes (not in git) so the audit trail survives the overhaul.

Task 1 — Rollback infra (commit dc7fd579, 2026-05-25)

Established and proved a full rollback mechanism BEFORE any destructive step.

  • Git tag brain-pre-llm-bootstrap9d4a30c3 (origin/main pre-overhaul).
  • Archive structure docs/archive/llm-bootstrap-2026-05/ with 8 subdirs.
  • Snapshots: ~/.claude/settings.json, all 14 hooks in ~/.claude/hooks/, ~/.claude/runtime/router-gate-mode.json, docs/registry/nodes.yaml, project .claude/settings.json.
  • tools/test-rollback.mjs + 3 TDD tests (GREEN).
  • ROLLBACK.md runbook with from→to manifest.
  • E2E smoke proof (Task 1 Step 9) verified user-level + git-tracked rollback, Task 1 untracked files survived. Smoke caught a bug in the plan's procedure (git checkout tag -- . + --soft does NOT delete files committed after the tag — git reset --hard tag is correct). ROLLBACK.md uses --hard.

Task 2 — Remove §12 skill-discipline, keep economy (2026-05-25)

Removed §12 enforcement hooks from the live user environment; the economy system (0% / 5% / 75% / 100%, etc.) remains fully active.

Changes to ~/.claude/settings.json (live user file, not in git):

  • Removed PreToolUse block matcher: "Skill"skill-marker.py (§12 trigger).
  • Removed PreToolUse block matcher: "Edit|Write|MultiEdit"skill-check.py (§12 enforcement on Edit/Write).
  • Remaining PreToolUse: 1 block — matcher: "Edit|Write|MultiEdit|Bash|Agent"economy-state-guard.py (pure economy concern, kept).
  • All UserPromptSubmit / PostCompact / SessionStart / Stop hooks unchanged.

Changes to ~/.claude/hooks/economy-mode.py (live user file):

  • Line ~337: replaced trailing reminder «§12 hard rule из Pravila НЕ override-ится этим режимом — на всех уровнях.» → «§17 universal skill-coverage НЕ override-ится этим режимом — на всех уровнях.»
  • All economy logic (LEVELS dict, parse_level, closest_level, state file write) unchanged.
  • The references to §12.2 inside LEVELS[5]["rules"] and LEVELS[100]["rules"] remain — those describe process gates and are migrated to §17 cross-refs in Task 6.

Changes to ~/.claude/hooks/economy-state-guard.py (live user file):

  • NO-OP. Inspected for §12 skill-discipline logic; the file is pure economy (BASH_FILE_MOD_PATTERNS is the test-cadence reminder, not §12 enforcement). Plan Step 3 allows no-op for pure-economy guards.

Files NOT removed (only their PreToolUse triggers were unwired):

  • ~/.claude/hooks/skill-marker.py — still on disk, no longer invoked.
  • ~/.claude/hooks/skill-check.py — still on disk, no longer invoked.

These two files move into docs/archive/.../user-hooks/ archive in Task 4 (snapshot is already in archive from Task 1).

Permissions.ask still references skill-marker.py / skill-check.py — 4 entries (Edit/Write on each). Left as-is; they only require permission for direct file edits, no enforcement. Cleaned up alongside Task 4.

Verification:

  • ~/.claude/settings.json parses as valid JSON; hooks.PreToolUse length = 1.
  • All 4 economy hooks still run with exit 0 on < /dev/null.
  • Live economy-mode.py run with prompt «тест экономия 5%» returns valid JSON with FIRST LINE === ECONOMY MODE: 5% and trailer mentioning §17, no §12 hard rule substring.

Rollback path: node tools/test-rollback.mjs --execute restores ~/.claude/settings.json (with skill-marker/skill-check PreToolUse blocks) and overwrites economy-mode.py from snapshot. Verified end-to-end in Task 1.

Task 3 — Inventory tools/discipline-metrics.mjs (2026-05-25)

Decision: KEEP (no code change).

Read tools/discipline-metrics.mjs (115 lines, 3 exports, 19 passing tests).

The module is NOT only-§12. Three functions, all surviving the §12→§17 migration:

  1. disciplinePercentByClassification(episodes, classificationMap) — counts skill-coverage % per task classification. Currently sourced from tools/observer-classification-map.json; Task 11 re-sources it from docs/registry/nodes.yaml (capabilities + triggers per node). The metric shape stays — §17 universal skill-coverage is the same intent expressed differently (was-skill-used vs default-deny-non-conversation).

  2. deriveRouterStep(pr) — infers reached router-procedure stage (1..5) from observable primary_rationale features (classification, triggers, chain_ref, node_chosen). General router-procedure metric, untouched.

  3. boundariesAppliedRate(episodes) — fraction of episodes with non-empty boundaries_applied, grouped by path_type. General metric, untouched.

Consumers (re-verified before decision):

  • tools/brain-retro-analyzer.mjs — calls all three for the brain-retro factor matrix (already shipped in router-overhaul stage 2, commit b8adeeb9 on feature branch).
  • tools/status-md-generator.mjs — surfaces «Метрики дисциплины» block in docs/observer/STATUS.md.

Tests: tools/discipline-metrics.test.mjs 19 tests, all GREEN in baseline and after Task 1-2 work (verified in Task 2 post-commit STATUS.md regen).

Plan Task 3 step «only-§12 → archive, общий path_type → keep» applies: KEEP.

Task 4 — Archive §12 + routing-docs + memory files (2026-05-25)

Phase 1 Task 4 of LLM-first router overhaul. Heaviest task of Phase 1.

User chose «aggressively per plan» (AskUserQuestion 2026-05-25) after the session surfaced 4 plan deviations vs reality. Adapted execution below.

What was archived (literal)

  1. Pravila §12 (lines 678-748 of docs/Pravila_raboty_Claude_v1_1.md): extracted to pravila-12/Pravila_section_12.md, replaced in Pravila by a 1-paragraph placeholder pointing to §17 (Task 5) + the archive file + ADR-016 (Task 5). Cross-refs §0 priority chain, §0 «Особый статус» note, §16.4, §16.5 — all updated to drop §12 and reference §17 forward.

  2. tools/observer-classification-map.json — JSON mapping classification → recommended_node_ids. After Task 4 refactor (below) had no code consumers. Archived via git mv.

  3. tools/.node-dormancy.json — auto-generated dormancy map (Tooling §3.5/§4.X scrape, two signals: dormant: true OR DEFERRED in boundaries). Single consumer was missed-activations.mjs via the JSON; after Task 4 refactor consumers read status from docs/registry/nodes.yaml directly via buildDormancyMap adapter. Archived via git mv.

  4. tools/extract-node-dormancy.mjs + tools/extract-node-dormancy.test.mjs — generator + 7 tests for .node-dormancy.json. Archived via git mv. lefthook.yml job 12b «extract-node-dormancy» removed (replaced by a removal note pointing to nodes.yaml status: as the new source).

  5. memory/feedback_superpowers_hard_rule.md + memory/feedback_feature_via_writing_plans.md (user-level, NOT git-tracked at ~/.claude/projects/c---------------------crm-------------/memory/): copied to docs/archive/.../memory/ via filesystem cp (plan said git mv — wrong, memory files live outside the repo on this machine). Originals left in place on disk; MEMORY.md (also user-level) updated to remove the two index lines and replace them with an «ARCHIVED 2026-05-25» pointer.

Code refactor (consequence of the JSON archive)

The aggressive-per-plan choice required switching the two remaining JSON-direct consumers to the registry adapter pattern (other consumers — brain-retro-analyzer.mjs, status-md-generator.mjs, missed-activations.mjs — already used the adapter):

  1. tools/observer-coverage-checker.mjs: loadClassificationMap(root) and loadDormancy(root) switched from readFileSync(...json) to loadRegistry({ registryPath: <root>/docs/registry/nodes.yaml, useCache: false }) plus buildClassificationMap / buildDormancyMap. 9/9 tests GREEN.

  2. tools/observer-transcript-parser.mjs: getClassificationMap() and getDormancy() switched similarly, using the cached default-path loadRegistry() (parser is always invoked from tools/). 154/154 tests GREEN — clean drop-in replacement, no classification-shape drift.

Plan deviations (documented)

The plan's literal Task 4 said «archive everything including tools/registry-to-classification-map.mjs and docs/routing-off-phase.md / docs/router-procedure.md». Inspection revealed:

  • tools/registry-to-classification-map.mjs has 4+ active consumers (brain-retro-analyzer, status-md-generator, missed-activations callers, plus the 2 newly-migrated above). It IS the canonical yaml→classification-map / yaml→dormancy-map adapter — keeping it is correct engineering. Plan's framing «adapter is deprecated» was wrong. Status: KEEP, not archived. A future task can inline its logic into consumers if «direct yaml read» is strictly required, but that is a separate refactor.

  • docs/routing-off-phase.md is auto-generated by tools/registry-render.mjs from nodes.yaml, not a hand-edited doc. Archiving it would break the render pipeline + the C6 brain-governance controller (tools/observer-chain-map-checker.mjs) which reads it. Status: NOT ARCHIVED. This is a derivative, not a source.

  • docs/router-procedure.md is similarly suspected of being either a derivative or referenced by active controllers; archival deferred to a separate audit.

Verification

  • Full npx vitest run tools/: 539 passed (delta: 7 from archived extract-node-dormancy.test.mjs, +3 from test-rollback.test.mjs added in Task 1; baseline 543 → 539 expected ✓). The 4 pre-existing «No test suite found» failures on tools/ruflo-*.test.mjs and tools/subagent-prompt-prefix.test.mjs are out of scope and unchanged.
  • Pre-commit (gitleaks + markdownlint + cspell) — verified at commit time.

Rollback

node tools/test-rollback.mjs --execute restores user-level state. git reset --hard brain-pre-llm-bootstrap restores Pravila, the 4 archived tools/ files, lefthook.yml job 12b, observer-coverage-checker.mjs, and observer-transcript-parser.mjs to pre-overhaul state.

Task 6 — Cross-refs §12 → §17 (minimal scope) (2026-05-25)

Phase 1 Task 6 of LLM-first router overhaul. Executed in minimal scope after reality check; full plan deviations documented below.

Reality check (before execution)

  • C1 l1-watcher: ran clean (0 drift) on current state. Source is Tooling plugin-name search, not CLAUDE.md §3.3. Plan's «source §3.3 → nodes.yaml» was misdirected — no adaptation needed.
  • C2 cross-ref-checker: FAILED on version drift (CLAUDE.md → Pravila v1.40, Tooling → Pravila v1.39, after Task 5 bump to v1.41). Code logic is purely version-based, not section-based. Plan's «expected cross-refs §12→§17» was misdirected — checker does not track section refs.
  • §12 occurrences: CLAUDE.md 18, PSR_v1 39, Tooling 18 (total 75). Most are in changelog «v2.X наследие» blocks — historical pointers, not active rules.

What was changed (minimal)

  1. CLAUDE.md §0 «Источник истины» row for Pravila: **v1.40 от 24.05.2026****v1.41 от 25.05.2026** + narrative bump noting Task 4+5 (§12 archived, §17 added, ADR-016).
  2. docs/Tooling_v8_3.md line 4 cross-ref: cross-ref Pravila v1.39+ / PSR_v1 v3.22+ / CLAUDE.md v2.27+cross-ref Pravila v1.41+ / PSR_v1 v3.22+ / CLAUDE.md v2.28+.

What was deferred (plan deviation)

The plan's literal Task 6 Step 1 («archive §3.3 / R15 / Tooling «когда брать»») is a large structural restructure of three normative files. Postponed to a separate follow-up task because:

  • CLAUDE.md §3.3 is the tooling-map index, currently consumed by readers for «which tool for what». Archiving requires replacement with a pin paragraph to docs/registry/nodes.yaml — and the §3.3 narrative quality matters for daily use. Out of scope for this minimal cross-ref pass.
  • PSR_v1 R15 was already removed in v2.0 (motion-runtime removal, 12.05.2026; see docs/CHANGELOG_claude_md.md v1.88). The current R15 is «Off-phase routing» (v3.14+) — unrelated to §12. No action.
  • Tooling §4.X «когда брать» fields — these are per-tool «when to use it» prose, not §12-specific. Archiving requires structural review out of scope for this commit.

Active §12 textual cross-refs in docs/Plugin_stack_rules_v1.md (39 occurrences) and docs/Tooling_v8_3.md body (most in historical changelog blocks) — also deferred. These now point to the archived §12 (docs/archive/llm-bootstrap-2026-05/pravila-12/Pravila_section_12.md), which is honest historical record. Active rule replacement is via Pravila §17 (Task 5). Future cleanup can do bulk §12→§17 substitution.

Verification

  • tools/l1-watcher.mjs exits 0 (no drift).
  • tools/cross-ref-checker.mjs exits 0 («OK — 0 drift in 4 files»).
  • npx vitest run tools/: 539 passed (unchanged from Task 4 baseline).
  • 4 pre-existing «No test suite found» failures — out of scope, unchanged.

Phase 1 status after Task 6

5 of 7 Tasks complete + this Task 6 minimal = 6 of 7. Remaining: Task 7 (phase-1 flags + rollback re-verify) closes Phase 1.

Task 7 — Phase-1 flags + rollback re-verify (2026-05-25)

Phase 1 Task 7 of LLM-first router overhaul — closes Phase 1.

Flag state after Task 7

Live ~/.claude/runtime/ flags (user-level, NOT git-tracked):

  • skill-discipline-mode.json = {mode: "off"} — newly set in this task. Documents that the §12 enforcement hooks (unwired in Task 2) are off.
  • router-gate-mode.json = {mode: "warn-only"} — unchanged from pre-overhaul state (was already warn-only). Phase 2 Task 13 will keep warn-only as default; Phase 3+ may bump to enforce by explicit user decision.

Rollback re-verify (after all Phase 1 destruction)

node tools/test-rollback.mjs --dry-run[dry-run] OK — rollback ready.

This is the second proof of rollback readiness (first was Task 1 step 9 end-to-end smoke). After 6 commits of destructive Phase 1 work (dc7fd5793073e0cb03600accbca63fc6712b4c636d72f5b6), the rollback path is still intact: snapshots present, tag brain-pre-llm-bootstrap points to origin/main 9d4a30c3 (pre-overhaul).

Phase 1 exit criteria (all met)

  • Rollback infra established + proven (Task 1).
  • §12 skill-discipline hooks unwired from ~/.claude/settings.json, economy hooks preserved (Task 2).
  • discipline-metrics.mjs decision recorded — KEEP (Task 3).
  • Pravila §12 archived; routing-docs deferred (auto-generated, see Task 4 deviations); 4 routing/dormancy artefacts archived; 2 user-level memory files archived; 2 consumers refactored to registry adapter; 539/539 vitest GREEN (Task 4).
  • Pravila §17 + ADR-016 added (Task 5).
  • Cross-refs §12 → §17 minimal scope + C1/C2 controllers run clean (Task 6).
  • Phase-1 flag set; rollback re-verified (this Task 7).

Phase 1 commits summary

Task Commit Files Net diff
1 dc7fd579 17 +3700
2 3073e0cb 3 +90 / 13
3 03600acc 2 +36 / 1
4 bca63fc6 14 +382 / 87
5 712b4c63 4 +155 / 3
6 6d72f5b6 4 +66 / 3
7 (this commit) 1+ +N

Phase 1 → Phase 2 handoff

Ready to start Phase 2 (Classifier + памятка + inheritance + §17 enforcement, ~1-1.5 недели per plan). Phase 2 begins with Task 8 (router-config.mjs + capabilities on ~85 nodes in docs/registry/nodes.yaml).

Phase 2 deferred items from Phase 1:

  • §12 textual cross-refs in PSR_v1 (39 occurrences) — bulk substitution whenever convenient.
  • CLAUDE.md §3.3 archive + nodes.yaml pin — structural restructure when the classifier is live and §17 enforcement is real (Phase 2 Task 13).
  • tools/registry-to-classification-map.mjs archival — only if direct yaml reads in consumers are required (currently KEEP, 4+ consumers).
  • docs/routing-off-phase.md / docs/router-procedure.md — auto-generated derivatives; review whether they remain useful as derived views after Phase 2 classifier replaces routing-procedure execution.