Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
e4f119e
docs: design the brief session's relay, page and route back to GitHub
REPPL Oct 14, 2026
6e8e7ce
chore: vendor the brief session's editor bundle with its provenance
REPPL Oct 14, 2026
19046f9
docs: decide how the brief session's editor bundle is vendored
REPPL Oct 14, 2026
228b731
docs: admit the brief session's relay as abcd's second listener
REPPL Oct 14, 2026
96e9c21
docs: keep the session's host route on the tailnet
REPPL Oct 14, 2026
13316e4
feat: add the brief session relay's core
REPPL Oct 14, 2026
3aa6321
feat: serve the brief session relay over HTTP and WebSocket
REPPL Oct 14, 2026
ff9eee7
feat: build and gate a site served below a base path
REPPL Oct 14, 2026
a2ab10f
feat: render the team relay's Render blueprint and Dockerfile
REPPL Oct 14, 2026
ffa77ca
feat: open every site page with the managed-repository line
REPPL Oct 14, 2026
52a12eb
feat: add the github-pages hosting adapter
REPPL Oct 14, 2026
cf20d3d
feat: wire abcd session serve and blueprint
REPPL Oct 14, 2026
806732a
docs: document the brief session relay's two routes
REPPL Oct 14, 2026
862ace7
feat: switch on a project site on GitHub Pages at setup
REPPL Oct 14, 2026
6d02379
docs: record what the github-pages project site delivers
REPPL Oct 14, 2026
fc68350
chore: pin the session surface in the release-gate manifest
REPPL Oct 14, 2026
248969a
docs: mark the brief session spec's relay and blueprint steps landed
REPPL Oct 14, 2026
63aef86
docs: record the conjecture behind the per-project Pages site
REPPL Oct 14, 2026
fa69056
docs: record the conjecture behind the live brief session
REPPL Oct 14, 2026
6d86fef
fix: count each tailnet visitor apart behind Tailscale Serve
REPPL Oct 14, 2026
b222d6a
fix: rate-limit awareness, suggestions and session creation
REPPL Oct 14, 2026
4f4511b
fix: pin the relay Dockerfile's base image by digest
REPPL Oct 14, 2026
4291d5c
docs: credit the IETF browser-based apps guidance the sign-in follows
REPPL Oct 14, 2026
5e11171
feat: add the brief session page, embedded in the binary
REPPL Oct 14, 2026
d0c63e0
test: pin the session page's files, provenance and safety
REPPL Oct 14, 2026
f835b6f
feat: wire abcd session page
REPPL Oct 14, 2026
09a5527
docs: mark the brief session spec's page step landed
REPPL Oct 14, 2026
77499d2
Merge the relay hardening into the brief session page
REPPL Oct 14, 2026
5652792
fix: refuse a Pages site served below another path than the build's
REPPL Oct 14, 2026
c6f3d79
fix: name an existing Pages site before publishing over it
REPPL Oct 14, 2026
bfa3601
feat: keep guests' suggestions in the session document
REPPL Oct 14, 2026
a30ec94
feat: send a brief session back to GitHub as issues or one pull request
REPPL Oct 14, 2026
de00987
docs: map the session packages and say how to serve the session page
REPPL Oct 14, 2026
7b60f27
docs: mark the brief session spec's back-to-GitHub step landed
REPPL Oct 14, 2026
90586c6
fix: publish a project site only while public and switched on at head
REPPL Oct 14, 2026
0efd55d
fix: deny the base-path gate a pass on a page that did not parse
REPPL Oct 14, 2026
92c165f
docs: say what moving abcd's own site onto Pages would need
REPPL Oct 14, 2026
6eb4c7f
docs: plan moving abcd's own site onto its GitHub Pages
REPPL Oct 14, 2026
9fa71a7
docs: say how setup and the workflow treat an existing or private site
REPPL Oct 14, 2026
cedb11d
Merge the plan for moving abcd's own site into the Pages build
REPPL Oct 14, 2026
f3fd621
fix: rejoin a brief session by token after the host changes the code
REPPL Oct 14, 2026
827986f
fix: load the session page under a base path and without its slash
REPPL Oct 14, 2026
b1e4c5e
fix: end every issue a brief session sends with a findable marker
REPPL Oct 14, 2026
dabcf1e
fix: give each approved guest change its own trailer pair
REPPL Oct 14, 2026
9d57ba6
fix: keep a guest's "@" from mentioning anyone on GitHub
REPPL Oct 14, 2026
8738c16
docs: say the session page sends people to github.com for issues too
REPPL Oct 14, 2026
c3ca148
docs: publish abcdesign.app from a repository of its own
REPPL Oct 14, 2026
d583ebe
fix: replay a session's log outside the send queue
REPPL Oct 14, 2026
d66cced
fix: cap the relay's connections and close those that join nothing
REPPL Oct 14, 2026
5b98a4f
fix: charge each log entry an overhead and rate-limit member updates
REPPL Oct 14, 2026
366024c
fix: send each member's update on attributed to its sender
REPPL Oct 14, 2026
fb754b0
fix: hold every URL attribute to the base path and refuse a climb out
REPPL Oct 14, 2026
8b761ca
fix: set the managed-repository line in small type without the rule
REPPL Oct 14, 2026
963f8a4
fix: pause joining by code past a relay-wide wrong-code budget
REPPL Oct 14, 2026
fc84f39
fix: say why setup kept a workflow in its text output
REPPL Oct 14, 2026
212e378
fix: accept the http address GitHub reports before a domain's HTTPS
REPPL Oct 14, 2026
52387a9
fix: say where to declare a live Pages domain, and refuse an unknown …
REPPL Oct 14, 2026
7b8e789
fix: never let --yes publish over a live Pages site
REPPL Oct 14, 2026
2ea4300
docs: say how setup treats a live Pages site, its HTTPS and a kept wo…
REPPL Oct 14, 2026
2a95434
docs: say why setup and the Pages provider each read the repository
REPPL Oct 14, 2026
50b5f6f
fix: serve sessions only for the repositories a relay is given
REPPL Oct 14, 2026
ddc7d02
fix: send back only the brief's own files from a session
REPPL Oct 14, 2026
34a8785
fix: name the sign-in app's kind and the repository's trusted relay
REPPL Oct 14, 2026
e2f859b
fix: let --origin replace the relay's default origins
REPPL Oct 14, 2026
2f17f37
fix: read only a bare address from the proxy's forwarded entry
REPPL Oct 14, 2026
3a5259d
fix: clean each participant's awareness before the editor draws it
REPPL Oct 14, 2026
95e06ed
docs: describe the relay's repository list, caps and attributed updates
REPPL Oct 14, 2026
2bfd51a
fix: apply a member's update only when it is the sender's own
REPPL Oct 14, 2026
a70b228
fix: send a token only to a relay the repository names or the person …
REPPL Oct 14, 2026
ef893fb
Merge branch 'feat/brief-session-page' into fix/brief-session-page-se…
REPPL Oct 14, 2026
84dc36a
fix: answer the relay's idle close, pauses, unserved repositories and…
REPPL Oct 14, 2026
66e3040
docs: say how the session page trusts a relay and which app to register
REPPL Oct 14, 2026
9c14503
docs: record the relay trust anchor and the GitHub App preference in …
REPPL Oct 14, 2026
ba39597
chore: capture the guard's false kill reading of a JavaScript bitwise…
REPPL Oct 14, 2026
51c354c
fix: attribute awareness messages and name the host's login in the ro…
REPPL Oct 14, 2026
c94e155
fix: set aside updates left pending on a refused update
REPPL Oct 14, 2026
afe33b4
fix: count the session's settings only as the host wrote them
REPPL Oct 14, 2026
3b3866f
fix: show remote cursors whose relative positions carry null fields
REPPL Oct 14, 2026
2874800
fix: tie awareness to its sender and label cursors from the roster
REPPL Oct 14, 2026
ea4fbd7
docs: add attributed awareness and the host-only settings to the sess…
REPPL Oct 14, 2026
83ef2ff
fix: bound the relay's awareness, suggestions, refusals and session life
REPPL Oct 14, 2026
945ec6f
fix: bound the relay's send queues in bytes and sign in through GitHu…
REPPL Oct 14, 2026
c12b54e
fix: harden the session page's sign-in, relay checks and suggestions
REPPL Oct 14, 2026
e46ca95
test: admit a listener only in an allowed package's own directory
REPPL Oct 14, 2026
c4b5b20
docs: record the second security review's fixes for the brief session
REPPL Oct 14, 2026
3d56f5a
fix: put a guest's name in a code span in issue and pull request bodies
REPPL Oct 15, 2026
b4805fc
fix: clear a guest's suggestion the relay refused or rate-limited
REPPL Oct 15, 2026
d6c9b35
fix: name the kind of message a rate limit dropped
REPPL Oct 15, 2026
51ab39c
Merge the brief session into the hosted-sites build
REPPL Oct 15, 2026
b195476
docs: cite the planned site move now its records share the tree
REPPL Oct 15, 2026
d40b781
fix: bound the relay's closed sockets, seats, awareness and rate answers
REPPL Oct 15, 2026
86efafb
fix: stop a closed connection's replay and end it within a grace
REPPL Oct 15, 2026
6a6fbbf
fix: settle a guest's suggestion on every answer, and share the base …
REPPL Oct 15, 2026
8f85fe1
fix: unexport the session core helpers no front door reaches
REPPL Oct 15, 2026
af1b2a5
fix: refuse a blueprint pinning a release older than abcd session
REPPL Oct 15, 2026
0d52a37
fix: drop the dead secret reassignment in session serve
REPPL Oct 15, 2026
3188718
test: smoke the session page verb through the built binary
REPPL Oct 15, 2026
5b33d12
docs: name a release placeholder and say when abcdesign.app is live
REPPL Oct 15, 2026
96449fa
docs: renumber the site spec's criteria and restamp the session spec
REPPL Oct 15, 2026
a151472
chore: capture the client-id kind the session page cannot check
REPPL Oct 15, 2026
49c03f2
chore: capture asking for or generating a project site's pictures
REPPL Oct 15, 2026
ec23764
docs: a site renders only what abcd writes, and abcdev.app becomes ab…
REPPL Oct 15, 2026
8fbb2f3
feat: the github-pages profile declares a project site
REPPL Oct 15, 2026
0fa4fc0
chore: store a project site's pictures in abcd's own folders
REPPL Oct 15, 2026
bea298a
docs: state the 2026-10-15 rulings in plain words, without quoting
REPPL Oct 15, 2026
6393c25
chore: capture showing the PT or TF their words before a record quote…
REPPL Oct 15, 2026
acd0237
chore: capture question refusals shown to the person as errors
REPPL Oct 15, 2026
19a41f0
fix: the site gate reads a two-word author beside the footer's year
REPPL Oct 15, 2026
916ff24
feat: build a project site from what abcd writes
REPPL Oct 15, 2026
c22868d
feat: project site setup writes the switch and the workflow alone
REPPL Oct 15, 2026
54f5060
feat: site build and lint site take --project
REPPL Oct 15, 2026
c1deb73
docs: a project site renders only what abcd writes
REPPL Oct 15, 2026
60532f4
docs: state the project-site ruling in plain words
REPPL Oct 15, 2026
6388e1a
fix: a project site reads its repository from the origin remote alone
REPPL Oct 15, 2026
3644705
fix: a project site with no identity block is titled by its repository
REPPL Oct 15, 2026
13991c4
fix: bare abcd lint gates a project site on its own route
REPPL Oct 15, 2026
dbc8d43
fix: a project site reads abcd's standard record layout by default
REPPL Oct 15, 2026
7bc9fec
fix: a project site has no contributors page
REPPL Oct 15, 2026
063b047
fix: site build --project refuses a site with nothing abcd wrote
REPPL Oct 15, 2026
eafdefa
fix: project site setup says the workflow needs a release that builds it
REPPL Oct 15, 2026
38d66d6
docs: state the project route's release dependency and its sources
REPPL Oct 15, 2026
b514d51
docs: list step 5's commits and the review fixes in the site spec
REPPL Oct 15, 2026
4e55816
chore: capture the embark criterion naming the wrong press-release path
REPPL Oct 15, 2026
f055211
test: site.LoadManifest is now reached from outside its package
REPPL Oct 15, 2026
a03e9e4
chore: capture git authorship still shown on a project site
REPPL Oct 15, 2026
17ec714
Merge the single-source project site into the hosted-sites build
REPPL Oct 15, 2026
eac6ffd
docs: record the repository that publishes abcdesign.app
REPPL Oct 15, 2026
3c6ca3d
fix: read the issue ledger in the standard record layout
REPPL Oct 15, 2026
9871ce1
fix: refuse a project site with no title
REPPL Oct 15, 2026
3885b24
docs: say a project site reads the ledger and needs a title
REPPL Oct 15, 2026
9116a25
docs: state what record.json carries in the authorship issue
REPPL Oct 15, 2026
643f0a8
Merge the single-source site's last fixes into the hosted-sites build
REPPL Oct 15, 2026
0804c79
docs: name the issue-ledger opt-in and the title gate for project sites
REPPL Oct 15, 2026
1edeaee
fix: verify abcd's provenance more strictly in the site workflow
REPPL Oct 15, 2026
48dba2e
test: hold the site workflow's abcd fetch and check to their contract
REPPL Oct 15, 2026
072900c
docs: keep the site chapter's prose free of command shapes
REPPL Oct 15, 2026
924be80
fix: leave every git-history detail off a project site
REPPL Oct 15, 2026
1a84950
docs: say a project site carries no git-history details
REPPL Oct 15, 2026
5bc24b8
chore: resolve the git-history details on project sites
REPPL Oct 15, 2026
1a20c05
chore: capture revisiting git history on project sites
REPPL Oct 15, 2026
fbe2ad8
docs: count the files in the byte-identical check at the final tree
REPPL Oct 15, 2026
bf319ad
fix: show a project record's own date as its date on the graph card
REPPL Oct 15, 2026
8f67613
fix: test the card's own record for git dates, not the mapped node
REPPL Oct 15, 2026
3561ad4
Merge leaving git history off project sites into the hosted-sites build
REPPL Oct 15, 2026
e570a67
test: route the project-history fixture's commits through gittest
REPPL Oct 15, 2026
b6c3ba9
Merge main into the hosted-sites build
REPPL Oct 15, 2026
dcbd3bb
fix: run the github-pages forge through the lifted github package
REPPL Oct 15, 2026
6bb3479
docs: index this branch's two ADRs in the derived ADR index
REPPL Oct 15, 2026
bb18211
docs: record the brief session design that asks nobody for a relay ad…
REPPL Oct 16, 2026
9baf9b9
fix: open the brief session on the brief, with no relay address or to…
REPPL Oct 16, 2026
562460f
chore: capture what the brief session rework could not verify live
REPPL Oct 16, 2026
1b43d91
feat: set up live brief sessions at repository setup with the team's …
REPPL Oct 16, 2026
ce59c6c
docs: record the team's own sign-in app ruling and the root Render Bl…
REPPL Oct 16, 2026
e7e272f
fix: offer the device sign-in only on a local session's own page
REPPL Oct 16, 2026
1ba57c4
fix: name the cloud callback for an app setup already recorded
REPPL Oct 16, 2026
5fc855b
docs: point the shared-app alternative at the team's own app ruling
REPPL Oct 16, 2026
2ca821e
test: keep the session tests clear of the privacy-hygiene rule
REPPL Oct 16, 2026
7d01018
fix: end a device sign-in the page stops, and say when too many are i…
REPPL Oct 16, 2026
18d9e21
docs: give AddressKey and addressKey each their own doc comment
REPPL Oct 16, 2026
bc97636
fix: send the sign-in code only to the relay the app's registered cal…
REPPL Oct 16, 2026
2914ddb
fix: let a confirmed relay run the sign-in, and present the token onl…
REPPL Oct 16, 2026
ca46a3b
fix: drop the default port from a relay's address, so its callback ma…
REPPL Oct 16, 2026
490d4ce
fix: forward the sign-in callback only to the page's own base path
REPPL Oct 16, 2026
c07a91f
fix: tell setup with a recorded app to remove the session page's call…
REPPL Oct 16, 2026
53b6cf8
fix: drop the default port from an admitted page origin
REPPL Oct 16, 2026
6238a18
feat: give the brief session page the Guided and Shared designs
REPPL Oct 16, 2026
8649dec
docs: record the session page's two designs in the brief, the spec an…
REPPL Oct 16, 2026
3e1d7b0
Merge branch 'feat/hosted-sites-design' into feat/hosted-sites
REPPL Oct 16, 2026
2e0d191
fix: keep the session page's focus, sidebars and keys where people se…
REPPL Oct 16, 2026
1fdc382
docs: say what the session page's keys, panels and next-steps note do
REPPL Oct 16, 2026
a433c38
docs: file the Emacs-keys draft and capture four session page follow-ups
REPPL Oct 16, 2026
93949c8
chore: merge main into feat/hosted-sites
REPPL Oct 17, 2026
c6c9a9e
fix: keep the session setup's listener in the session package and cle…
REPPL Oct 17, 2026
d495888
fix: put the decision log's links under the site's base path
REPPL Oct 17, 2026
a034a30
chore: record abcd's own sign-in app and that its live sessions run l…
REPPL Oct 17, 2026
e03719d
Merge remote-tracking branch 'origin/main' into feat/hosted-sites
REPPL Oct 17, 2026
a3d7ffd
Merge remote-tracking branch 'origin/main' into feat/hosted-sites
REPPL Oct 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .abcd/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,8 @@
},
"repo": {
"visibility": "public"
},
"sessions": {
"live": "local"
}
}
8 changes: 7 additions & 1 deletion .abcd/development/brief/02-constraints/03-invariants.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,13 @@ The following are non-negotiable invariants — any architectural choice that vi
which refines adr-38 without superseding it). One package alone opens a
listener, held by `TestOnlyTheDashboardOpensAListener`
(`internal/surface/dashboard`); a later listener is admitted only by
amending that record in the open.
amending that record in the open. Its amendment of 2026-10-14 admits one
second listener, the brief session's relay (`internal/surface/session`).
The relay is started on purpose and listens on loopback unless an address
is chosen on that run. On a person's machine it is reached through
Tailscale Serve, never Funnel. It admits people by the host's join code
and by GitHub's own answer on a presented token, and it holds no project
content at rest.

