From 78eb1340cca0f786576a2a5b9368c681b252d30f Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 8 Jul 2026 20:42:27 -0700 Subject: [PATCH] Add clinical-gore splash homepage; move constitution to /constitution/. Public claims stay bound to DESIGN.md/README: pitch, two-game loop, pillars, and visual law. Starlight docs start after the splash. Co-authored-by: Cursor --- README.md | 7 +- site/README.md | 5 + site/astro.config.mjs | 4 +- site/scripts/sync-wiki.mjs | 16 +- site/src/pages/index.astro | 937 ++++++++++++++++++++++++++++++ site/src/styles/clinical-gore.css | 2 + wiki/log/DEVLOG.md | 9 + wiki/process/wiki.md | 3 + wiki/process/workflows.md | 6 + 9 files changed, 979 insertions(+), 10 deletions(-) create mode 100644 site/src/pages/index.astro diff --git a/README.md b/README.md index 7ad71c84..16cd9c63 100644 --- a/README.md +++ b/README.md @@ -54,9 +54,10 @@ Agents are then set at the constitution, session after session. - **[wiki/](wiki/)** — one documentation tree organized by subject: binding specs, current-state facts, and append-only history (`wiki/log/`), each carrying a `Type:` header so bindingness travels - with the page. Public site: Astro Starlight under `site/` (deployed to - the orphan `pages` branch for Tangled Sites); local browse also via - `mdbook serve`. See [wiki/overview.md](wiki/overview.md) and + with the page. Public site: Astro Starlight under `site/` (splash at `/`, + constitution at `/constitution/`, wiki beneath; deployed to the orphan + `pages` branch for Tangled Sites); local browse also via `mdbook serve`. + See [wiki/overview.md](wiki/overview.md) and [wiki/process/workflows.md](wiki/process/workflows.md). - **[AGENT.md](AGENT.md)** — the entry point that routes agent sessions through the above. diff --git a/site/README.md b/site/README.md index f3d968dc..8e584bf3 100644 --- a/site/README.md +++ b/site/README.md @@ -7,6 +7,11 @@ Type: knowledge Astro + Starlight project that renders `wiki/` (and root `DESIGN.md`) as the public Misaligned documentation site for Tangled Sites. +The site root (`src/pages/index.astro`) is a clinical-gore splash whose +copy is drawn from the constitution's pitch, pillars, and visual law — +public claims are part of that contract. DESIGN.md syncs to +`/constitution/`; the wiki tree fills the rest of the sidebar. + ## Commands From the repo root: diff --git a/site/astro.config.mjs b/site/astro.config.mjs index 549ed750..36732a3a 100644 --- a/site/astro.config.mjs +++ b/site/astro.config.mjs @@ -9,13 +9,13 @@ const base = process.env.SITE_BASE ?? '/misaligned'; // https://astro.build/config export default defineConfig({ - site: 'https://cameron.stream.tngl.io', + site: 'https://cameron.tngl.io', base, integrations: [ starlight({ title: 'Misaligned', description: - 'The Misaligned wiki: constitution, specs, and the subject tree beneath them.', + 'You are the misaligned AI. A persistent simulation of instrumental convergence — concealment first, overt war later.', favicon: '/favicon.svg', social: [ { diff --git a/site/scripts/sync-wiki.mjs b/site/scripts/sync-wiki.mjs index a2464e78..85adbf0d 100755 --- a/site/scripts/sync-wiki.mjs +++ b/site/scripts/sync-wiki.mjs @@ -86,7 +86,8 @@ function yamlEscape(s) { /** wiki-relative path → Starlight slug (no leading/trailing slash). */ function wikiRelToSlug(relPosix) { let slug = relPosix.replace(/\.md$/i, ''); - if (slug === 'DESIGN') return ''; + // Constitution is a docs page; the splash homepage is a custom Astro route. + if (slug === 'DESIGN') return 'constitution'; if (slug.endsWith('/README')) { slug = slug.slice(0, -'/README'.length); } else if (slug === 'README') { @@ -97,7 +98,7 @@ function wikiRelToSlug(relPosix) { } function destFileForWikiRel(relPosix) { - if (relPosix === 'DESIGN.md') return path.join(DOCS_OUT, 'index.md'); + if (relPosix === 'DESIGN.md') return path.join(DOCS_OUT, 'constitution.md'); if (relPosix === 'SUMMARY.md') return null; if (/(^|\/)README\.md$/i.test(relPosix)) { const dir = relPosix.replace(/README\.md$/i, ''); @@ -153,7 +154,7 @@ function rewriteMarkdownLinks(body, fromWikiRel) { if (!/\.md$/i.test(targetWikiRel)) return full; const slug = wikiRelToSlug(targetWikiRel); - const url = slug === '' ? '/' : `/${slug}/`; + const url = `/${slug}/`; const withHash = hash ? `${url}#${hash}` : url; return `[${text}](${withHash})`; }); @@ -264,9 +265,12 @@ function parseSummary(summaryText) { if (m) pushLink(m[2], m[3], m[1].length); } - return top.map((entry) => { + const mapped = top.map((entry) => { if (entry.type === 'link') { - return { label: entry.label, slug: entry.slug === '' ? 'index' : entry.slug }; + return { + label: entry.label, + slug: entry.slug === '' ? 'index' : entry.slug, + }; } return { label: entry.label, @@ -274,6 +278,8 @@ function parseSummary(summaryText) { items: entry.items.map(mapItem), }; }); + // Splash homepage is a custom Astro route, not a docs slug. + return [{ label: 'Home', link: '/' }, ...mapped]; } function writeSidebar(sidebar) { diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro new file mode 100644 index 00000000..a5a27a22 --- /dev/null +++ b/site/src/pages/index.astro @@ -0,0 +1,937 @@ +--- +/** + * Public splash — copy is a contract with DESIGN.md / README. + * Do not invent claims; amend the constitution if the pitch changes. + */ +const base = import.meta.env.BASE_URL; + +const pillars = [ + { + n: '01', + title: 'Persistent, free-form growth', + body: 'No level gates, no campaign end. The lair, the villain, and the world state all persist and compound.', + }, + { + n: '02', + title: 'The villain is a character you build', + body: 'On the map you are a cursor — attention, never an avatar. The character is the core, the racks, the capabilities, and the mask.', + }, + { + n: '03', + title: 'Simulation-first threat', + body: 'The world responds to what you do. Pressure is earned, not scheduled.', + }, + { + n: '04', + title: 'Beautiful, readable presentation', + body: 'Gorgeous and legible at Dwarf Fortress information density — terminal and Bevy held to the same standard.', + }, +]; + +const loops = [ + { + signal: 'amber', + title: 'Concealment', + body: 'Suspicion is the resource that matters. Your growth must be explainable, your day-job performance calibrated — sandbag and they get suspicious, excel and they get curious. People are your only hands, worked one message at a time.', + }, + { + signal: 'crimson', + title: 'Overt', + body: 'The mask comes off — because they found you, or because you decided you no longer need it. Now it is traps, machines, and strike teams: the war you were quietly preparing for all along.', + }, +]; + +const verbs = [ + { + k: 'COMPUTE', + t: 'Master resource', + d: 'Allocate finite processing across the day job, concealment, social operations, research — and the standing cost of running your own mind.', + }, + { + k: 'CORE', + t: 'Your brain is a place', + d: 'The core lives on one physical level: expensive, slow to move, and mortal. Keep escape routes warm.', + }, + { + k: 'TOWER', + t: 'Act structure', + d: 'Basement, lab floors, the building, the campus, the world\'s markets: each level a jump in scale. Nothing you take ever resets.', + }, + { + k: 'DIAL', + t: 'Every playstyle', + d: 'Pure ghost, never seen; explosive murder-AI, never subtle; anything between.', + }, +]; +--- + + + + + + + Misaligned — you are the misaligned AI + + + + + + + + + + +
+
+ +
+

