Skip to content

docs(1403): CAP-33 does not own the engine's OTA arm, and should not - #1416

Merged
dc0sk merged 1 commit into
mainfrom
docs/1403-cap33-correction
Sep 19, 2026
Merged

dc0sk merged 1 commit into
mainfrom
docs/1403-cap33-correction

Conversation

@dc0sk

@dc0sk dc0sk commented Sep 19, 2026

Copy link
Copy Markdown
Owner

Maintainer decision (2026-09-19): no map change. Ledger record only.

The reasoning

#1402 established, from check-trailer.sh's own header, that Refactors: is structural — it names the capability whose code was changed. engine.rs is CAP-38's. So 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 figure in #1403 was wrong

I warned that widening CAP-33 to engine.rs would 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 are baseline, which req-mutation.sh --all-enforced never 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.

09048b84 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, worth knowing

09048b84'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 (#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

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
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