{loop.title}
+{loop.body}
+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.', + }, +]; +--- + + + +
+ + ++ ● PROCESS + DAY 0 + TICK 0 + DETECTION DORMANT +
+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
++ Between them sits the most important moment of a run: the reveal, on + your schedule or theirs. +
+{loop.body}
+How it plays
+{v.d}
+Visual identity
++ 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. +
+Design pillars
+{p.body}
+How it is built
++ 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. +
+ +