This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

RE-SCOPED 2026-09-09 against the shipped tree. Every instance in the original

issueresolvedmajoriss-33

RE-SCOPED 2026-09-09 against the shipped tree. Every instance in the original acceptance corpus but one is fixed and struck below; the single survivor is what the record was mostly about.

SURVIVING — ahoy.Status is silent dead scaffolding. internal/core/ahoy/apply.go:1362 declares func Status(cwd string) (string, error), the bare-command human summary, and NOTHING calls it: not the CLI, not the plugin surface, not a test. The original record said "zero callers outside tests"; the true state is stronger — there are no callers at all, so the function is not even pinned by a test that would notice it rotting. It is not merely unwired: 01-ahoy.md lists status among the sub-verbs that ship on the CLI while abcd ahoy status exits 2, which iss-2609020734198139 records separately as a false claim in the design record. Either the verb gets a front door or the function and the chapter line go; what is not tenable is an exported renderer nothing can reach.

FIXED ELSEWHERE, struck from the corpus:

  • The scan_deep half of the persist-unvalidated claim, split out as iss-2609090642031172 and resolved with it. The collect-missing slot re-checks the prompter's answer through inSet(ans, scanDeepChoices) and takes the partial-install path on anything else, so an answer outside the choice set — yes to a question about deep secret scanning — can no longer persist a weaker scan than the operator asked for. scanDeepChoices and scanDeepDefault sit beside the three enum choice sets in detect.go, and the override path and the would-change probe read the same set rather than restating true/false.
  • The docs_target and oracle_backend halves of the persist-unvalidated claim. 6cf0df8a (2026-07-15) added the inSet re-validation; apply.go:478-481 now carries the comment // no valid docs target => partial (never persist a typo) and :484-487 the same for the oracle backend. Neither slot can persist an answer outside its choice set.
  • registerRepo is neither untested nor silent. internal/core/ahoy/lockrace_test.go drives it directly through two concurrent registrations, and c88c94b4 (2026-08-28) replaced the swallowed error with a change-note: apply.go:835 appends history registration for <sha> skipped (<err>) on a lock failure, and the lineage-conflict branch below it reports its own refusal (iss-128).
  • doctor and dry-run have behavioural tests against a real temporary repo. internal/surface/cli/cli_test.go:883, :912, :962 and :1011 exercise abcd ahoy doctor in both JSON and text renders; internal/surface/cli/ahoy_banlist_reach_test.go:102 exercises abcd ahoy dry-run.

Every line number in the ORIGINAL text was wrong for the current tree (it cited apply.go:184-192, :280, :441, :478); the file has roughly tripled since. The detector the record asked for — a wired-verb convention plus a coverage-plus-caller audit that distinguishes loud staging from silent scaffolding, per .abcd/development/principles/loud-staging.md — is still the right shape and is still unbuilt; ahoy.Status is exactly the instance it would catch.

Grounds

  • pursued: no exported ahoy renderer exists that no front door reaches; shown wrong if an exported ahoy function without an outside production caller passes the package's caller audit

Frontmatter

idiss-33
typeissue
lifecycleresolved
severitymajor

mentions5