Development record
The Generic/Specific Boundary of the Site Generator Is a Gate, Not a Hope
Rule
The site verb family keeps two kinds of content on opposite sides of a declared boundary, and every site-facing change names which side it is on.
- Generic side — the record explorer. Input is the abcd record format
(
.abcd/development/**frontmatter and lifecycle directories), git history, andCHANGELOG.mddated headings — nothing else. A generic page never reads a file that exists only in this repository, never carries abcd-the-product's editorial voice, and degrades by graceful absence (a page whose source is missing is omitted, navigation entry included) and graceful sparsity (a thin source renders thin without breaking layout). - Specific side — the composition. The landing page, the cast imagery,
the install tab row, install.sh, the deploy workflow: opt-in, declared in
the repo's
.abcd/site.json, never a default. - Genericity is demonstrated, never asserted (the generalisation
gauntlet,
verdict: reframed). No user-facing prose, brief passage, or intent may
describe
abcd site buildas repo-agnostic until a second, sparse managed instance — a committed fixture repo at minimum, driven through the same CLI surface in CI with golden-file output — exercises every graceful-absence and graceful-sparsity path (itd-139 is that demonstration). This is enforcement-claims-are-facts and evaluate-at-the-user-surface applied to the site verb. - Working-tier data crosses only by opt-in. The zero-configuration
default renders the durable record; publishing the issue ledger
(
.abcd/work/issues/**, working-tier per adr-32) is an explicit per-repo declaration in.abcd/site.json. - Schema movement is a named obligation. The generic renderer inherits
itd-9's schema-migration duty the moment
schema_versionmoves: a renderer that cannot read a record's version says so loudly and renders nothing silently wrong.
Build path (promotion ladder). This rule plus adr-47's decision 6 are
the documented-protocol rung, live now. The armed-detector rung — abcd site check refusing a repo-agnostic claim without the fixture receipt, and
failing a generic page that reads outside its declared inputs — builds with
the site verb family and hardens once itd-139's fixture instance exists.
Until then, per loud-staging, the gate
is this documented protocol and reviews cite it by id.
Why
The generalisation gauntlet's decisive kill attempt was that "generic by construction" is construction, not demonstration — the exact claim shape enforcement-claims-are-facts and evaluate-at-the-user-surface exist to refuse — while the research leg verified the explorer's input contract genuinely is repo-agnostic. A boundary that is only prose in an ADR erodes at exactly the moments it matters: a convenient abcd-only input slipped into a "generic" page, a marketing sentence calling the verb repo-agnostic ahead of evidence, a working-tier ledger rendered public by default. Naming the boundary as a discipline makes each of those a reviewable crossing instead of an accident. Rule 3 is the site-scoped form of script-first-mvp: a capability is earned by running its contract on real data before the claim ships.
What's In Scope
- Every spec and change touching the
abcd siteverb family, the explorer pages, or.abcd/site.json's schema. - Every piece of user-facing prose (docs, README, brief) that characterises the site generator's genericity.
- The publication default for working-tier data on any rendered site.
What's Out of Scope
- The editorial content of abcd's own landing page and docs (adr-47's composed surfaces — governed by the single-source rule, not this boundary).
- Deployment mechanics (adr-48's; this discipline only keeps them on the repo's side of the boundary).
- The record format itself (adr-30's; this discipline consumes it, never defines it).
Acceptance Criteria
- Given user-facing prose describing
abcd site buildas repo-agnostic (or generic, or zero-configuration for any repo), when no second-instance fixture receipt exists, then review refuses the change citing this discipline, and once the armed rung shipsabcd site checkrefuses it mechanically. - Given a page on the generic side of the boundary, when its build reads
any input outside the record format, git history, or
CHANGELOG.md, then the change is refused or the page is reclassified to the specific side in the same change. - Given a repo with no
.abcd/site.jsonopt-in, when its site builds, then no working-tier content (.abcd/work/**) is rendered. - Given a missing optional source (bibliography, Identity block, CHANGELOG), when the site builds, then the dependent page and its navigation entry are omitted and the build succeeds — graceful absence, exercised by the itd-139 fixture in CI.
- Given
schema_versionmoves on any record family, then the generic renderer's compatibility statement is updated in the same change or the build refuses the mismatched record loudly.
Ruling 2026-10-04
itd-139, the second managed project this discipline names as its demonstration (rule 3, the build path and the last acceptance criterion), was superseded on 2026-10-03 by the dashboard intent itd-2610032150577708. Asked what becomes of the promise, the product thinker (wearing the facilitator's hat) chose to give it up: the record site and the dashboard are promised for abcd's own record only (itd-2610032150577708 decision 13). The rules above that name itd-139 stand as written history; a genericity claim remains forbidden, now with no instance planned to earn it.
Open Questions
None recorded yet.
Audit Notes
Empty. Populated by intent-auditor when intent moves to shipped/.
Frontmatter
| id | itd-140 |
|---|---|
| type | intent |
| lifecycle | disciplines |
| kind | discipline |
| severity | major |
.abcd/development/intents/disciplines/itd-140-the-generic-specific-boundary-of-the.md
open on GitHub ↗ · commit history ↗
References1
- itd-135Iris opens abcdev.app and understands who abcd is for, what they and their facilitator own, and how to install it — from one page rendered from the repositorybuilds on
Referenced by6
- adr-47abcdev.app is rendered from this repository alonerelated
- iss-2610262035592770itd-140's armed-detector rung lives in `abcd site check`; 16-lint says the site verb's former check sub-verb is an unknown command.related
- iss-2610262040433257itd-140 names the site's gate `abcd site check`; the site chapter names it `abcd lint site`.related
- iss-2610262042437551itd-140's gate hardens once itd-139's fixture exists; the dashboard intent replaced itd-139 and gave the genericity promise uprelated
- iss-2610262042445075itd-140 bars any intent from describing the site build as repo-agnostic before a sparse fixture proves it; itd-2610091010348892 promises it for every projectrelated
- iss-2610262043369188itd-140 makes the landing page opt-in and never a default; itd-2609061543533170 renders it for every managed repository and forbids switching it offrelated
mentions22
- adr-30Design-record information architecture — flat artefact-type folders
- adr-32The issue ledger is working-tier data, not authored record
- adr-48The website deploys on release, not on merge
- dcn-26082200000000042026-08-22 — The abcdev.app website enters the record: adr-47 (rendered from
- dcn-26082200000000052026-08-22 — Website decision interview (nine questions, all ruled): retired
- iss-2608220150157506A standardised README split (contributor page on the code host, product story on a rendered site) for every managed repo was proposed and adversarially reviewed the same day: four fatal hits against the imposed-standard framing, reframed to offered-never-imposed — a scaffold-time contributor-README template proposed as a human-adopted diff, structure held per-repo via registered positioning.json surfaces, and no convention language until abcd's own split has shipped and a second managed repo has adopted it (itd-140 rule 3). The review is the dated 2026-08-22 research note; graduation takes the full idea-admission gauntlet with abcd's shipped instance as first evidence
- iss-2608231001035445A dedicated print layout for the record, and a downloadable PDF report of the whole Record section (future intent seed). The 2026-08-23 print pass is a stylesheet that stops the worst faults — blank sheets, sliced cards, printed chrome — and it stops there: a closed disclosure still prints as its summary alone outside Chromium, the relationship chart's list is deliberately left collapsed, and nothing composes a document a reader would want to keep. This intent is the designed thing: a print/PDF surface for /record/** with its own page furniture (running heads, page numbers, a contents page, record ids as cross-references rather than links), and a single 'download the record' artefact a visitor can take away. Generic-side under itd-140 — inputs stay the record format, git history and CHANGELOG.md — and adr-47's single-source rule applies unchanged: the document selects spans, it never writes prose. Open questions for the interview: is the PDF built at site-build time (deterministic, attestable, adds a renderer dependency) or printed by the reader's browser from a print stylesheet (no dependency, no attestation, engine-dependent); and does it cover the record only or the whole site.
- iss-2608231005025233The dashboard's stat tiles are inert: a reader who sees '27 principles' or '525 issues' has no way through to what the number counts. Each tile should be a link to where that store is read — principles and disciplines to the foundations page, issues/intents/specs/decisions to their listing, releases to the release history — with a hover frame so the affordance is visible before the click. Generic-side under itd-140: the destination is derived from the record's own store, and a store with no page of its own renders an unlinked tile rather than a dead link (report C of the 2026-08-23 second pass).
- iss-2610262036193171The site chapter's setup takes any managed repository's site live and gives every repository the same pages; itd-2610032150577708 rules that the record site is promised for abcd's own record only.
- iss-2610262041020990The site chapter lays the record site into any managed repository; the dashboard intent promises the record site for abcd's own record only.
- iss-2610262042028384The site chapter says no repo-agnostic explorer claim is made until a second instance proves it; shipped itd-2609061543533170 claims the pages render for every managed repository.
- iss-2610262043520946The dashboard intent limits the record site to abcd's own record; the record-pages intent builds a record site for every project that opts in
- iss-2610262044330700The dashboard ruling promises the record site for abcd's own record only, but the shipped site verb renders the same pages for every managed repository
- itd-9Old Lifeboats Still Unpack
- itd-139Carol's team adopts abcd and gets a readable record the next day, without writing a line of site code
- itd-2610032150577708The product thinker's dashboard, in a browser through Tailscale
- itd-2610040754440360The private dashboard for every abcd-managed project
- itd-2610040754453237The public record site for every abcd-managed project
- spc-37iris-opens-abcdev-app-and-understands-who-abcd-is-for-what-t
- spc-38alice-opens-the-record-explorer-and-reads-the-whole-developm
- spc-39maya-sees-how-every-decision-connects-one-relationship-chart
- spc-40bob-installs-abcd-with-one-checksum-verified-command-served