Development record
Confirmed nitpicks deferred from bughunt round 1 (recorded not fixed): (a-4) memory ingest --source reads its operand with os.Stat-then-unbounded os.ReadFile, a size TOCTOU the URL branch's io.LimitReader avoids; (b-4) the generated CLI reference claims to list every user-facing command but omits Cobra's completion/help commands; (d-12) the CI job id 'record-lint' actually runs scripts/check-reviews.sh (reviews-charter), a misleading required-check name whose safe rename needs a coordinated live-ruleset edit
Confirmed nitpicks deferred from bughunt round 1 (recorded not fixed): (a-4) memory ingest --source reads its operand with os.Stat-then-unbounded os.ReadFile, a size TOCTOU the URL branch's io.LimitReader avoids; (b-4) the generated CLI reference claims to list every user-facing command but omits Cobra's completion/help commands; (d-12) the CI job id 'record-lint' actually runs scripts/check-reviews.sh (reviews-charter), a misleading required-check name whose safe rename needs a coordinated live-ruleset edit
Evidence
- a-4 —
internal/core/memory/ingest.gomaterialFromLocalreads a--sourceoperand withos.Statthen unboundedos.ReadFile; the size cap is a pre-read stat, so a file grown between the two syscalls is read pastmaxFetchBytes(the URL branch bounds withio.LimitReader). Operator-typed local path → self-inflicted OOM only; nitpick. - b-4 —
internal/surface/cli/reference.gogeneratesdocs/reference/cli/commands.mdfromNewRootCommand()before Cobra attachescompletion/help, so the page's "every user-facing command" claim omits two invokable commands; nitpick. - d-12 —
.github/workflows/ci.ymljob idrecord-lintrunsscripts/check-reviews.sh(reviews-charter), while real record-lint is a step of thecheckjob; a misleading required-check name whose safe rename needs a coordinated live-ruleset edit; nitpick.
Adversarial review
Each CONFIRMED (nitpick) by an independent refuter. Recorded not fixed this round: a-4/b-4 are below the fix bar for a substantive round, and d-12's rename cannot be applied without a coordinated live branch-ruleset change (unsafe autonomously).
Grounds
- pursued: the reference lists abcd completion and abcd help and a local ingest source is read under the byte cap; a command the binary answers to missing from the reference would show it wrong
Frontmatter
| id | iss-304 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | nitpick |
.abcd/work/issues/resolved/iss-304-confirmed-nitpicks-deferred-from-bughunt.md
open on GitHub ↗ · commit history ↗
mentions4
- dcn-26081900000000032026-08-19 — bughunt round 1 (branch bughunt-b/round-1): captured iss-291..iss-304 and fixed
- dcn-26082200000000092026-08-22 — All-dimensions bug-hunt round 7 (branch `bughunt-b/round-7`).
- iss-348the root command's Use and help omit the shipped record-id dispatch, so the generated CLI reference states Usage: abcd with no positional and abcd --help never mentions that abcd iss-N describes a record
- iss-2609251358062952The CI job id record-lint in .github/workflows/ci.yml runs scripts/check-reviews-cases.sh and scripts/check-reviews.sh (the reviews-charter gate), while the real record-lint is a step of the check job, so a required status check is named for a gate it does not run. Renaming the job alone breaks the merge gate, because the main-protection ruleset (mirrored in .abcd/work/rulesets/main-protection.json) requires the context record-lint: the rename and the live ruleset edit must land together, which needs the forge ruleset changed by someone holding that permission. Carried over from iss-304 (d-12) when its other two halves were closed.