docs(1403): CAP-33 does not own the engine's OTA arm, and should not - #1416
Merged
Merged
Conversation
Maintainer decision 2026-09-19: no map change. `Refactors:` is STRUCTURAL — capability whose code was changed. engine.rs is CAP-38's. A commit changing the engine's OTA arm says `Refactors: CAP-38`; CAP-33's involvement is teleological and belongs in `Implements: REQ-FUN-06`. CAP-33 keeps ota_rate.rs + profile.rs: the policy, not its driver. THE COST I CITED IN #1403 WAS WRONG, and correcting it did not change the answer. I warned that widening CAP-33 to engine.rs would add 1335 mutants. It would add ZERO to the enforced set: CAP-33 satisfies only REQ-FUN-06 and CAP-38 only REQ-NFR-10/PHY-02/PHY-06/PERF-01, all baseline, which `req-mutation.sh --all-enforced` never touches. The real cost is a seventh owner on engine.rs, weakening the relevance rule where commits concentrate most. 09048b8 therefore joins #1410's corrections: its `Refactors: CAP-33` should have been `Refactors: CAP-38`. It is merged, so this entry is the record. A SQUASH ARTEFACT FOUND HERE: 09048b8's message carries THREE `Refactors:` lines (CAP-33, CAP-38, CAP-33), because a squash concatenates its constituent commits' messages and check-trailer.sh collects every matching line. Under the ANY predicate one irrelevant id fails the whole body. That is the lint working — each id is judged against the union diff, so a correct one still passes — but it means a PR body left as GitHub's default squash text inherits every commit's trailer, and one bad id in a ten-commit branch fails the PR. Verification-objective: the record of which capability a merged change altered must name the capability whose code it actually altered, so the requirement->implementation join is not attributed to a capability the change never touched. Review: none — recording a maintainer decision taken on #1403 (2026-09-19) after the cost figure in the issue was measured and found wrong. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0188ATCj6DZ9aRVQ2vSirua6
dc0sk
force-pushed
the
docs/1403-cap33-correction
branch
from
September 19, 2026 13:05
ad4712d to
14c7f83
Compare
This was referenced Sep 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Maintainer decision (2026-09-19): no map change. Ledger record only.
The reasoning
#1402 established, from
check-trailer.sh's own header, thatRefactors:is structural — it names the capability whose code was changed.engine.rsis CAP-38's. So a commit changing the engine's OTA arm saysRefactors: CAP-38; CAP-33's involvement is teleological and belongs inImplements: REQ-FUN-06.CAP-33 keeps
ota_rate.rs+profile.rs: the policy, not its driver.The cost figure in #1403 was wrong
I warned that widening CAP-33 to
engine.rswould add 1 335 mutants. It would add zero to the enforced set — CAP-33 satisfies only REQ-FUN-06, CAP-38 only REQ-NFR-10/PHY-02/PHY-06/PERF-01, and all of those arebaseline, whichreq-mutation.sh --all-enforcednever touches.Correcting it did not change the answer. The real cost is a seventh owner on
engine.rs, which weakens the relevance rule precisely where commits concentrate.09048b84therefore joins #1410's corrections: itsRefactors: CAP-33should have beenRefactors: CAP-38. It is merged, so this entry is the record.A squash artefact found here, worth knowing
09048b84's message carries threeRefactors:lines —CAP-33,CAP-38,CAP-33— because a squash concatenates its constituent commits' messages andcheck-trailer.shcollects every matching line. Under the ANY predicate (#1401), one irrelevant id fails the whole body.That is the lint working, not a defect: each id is judged against the union diff, so a correct one still passes and only a genuinely wrong one fails. But it means a PR body left as GitHub's default squash text inherits every commit's trailer — and one bad id in a ten-commit branch fails the PR. Recorded rather than filed.
Verification
ledger order ok · doc stamps ok · review lint ok · trace check ok. Docs only.
Verification-objective: the record of which capability a merged change altered must name the capability whose code it actually altered, so the requirement→implementation join is not attributed to a capability the change never touched.
Review: none — recording a maintainer decision taken on #1403 after the issue's own cost figure was measured and found wrong.
🤖 Generated with Claude Code
https://claude.ai/code/session_0188ATCj6DZ9aRVQ2vSirua6