7.8 KiB
Website-branch handoff — 2026-06-21 (website-3)
Third handoff for the website work (separate sequence from main's
YYYYMMDD-handoff-NN.md). Read website-2 (2026-06-11) first for the
scaffolding, cast pipeline, and the no-advertising constraint; this note covers
everything since, and — importantly — the state has moved on (see §1).
§1. State (read this first)
- Branch:
website. HEADdff7841. Working tree clean. - Pushed:
origin/website==dff7841(this session's work is pushed). - Already merged into
main:dff7841is an ancestor ofmain— every website change below is inmain.mainhas since advanced ~20 commits (now56e3456, handoff 75) with v0.2.0 + install/packaging work. Sowebsiteis ~20 commits behindmain. - Consequence for the next session: start by merging
mainintowebsiteagain (or rebranchingwebsiteoffmain). There is real new user-facing surface to document — see §4. - Agent limitation: this machine's SSH key for
git.lazyeval.netwas not available to the agent —git fetch/pushfail from inside the session. Push and fetch are the user's steps. Local merges work fine.
§2. What shipped this session (all in main now)
The website lives in website/; living style guide website/STYLE.md;
decisions docs/website/adr/20260604-adr-website-001.md.
CI / deployment — the big one (ADR-website-001 §4):
.gitea/workflows/website.yaml— on a push tomainorwebsitethat toucheswebsite/**, build the Astro site with pnpm andwrangler pages deploy website/distto the Cloudflare Pages projectrelplay(Direct Upload, no Git integration).--branchselects environment vs the project's production branch (main):main→ production (relplay.org),website→ preview (website.relplay.pages.dev).- Pure-Node build (the
.castfiles are committed, so no cargo). Runs on the bareci-publicrunner (node present; pnpm via corepack, pinned bypackage.json'spackageManager: pnpm@10.30.3). - Secrets (set in repo Actions settings):
CLOUDFLARE_API_TOKEN(Pages: Edit) +CLOUDFLARE_ACCOUNT_ID. Pages project created with production branch =main. ci.yamlgate now skips website-only pushes (paths-ignore+=website/**,.gitea/workflows/website.yaml).staging.relplay.org(optional): attach the custom domain to thewebsitebranch alias — add it in the Pages dashboard, then point its proxied CNAME atwebsite.relplay.pages.dev(external/unproxied DNS falls through to production). Cloudflare Pages maps branches to subdomains, not sub-folders.
Content updates (from two main merges that landed seed/readline/hint/etc.):
- Seed page (
reference/generating-sample-data.mdx) refreshed for #33/#34: year-as-int columns (*_year/published→ plausible years), built-in value sets (priority/severity/rating), advisory now status-only. All output blocks re-captured; the seed cast reflects it. hintfeature (ADR-0053) documented:getting-help.md→.mdxwith a "Hints" section (F1 = tier-3 live-input hint;hintcommand = last-error hint)- the real rendered block;
the-assistive-editor.mdxpoints at F1.
- the real rendered block;
- Readline keys (#29) + cross-mode history recall (#30) documented on
the-assistive-editor.mdx; "Planned" narrowed to multi-line entry only. - Landing (
index.mdx): the redundant plain<h1>"RDBMS Playground" is hidden (kept for SEO/a11y via a title-only hero, landing-scoped inglobal.css); the Wordmark + tagline + buttons render in the body so the lockup sits where the title was and content rises above the fold (it was nearly hidden on an iPad). - All 10 casts re-recorded + a new
hintcast (11 total) against the current app.
Casts — the F1 trick (important for future hint/keybinding casts):
- autocast cannot send F1 (or arrows/function keys — escape sequences split
by the per-key delay). Solution shipped on
main: ADR-0047 Amendment 1 — in--demomode Ctrl-G aliases F1 and badges AS[F1], so a cast looks like a real F1 press. The cast generator gainedCtrlG: '^G'. - The hint cast uses it realistically: type
add column, pause, F1 (Ctrl-G) mid-command to recall the syntax, finish the command from the example, then later a failed command +hintfor the error.
Hint-vs-docs audit (user-requested): one genuine conflict found —
hint.cmd.create_table.example declared a 3-column compound PK; fixed upstream
(5a37437, now create table Customers with pk id(serial)). Everything else
(export/import, indexes, constraints, DML, SQL forms, error hints, terminology)
was consistent.
§3. Verification status
cd website && pnpm build→ clean, 27 pages. Forbidden-terms grep clean (DSL/SQLite/STRICT/rusqlite/PRAGMA). Output-table box-drawing intact; anchors resolve; hint cast content verified ([F1]badge + both hint blocks).- NOT done — needs a human visual pass: the new landing spacing/aesthetics (couldn't be eyeballed by the agent) and the 11 re-recorded casts (verified programmatically only). Do this in staging/production before relying on them.
§4. NEXT WORK — priority order
- Re-merge
mainintowebsite(it's ~20 behind) — or rebranch offmain. - Reconcile the installation / getting-started docs with what
mainactually shipped (v0.2.0): the website branch'sinstallation.mdpredates several real install methods now live —- crates.io v0.2.0 (
cargo install rdbms-playground,cargo binstall), - the curl | sh installer (ADR-0055),
- Windows
install.ps1(fix(install)commits), - package managers: Scoop / Homebrew / winget (ADR-0056; winget via
komac).
installation.mdmentions brew/scoop but not winget, the curl|sh installer, or binstall — reconcile against the shipped reality (check ADR-0055/0056 + handoffs 74/75 + thepublish.yamlworkflow). - There's also
--version/-V+ an in-appversioncommand (ADR-0054) — a line on the command-line-options page may be warranted.
- crates.io v0.2.0 (
- Visual sweep (§3): landing + casts; final caption review (website-2 §2).
- Carryover from website-2: light/dark player theme (deferred), open STYLE decisions (#7/#8 mostly resolved; recheck), output-pane-scroll cast still blocked (PgUp/PgDn unsendable — would need a typeable scroll key like #24).
§5. Process pins
- Commits: user-confirmed (show the message first), no AI attribution, append-only (no amend/rebase/force-push). Push/fetch are the user's steps (and the agent can't reach the remote anyway — §1).
- Ground every page in source (
src/dsl/*,src/friendly/strings/en-US.yaml, the ADRs) — notrequirements.mdmarkers. No engine name, no "DSL" in copy. - Output blocks captured from the real app, never hand-drawn (STYLE.md). The
capture recipe (throwaway in-crate/
ittest → render → paste → delete) and the cast pipeline (pnpm casts [name], needs../target/debug) are in website-2. - Cast stance (revised 2026-06-12): default to a cast; justify its absence.
- Issues via
tea(repooli/rdbms-playgroundongit.lazyeval.net; append< /dev/null+timeout 30). This session filed #33 (year ints) and #34 (enum value sets) — both implemented onmainnow.
§6. Footnote — a git oddity in this branch's history
c84a640 "docs(website): document the hint feature with a cast" is an empty
rename commit (a git add tooling slip staged only the .md→.mdx rename);
its actual content is in the next commit 028d324. Harmless, left in place
per the append-only rule (user-approved). No action needed.