docs(registry): profile.md has no writer, and both surfaces that claimed one now say so (refs #58) - #614
docs(registry): profile.md has no writer, and both surfaces that claimed one now say so (refs #58)#614atomchung wants to merge 1 commit into
Conversation
…med one now say so (refs #58) `docs/maintainer-guide.md`'s coach-root registry row and the scope comment in `tests/test_coach_data_cli.py` both asserted that `profile.md` is "written directly by the agent per SKILL.md". No instruction surface says that: the only `profile` in `skills/fomo-kernel/references/` is `profile.json`, a different file holding `max_position_pct` and `muted_rules`, and neither `SKILL.md` nor any `flows/*.md` mentions `profile.md` at all. Nothing in `engine/` writes it either. It is a vestige of an earlier design that stayed registered. The test comment is where the sentence was written first (#471, when the registry-completeness scanner was added); the maintainer guide inherited it in #587, when the shared contract left `CLAUDE.md`. Correcting only the guide would leave the claim alive in the very file the guide's row cites as its coverage evidence -- the mirrored-surface defect that guide names as this repository's most frequent -- so both move together and each now names the other as its mirror. The test comment carried a second, smaller error: it said both scan-invisible entries "are written from outside that scope", when only `ux/` is. The two are now separated, because they are unseen for different reasons and only one of them has a writer. Behavior unchanged. `coach.py`'s `DATA_FILES` entry stays registered so `data-status`/`data-export`/`data-reset` keep seeing a file an older root may hold; its own user-facing description and the three README lines carry the same stale claim and are recorded on #58 rather than fixed here, because whether `profile.md` is revived, re-homed into an append-only projection, or retired is that issue's call. #597 separately ruled it may not become a second canonical truth for provisional principles. `tests/test_sizing_literal_gate.py`'s citation of "the two paths it names as outside its own reach" was checked and left alone: that statement stays true. `python3 tests/run_all.py`: 46/46 suites pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Blocking documentation correction before merge (could not submit The measured defect and the two-surface correction are sound, but this branch now writes a stale owner into the shared maintainer authority.
Please make the smallest correction:
Also rebase/verify on latest |
What this fixes
Two surfaces asserted that
~/.trade-coach/profile.mdis written by the agent perSKILL.md. Nothing writes it.docs/maintainer-guide.md:137`profile.md` (the agent writes it directly per `SKILL.md`)tests/test_coach_data_cli.py:303-304profile.md (written directly by the agent per SKILL.md, never by engine code)Verified against
main@94b7e5f:grep -rn "profile" skills/fomo-kernel/SKILL.md skills/fomo-kernel/flows/ skills/fomo-kernel/references/returns exactly two hits, bothprofile.json— a different file holdingmax_position_pctandmuted_rules. Noprofile.mdon any agent instruction surface, and noengine/module writes it. It is a vestige of an earlier design that stayed registered.Why both, and why together
git log -Sputs the test comment first (6a82ec8, #471, when the registry-completeness scanner was written) and the guide's copy second (78aedc4, #587, when the shared contract leftCLAUDE.md). The guide did not invent the claim — it inherited it.Correcting only the guide would have left the assertion alive in the very file the guide's row cites as its coverage evidence: the mirrored-surface defect
docs/maintainer-guide.mdnames as this repository's most frequent. Each corrected statement now names the other as its mirror, so a future edit to one is prompted to check the other.The test comment also carried a second, smaller error the guide did not: it said both scan-invisible entries "are written from outside that scope", when only
ux/is. The two are now separated — they are unseen for different reasons, and only one of them has a writer.What is deliberately unchanged
coach.py'sDATA_FILES. The entry stays registered, sodata-status/data-export/data-resetkeep seeing a file an older root may hold. Deregistering it would change export and reset coverage.README.md:111/README.zh-TW.md:111/README.zh-CN.md:108, which still tell the user tocatit as "the baseline each review compares against".Both are downstream of the revive / re-home / retire choice #58 owns, and are recorded there rather than fixed here. #597 separately ruled
profile.mdmay not become a second canonical truth for provisional principles. This PR makes the maintainer authority stop testifying that a writer exists, so that choice gets made from measurement rather than from the guide.Checked and left alone:
tests/test_sizing_literal_gate.py:58cites "the two paths it names as outside its own reach" as a scope-naming precedent. That statement stays true after this change, so it carries no drift.Verification
python3 tests/run_all.py— 46/46 suites pass.tests/test_doc_language.py's maintainer-guide gate is presence-based ("a later edit to a row is that row's own business"), so a row rewrite is in scope for it.Doc and comment text only; no behavior change, no schema change, no engine change.
Refs #58. Records the second location #597's evidence section flagged for re-homing.
Claim comment: #58 (comment)
🤖 Generated with Claude Code