Development record
alice-opens-the-record-explorer-and-reads-the-whole-developm
Summary
spc-38 delivers itd-136's record explorer: one record.json export of the
record graph, and the pages rendered from it — the dashboard, a page per
record with its full body, contributors, a foundations page, and a
references page rendered by a small in-repo CSL formatter. On the itd-140
boundary every page here is generic-side: input is the record format
(.abcd/development/** frontmatter and lifecycle directories, plus the
opted-in issue ledger), git history, and CHANGELOG.md dated headings —
nothing else — and a missing optional source omits the dependent page and
its navigation entry while the build succeeds. No prose anywhere describes
the generator as repo-agnostic (itd-140 rule 3).
Settled constraints
record.jsonis a pure build artifact, never committed (interview ruling): determinism is asserted by a double-build diff in CI, and production cannot drift from the tree because it is rendered from the tag by the released binary (adr-48).- Full bodies at
/record/<type>/<id>/(interview ruling); the issue ledger is published because this repo's.abcd/site.jsonopts in (adr-32 tiering; itd-140 rule 4). - Verbatim record rendering at
/record/**is exempt from the banned-token gate (adr-47 decision 3); the contributors page prints model names under the declared attribution escape. - The baseline is a ratchet seeded with the eight dangling references the in-repo re-count finds (adr-22→adr-14/adr-15/adr-17, adr-25→adr-8, adr-27→adr-16, adr-28→adr-18, adr-35→adr-4, itd-3→spc-1) — fixing one shrinks it, growing it fails the build.
- One canonical primitive: the graph comes from the record-lint engine's existing typed-reference scan, exported — never a third parser.
Mechanism
record.json (in abcd site build)
- A new exported loader on the lint engine's record scan (the
record_schemawalker already parses every store, block-sequence spellings included) yields nodes and typed references;internal/core/siteconsumes it. Landed as a separate behaviour-preserving refactor commit before the feature commit. - Nodes: id, type, lifecycle from directory, title, path, dates; edges:
typed links with mirrored pairs collapsed (intent
spec_id↔ specimplements;relatedrecorded in both files) so each distinct link renders once; body mentions deduplicated against typed edges. - Dates from one
git log --reverse --name-statuspass through the repo's isolated-git helpers: created, entered-current-directory, last touched, for every record file; frontmatterdatewins where a record carries one. - Releases from
CHANGELOG.mddated headings via the changelog package's own matcher; contributors fromgit shortlogfolded through.mailmap; assistance tallies fromAssisted-by:trailers; counts by type and lifecycle; the two precomputed arrangements (spc-39's layouts) ride in the same file;healthcarries the unresolved references measured against the baseline. schema_version: 1; sorted inputs, fixed seeds, no timestamps beyond the build stamp; a golden-file test over an in-process fixture repo pins the export, and CI builds twice and diffs.
Pages
- Dashboard
/record/: stat tiles (releases, decisions, intents, specs, issues, principles), lifecycle bars, release cadence, latest decisions, record health — counts, dates, ids and titles only. A visual whose labels and numbers already render as text (a bar with its legend, a chart with labelled ticks) carries no table twin; a twin accompanies only a visual that is the sole carrier of its numbers. The cadence chart labels every tick with version and date, and below 700px a plain list stands in for the strip — exactly one of the two renders at any width. - Per-record pages: frontmatter, the body rendered verbatim through the Markdown renderer, inbound and outbound typed links, an open-on-GitHub link. Retired ADR ids render as dashed baseline stubs — no tombstone files (interview ruling).
- Contributors
/contributors/: authors of record fromgit shortlogthrough.mailmap; a separate labelled bots-and-tools row driven by an author-pattern rule (bot-suffixed authors and the mailmap-canonicalised pre-policy commit); theAssisted-by:share and per-model tallies presented as disclosure withCONTRIBUTING.mdlinked. - Foundations: cards for
principles/andintents/disciplines/entries that list and link, never explain; if neither directory exists the page and its navigation entry are omitted. - References
/references/: rendered from.abcd/development/research/references.csl.jsonby a small in-repo CSL formatter (stdlib-only — the renderer that satisfies the no-Node, no-committed-HTML gate), numbered identically toACKNOWLEDGEMENTS.md(a check asserts the numbering agrees), DOIs linked, the attribution line the style requires; absent a compatible renderer the page and nav entry are omitted — never a broken page. - Graceful absence throughout: a missing bibliography, Identity block or CHANGELOG omits the dependent page and nav entry and the build succeeds.
Checks (in abcd site check)
- Unresolved typed cross-references outside
.abcd/site-baseline.jsonfail the build naming the reference; the baseline only shrinks. - The 390 px static checks run over every explorer route.
Acceptance-criteria mapping
- AC 1 (counts derived at build into an uncommitted
record.json; double-build diff; visuals carry their numbers as text) → export + determinism gate + dashboard. - AC 2 (every record a page with frontmatter, body, typed links, GitHub link) → per-record pages.
- AC 3 (baseline ratchet) → baseline check, seeded with the eight.
- AC 4 (mirrored references collapse) → edge deduplication.
- AC 5 (contributors: mailmap authors, bots row, disclosure framing, model names confined under the escape) → contributors page.
- AC 6 (foundations lists-and-links or is omitted) → foundations page.
- AC 7 (references numbered like ACKNOWLEDGEMENTS or omitted) → CSL formatter + numbering check.
- AC 8 (390 px, no horizontal scroll) → static checks + CI screenshots.
Out of scope
Frontmatter
| id | spc-38 |
|---|---|
| type | spec |
| lifecycle | closed |
.abcd/development/specs/closed/spc-38-alice-opens-the-record-explorer-and.md
open on GitHub ↗ · commit history ↗
References1
- itd-136Alice opens the record explorer and reads the whole development record — every decision, intent, spec and issue as a page, with contributors and references — without reading YAML on GitHubimplements
mentions20
- adr-22Bundled dependencies become pluggable adapters over a native default
- adr-25The LLM is host-delegated by default; oracles are opt-in adapters
- adr-27The autonomous run is a pluggable seam, not a Ralph port
- adr-28One repository, a curated release artifact — no dev→public mirror
- adr-32The issue ledger is working-tier data, not authored record
- adr-35The lifeboat is a coverage experiment — read-only, out-of-tree, and proven before it is packed (supersedes adr-4)
- adr-47abcdev.app is rendered from this repository alone
- adr-48The website deploys on release, not on merge
- dcn-26082300000000042026-08-23 — Manual-test triage rulings (maintainer): (1) spc-38's "every
- iss-12memory shipped versus planned is ambiguous: docs say spc-38/spc-39 shipped, but itd-36 lives in planned and intents README says shipped is empty until Go capabilities ship.
- iss-2608230752154346Maintainer re-rule 2026-08-23 amends spc-38's 'every visual has a table twin': a table twin is dropped wherever the visual already presents the same labels and numbers as text. Drop the twins on the dashboard seg bars, Assisted-by trailers, and the Genealogy release-cadence list; the cadence chart absorbs its dates; the relationship chart's Browse-as-a-list twin stays (spc-39 AC 4 keyboard path). Spec amendment to be recorded with the change (reports 11, 15, 20).
- iss-2609020734198139The v0.7.1 brief-surface crosscheck (Direction A, tier full, over the sixteen first surface chapters) found four false claims in the design record, none in a user-facing page. 01-ahoy.md line 225 says every non-SessionStart shim attempts hooks/bootstrap.sh when the plugin-root binary is missing; hooks.json wires bootstrap into UserPromptSubmit, SessionStart, PreToolUse and PreCompact but not SessionEnd, which resolves the plugin root, then a vouched PATH abcd, then fails loudly, so a machine with no plugin-root binary never stages its transcript at exit and the chapter says otherwise. 01-ahoy.md line 28 lists status among the sub-verbs that ship on the CLI; abcd ahoy status exits 2, status being a plugin-side alias for the bare render, and the chapter's own sub-verb table omits it. 07-memory.md line 3 disambiguates spc-38 and spc-39 by saying the store's ids stop well short of spc-38; the store now runs to spc-70 and both ids name unrelated specs, so a dozen bare references on the page point at the wrong records. 07-memory.md line 116 enumerates launch --dry-run's gates as five, omitting semantic-receipts, which 04-launch.md documents. Each is a one-line correction; the receipt for the v0.7.1 cut defers them to this record.
- iss-2609290448510918The predecessor-store qualifier sweep reaches past the six intents iss-2609261536147903 named: outside drafts/ and those six, 192 citation sites across about forty intents name a spc-N at or below spc-70 that is not the citing intent's own spec, with no '(predecessor store)' on the line. Some are live cross-references (the cold-reading family's intents cite each other's live specs), and some are the predecessor store's (itd-4, itd-6, itd-29, itd-47 and itd-49 describe pre-rebuild work in its terms), so each site needs the same reading against the live spec it collides with; the specs charter's Two spc-N Namespaces section is the rule. Found while sweeping the pattern of iss-2609261536147903 in lane drainDrift3; a census script over intents/{planned,shipped,disciplines} reproduces the count.
- iss-2609300025372991Two shipped intents' Implementing specs sections misstate where their predecessor-store spec ids stand: itd-36 says its frontmatter spec_id records spc-38 as the primary delivering spec, while the frontmatter records spc-2609211905174684 and live spc-38 and spc-39 are itd-136's record explorer and itd-137's relationship chart; itd-4 says its spc-20 to spc-23 do not exist in the native spec store, while the live store holds all four as other specs (banlist, fresh install, stale-binary warning, tier placement). Found while qualifying predecessor-store citations for iss-2609290448510918.
- itd-3abcd Loads Its Own Rules On Demand
- itd-36Knowledge That Compounds, Not Knowledge That Re-Derives
- itd-139Carol's team adopts abcd and gets a readable record the next day, without writing a line of site code
- itd-140The Generic/Specific Boundary of the Site Generator Is a Gate, Not a Hope
- spc-37iris-opens-abcdev-app-and-understands-who-abcd-is-for-what-t
- spc-39maya-sees-how-every-decision-connects-one-relationship-chart