8. **Acceptance discipline applies uniformly** — every intent's press release is followed by a `## Acceptance Criteria` block in Given-When-Then format (per itd-1). Every brief phase has an `## Acceptance` block in the same format. The format is uniform across the boundary; the *home* differs to match the nature of the work. See [`01-product/03-mental-model.md`](../01-product/03-mental-model.md).

Expand Down
1 change: 1 addition & 0 deletions .abcd/development/brief/04-surfaces/01-ahoy.md
Original file line number Diff line number Diff line change
Expand Up @@ -1355,6 +1355,7 @@ Sub-verbs: none.
| `--dev` | bool |
| `--docs-target` | string |
| `--install-tool` | stringSlice |
| `--live-sessions` | string |
| `--only-waiting` | bool |
| `--oracle-backend` | string |
| `--outbound` | bool |
Expand Down
4 changes: 3 additions & 1 deletion .abcd/development/brief/04-surfaces/16-lint.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ the identity target runs in no gate.
| `decision-durability` | warn | a committed `.abcd/work/decisions/` folder, one file per decision; a repository keeping only a frozen single `DECISIONS.md` log is warned that a new decision has no folder to go to, naming the install that lays one, and its log is never asked to change; decisions not living only in the gitignored layer |
| `docs-currency` | warn | reuses the docs-lint engine where `docs/` exists or `.abcd/docs-lint.json` does (its roots need not include `docs/`), and says so where it cannot: a repo with a `docs/` tree but no docs-lint configuration raises a warn against `.abcd/docs-lint.json`, and the docs target's refusal (a configuration that will not load, or one the engine refuses, such as a `roots` entry that does not exist) is an `error` finding against it, rather than passing quietly |
| `privacy-hygiene` | error (network-identifier findings mapped from a scanner `warn`/`info` land as `warn`, and so do the two not-scanned findings: a file over the cap, and one that could not be opened) | three leak classes on any tracked text line: absolute local paths in committed files, real network identifiers, and the harness-leak pair the outbound policy bans everywhere (a live agent-session URL, and a tool's own "generated with" footer). The fix names reserved documentation values (RFC 5737/3849/2606/7042, or a persona-derived device name), and an `abcd-lint:allow` line waiver is honoured (the `abcd-audit:allow` spelling too). Each line is read as written and in the scanner's decoded spellings of it (`scanner.DecodedViews`: its percent and JSON-escape views), so a home path, an address or a harness-leak shape written behind an escape in a JSON fixture, export or transcript is the finding its plain spelling is; the waiver is read on the line as written, and the record/docs `harness_leak` rule reads the same spellings. The network severities come from the merged scanner configuration, so a repo that raises one in `.abcd/config/pii.json` is honoured, and an override that cannot be read is itself an `error` finding saying the scan fell back to the built-in severities. Two findings report what was *not* read rather than a leak: a tracked text file over the 4 MiB scan cap, and one that could not be opened. Binary files are skipped silently. In a repository that armed gitleaks (`.abcd/config/gitleaks.json`), each line of a tracked text file gitleaks flags is an `error` finding naming the rule, never the value; an armed gitleaks with no binary installed, or a run that fails, is an `error` finding citing that config |
| `site-gates` | warn | where `.abcd/site.json` declares a site: renders it into a fresh temporary directory outside the repository, runs the website's gates over it (the site target's, [`22-site.md`](22-site.md)), and removes it, so the lint still writes nothing in the repository. Each gate failure is one finding, filed against the source span it names; a composition that cannot be rendered is the site target's refusal, an `error` finding against `.abcd/site.json` rather than an aborted lint. Gate failures are warn, as `docs-currency` is, because the authoritative gate is the site target's exit 1 and re-raising it as an error would double-gate one check |
| `site-gates` | warn | where `.abcd/site.json` declares a site: renders it into a fresh temporary directory outside the repository, runs the website's gates over it (the site target's, [`22-site.md`](22-site.md)), and removes it, so the lint still writes nothing in the repository. Each gate failure is one finding, filed against the source span it names; a project site (`.abcd/site.json` in project mode) is gated on its own route; a composition that cannot be rendered is the site target's refusal, an `error` finding against `.abcd/site.json` rather than an aborted lint. Gate failures are warn, as `docs-currency` is, because the authoritative gate is the site target's exit 1 and re-raising it as an error would double-gate one check |
| `identity-positioning` | warn | every registered surface still carries the canonical identity block's tagline (and pitch, where required), and every registered surface can still be found: a surface whose locator matches nothing is its own finding, because drift there would go unseen. A registry or identity block that cannot be read is the identity target's refusal, an `error` finding whatever the family's severity, rather than a pass. Gated on `.abcd/positioning.json` being present on disk, and per-repo upgradeable to `error` (see [`19-identity.md`](19-identity.md)) |

