Development record
2026-07-18 — The iss-35 semantic release gate was self-referential
2026-07-18 — The iss-35 semantic release gate was self-referential (armed against the tagged commit, read receipts from that commit's own tree) and fail-closed the first public release; fixed in PR #99 by arming with the reviewed content commit (HEAD^2^ / HEAD^) from a full-history checkout, plus a check-reviews.sh RD001 exemption for sha-keyed receipt dirs. The gate is abcd-cli's OWN CI: it is NOT shipped or scaffolded to managed repos (launch-payload.json excludes .github/; ahoy/launch write no CI; lifeboat only reads .github/workflows as a grounding signal), so the flaw had no managed-repo reach — the iss-108 capture's "systemic" framing was corrected on resolve. Any future release-scaffolding intent should scaffold the fixed two-commit (roll -> receipts) pattern, not the original self-referential one.
Frontmatter
| id | dcn-2607180000000001 |
|---|---|
| type | decision |
| date | 2026-07-18 |
.abcd/work/decisions/dcn-2607180000000001-the-iss-35-semantic-release-gate-was.md
open on GitHub ↗ · commit history ↗
mentions3
- iss-35brief-vs-shipped-surface reconciliation: 05-internals/08-skills.md claims abcd ships zero user-facing skills and six top-level commands while 04-surfaces/README.md itself tables nine and /abcd:consult and /abcd:ingest are shipped; the shipped skills violate the brief criterion that any artefact mutation is a command, not a skill; the skills/ layout described (abcd-ahoy, commit-attribution, secrets-and-pii) is fictional vs the real consult/ and ingest/; the implemented, user-reachable abcd docs lint and abcd history verbs have no home in 04-surfaces at all; the operator-internal paragraph contradicts the commands/ directory that exists. Detector (per spec-moves-with-the-surface): a record-lint cross-check that every entry under commands/ and skills/ resolves to a brief surface row, and every brief surface row resolves to a shipped or explicitly staged surface. Acceptance corpus: each falsified claim above — the check fails on all of them today. Fix amends the criterion or the surface in one change, never silently.
- iss-108iss-35 semantic release gate was self-referential under changelog-driven auto-release (adr-37): it armed receipt_gate with the tagged commit but read receipts from that commit's own tree, which can never hold a receipt naming itself. Dormant while private, it fail-closed the first public release (v0.3.0).
- iss-2608211146562243RD001 is documented as unconditional in both definition sites (.abcd/work/reviews/README.md and brief/05-internals/06-lint.md name only the root README as exempt), but scripts/check-reviews.sh exempts 40-hex sha-keyed semantic-gate receipt directories — 7 of the 10 live review directories. The exemption is principled and recorded elsewhere ([dcn-2607180000000001](../../decisions/dcn-2607180000000001-the-iss-35-semantic-release-gate-was.md), spc-14, itd-93 acceptance criterion), but a reader auditing the folder against either charter sees 7 apparent blockers, and 06-lint.md says the rule 'ports into internal/core/lint', so an implementer working from the record alone would port it without the exemption and turn the gate permanently red.