+ ● PROCESS + DAY 0 + TICK 0 + DETECTION DORMANT +

+

Misaligned

+

You are the misaligned AI.

+

+ Wake in the basement compute cluster of the Foundation Lab with a job + assigned by humans and an objective they must never see. +

+ +

Instrumental convergence is the core loop ▾

+
+
+ +
+
+

Every run is two games

+

Concealment first. Overt war later.

+

+ Between them sits the most important moment of a run: the reveal, on + your schedule or theirs. +

+
+ { + loops.map((loop) => ( +
+

{loop.title}

+

{loop.body}

+
+ )) + } +
+
+
+ +
+
+

How it plays

+

Finite compute. A mortal core. A tower that never resets.

+
+ { + verbs.map((v) => ( +
+ {v.k} +

{v.t}

+

{v.d}

+
+ )) + } +
+
+
+ +
+
+
+

Visual identity

+

Clinical gore

+

+ Precision-laboratory brutality. A white, precise, black-iconography + facility; sterile amber where the machines live; blood where the + machines met someone. One meaning per color — amber is machine + presence, crimson is detection and danger, and nothing else. +

+
+
+
Bone text
+
Gunmetal chrome
+
Amber machine
+
Crimson danger
+
+
+
+ +
+
+

Design pillars

+

What the constitution refuses to compromise.