## How it is built
Expand Down Expand Up @@ -229,6 +229,8 @@ Sub-verbs: none.

| Flag | Type |
|---|---|
| `--base-path` | string |
| `--out` | string |
| `--project` | bool |

<!-- surface-appendix:end -->
60 changes: 59 additions & 1 deletion .abcd/development/brief/04-surfaces/22-site.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,63 @@ set by abcd, because the value would pass through it: the verb reads which
secret names are present and prints the exact command for each one that is not.
The credential is read by name through the credential store and never written
into the repository or the report, which names only the credential's name. A second run over an unchanged repository and host
writes nothing and says so. One provider ships, behind an adapter seam
writes nothing and says so. Two providers ship, behind an adapter seam
([`05-internals/02-adapters.md`](../05-internals/02-adapters.md#hosting-providers)).

## A project's own site

The second provider publishes a managed repository's site on the project's own
GitHub Pages, built by the project's own workflow at each release
(itd-2610091010348892). Such a site renders only what abcd already writes to the
repository, as its single source, as the product thinker ruled on 2026-10-15. A
project's hand-written documentation is read on GitHub, and nothing is written
for the website.

So setting one up writes two files and no more: the site's settings, holding
the publish switch and no composition, and the workflow. The interface words,
styles, scripts and headers policy ship in the binary, and the workflow builds
and gates with the project flag, so the repository carries no site sources.
The landing page is an about page derived in code, from four parts in this
order, each rendered only where the repository holds it: the identity block,
the brief's opening (the first section of the brief skeleton,
`01-product/01-press-release.md`), the press releases of the newest shipped
intents whose audit was met, newest id first (a timestamped id carries when
abcd minted it, and an ordinal one sorts before every timestamped one), and the
release list in `CHANGELOG.md`. Without an
identity block the page is headed and titled by the repository's name on
GitHub. A repository holding none of the four is refused at setup and at build,
since its site would be empty. The repository's address and name come from the
origin remote alone, never from the package manifest, which is a person's file.
The record pages are built exactly as for any site, from the record's lint
configuration or, where a managed repository carries none, from abcd's standard
layout under `.abcd/development/`. The issue ledger is always read, so an
intent's typed link to an issue resolves, and an issue is published only where
the settings opt in with `"record": {"issue_ledger": true}`. The references
page and every picture are left out, because each comes from a person's own
files rather than from what abcd writes (pictures are a later intent,
iss-2610150529485165).

A project site shows nothing read from git history either, and its build does
not read it. Who wrote a commit, what model it declared, how many commits there
are and when any of them landed are git's record, not abcd's, so the
contributors page, the timeline, the health page's authorship checks and
record.json's authorship, history and per-record git dates are all left out,
and a record is dated by its own frontmatter alone. Whether a project site
should show any of it is to be revisited.

The project route depends on abcd's own releases: the workflow downloads abcd's
latest release to build with, so a project site cannot build until a release of
abcd carries the project flag. Setup states this in a note on every project
setup, since it asks the network nothing to learn which release is latest.

The gate holds the line: on a project site, a rendered span whose source file
abcd does not write fails the site's gate, on every page, the record's own
included, and so does a site with no title.
Files under `.abcd/` (but the local tier) and `CHANGELOG.md` are abcd's; `docs/`,
`README.md` and every other file are not. The build and the gate name the route
explicitly, and refuse settings of the other shape. abcd's own composed site is
not a project site: it renders its documentation and stays as it is.

## The page set

Every repository gets the same pages: the landing page, the record explorer,
Expand Down Expand Up @@ -310,10 +364,12 @@ Sub-verbs: none.

| Flag | Type |
|---|---|
| `--base-path` | string |
| `--commit` | string |
| `--date` | string |
| `--out` | string |
| `--preview` | bool |
| `--project` | bool |
| `--version` | string |

### `abcd site setup`
Expand All @@ -325,6 +381,8 @@ Sub-verbs: none.
| `--confirm` | bool |
| `--domain` | string |
| `--name` | string |
| `--provider` | string |
| `--replace-existing` | bool |
| `--yes` | bool |

<!-- surface-appendix:end -->
Loading
Loading