docs: move website ADR + plan into a dedicated docs/website/ namespace
The website subproject drew ADR numbers from the same global integer pool
as main, so every merge risked a collision — this already happened twice
(drafted 0042, bumped to 0044, both landing on numbers main had taken; main
has now used 0044 for relationship visualization). Give the website its own
ADR namespace so the two never compete again.
- docs/adr/0044-public-website-...md
-> docs/website/adr/20260604-adr-website-001.md (id: ADR-website-001)
- docs/plans/20260604-adr-0044-website.md
-> docs/website/plans/20260604-website-implementation-plan.md
- new docs/website/adr/README.md index (dated <date>-adr-website-<NNN> seq)
- docs/adr/README.md: drop the 0044 entry, add a namespace pointer in the
intro (keeps the list tail == merge-base, so main's 0044 merges cleanly)
- ADR-0000: record the subproject-ADR-namespace convention
- update references in STYLE.md, astro.config.mjs, the plan body
Handoff files left untouched as point-in-time history.
This commit is contained in:
@@ -58,6 +58,24 @@ compute "next" from a feature branch. A branch that genuinely needs a real
|
||||
number up front may instead reserve one by landing a stub index entry on
|
||||
`main` first, but placeholder-until-merge is the default.
|
||||
|
||||
### Subproject ADR namespaces
|
||||
|
||||
A long-lived subproject developed on its own branch can escape the shared
|
||||
integer pool entirely by keeping its decision records in a **separate
|
||||
namespace**, rather than fighting collisions on every merge. The **website**
|
||||
(`docs/website/adr/`) is the first: its ADRs use a dated sequence —
|
||||
`<date>-adr-website-<NNN>.md`, referenced in prose as `ADR-website-NNN` —
|
||||
and are indexed by their own `docs/website/adr/README.md`. Because the
|
||||
date-plus-subproject prefix is disjoint from `main`'s integer sequence, a
|
||||
website ADR and a `main` ADR can never claim "the same number" again. (This
|
||||
namespace was created on 2026-06-10 after the website's ADR collided with
|
||||
`main`'s on consecutive numbers — drafted 0042, bumped to 0044, both times
|
||||
landing on a number `main` had taken; the move retired it from the pool as
|
||||
**ADR-website-001**.) The main `docs/adr/` index carries a pointer to each
|
||||
such namespace. Use this for a new subproject only when it is genuinely
|
||||
self-contained and branch-isolated; one-off cross-cutting decisions stay in
|
||||
the global sequence.
|
||||
|
||||
## Out-of-scope discipline
|
||||
|
||||
ADRs (and the plans they spawn) lean heavily on "out of scope" language.
|
||||
|
||||
+7
-1
@@ -3,6 +3,13 @@
|
||||
This directory contains the project's ADRs, recorded per
|
||||
[ADR-0000](0000-record-architecture-decisions.md).
|
||||
|
||||
> **Website subproject ADRs** live in a separate namespace —
|
||||
> [`docs/website/adr/`](../website/adr/README.md) — with their own dated
|
||||
> sequence (`<date>-adr-website-<NNN>.md`, id `ADR-website-NNN`), so they
|
||||
> never compete with this global integer pool for numbers (see ADR-0000
|
||||
> "Numbering discipline"). The website itself was decided in
|
||||
> **ADR-website-001** (formerly ADR-0044 in this index).
|
||||
|
||||
## Index
|
||||
|
||||
- [ADR-0000 — Record architecture decisions](0000-record-architecture-decisions.md)
|
||||
@@ -49,4 +56,3 @@ This directory contains the project's ADRs, recorded per
|
||||
- [ADR-0041 — Copy the output panel to the system clipboard](0041-copy-output-to-clipboard.md) — **Accepted 2026-06-02 (issue #11)**, amends ADR-0003's app-command registry (adds **`copy`** / `copy all` / `copy last`). The friction it removes: filing a bug report meant terminal-selecting the output panel and fighting wrapping/borders. New **app-level command** (sigil-free, both modes): `copy` / `copy all` copy the whole panel; `copy last` copies from the most recent echo line to the end. **Mechanism — OSC 52 *and* native (`arboard`), always both**, because OSC 52 acceptance is undetectable (no terminal ack), so a true "fall back when unsupported" can't be built: emit the OSC 52 escape (no new dep — `base64`+`crossterm`; works over SSH; tmux-passthrough-wrapped via `$TMUX`), then a best-effort native write whose failure is ignored (headless host — OSC 52 carried it); the two carry identical content. **Format — plain text verbatim as rendered** (tags, `✓`/`✗`, box-drawing) joined by `\n`, without viewport padding/wrapping; a drift-lock test pins `OutputLine::plain_text` to `render_output_line`. `arboard` added **`--no-default-features`** (drops the `image` crate; X11-only on Linux — `wayland-data-control` deliberately omitted as it ~doubles the dep tree and OSC 52 covers native-Wayland). Security: write-only, scans clean for arboard's tree (cargo audit / osv-scanner / grype), 1Password-maintained, minimal surface. OOS: Markdown export, selection/range, a keybinding, OSC 52 read, `screen` passthrough
|
||||
- [ADR-0042 — H1a parse-error pedagogy in the grammar-tree era](0042-h1a-parse-error-pedagogy-grammar-tree.md) — **Accepted 2026-06-03.** Continues **H1a** from ADR-0021 against the ADR-0024 grammar tree (ADR-0021's chumsky mechanism is dead). Records the **baseline already shipped** — per-command `usage:` block (38 `parse.usage.*` templates), available-commands fallback, structural "after `…`, expected …" wording, source-derived ident slot labels ("table name"/"column name"), curated `parse.custom.*` near-miss messages, and the ADR-0027/0033/0036 schema-aware `[ERR]` diagnostics — so H1a is *substantially* delivered at the intent level. Defines the remaining work as **(1)** a verified per-command **near-miss matrix** (`tests/typing_surface/` + `tests/it/parse_error_pedagogy.rs`) as the definition of done, test-first; **(2)** **friendlier literal expectation labels** — optional prose glosses on `Word`/`Punct`/`Flag` positions that *add* role context while always keeping the exact literal visible (e.g. "a filter clause: `where …` or `--all-rows`"); **(3)** **advanced-mode SQL** near-miss parity (RETURNING scope, CTE-arity positioning, `CROSS JOIN … ON`, INSERT…SELECT count) — **in scope**, kept distinct from ADR-0019 §OOS-2 which covers advanced-SQL *engine*-error sanitisation, a different layer. Catalog/anchor-phrase discipline (ADR-0019) preserved; no public API change. OOS: I3/I4, spell-correction, multi-error reporting, verbosity-gating the usage block
|
||||
- [ADR-0043 — Compound-primary-key foreign-key references (T3)](0043-compound-pk-foreign-key-references.md) — **Accepted + implemented 2026-06-09** (all four forks confirmed at the recommended option: full-PK matching, house-style uniform lists, parenthesized DSL syntax, bare-SQL-FK auto-expansion). Closes `requirements.md` **T3** `[x]` — the relationship model went list-based across six layers (single-column preserved, no migration), DSL `from P.(a,b) to C.(x,y)` + SQL `FOREIGN KEY (a,b) REFERENCES P(x,y)` parse/execute/enforce, 12 tests in `tests/it/compound_fk.rs`. Closes the open leg of `requirements.md` **T3**: a foreign key that *references* a parent's compound primary key. A 2026-06-09 audit found single-column FK woven through ~15–20 sites (metadata table, `RelationshipSchema`, `project.yaml` `RawEndpoint`, both grammar surfaces, executor FK-DDL emission, per-column type-compat, display) — earns an ADR, not an inline build. **Decision:** reference the parent's **full** compound PK, matched **positionally** to an equal-length child column list, per-pair `fk_target_type` compat (ADR-0011, element-wise); DSL `from <P>.(a, b) to <C>.(x, y)` (single form unchanged), SQL `FOREIGN KEY (x, y) REFERENCES P(a, b)` (extend the existing one-cap lists; bare table-level FK auto-expands to the parent PK when arities match). **Storage — no migration (back-compat not required, user-confirmed 2026-06-09; no installed base):** the relationship endpoint joins the list convention `project.yaml` *already* uses — `columns: [a, b]` like `primary_key: [id]` and index `columns: [...]` (the endpoint was the lone scalar `column:` holdout); the metadata `TEXT` columns are unchanged and store the list **comma-joined** (`a,b`; the bare name for single — safe because identifiers are `[A-Za-z0-9_]+`). No F3 migrator, no version bump; accepted trade-off is that a pre-change `project.yaml` with relationships won't load (clean cutover). In-memory model goes list-based (`Vec<String>`) through all six layers; the enforced FK is the rebuilt child-table DDL (`FOREIGN KEY (a,b) REFERENCES P(x,y)`), one relationship = one undo step (ADR-0013). Genuine forks escalated: matching policy (full-PK vs subset), storage (house-style uniform lists vs normalized table), DSL syntax (parenthesized vs repeated-dotted), bare-SQL-FK auto-expansion. OOS: subset/non-PK (UNIQUE-targeted) FK references; any single-column behaviour change
|
||||
- [ADR-0044 — Public website and documentation site](0044-public-website-and-documentation-site.md) — **Accepted 2026-06-04** (originally drafted as ADR-0042 on the `website` branch; renumbered on merge to avoid colliding with the H1a ADR-0042). The first public website: a marketing landing page plus the **canonical** user docs. Stack **Astro 6 + Starlight + Tailwind v4** (chosen over SvelteKit + Tailwind for a docs-heavy + marketing site; interactive bits as Astro islands). Showcase demos are **asciinema** `.cast` recordings (scripted-input driver for paced, re-recordable sessions — *not* `history.log` replay), reused inline in docs. The **in-page WASM playground is deferred** (OOS: deferred) behind a stable `Demo` seam, with the portable-core (`dsl`/`app`/`ui`, in-memory `rusqlite` via `ffi-sqlite-wasm-rs`) vs native-edge (Tokio/worker-thread/`crossterm`/persistence/backup-API) boundary recorded for a future ADR + iteration plan. Portable **static build** (Vercel target, but host-agnostic); **no CI yet**; **monorepo** (`website/`). Docs cover the **full supported feature set** with "planned" callouts for the unshipped minority; two wording rules bind user-facing copy — **no engine name** (continues ADR-0002) and **no "DSL"** ("simple mode" / "advanced mode"). Install docs cover **prebuilt binaries + package managers** (D1–D3 track the release tooling). Plan: `docs/plans/20260604-adr-0044-website.md`
|
||||
|
||||
+9
-5
@@ -1,13 +1,17 @@
|
||||
# ADR-0044: Public website and documentation site
|
||||
# ADR-website-001: Public website and documentation site
|
||||
|
||||
## Status
|
||||
|
||||
Accepted (2026-06-04). Implementation plan:
|
||||
[`docs/plans/20260604-adr-0044-website.md`](../plans/20260604-adr-0044-website.md).
|
||||
[`docs/website/plans/20260604-website-implementation-plan.md`](../plans/20260604-website-implementation-plan.md).
|
||||
|
||||
> Renumbered from ADR-0042 to ADR-0044 when the `website` branch merged
|
||||
> `main` (2026-06-09): `main` had independently used 0042 for the H1a
|
||||
> parse-error ADR and 0043 for compound-PK FK references. Content is
|
||||
> History: drafted as ADR-0042, renamed to ADR-0044 (each collided with a
|
||||
> number `main` had independently assigned — H1a took 0042, compound-PK FK
|
||||
> took 0043, then relationship-visualization took 0044). Moved to the
|
||||
> website ADR namespace (`docs/website/adr/`, id **ADR-website-001**) on
|
||||
> 2026-06-10 to end the recurring cross-branch number collision: website
|
||||
> decision records now draw from their own dated sequence and never the
|
||||
> main global ADR pool (see ADR-0000 "Numbering discipline"). Content is
|
||||
> unchanged from the original draft.
|
||||
|
||||
## Context
|
||||
@@ -0,0 +1,19 @@
|
||||
# Website Architecture Decision Records
|
||||
|
||||
Decision records for the **public website + documentation site** subproject
|
||||
(the Astro/Starlight site under `website/`). These are kept in their own
|
||||
namespace, separate from the project-wide ADRs in
|
||||
[`docs/adr/`](../../adr/README.md), so website decisions never compete with
|
||||
the main global ADR sequence for numbers — see
|
||||
[ADR-0000 "Numbering discipline"](../../adr/0000-record-architecture-decisions.md).
|
||||
|
||||
**Numbering.** Files are named `<date>-adr-website-<NNN>.md` and referenced
|
||||
in prose as `ADR-website-NNN`. The `<date>` (the ADR's accepted/created day,
|
||||
`YYYYMMDD`) plus the `website` segment keeps the namespace disjoint from
|
||||
`main`'s integers. Assign the next free `NNN` from this index. Every ADR
|
||||
change updates this index in the same edit (the ADR-0000 index-upkeep rule
|
||||
applies here too).
|
||||
|
||||
## Index
|
||||
|
||||
- [ADR-website-001 — Public website and documentation site](20260604-adr-website-001.md) — **Accepted 2026-06-04** (formerly ADR-0044 in the main index; moved here 2026-06-10 to end recurring cross-branch number collisions). The first public website: a marketing landing page plus the **canonical** user docs. Stack **Astro 6 + Starlight + Tailwind v4** (chosen over SvelteKit + Tailwind for a docs-heavy + marketing site; interactive bits as Astro islands). Showcase demos are **asciinema** `.cast` recordings (scripted-input driver for paced, re-recordable sessions — *not* `history.log` replay), reused inline in docs. The **in-page WASM playground is deferred** (OOS: deferred) behind a stable `Demo` seam, with the portable-core vs native-edge boundary recorded for a future ADR + iteration plan. Portable **static build** (Vercel target, but host-agnostic); **no CI yet**; **monorepo** (`website/`). Docs cover the **full supported feature set** with "planned" callouts for the unshipped minority; two wording rules bind user-facing copy — **no engine name** (continues ADR-0002) and **no "DSL"** ("simple mode" / "advanced mode"). Install docs cover **prebuilt binaries + package managers** (D1–D3 track the release tooling). Plan: [`docs/website/plans/20260604-website-implementation-plan.md`](../plans/20260604-website-implementation-plan.md)
|
||||
+4
-4
@@ -3,7 +3,7 @@
|
||||
**Date:** 2026-06-04 · **Status:** ready to build
|
||||
|
||||
Decisions for this work are recorded in
|
||||
[ADR-0044](../adr/0044-public-website-and-documentation-site.md): Astro 6 +
|
||||
[ADR-website-001](../adr/20260604-adr-website-001.md): Astro 6 +
|
||||
Starlight + Tailwind v4; asciinema demos reusable in docs; the in-page WASM
|
||||
playground deferred behind a stable demo seam; portable static hosting
|
||||
(Vercel target); monorepo (`website/`); website is the canonical docs home;
|
||||
@@ -154,7 +154,7 @@ project lifecycle + undo/history → Tier 3 teaching echo + EXPLAIN + errors +
|
||||
completion/highlighting → Tier 4 clipboard + hints + editing.
|
||||
|
||||
Conventions live in the **living style guide** `website/STYLE.md` (binding
|
||||
rules from ADR-0044 §7 — no engine name, **no "DSL"**, "planned" callouts —
|
||||
rules from ADR-website-001 §7 — no engine name, **no "DSL"**, "planned" callouts —
|
||||
plus finer conventions and an open-decisions log for depth/splitting/example
|
||||
dataset/etc. as they settle). Sources to mine: `src/dsl/command.rs`,
|
||||
`src/dsl/grammar/*`, the REGISTRY, `en-US.yaml`, `docs/adr/*`,
|
||||
@@ -170,7 +170,7 @@ static host. `website/README.md` notes the Vercel preset (root dir
|
||||
`Demo.astro` exposes a stable contract (`{ src, title, height, autoplay }`).
|
||||
At launch it renders `Cast.astro`; later a `Playground.astro` WASM island
|
||||
swaps in behind the same props on the landing page and in docs, with zero
|
||||
call-site changes. Boundary details are in ADR-0044 §3.
|
||||
call-site changes. Boundary details are in ADR-website-001 §3.
|
||||
|
||||
## Verification
|
||||
|
||||
@@ -181,7 +181,7 @@ call-site changes. Boundary details are in ADR-0044 §3.
|
||||
- Starlight link-check passes (broken internal links fail the build).
|
||||
- Docs grep clean of forbidden terms: **no "DSL"**, no engine name.
|
||||
- A `dist/` static deploy works on Vercel (manual import) — confirms
|
||||
portability. (No CI gate yet, per ADR-0044 §4.)
|
||||
portability. (No CI gate yet, per ADR-website-001 §4.)
|
||||
|
||||
## Notes / recommendations (non-blocking)
|
||||
|
||||
+4
-4
@@ -4,7 +4,7 @@ This is the **living** home for documentation authoring conventions for the
|
||||
RDBMS Playground website. It grows as we write.
|
||||
|
||||
- **Binding rules** come from
|
||||
[ADR-0044 §7](../docs/adr/0044-public-website-and-documentation-site.md);
|
||||
[ADR-website-001 §7](../docs/website/adr/20260604-adr-website-001.md);
|
||||
this guide must not contradict them. If a convention is significant,
|
||||
durable, or contested, it is decided in an **ADR** (new or amended), and
|
||||
this guide references it. Finer, settled conventions live here directly.
|
||||
@@ -17,7 +17,7 @@ Status tags used below: **[DECIDED]** (binding or settled) ·
|
||||
|
||||
---
|
||||
|
||||
## Terminology & wording [DECIDED — ADR-0044 §7]
|
||||
## Terminology & wording [DECIDED — ADR-website-001 §7]
|
||||
|
||||
- **No "DSL".** It is internal jargon. Use **simple mode** (the playground's
|
||||
keyword command language) and **advanced mode** (SQL).
|
||||
@@ -66,7 +66,7 @@ Ground every reference page in source — `parse.usage.*` and `help.*` in
|
||||
`src/friendly/strings/en-US.yaml`, `src/dsl/command.rs`, `src/dsl/types.rs`
|
||||
— never paraphrase grammar from memory.
|
||||
|
||||
## "Planned / not yet available" callouts [DECIDED — ADR-0044 §7]
|
||||
## "Planned / not yet available" callouts [DECIDED — ADR-website-001 §7]
|
||||
|
||||
Any capability that is not yet fully implemented is **omitted** or carries a
|
||||
clear callout — never presented as shipped. Standard form: a Starlight aside
|
||||
@@ -127,7 +127,7 @@ a small standalone example, not by complicating this schema.
|
||||
- Pair a hero/landing cast with a text transcript or the equivalent docs
|
||||
snippet (accessibility + SEO).
|
||||
- Recorded via a scripted-input driver for paced, re-recordable sessions
|
||||
(ADR-0044 §2; recipe in `README.md`). **[OPEN]**: cast file naming,
|
||||
(ADR-website-001 §2; recipe in `README.md`). **[OPEN]**: cast file naming,
|
||||
fixed terminal size, light/dark theme handling.
|
||||
|
||||
## Formatting [DECIDED, refine]
|
||||
|
||||
@@ -27,7 +27,7 @@ export default defineConfig({
|
||||
customCss: ['./src/styles/global.css'],
|
||||
// Register the simple-mode command grammar with Expressive Code (Shiki).
|
||||
expressiveCode: { shiki: { langs: [rdbmsLang, rdbmsSyntax] } },
|
||||
// Pragmatic structure (ADR-0044 §7 / website/STYLE.md): Getting
|
||||
// Pragmatic structure (ADR-website-001 §7 / website/STYLE.md): Getting
|
||||
// started, Guides, Reference, Concepts. Autogenerated per directory;
|
||||
// in-section order is controlled by each page's `sidebar.order`
|
||||
// frontmatter.
|
||||
|
||||
Reference in New Issue
Block a user