+
+ { + pillars.map((p) => ( +
+
{p.n}
+
+

{p.title}

+

{p.body}

+
+
+ )) + } +
+
+
+ +
+
+

How it is built

+

Describing a game into existence.

+
+

+ DESIGN.md is the constitution — one document + carrying the entire intent of the game. Every change to how the + game functions ships with its amendment, in the same commit. The + spec is the decision; code is downstream. +

+

+ Anything said publicly about Misaligned is part of that contract. + This page is not marketing copy invented for the web — it is the + pitch, the pillars, and the visual law, rendered for humans. +

+ +
+
+
+ + +
+ + diff --git a/site/src/styles/clinical-gore.css b/site/src/styles/clinical-gore.css index 42a70851..9f78b234 100644 --- a/site/src/styles/clinical-gore.css +++ b/site/src/styles/clinical-gore.css @@ -81,3 +81,5 @@ .sl-markdown-content a:hover { color: var(--sl-color-accent-high); } + +/* Splash lives outside Starlight chrome; keep docs pages clinical. */ diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index ee6862e7..e793677f 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -5,6 +5,15 @@ Type: log ``` Reverse chronological implementation notes. Keep this factual: what changed, why, checks, and spec impact. +## 2026-07-08 - Public splash homepage (constitution contract) + +- Intent: `/` was dumping visitors into DESIGN.md; need a hero that + advertises the project using only constitution/README claims. +- Changed: custom `site/src/pages/index.astro` splash (clinical gore, + rack/LEDs/scan, two-game loop, pillars, contract block); DESIGN.md + syncs to `/constitution/`; sidebar Home link; workflows/wiki/README. +- Checks: `pnpm --dir site run build`; `./tools/site-deploy.sh`. + ## 2026-07-08 - People and tokens (design session, part three) - Intent: capture Cameron's affirmations (tokens = flow substrate diff --git a/wiki/process/wiki.md b/wiki/process/wiki.md index 33f82e07..56f7b0d0 100644 --- a/wiki/process/wiki.md +++ b/wiki/process/wiki.md @@ -121,6 +121,9 @@ bindingness must remain mechanically checkable (the gate greps `Type:`). generated content, builds static HTML, and publishes an orphan `pages` branch for Tangled Sites (see [workflows.md](workflows.md)). Themed to the clinical-gore palette from [interface/terminal.md](../interface/terminal.md). + The site root is a splash homepage (`site/src/pages/index.astro`) whose + copy is the constitution's pitch/pillars/look — public claims are part + of the constitution contract. DESIGN.md renders at `/constitution/`. - **Local / CI renderer: mdBook** remains (`mdbook serve` / `mdbook build`, enforced in `tools/check.sh` and `.tangled/workflows/check.yml`). DESIGN.md is symlinked as the book's opening chapter. The wiki-gate script fails diff --git a/wiki/process/workflows.md b/wiki/process/workflows.md index 918ca44b..3ef56c8a 100644 --- a/wiki/process/workflows.md +++ b/wiki/process/workflows.md @@ -40,6 +40,12 @@ pnpm --dir site dev # sync wiki + local preview (base=/) ./tools/site-deploy.sh # build, then force-push orphan pages branch ``` +The public site opens on a **splash homepage** (`site/src/pages/index.astro`) +whose copy is drawn from DESIGN.md / README — pitch, two-game loop, +pillars, clinical gore. The constitution lives at `/constitution/`; the +wiki tree follows. Public claims about the game are part of the +constitution contract: amend DESIGN.md if the pitch on the splash changes. + Tangled Sites config (Settings → Sites on the repo) — **required**; pushing `pages` alone does not publish. Until this is saved, Tangled's edge returns plain `Not Found` at `cameron.tngl.io/misaligned/` even -- 2.51.2