From 0c7a82cb7d99e938626cb8783ba6fe433640cee6 Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Sun, 12 Jul 2026 15:35:18 +0100 Subject: [PATCH 1/2] chore: capture dogfooding-surfaced abcd defects (iss-73/74/75) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recorded while dogfooding abcd as a plugin: iss-73 memory-lint writes to the retired .abcd/logbook/ (the fix behind iss-56's adjudication — runtime artefacts belong in .abcd/.work.local/logs/); iss-74 a duplicate iss-56 id (ledger-integrity bug); iss-75 no dev/always-latest install mode (worked around with a build-on-each-call wrapper). Per the golden rule: a manual workaround is recorded, never silently bypassed. Assisted-by: Claude:claude-opus-4-8 --- ...y-lint-logbook-output-and-scanner-skip-paths-f.md | 12 ++++++++++++ .abcd/work/issues/open/iss-74-duplicate-iss-56-id.md | 12 ++++++++++++ .../iss-75-dogfood-always-latest-install-mode.md | 11 +++++++++++ 3 files changed, 35 insertions(+) create mode 100644 .abcd/work/issues/open/iss-73-relocate-memory-lint-logbook-output-and-scanner-skip-paths-f.md create mode 100644 .abcd/work/issues/open/iss-74-duplicate-iss-56-id.md create mode 100644 .abcd/work/issues/open/iss-75-dogfood-always-latest-install-mode.md diff --git a/.abcd/work/issues/open/iss-73-relocate-memory-lint-logbook-output-and-scanner-skip-paths-f.md b/.abcd/work/issues/open/iss-73-relocate-memory-lint-logbook-output-and-scanner-skip-paths-f.md new file mode 100644 index 00000000..1b4ea5f7 --- /dev/null +++ b/.abcd/work/issues/open/iss-73-relocate-memory-lint-logbook-output-and-scanner-skip-paths-f.md @@ -0,0 +1,12 @@ +--- +schema_version: 1 +id: "iss-73" +slug: "relocate-memory-lint-logbook-output-and-scanner-skip-paths-f" +severity: "minor" +category: "tech-debt" +source: "user-observation" +found_during: "abcd-run-design" +found_at: "internal/core/memory/lint.go" +--- + +Relocate memory-lint logbook output and scanner skip-paths from .abcd/logbook/ (a retired location per iss-36) to .abcd/.work.local/logs/, the gitignored runtime-artefact tier. Maintainer adjudication of iss-56 (2026-07-12): runtime artefacts belong in .work.local/logs/, not a tracked dir. Sites: internal/core/memory/lint.go writes .abcd/logbook/memory/lint dirs; internal/adapter/scanner/scanner.go defaultSkipFragments references .abcd/logbook/pii-scan/ and audit-history/. Fix both plus tests; once the binary no longer writes there the .abcd/logbook retired-location ban (iss-36/iss-56) can be armed. Actionable fix behind iss-56 adjudication. \ No newline at end of file diff --git a/.abcd/work/issues/open/iss-74-duplicate-iss-56-id.md b/.abcd/work/issues/open/iss-74-duplicate-iss-56-id.md new file mode 100644 index 00000000..83e547b4 --- /dev/null +++ b/.abcd/work/issues/open/iss-74-duplicate-iss-56-id.md @@ -0,0 +1,12 @@ +--- +schema_version: 1 +id: "iss-74" +slug: "duplicate-iss-56-id" +severity: "major" +category: "bug" +source: "user-observation" +found_during: "abcd-run-design" +found_at: ".abcd/work/issues/open" +--- + +Duplicate iss-56 id: two open issues share id iss-56 — iss-56-iss-36-lists-abcd-logbook-as-a-retired-location-but-the-ship.md and iss-56-managed-pre-commit-gates.md. The allocator scans max N across open/resolved/wontfix under flock+O_EXCL, so a collision implies a manual add that bypassed it or an allocator gap. Ledger-integrity bug: derived priority, blocked_by edges, and resolve/wontfix by id are all ambiguous while two files answer to iss-56. Detector (per unrecognized-input-never-writes / ledger integrity): a capture/record-lint check that ids are unique across the three status dirs; acceptance corpus = the two iss-56 files. Fix: renumber the later-created one to the next free id and repoint any inbound blocked_by. \ No newline at end of file diff --git a/.abcd/work/issues/open/iss-75-dogfood-always-latest-install-mode.md b/.abcd/work/issues/open/iss-75-dogfood-always-latest-install-mode.md new file mode 100644 index 00000000..5e681e32 --- /dev/null +++ b/.abcd/work/issues/open/iss-75-dogfood-always-latest-install-mode.md @@ -0,0 +1,11 @@ +--- +schema_version: 1 +id: "iss-75" +slug: "dogfood-always-latest-install-mode" +severity: "minor" +category: "observation" +source: "user-observation" +found_during: "abcd-plugin-dogfooding" +--- + +abcd lacks an always-latest / dev install mode for dogfooding: 'abcd ahoy install' symlinks a pinned built binary and there is no plain bin/abcd, so tracking live development required a hand-rolled ~/.local/bin/abcd wrapper that runs 'go build -C && exec' on each call (rebuild-from-source, fail loudly on a broken build). This manual workaround means abcd's own install path does not cover the dogfooding case. Consider 'abcd ahoy install --dev' / a track-latest mode, or bless+document the wrapper as the sanctioned dogfood path. Recorded per the golden rule: a manual workaround must be captured, never silently bypassed, so abcd can be fixed. \ No newline at end of file From c4ebffb5b52060f76d029f57287614edb3f90bd3 Mon Sep 17 00:00:00 2001 From: REPPL <77722411+REPPL@users.noreply.github.com> Date: Sun, 12 Jul 2026 15:35:19 +0100 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20add=20principle=20=E2=80=94=20worka?= =?UTF-8?q?round=20records=20the=20defect?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Codify the golden rule as a first-class principle: when abcd breaks and a manual workaround is taken to move forward, the underlying defect must be recorded as a ledger issue; a silent workaround erases the only trace of the defect. Bounds it to abcd defects (not host-harness quirks or operator mistakes) so the ledger stays signal. Three-rung ladder: principle now, abcd capture is the enabling convention, a workaround-emitted-a-capture check is the absent tool rung. Assisted-by: Claude:claude-opus-4-8 --- .../workaround-records-the-defect.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .abcd/development/principles/workaround-records-the-defect.md diff --git a/.abcd/development/principles/workaround-records-the-defect.md b/.abcd/development/principles/workaround-records-the-defect.md new file mode 100644 index 00000000..a06e7398 --- /dev/null +++ b/.abcd/development/principles/workaround-records-the-defect.md @@ -0,0 +1,47 @@ +# Workaround records the defect + +**The rule.** When abcd itself breaks — an error, wrong or empty output, a missing +or retired path, a surprising behaviour — and a manual workaround is taken to keep +moving, the workaround is not complete until the underlying defect is recorded as a +ledger issue (`abcd capture`). Working around it to unblock is fine; a *silent* +workaround is not, because the workaround is the only trace the defect ever showed +itself, and taking it without recording erases that trace. Recording the issue is the +non-negotiable minimum — at least enough to investigate later. + +**Why.** abcd improves only on recorded evidence; an unrecorded defect is invisible +and is never fixed. A manual workaround is exactly the moment the system revealed a +gap *and* the moment that signal is most likely to be lost — the immediate problem is +unblocked, attention moves on, and the defect survives to bite the next user. Capturing +it converts a private patch into a public, drainable work item, and (composing with +[fix-the-detector](fix-the-detector.md)) into a candidate detector plus its +acceptance corpus. + +**Bounds.** + +- Binds on defects in **abcd** — the binary, the plugin surface, the record's own + tooling. Friction from the host harness, or an operator's own mistake (a mistyped + command, a shell pipe that swallowed the output), is not an abcd defect: discern the + source and capture only the abcd case, so the ledger stays signal, not noise. +- "Record" is the floor, not the ceiling. A one-line capture naming the failing + behaviour and its site (`file:line` if known) is enough to move on; a genuine one-off + gets a plain issue, a shared root cause gets the fix-the-detector treatment. +- Applies to any abcd use, not only formal reviews — and the `/abcd:run` loop captures + the abcd defects it hits mid-run rather than only working around them. +- Composes with [reality-is-filable](reality-is-filable.md) (the ledger's taxonomy must + be able to express the true broken state — an unfilable defect is itself a defect), + and [enforcement-claims-are-facts](enforcement-claims-are-facts.md) (a broken gate is + recorded, never quietly bypassed). + +**Live instance.** The 2026-07-12 dogfooding session moved forward on three workarounds +and left a ledger trace for each: the always-latest binary wrapper worked around abcd +having no dev/track-latest install mode → iss-75; memory-lint writing to the retired +`.abcd/logbook/` → iss-73; a duplicate `iss-56` id → iss-74. The host-harness quirks +hit the same session (a guard-hook blocking a `gh` call, an empty `/plugin details`) +were deliberately *not* captured — not abcd defects. + +**Promotion.** Principle now (entry rung). The enabling convention beneath it is the +existing `abcd capture` ledger (**exists**). The discipline/tool rung above it is +**absent**: a check that a session or run which took a workaround emitted a matching +capture is hard to make fully mechanical, so the realistic MVP toward it is a run-loop +self-report (the `/abcd:run` protocol asserts "defects hit → captured" in its handoff) +or a review-checklist rule, before any gate.