Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
3d86610
chore(record): end the 39 ingested intents in a newline
REPPL Sep 26, 2026
5596495
fix(intent): one live, bounded reader and writer for the review block
REPPL Sep 26, 2026
aadb972
chore: capture iss-2609261835118276 — two ingests skip the prose-cita…
REPPL Sep 26, 2026
d5f0d0e
chore: resolve the five review-block records the ingest fix closes
REPPL Sep 26, 2026
50fee5e
chore: capture iss-2609261850045839 — preflight runs its Go steps on …
REPPL Sep 26, 2026
128e3b4
fix: resolve the declared toolchain from stdout alone
REPPL Sep 26, 2026
42f06f5
chore: resolve iss-2609090951287096 — the toolchain resolver reads st…
REPPL Sep 26, 2026
67a2adf
fix: run preflight's Go steps on the toolchain go.mod declares
REPPL Sep 26, 2026
d0881cd
chore: resolve iss-2609261850045839 — preflight runs the declared too…
REPPL Sep 26, 2026
525dd9e
fix: arm preflight's record-lint over the branch's own range
REPPL Sep 26, 2026
56ab097
chore: resolve iss-2609021152026246 — preflight arms record-lint as C…
REPPL Sep 26, 2026
e4fabe3
fix: widen docs-lint to every committed markdown file and the persona…
REPPL Sep 26, 2026
ff9d94a
chore: defer iss-46's ratchet remainder past v0.11.0
REPPL Sep 26, 2026
17bf742
fix: name a merge-queue collision in RS001 and RS005 refusals
REPPL Sep 26, 2026
e214165
chore: resolve iss-2609091433422134 — RS001 names a queue collision
REPPL Sep 26, 2026
d7ec7fa
test: give the harness-name fixture docs-lint's extra roots and roster
REPPL Sep 26, 2026
bd94e4b
test: provision docs-lint's extra roots in the banlist fixtures
REPPL Sep 26, 2026
710c1de
chore: capture three intent writers outside the mint lock
REPPL Sep 26, 2026
96fe381
fix(intent): hold the store lock across the whole verdict ingest
REPPL Sep 26, 2026
23ccce4
chore: resolve iss-2609261935343851 — the verdict ingest holds the st…
REPPL Sep 26, 2026
a27d06e
fix(intent): park the fidelity-review stub under the store lock
REPPL Sep 26, 2026
8ef9a60
chore: resolve iss-2609261935407925 — the review emit holds the store…
REPPL Sep 26, 2026
44ec7c6
fix(intent): write related-issue edges and spec links under the store…
REPPL Sep 26, 2026
bb14bbe
chore: resolve iss-2609261935407995 — edge and link writes hold the s…
REPPL Sep 26, 2026
1b5a171
chore: capture capture migrate writing intents outside the mint lock
REPPL Sep 26, 2026
b31905a
chore: capture two fidelity-request remainders
REPPL Sep 26, 2026
15a138c
fix(intent): the audit results say what the emit and the ingest did
REPPL Sep 26, 2026
d3a4bd6
fix(intent): the fidelity request states the conditions, the count an…
REPPL Sep 26, 2026
e0d6dca
fix(intent): the consistency request states the findings shape
REPPL Sep 26, 2026
76e919a
chore: resolve iss-2609190337545165 — a dead letter's JSON carries no…
REPPL Sep 26, 2026
21133aa
chore: resolve iss-2609190337598356 — an owed re-emit says it rewrote…
REPPL Sep 26, 2026
2b8075b
chore: resolve iss-2609181121301638 — the request lists the condition…
REPPL Sep 26, 2026
0b94324
chore: resolve iss-2609181121305984 — the request states the verdict …
REPPL Sep 26, 2026
c2e281c
chore: resolve iss-2609262011046013 — the consistency request states …
REPPL Sep 26, 2026
1f8dc2b
chore: capture iss-2609262104070666 — the stale consistency refusal n…
REPPL Sep 26, 2026
42a9ea9
fix(intent): the shape renderer skips a field reflection cannot set
REPPL Sep 26, 2026
9a2ff97
fix(intent): a stale-policy refusal names the re-emit in both ingests
REPPL Sep 26, 2026
5288add
docs(agents): intent-auditor's shape precedence is a MINOR bump, 0.5.0
REPPL Sep 26, 2026
4298e93
chore: resolve iss-2609262104070666 — the stale consistency refusal n…
REPPL Sep 26, 2026
3a3b698
fix(intent,capture): take the intent store lock for the repoint and t…
REPPL Sep 26, 2026
e8593b8
fix(capture,reading): hold the consistency and reading ingests to the…
REPPL Sep 26, 2026
fe66c67
chore: resolve iss-2609261254247117 — the link repoint takes the inte…
REPPL Sep 26, 2026
8f450ff
chore: resolve iss-2609261941039204 — capture migrate takes the inten…
REPPL Sep 26, 2026
04fbd22
chore: resolve iss-2609261835118276 — the ledger ingests ask the pros…
REPPL Sep 26, 2026
94225f3
chore: capture the drainL sweep's two lock siblings
REPPL Sep 26, 2026
9e9c24b
docs: state the prose-citation refusal of the consistency and reading…
REPPL Sep 26, 2026
c1a1dc7
chore: capture the review's chained lock wait and two sweep siblings
REPPL Sep 26, 2026
665826f
fix(intent,capture): take the ledger then the intent lock without wai…
REPPL Sep 26, 2026
9c21045
fix(lifeboat): embark writes under the ledger and intent locks and ju…
REPPL Sep 26, 2026
92bdd4f
fix(reading): the unrecorded citation refusal rolls back the run's ow…
REPPL Sep 26, 2026
df62783
chore: resolve iss-2609262218059995 — a waiting repoint leaves the le…
REPPL Sep 26, 2026
fb2ded6
chore: resolve iss-2609262143209970 — an intent verb's repoint takes …
REPPL Sep 26, 2026
c952212
chore: resolve iss-2609262143265180 — embark writes intents under the…
REPPL Sep 26, 2026
54ea08e
chore: resolve iss-2609262218306589 — embark writes issues under the …
REPPL Sep 26, 2026
0bb70e4
chore: capture the review's pair-rest poll-ceiling finding
REPPL Sep 26, 2026
58a513a
fix(fsutil): the lock poll holds at its ceiling, and the pair's rest …
REPPL Sep 26, 2026
345c7d9
chore: resolve iss-2609262257227538 — the pair's rest outlasts the lo…
REPPL Sep 26, 2026
bf867d6
fix(spec): one spec-store lock, taken by every spec writer, innermost…
REPPL Sep 26, 2026
7356871
chore: resolve iss-2609262218309668 — every spec writer takes the spe…
REPPL Sep 26, 2026
96e5445
merge: land drainGate (fix/drain-gate-parity) — preflight gate parity…
REPPL Sep 26, 2026
3dac195
merge: land ciFast (fix/ci-macos-under-cap) — the macOS check job und…
REPPL Sep 26, 2026
206f4e8
docs: say what the race skip and the prose prefilter actually rest on
REPPL Sep 26, 2026
4b715ad
merge: land the audit/lock chain (drainA1, drainA2, drainL, drainSpec…
REPPL Sep 26, 2026
71af474
chore: recalibrate the reading windows at the integration tip
REPPL Sep 26, 2026
4702785
chore: capture the review's spec-store planting finding
REPPL Sep 26, 2026
94cecdf
fix(spec): close and discard plant no spec store on a tree without one
REPPL Sep 26, 2026
3bb6a48
chore: resolve iss-2609262342345159 — spec close and discard plant no…
REPPL Sep 26, 2026
917ffca
merge: bring main (#733) into the integration branch
REPPL Sep 28, 2026
b727b96
fix(spec): close and discard refuse a store removed before their lock
REPPL Sep 28, 2026
a6989b9
chore: recalibrate the reading windows at the re-merged integration tip
REPPL Sep 28, 2026
896cbde
Merge branch 'main' into integ/land-10
REPPL Sep 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions .abcd/config/reading-presets.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@
"test"
],
"window": {
"tokens_est": 1300000,
"measured_tokens_est": 1280867,
"measured_bytes": 4931339,
"measured_at": "35483ff77ca726d81633625eaa816cae14b38d73"
"tokens_est": 1340000,
"measured_tokens_est": 1322032,
"measured_bytes": 5089824,
"measured_at": "b727b969a992532a9e67adb23734914a4f331513"
}
},
"entailment": {
Expand Down Expand Up @@ -133,9 +133,9 @@
],
"window": {
"tokens_est": 390000,
"measured_tokens_est": 382072,
"measured_bytes": 1470980,
"measured_at": "35483ff77ca726d81633625eaa816cae14b38d73"
"measured_tokens_est": 382812,
"measured_bytes": 1473830,
"measured_at": "b727b969a992532a9e67adb23734914a4f331513"
}
},
"comparative": {
Expand Down Expand Up @@ -216,10 +216,10 @@
"test"
],
"window": {
"tokens_est": 1310000,
"measured_tokens_est": 1289903,
"measured_bytes": 4966127,
"measured_at": "35483ff77ca726d81633625eaa816cae14b38d73"
"tokens_est": 1350000,
"measured_tokens_est": 1331068,
"measured_bytes": 5124612,
"measured_at": "b727b969a992532a9e67adb23734914a4f331513"
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions .abcd/development/brief/04-surfaces/03-embark.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ non-directory parent. On any such conflict the core **writes nothing**: it
returns the conflict set it found, and the surface renders it. A refusal that
writes a file would be a transport-agnostic-core violation.

The write runs under the target's issue-ledger lock (when it writes an issue)
and then its intent store's lock, the order every writer holding both takes,
and every planned write is judged again under them. A record created at a
planned target between the plan and the write — a capture, an intent minted in
the target meanwhile — is a conflict like any other, so it refuses the whole
write rather than being replaced.

## 3. Scaffold steps

Embark is a deterministic Go run: it reads the lifeboat, plans, refuses on any
Expand Down
8 changes: 4 additions & 4 deletions .abcd/development/brief/04-surfaces/05-intent.md

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions .abcd/development/brief/04-surfaces/23-reading.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,18 @@ before that point and leave no refusal record at all. That is deliberate: a refu
record is a record about a run, and a payload that has not yet shown which run it
belongs to has nothing to be recorded against.

One refusal after that point is deliberately unrecorded. An item whose pattern or
body field cites a record id that names no record — wherever the repository's
record-lint gates prose citations in the reading-record store, which reads every
record the ingest would write — refuses the whole run, naming the item, the field
and the id, before the orphan sweep and before anything is staged. It is the gate
the verdict ingest asks, reached through the same registration. Recording it would
give the run an outcome, and the same run re-worded would then be refused as a
rerun; left parked, it is ingested again once its prose describes the record
rather than citing an id that does not exist. Like every recorded refusal, it
rolls back what an earlier, interrupted attempt at the same run left in the
ledger, so a refused run leaves no reading records.

Writes are staged. Nothing durable is written or deleted until the whole payload
validates; the reading records land as one batch; and the run metadata is written
**last**, as the commit marker, so a run without one never happened. An interrupted
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,4 @@ Gap audit:
- missing:
- spc-15's conditional promise that deferring the structural docs-lint rule ("every table row carries at least one footnote") would be "recorded, not silent" — no such rule ships in the diff and no implement-time deferral record appears in the delivered DECISIONS.md line or ledger captures
evidence: .abcd/development/specs/closed/spc-15-alice-reads-one-page-and-knows-exactly-where-abcd-stands-in.md:46 — "If deferred, that is recorded, not silent"
evidence: .abcd/work/DECISIONS.md (delivered grill line, 2026-07-26) — "no mention of the structural lint-rule deferral"
evidence: .abcd/work/DECISIONS.md (delivered grill line, 2026-07-26) — "no mention of the structural lint-rule deferral"
Original file line number Diff line number Diff line change
Expand Up @@ -109,4 +109,4 @@ Gap audit:
- missing:
- the generated, disposable checklist page that hands back a receipt file
evidence: .abcd/development/specs/closed/spc-17-every-citation-abcd-publishes-is-provably-alive-and-honestly.md:105 — "The generated checklist page itself may land as the later rung"
evidence: internal/surface/cli/cite.go:165 — "the format the generated checklist page emits"
evidence: internal/surface/cli/cite.go:165 — "the format the generated checklist page emits"
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,4 @@ Gap audit:
- diverged:
- Onboarding is described as an install-or-prepare interview, but abcd currently onboards only via the prepare-this-repo bridge (host asks the questions); there is no separate install-time interview beyond the CLI `identity init` it drives — a narrower-than-worded but functionally complete path
evidence: internal/core/positioning/init.go:35 — "InitRequest is the onboarding interview's outcome. The host asks the questions (the prepare surface carries the wording); this is what it hands over."
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,4 @@ Gap audit:
- missing:
- Press-release 'two planes': the teaching plane — the rules loader injecting the matched safety rules before shell-heavy work — is not wired in this delivery; only the execution-time guard plane ships (a guard/safety rules domain does not exist in internal/core/rules/)
evidence: .abcd/development/intents/shipped/itd-103-abcd-teaches-repo-agents-the-shell-commands-they-must-never.md:13 — "The rules loader injects the matched safety rules before shell-heavy work"
evidence: internal/core/rules/rules.go:401 — "no guard/safety/hazard domain is registered — the only `guard` here is the stemming short-token guard"
evidence: internal/core/rules/rules.go:401 — "no guard/safety/hazard domain is registered — the only `guard` here is the stemming short-token guard"
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,4 @@ Gap audit:
- The adversarial leg's fresh-context/off-policy/unknown-authorship conduct is codified in the orchestrating prompt but not enforceable by the binary at ingest — the recorded artefact cannot prove the evaluator was a fresh, off-policy session
evidence: internal/core/ideate/record.go:367 — "the binary cannot observe how an agent was run, and pretending to check it would be theatre"
evidence: commands/abcd/ideate.md:66 — "The evaluator must not be the session that ran legs 1 and 2. Dispatch it as a separate agent with its own context."
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -283,4 +283,4 @@ Gap audit:
- missing:
- In-Scope bullet 3: the optional forge-backed allocator — and with it the offline-under-forge loud-fallback behaviour ruled at the interview — is not in the delivery; spc-33 defers it by ruling to a later adapter behind the same seam, so the press release's forge-registry promise remains owed
evidence: .abcd/development/specs/closed/spc-33-abcd-mints-collision-proof-record-ids-across-parallel-agents.md:18 — "adapter behind the same seam and is **out of this spec's delivery**"
evidence: .abcd/development/decisions/adrs/0045-record-ids-are-timestamp-numeric-and-capture-stable.md:43 — "4. **The optional forge allocator allocates and never stores**"
evidence: .abcd/development/decisions/adrs/0045-record-ids-are-timestamp-numeric-and-capture-stable.md:43 — "4. **The optional forge allocator allocates and never stores**"
Original file line number Diff line number Diff line change
Expand Up @@ -376,4 +376,4 @@ Gap audit:
evidence: $GOMODCACHE/github.com/minio/selfupdate@v0.6.0/apply.go:78 — "_, err = io.Copy(fp, bytes.NewReader(newBytes))"
- The CA-canary assertion spc-32 promised ('asserted via a canary file whose read would be observable') — the tests assert the env is unset, not that a planted CA file is never read
evidence: .abcd/development/specs/closed/spc-32-abcd-update-completes-a-chosen-update-in-one-verb-it-fetches.md:78 — "asserted via a canary file whose read would be observable"
evidence: internal/core/update/update_test.go:396 — "fetcher := envRecordingFetcher{onCall: func() {"
evidence: internal/core/update/update_test.go:396 — "fetcher := envRecordingFetcher{onCall: func() {"
Original file line number Diff line number Diff line change
Expand Up @@ -292,4 +292,4 @@ Gap audit:
evidence: internal/surface/cli/bootstrap_cache_test.go:330 — "func TestBootstrapNewReleaseSkipsAbsentPathCopy"
- A test pinning the cache-mode steady state for a cache-provisioned root (data dir set, binary present, no .binary-meta) at zero network; the no-network fast-path test runs without a data dir and the migration test's second run has a .binary-meta root
evidence: hooks/bootstrap.sh:205 — "[ -f \"$root_meta\" ] || exit 0"
evidence: internal/surface/cli/bootstrap_test.go:369 — "func TestBootstrapFastPathTouchesNoNetwork"
evidence: internal/surface/cli/bootstrap_test.go:369 — "func TestBootstrapFastPathTouchesNoNetwork"
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,4 @@ Gap audit:
- diverged:
- the decision is linked from this intent — referenced in prose, not linked
evidence: .abcd/development/intents/shipped/itd-133-abcd-has-a-face-a-block-pixel-duckling-is-the-mascot-the-off.md:55 — "recorded in the decision log"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,4 @@ Gap audit:
- spc-43 said a duplicate key from the local store overrides the primary entry; the delivered hook merges the two stores as a union with no override, so both patterns are enforced (strictly more refusals, never fewer)
evidence: internal/core/ahoy/defaults/pre-commit:453 — "The two stores are a UNION, never an override."
evidence: .abcd/development/specs/closed/spc-43-agent-worktrees-commit-without-the-private-name-guard-abcd-w.md:60 — "a duplicate key from the local store overrides the primary entry"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,4 @@ Gap audit:
- the per-agent changelog check was promised as diff-driven ('added or changed in a diff'); delivered as a tree-shaped entry-per-prompt_version check plus a diff-armed unbumped-edit check, so the diff half fires only where CI arms a range
evidence: internal/core/lint/agentcontract.go:238 — "The DIFF-shaped part runs only when a range is armed"
evidence: cmd/record-lint/main.go:27 — "agentDiff := flag.String("agent-diff""
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,4 @@ Gap audit:
- the intent title promises enabling 'by default on every managed repo'; delivered as an explicit, confirmed verb that `ahoy install` never runs — the spec's Decisions record this as the adr-44 ruling
evidence: internal/core/ahoy/remote.go:242 — "a remote write happens only through a dedicated verb the user invokes AND CONFIRMS"
evidence: .abcd/development/specs/closed/spc-46-abcd-s-remote-config-apply-verb-should-enable-github-native.md:96 — "the verb acts only on explicit invocation against a managed repo"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,4 @@ Gap audit:
evidence: hooks/bootstrap.sh:527 — "announcement is therefore held and spent only where it is the only thing a"
- the 'answers in about a second' timing is not asserted by the gate
evidence: internal/surface/cli/bootstrap_freshinstall_test.go:150 — "the five-second budget that once stood here, widened for"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,4 @@ Gap audit:
- the promise 'a match end is never a truncation artefact' holds under a per-line growth budget; when it is exhausted the probe reverts to the fixed 512-byte window, so on an adversarial many-junction line the old truncation shape can recur (a deliberate resource-exhaustion trade-off recorded in code, not in the intent)
evidence: internal/adapter/scanner/scanner.go:606 — "reverts to exactly the fixed-window behaviour, which is bounded and was never"
evidence: internal/adapter/scanner/scanner.go:583 — "if *budget < hi-at {"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,4 @@ Gap audit:
evidence: internal/core/guard/brace_test.go:26 — "`rm -rf dir{1..9}`,"
evidence: internal/core/guard/brace_test.go:44 — "`git push \${--force,} origin main`,"
- diverged: (none)
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,4 @@ Gap audit:
- the overlap gate flags a by-links overlap as a red result — delivered as a non-zero printed count and a test-suite assertion; site build and site check both stay green on a non-zero count
evidence: internal/surface/cli/site.go:201 — "layout: %d overlapping bubbles across both arrangements"
evidence: internal/core/site/check.go:264 — "func Check(req CheckRequest) (CheckResult, error)"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,4 @@ Gap audit:
- the consumer reclassifies the Pass-B section as exempt rather than listing it among the coverage blanks — delivered as one record-level declaration line; the blanks listing is unchanged
evidence: internal/core/lifeboat/embark_render.go:85 — "if ex := cov.PassBExemption; ex != nil {"
evidence: internal/core/lifeboat/embark_test.go:1167 — "func TestEmbarkUnmarkedProvenanceReadsAsBefore"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,4 @@ Gap audit:
evidence: internal/core/site/check_test.go:708 — "func TestSupersedesToAPrunedRecordStillCounts"
evidence: internal/core/site/check_test.go:773 — "func TestCheckPassesWhenABaselinedTargetArrives"
- diverged: (none)
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,4 @@ Gap audit:
evidence: internal/core/lint/crossstore_test.go:207 — "func TestCrossStoreIDClaimSkipsUntrackedFiles"
evidence: internal/core/lint/crossstore_test.go:167 — "func TestCrossStoreIDClaimIgnoresFencedStatus"
- diverged: (none)
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,4 @@ Gap audit:
- the pre-commit config (secrets + absolute-path gate) resolves from the record or the binary — delivered as a substitution: step 5 scaffolds the private name guard instead, and the embedded hook carries no secrets or absolute-path gate
evidence: commands/prepare-this-repo.md:171 — "5. **Commit gates.** Scaffold them from the binary"
evidence: internal/core/ahoy/defaults/pre-commit:159 — "# --- itd-74 private name guard"
- missing: (none)
- missing: (none)
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,4 @@ Gap audit:
evidence: .abcd/development/specs/closed/spc-57-the-reasoning-behind-what-was-pursued-no-longer-evaporates-a.md:178 — "- Any semantic judgement of whether a grounds text really names a conjecture."
evidence: .abcd/development/intents/disciplines/itd-192-an-acceptance-criterion-whose-producer-does-not-exist-is-jud.md:27 — "- **Wired in this phase** — the criterion is `MET_WITH_CONCERNS`, and the"
- The docs still spell the closed vocabulary by hand even though the behavioural copy is now derived — deliberately, and recorded. The behavioural half is genuinely closed (the six user-facing spellings render from `grounds.UsageSpelling()`/`ProseList()`), so what is missing is the executable enumeration the record itself prescribes as the remedy and declines to apply.
evidence: .abcd/work/issues/open/iss-2608301918362294-a-prose-enumeration-of-where-a-value-is-copied-cannot-be-mai.md:46 — "Remedy, deliberately NOT applied tonight: make the enumeration executable."
evidence: .abcd/work/issues/open/iss-2608301918362294-a-prose-enumeration-of-where-a-value-is-copied-cannot-be-mai.md:46 — "Remedy, deliberately NOT applied tonight: make the enumeration executable."
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,4 @@ Gap audit:
evidence: .abcd/work/issues/open/iss-2608311039586922-commands-reading-md-describes-the-bare-verb-s-definitions-fi.md:14 — "The plugin surface should say resolved rather than present, and say that a malformed definition is a refusal. The itd-184 builder's lane did not include commands/, so the correction was captured rather than taken. — OPEN"
- Nothing dispatches a reading. The four definitions ship unrun for the whole cycle by spc-62's own declaration, and the regime a definition states is never rendered to an operator: Describe reports only the definition NAMES, not the regime or the file hash the locator computes. Not a criterion gap — every criterion is about the definitions and the surfaces, not about a run — but it is the bound on what any of this has been measured against, and the instruments sit at prompt_version 0.1.0, declared shipped and honestly unmeasured.
evidence: internal/core/reading/status.go:31 — "Definitions []string `json:\"definitions\"` — names only; Regime and SHA256 resolved at status.go:56 are discarded"
evidence: .abcd/development/specs/closed/spc-62-four-cold-reading-definitions-one-blindness-core-each-positi.md:246 — "**Running a reading.** The instrument ships unrun for the whole cycle: the definitions are written, linted and tested, and none is dispatched."
evidence: .abcd/development/specs/closed/spc-62-four-cold-reading-definitions-one-blindness-core-each-positi.md:246 — "**Running a reading.** The instrument ships unrun for the whole cycle: the definitions are written, linted and tested, and none is dispatched."
Original file line number Diff line number Diff line change
Expand Up @@ -361,4 +361,4 @@ Gap audit:
evidence: .abcd/development/intents/shipped/itd-185-one-ingest-verb-validates-every-cold-reading-output-includin.md:102 — "Whether the regime signatures lint cleanly — untested; the degradation path exists precisely because of it. — still untested at 1d84ce26"
- A run refused inside the write phase leaves an empty directory standing in the COMMITTED tier. rollbackRun removes the ledger run directory only from inside the closure it runs when there were entries to remove, so a run that reached capture.IngestReading, had its directory created, and was then refused by the size invariant leaves `.abcd/work/issues/readings/<run>/` empty and permanent — the next invocation's sweep clears the stage and walks past it. Harmless in git, which does not track empty directories, but it is a durable artefact of a run the design says never happened, and it is the visible half of the same gap as the missing refusal record in ac-10.
evidence: internal/core/reading/ingest.go:764 — "_ = root.Remove(ledgerRel) — inside unlink, which is only called when len(entries) > 0"
evidence: internal/core/reading/ingest.go:767 — "if len(entries) > 0 { if err := underLedgerLock(root.Name(), unlink); err != nil { — measured: after the size-refused run and a subsequent sweep, the empty committed directory survives"
evidence: internal/core/reading/ingest.go:767 — "if len(entries) > 0 { if err := underLedgerLock(root.Name(), unlink); err != nil { — measured: after the size-refused run and a subsequent sweep, the empty committed directory survives"
Loading
Loading