From af73a39364e4379c8d8e4c3166a60e54e455e597 Mon Sep 17 00:00:00 2001 From: Akash Goenka Date: Wed, 2 Sep 2026 00:12:34 +0530 Subject: [PATCH 01/24] Step 1: Create tokens.css and consolidate :root blocks from landing.css and docs.css MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create site-astro/src/styles/tokens.css with NEW design language v2 tokens from DESIGN.md §2/§12 - Includes both new design values and legacy variables for backward compatibility during migration - Import tokens.css from every page that uses landing.css or docs.css - Remove duplicate :root declarations from landing.css and docs.css - Remove --frost/--ember redeclaration from body.essay-page in docs.css (line 306) - Set --wrap to 1120px (consolidated from inconsistent 1120px/1080px) - No visual change - consolidation only Co-Authored-By: Claude Opus 5 --- site-astro/src/pages/blog/index.astro | 1 + site-astro/src/pages/demo/index.astro | 1 + site-astro/src/pages/docs.astro | 1 + site-astro/src/pages/docs/navigation.astro | 1 + site-astro/src/pages/docs/notebook.astro | 1 + .../src/pages/docs/under-the-hood.astro | 1 + site-astro/src/pages/how-it-works/index.astro | 1 + .../src/pages/how-it-works/navigation.astro | 1 + .../src/pages/how-it-works/notebook.astro | 1 + site-astro/src/pages/index.astro | 1 + site-astro/src/pages/live/index.astro | 1 + site-astro/src/pages/vs/vector-rag.astro | 1 + site-astro/src/styles/docs.css | 30 +-------- site-astro/src/styles/landing.css | 27 +------- site-astro/src/styles/tokens.css | 64 +++++++++++++++++++ 15 files changed, 78 insertions(+), 55 deletions(-) create mode 100644 site-astro/src/styles/tokens.css diff --git a/site-astro/src/pages/blog/index.astro b/site-astro/src/pages/blog/index.astro index bd3d936..516d595 100644 --- a/site-astro/src/pages/blog/index.astro +++ b/site-astro/src/pages/blog/index.astro @@ -5,6 +5,7 @@ import SvgDefs from '../../components/SvgDefs.astro'; import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/pages/demo/index.astro b/site-astro/src/pages/demo/index.astro index fa70c81..1d692e7 100644 --- a/site-astro/src/pages/demo/index.astro +++ b/site-astro/src/pages/demo/index.astro @@ -3,6 +3,7 @@ import Head from '../../layouts/Head.astro'; import SvgDefs from '../../components/SvgDefs.astro'; import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; +import '../../styles/tokens.css'; import '../../styles/landing.css'; const title = 'Demo — one real session, this repo | coldstart'; diff --git a/site-astro/src/pages/docs.astro b/site-astro/src/pages/docs.astro index f418df4..bf1e560 100644 --- a/site-astro/src/pages/docs.astro +++ b/site-astro/src/pages/docs.astro @@ -5,6 +5,7 @@ import Nav from '../components/Nav.astro'; import Footer from '../components/Footer.astro'; import DocsSidebar from '../components/DocsSidebar.astro'; import '../styles/tailwind.css'; +import '../styles/tokens.css'; import '../styles/docs.css'; import '../styles/backdrop.css'; diff --git a/site-astro/src/pages/docs/navigation.astro b/site-astro/src/pages/docs/navigation.astro index 314a4b9..b0b7562 100644 --- a/site-astro/src/pages/docs/navigation.astro +++ b/site-astro/src/pages/docs/navigation.astro @@ -5,6 +5,7 @@ import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import DocsSidebar from '../../components/DocsSidebar.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/pages/docs/notebook.astro b/site-astro/src/pages/docs/notebook.astro index 1262c3e..df24de5 100644 --- a/site-astro/src/pages/docs/notebook.astro +++ b/site-astro/src/pages/docs/notebook.astro @@ -5,6 +5,7 @@ import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import DocsSidebar from '../../components/DocsSidebar.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/pages/docs/under-the-hood.astro b/site-astro/src/pages/docs/under-the-hood.astro index 8a5b182..2516fe4 100644 --- a/site-astro/src/pages/docs/under-the-hood.astro +++ b/site-astro/src/pages/docs/under-the-hood.astro @@ -5,6 +5,7 @@ import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import DocsSidebar from '../../components/DocsSidebar.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/pages/how-it-works/index.astro b/site-astro/src/pages/how-it-works/index.astro index f594a39..29f64d4 100644 --- a/site-astro/src/pages/how-it-works/index.astro +++ b/site-astro/src/pages/how-it-works/index.astro @@ -4,6 +4,7 @@ import SvgDefs from '../../components/SvgDefs.astro'; import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/pages/how-it-works/navigation.astro b/site-astro/src/pages/how-it-works/navigation.astro index dd3f98f..c82f316 100644 --- a/site-astro/src/pages/how-it-works/navigation.astro +++ b/site-astro/src/pages/how-it-works/navigation.astro @@ -4,6 +4,7 @@ import SvgDefs from '../../components/SvgDefs.astro'; import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/pages/how-it-works/notebook.astro b/site-astro/src/pages/how-it-works/notebook.astro index 487fdaa..85e40de 100644 --- a/site-astro/src/pages/how-it-works/notebook.astro +++ b/site-astro/src/pages/how-it-works/notebook.astro @@ -4,6 +4,7 @@ import SvgDefs from '../../components/SvgDefs.astro'; import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/pages/index.astro b/site-astro/src/pages/index.astro index 3fced9e..aaa40c1 100644 --- a/site-astro/src/pages/index.astro +++ b/site-astro/src/pages/index.astro @@ -4,6 +4,7 @@ import SvgDefs from '../components/SvgDefs.astro'; import Nav from '../components/Nav.astro'; import Footer from '../components/Footer.astro'; import '../styles/tailwind.css'; +import '../styles/tokens.css'; import '../styles/landing.css'; import '../styles/backdrop.css'; diff --git a/site-astro/src/pages/live/index.astro b/site-astro/src/pages/live/index.astro index 677c59a..fe5c56d 100644 --- a/site-astro/src/pages/live/index.astro +++ b/site-astro/src/pages/live/index.astro @@ -3,6 +3,7 @@ import Head from '../../layouts/Head.astro'; import SvgDefs from '../../components/SvgDefs.astro'; import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; +import '../../styles/tokens.css'; import '../../styles/landing.css'; const title = 'See it live — coldstart on its own repo'; diff --git a/site-astro/src/pages/vs/vector-rag.astro b/site-astro/src/pages/vs/vector-rag.astro index 5840f3e..10861a9 100644 --- a/site-astro/src/pages/vs/vector-rag.astro +++ b/site-astro/src/pages/vs/vector-rag.astro @@ -4,6 +4,7 @@ import SvgDefs from '../../components/SvgDefs.astro'; import Nav from '../../components/Nav.astro'; import Footer from '../../components/Footer.astro'; import '../../styles/tailwind.css'; +import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; import '../../styles/backdrop.css'; diff --git a/site-astro/src/styles/docs.css b/site-astro/src/styles/docs.css index 0be0810..4c67995 100644 --- a/site-astro/src/styles/docs.css +++ b/site-astro/src/styles/docs.css @@ -1,30 +1,6 @@ /* coldstart docs — dark design system, tokens matched to landing.css frost = navigation/index, ember = notebook/memory */ - -:root { - --bg: #070a11; - --surface: #0f1826; - --surface-2: #0b111c; - --ink: #e7eef8; - --muted: #8b9ab2; - --frost: #4fbfe0; - --frost-bright: #6fd3ef; - --ember: #ef9448; - --ember-bright: #ffb267; - --line: #1a2536; - --line-warm: #2a2218; - --term-bg: #05080e; - --term-ink: #c3d0e2; - --ok: #57cc92; - --ok-bg: #10241a; - --warn: #ef9448; - --warn-bg: #2a1e0c; - --mono: "JetBrains Mono", "SF Mono", ui-monospace, "Fira Code", Menlo, Consolas, monospace; - --sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; - --display: "Newsreader", Georgia, serif; - --wrap: 1080px; - --radius: 12px; -} +@import './tokens.css'; * { box-sizing: border-box; } html { scroll-behavior: smooth; } @@ -303,10 +279,6 @@ body.essay-page { --faint: #7a8aa3; --line: #1e2735; --line-soft: #182029; - --frost: #4fbfe0; - --frost-bright: #6fd3ef; - --ember: #ef9448; - --ember-bright: #ffb267; --term-border: #1e2735; --sel: rgba(79,191,224,.20); color-scheme: dark; diff --git a/site-astro/src/styles/landing.css b/site-astro/src/styles/landing.css index f1d1aab..04ba38c 100644 --- a/site-astro/src/styles/landing.css +++ b/site-astro/src/styles/landing.css @@ -2,32 +2,7 @@ coldstart — home · notebook-first, destination nav (nextjs-style IA) temperature = concept: frost = the cold exact index, ember = the warm memory. ============================================================ */ -:root{ - --void:#070a11; - --ink-1:#0b111c; - --ink-2:#0f1826; - --raised:#121d2d; - --warm-ground:#12100e; - --text:#e7eef8; - --muted:#8b9ab2; - --faint:#7a8aa3; - --frost:#4fbfe0; - --frost-dim:#2f89a8; - --ember:#ef9448; - --ember-dim:#a86a35; - --ok:#57cc92; - --line:#1a2536; - --line-warm:#2a2218; - - --paper:#e5d9bd; - --paper-ink:#2a2620; - --paper-line:#c7b790; - - --mono:"JetBrains Mono","SF Mono",ui-monospace,"Fira Code",Menlo,Consolas,monospace; - --sans:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif; - --display:"Newsreader",Georgia,serif; - --wrap:1120px; -} +@import './tokens.css'; *{box-sizing:border-box;} body{ margin:0;background:var(--void);color:var(--text); diff --git a/site-astro/src/styles/tokens.css b/site-astro/src/styles/tokens.css new file mode 100644 index 0000000..9e4939a --- /dev/null +++ b/site-astro/src/styles/tokens.css @@ -0,0 +1,64 @@ +/* Design language tokens — one root block, imported by every page. + Consolidated from landing.css and docs.css. v2 design spec values. */ +:root { + /* --- The palette — NEW DESIGN SPEC ---------------------------------------- */ + --ground: #0b0e14; + --frost: #4fbfe0; + --ember: #ef9448; + --ok: #7ec89a; + --text: #eef3fa; + --muted: #a8b6c9; + --faint: #7f8da2; + --surface: rgba(255,255,255,.035); + --line: rgba(255,255,255,.09); + --wash-frost: rgba(79,191,224,.07); + --wash-ember: rgba(239,148,72,.07); + --edge-ember: rgba(239,148,72,.22); + + /* --- Claude Code panel — its own neutral ground ----------------------- */ + --cc-bg: #1f1f1f; + --cc-raise: #2e2e2e; + --cc-box: #1a1a1a; + --cc-line: #383838; + --cc-text: #e3e3e3; + --cc-dim: #8a8a8a; + --cc-code: #d9a05b; + --cc-dot: #6b6b6b; + --cc-tool: #7ec89a; + + /* --- Seam (the signature device) --------------------------------------- */ + --seam: linear-gradient(180deg, var(--frost), var(--ember)); + + /* --- Typography — NEW DESIGN SPEC ---------------------------------------- */ + --display: "Archivo", system-ui, sans-serif; + --sans: "IBM Plex Sans", system-ui, sans-serif; + --mono: "JetBrains Mono", ui-monospace, Menlo, monospace; + + /* --- Layout ------------------------------------------------------------ */ + --wrap: 1120px; + + /* --- LEGACY VARIABLES (to be removed in subsequent steps) — currently used + by landing.css and docs.css. These are kept for step 1 consolidation only. */ + --void: #070a11; + --ink-1: #0b111c; + --ink-2: #0f1826; + --raised: #121d2d; + --warm-ground: #12100e; + --frost-dim: #2f89a8; + --ember-dim: #a86a35; + --line-warm: #2a2218; + --paper: #e5d9bd; + --paper-ink: #2a2620; + --paper-line: #c7b790; + --bg: #070a11; + --surface-2: #0f1826; + --ink: #e7eef8; + --frost-bright: #6fd3ef; + --ember-bright: #ffb267; + --term-bg: #05080e; + --term-ink: #c3d0e2; + --ok-bg: #10241a; + --warn: #ef9448; + --warn-bg: #2a1e0c; + --radius: 12px; +} From d0837b72ef12a88502db68a1131ac8764f7f7d35 Mon Sep 17 00:00:00 2001 From: Akash Goenka Date: Wed, 2 Sep 2026 00:15:04 +0530 Subject: [PATCH 02/24] Step 2: Add field, seam, separator; remove backdrop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add field background (body::before) with frost→ember gradient to landing.css and docs.css - Add vertical variant for <860px per DESIGN.md §12 - Remove dot-grid backdrop.css import from all pages (12 pages updated) - Add full-bleed section separator: section + section {border-top: 1px solid var(--line)} - Add seam CSS to landing.css (signature vertical line at column-6 gutter) - Update section padding to 84px (from 76px) - Both pages now render the continuous field background Build passes successfully. Co-Authored-By: Claude Opus 5 --- site-astro/src/pages/blog/index.astro | 1 - site-astro/src/pages/docs.astro | 1 - site-astro/src/pages/docs/navigation.astro | 1 - site-astro/src/pages/docs/notebook.astro | 1 - .../src/pages/docs/under-the-hood.astro | 1 - site-astro/src/pages/how-it-works/index.astro | 1 - .../src/pages/how-it-works/navigation.astro | 1 - .../src/pages/how-it-works/notebook.astro | 1 - site-astro/src/pages/index.astro | 1 - site-astro/src/pages/vs/vector-rag.astro | 1 - site-astro/src/styles/docs.css | 26 ++++++++++++++ site-astro/src/styles/landing.css | 36 +++++++++++++++++++ 12 files changed, 62 insertions(+), 10 deletions(-) diff --git a/site-astro/src/pages/blog/index.astro b/site-astro/src/pages/blog/index.astro index 516d595..ad712ad 100644 --- a/site-astro/src/pages/blog/index.astro +++ b/site-astro/src/pages/blog/index.astro @@ -7,7 +7,6 @@ import Footer from '../../components/Footer.astro'; import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; -import '../../styles/backdrop.css'; const posts = (await getCollection('blog')).sort( (a, b) => b.data.publishDate.valueOf() - a.data.publishDate.valueOf() diff --git a/site-astro/src/pages/docs.astro b/site-astro/src/pages/docs.astro index bf1e560..47ac44b 100644 --- a/site-astro/src/pages/docs.astro +++ b/site-astro/src/pages/docs.astro @@ -7,7 +7,6 @@ import DocsSidebar from '../components/DocsSidebar.astro'; import '../styles/tailwind.css'; import '../styles/tokens.css'; import '../styles/docs.css'; -import '../styles/backdrop.css'; const techArticleJsonLd = { '@context': 'https://schema.org', diff --git a/site-astro/src/pages/docs/navigation.astro b/site-astro/src/pages/docs/navigation.astro index b0b7562..a87ef3b 100644 --- a/site-astro/src/pages/docs/navigation.astro +++ b/site-astro/src/pages/docs/navigation.astro @@ -7,7 +7,6 @@ import DocsSidebar from '../../components/DocsSidebar.astro'; import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; -import '../../styles/backdrop.css'; const techArticleJsonLd = { '@context': 'https://schema.org', diff --git a/site-astro/src/pages/docs/notebook.astro b/site-astro/src/pages/docs/notebook.astro index df24de5..aec0801 100644 --- a/site-astro/src/pages/docs/notebook.astro +++ b/site-astro/src/pages/docs/notebook.astro @@ -7,7 +7,6 @@ import DocsSidebar from '../../components/DocsSidebar.astro'; import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; -import '../../styles/backdrop.css'; const techArticleJsonLd = { '@context': 'https://schema.org', diff --git a/site-astro/src/pages/docs/under-the-hood.astro b/site-astro/src/pages/docs/under-the-hood.astro index 2516fe4..733719f 100644 --- a/site-astro/src/pages/docs/under-the-hood.astro +++ b/site-astro/src/pages/docs/under-the-hood.astro @@ -7,7 +7,6 @@ import DocsSidebar from '../../components/DocsSidebar.astro'; import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; -import '../../styles/backdrop.css'; const techArticleJsonLd = { '@context': 'https://schema.org', diff --git a/site-astro/src/pages/how-it-works/index.astro b/site-astro/src/pages/how-it-works/index.astro index 29f64d4..08eb844 100644 --- a/site-astro/src/pages/how-it-works/index.astro +++ b/site-astro/src/pages/how-it-works/index.astro @@ -7,7 +7,6 @@ import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; -import '../../styles/backdrop.css'; const title = 'How coldstart works — codebase memory for AI coding agents | coldstart'; const description = diff --git a/site-astro/src/pages/how-it-works/navigation.astro b/site-astro/src/pages/how-it-works/navigation.astro index c82f316..6810c80 100644 --- a/site-astro/src/pages/how-it-works/navigation.astro +++ b/site-astro/src/pages/how-it-works/navigation.astro @@ -7,7 +7,6 @@ import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; -import '../../styles/backdrop.css'; const title = 'How the navigation layer works — an exact map, no embeddings | coldstart'; const description = diff --git a/site-astro/src/pages/how-it-works/notebook.astro b/site-astro/src/pages/how-it-works/notebook.astro index 85e40de..0a6d9f3 100644 --- a/site-astro/src/pages/how-it-works/notebook.astro +++ b/site-astro/src/pages/how-it-works/notebook.astro @@ -7,7 +7,6 @@ import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; -import '../../styles/backdrop.css'; const title = 'How the notebook works — codebase memory that checks itself | coldstart'; const description = diff --git a/site-astro/src/pages/index.astro b/site-astro/src/pages/index.astro index aaa40c1..26d4506 100644 --- a/site-astro/src/pages/index.astro +++ b/site-astro/src/pages/index.astro @@ -6,7 +6,6 @@ import Footer from '../components/Footer.astro'; import '../styles/tailwind.css'; import '../styles/tokens.css'; import '../styles/landing.css'; -import '../styles/backdrop.css'; const softwareAppJsonLd = { '@context': 'https://schema.org', diff --git a/site-astro/src/pages/vs/vector-rag.astro b/site-astro/src/pages/vs/vector-rag.astro index 10861a9..7fc66a0 100644 --- a/site-astro/src/pages/vs/vector-rag.astro +++ b/site-astro/src/pages/vs/vector-rag.astro @@ -7,7 +7,6 @@ import '../../styles/tailwind.css'; import '../../styles/tokens.css'; import '../../styles/docs.css'; import '../../styles/how.css'; -import '../../styles/backdrop.css'; const title = 'coldstart vs vector RAG for codebase memory | coldstart'; const description = diff --git a/site-astro/src/styles/docs.css b/site-astro/src/styles/docs.css index 4c67995..abe92e3 100644 --- a/site-astro/src/styles/docs.css +++ b/site-astro/src/styles/docs.css @@ -2,6 +2,32 @@ frost = navigation/index, ember = notebook/memory */ @import './tokens.css'; +/* ============================================================ + THE FIELD — frost bleeding from left, ember from right, over dark ramp. + Fixed pseudo-element (not background-attachment:fixed, which is unreliable). + ============================================================ */ +body::before{ + content:"";position:fixed;inset:0;z-index:-1;pointer-events:none; + background: + linear-gradient(90deg, + rgba(79,191,224,.20) 0%, transparent 42%, + transparent 58%, rgba(239,148,72,.19) 100%), + #0b0e14; +} +@media(max-width:860px){ + body::before{background: + linear-gradient(180deg, + rgba(79,191,224,.20) 0%, transparent 42%, + transparent 58%, rgba(239,148,72,.19) 100%), + #0b0e14;} +} + +/* ============================================================ + FULL-BLEED SEPARATOR — marks section boundaries without banding background. + ============================================================ */ +section { padding: 84px 0; } +section + section { border-top: 1px solid var(--line); } + * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { diff --git a/site-astro/src/styles/landing.css b/site-astro/src/styles/landing.css index 04ba38c..8fd0185 100644 --- a/site-astro/src/styles/landing.css +++ b/site-astro/src/styles/landing.css @@ -3,6 +3,42 @@ temperature = concept: frost = the cold exact index, ember = the warm memory. ============================================================ */ @import './tokens.css'; + +/* ============================================================ + THE FIELD — frost bleeding from left, ember from right, over dark ramp. + Fixed pseudo-element (not background-attachment:fixed, which is unreliable). + ============================================================ */ +body::before{ + content:"";position:fixed;inset:0;z-index:-1;pointer-events:none; + background: + linear-gradient(90deg, + rgba(79,191,224,.20) 0%, transparent 42%, + transparent 58%, rgba(239,148,72,.19) 100%), + #0b0e14; +} +@media(max-width:860px){ + body::before{background: + linear-gradient(180deg, + rgba(79,191,224,.20) 0%, transparent 42%, + transparent 58%, rgba(239,148,72,.19) 100%), + #0b0e14;} +} + +/* ============================================================ + THE SEAM — hairline running full viewport height at column-6 gutter. + Shown only on desktop (≥1024px based on grid rules). + ============================================================ */ +.seam{position:fixed;top:0;bottom:0;width:1px;background:var(--seam);opacity:.34; + left:calc(50% - min(var(--wrap),100vw)/2 + 28px + (min(var(--wrap),100vw) - 56px) * 5 / 12 + 12px); + z-index:0;pointer-events:none;} +@media(max-width:860px){.seam{display:none;}} + +/* ============================================================ + FULL-BLEED SEPARATOR — marks section boundaries without banding background. + ============================================================ */ +section{padding:84px 0;} +section + section{border-top:1px solid var(--line);} + *{box-sizing:border-box;} body{ margin:0;background:var(--void);color:var(--text); From f8e6e6076a73810202d3992a86661f6b3b64b9a8 Mon Sep 17 00:00:00 2001 From: Akash Goenka Date: Fri, 4 Sep 2026 13:44:05 +0530 Subject: [PATCH 03/24] =?UTF-8?q?site:=20specimen=20B=20=E2=80=94=20the=20?= =?UTF-8?q?plate=20(blueprint=20composition=20on=20the=20dark=20ground)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A second specimen alongside /specimen/, built from the EpicInfographics composition rules rather than from taste. Declares its composition pattern (editorial spread, 4/8) in a comment, per that repo's prime rule. Adds five signature devices where DESIGN.md 5 had one: the drafting grid, the double-rule frame + registration crosses, Fig. numbering, dimension lines with knockout labels, and the title-block footer. Breaks 12 on exactly one point - radius 0 instead of 6/10px - which is the experiment. Palette, near-white prose and the frost/ember ramp are unchanged. Co-Authored-By: Claude Opus 5 --- site-astro/src/pages/specimen/plate.astro | 302 ++++++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 site-astro/src/pages/specimen/plate.astro diff --git a/site-astro/src/pages/specimen/plate.astro b/site-astro/src/pages/specimen/plate.astro new file mode 100644 index 0000000..70db4f0 --- /dev/null +++ b/site-astro/src/pages/specimen/plate.astro @@ -0,0 +1,302 @@ +--- +// COMPOSITION PATTERN: Editorial spread (4 / 8 hard asymmetric split). +// Scene: "you are looking at an engineering drawing of a codebase." +// +// Specimen B. Self-contained on purpose — imports none of the real stylesheets, +// so it can be approved or thrown away without touching the live site. Not +// linked from nav; noindex. Sits alongside /specimen/ for direct comparison. +// +// Adapted from EpicInfographics `blueprint` + `composition.md`, on coldstart's +// own dark ground. Deliberately breaks DESIGN.md §12 on ONE point (radius 0, +// not 6/10px) — that is the experiment. Everything else in §12 is honoured. +const findCmd = 'coldstart ' + 'find cochange sidecar keeper'; +const gsCmd = 'coldstart ' + 'gs src/cli.ts --match cochange'; +--- + + + + + +Plate — coldstart specimen B + + + + + + + +
+ + +
+ + +
+
+
+

2

+

Operations. No model call, no network, no embedding.

+
+
+

Coldstart — navigation layer for coding agents

+

A drawing of the codebase, made before anything is read.

+

+ An agent dropped into an unfamiliar repo reads its way to the answer, one + file at a time. Coldstart answers the question underneath that search — + which files are relevant to this task — from a static index of + paths, symbols and exports. Two commands, answered locally in milliseconds. +

+
+ find{findCmd} + Ranked paths, with the lines your terms cluster in +
+
+ gs{gsCmd} + One file: symbols, callers, importers, co-edits +
+
+
+
+ + +
+
+
+

Fig. 2

+

The index, end to end. Built once by a background keeper, + read by every query.

+
+
+

Built once. Read cold.

+

A single keeper process watches the repo and keeps one on-disk cache + fresh. Queries never build — they open the cache, rank, and exit.

+
+
Walkrespecting ignores
+
Parse15 grammars, wasm
+
Resolveimports to files
+
Graphcalls + co-edits
+
Cacheatomic, on disk
+
+
One pass · incremental thereafter
+
+
+
+ + +
+
+
+

Fig. 3

+

The notebook — what previous agents worked out here, kept + next to the code.

+
+
+

The second time is not like the first.

+

An index says where code lives. It cannot say what was already tried. + Agents write notes after real work, anchored to the files they touched, + and every note is stamped against those files.

+
+

Flow · how notebook capture firesFresh

+

Capture is trigger-timed, not per-stop: every stop quietly updates + per-file evidence and a score, and only when the trigger fires is the + checklist delivered.

+

.coldstart/notebook/notes/how-notebook-capture-fires.md

+
+
Anchored · versioned · committed with the repo
+
+
+
+ + +
+
+
+

Fig. 4

+

Plate stamp.

+
+
+
+
Title
Coldstart — navigation layer
+
Drawing
SPECIMEN B · PLATE I
+
Scale
40px module · 4:8 spread
+
Source
DESIGN.md §2 §5 §12
+
Date
2026-09-04
+
+
+
+
+ +
+ + From e5aa46f51dd15a8169ac028b4c5bde0fdbade5b2 Mon Sep 17 00:00:00 2001 From: Akash Goenka Date: Fri, 4 Sep 2026 13:45:29 +0530 Subject: [PATCH 04/24] site: drop the tiled grid from specimen B A repeating background pattern is the web's most common generated-site tell, whatever it is made of. composition.md's 'the background must participate' rule is written for a 1080px print canvas, where a drafting grid is paper texture; it does not survive the move to a scrolling page. Structure is now carried entirely by drawn, non-repeating linework - the frame, the rails, the section rules, the dimension lines. The rail moves from --line-soft to --line since it is now what holds the 4:8 split visible. The frost/ember ramp is the only field left. Co-Authored-By: Claude Opus 5 --- site-astro/src/pages/specimen/plate.astro | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/site-astro/src/pages/specimen/plate.astro b/site-astro/src/pages/specimen/plate.astro index 70db4f0..f8341bb 100644 --- a/site-astro/src/pages/specimen/plate.astro +++ b/site-astro/src/pages/specimen/plate.astro @@ -55,19 +55,19 @@ body{ -webkit-font-smoothing:antialiased; } -/* ── DEVICE 1 — the drafting grid ──────────────────────────────────────── - Environmental depth, not decoration: the 40px cell is the same module - the layout measures in, so the page sits ON the grid rather than over a - texture. The frost→ember ramp (§12) rides underneath it, unchanged. */ +/* ── DEVICE 1 — the field ──────────────────────────────────────────────── + NO tiled grid. A repeating background pattern is the web's most common + generated-site tell, whatever it is made of — composition.md's "the + background must participate" rule is written for a print canvas, and it + does not survive the move to a scrolling page. Structure here is carried + by DRAWN, NON-REPEATING linework instead: the frame, the rails, the + section rules, the dimension lines. The only field is the §12 ramp. */ body::before{ content:"";position:fixed;inset:0;z-index:-1;pointer-events:none; - background-image: - linear-gradient(var(--line-soft) 1px,transparent 1px), - linear-gradient(90deg,var(--line-soft) 1px,transparent 1px), + background: linear-gradient(90deg, rgba(79,191,224,.17) 0%, transparent 42%, transparent 58%, rgba(239,148,72,.16) 100%); - background-size:var(--cell) var(--cell),var(--cell) var(--cell),100% 100%; } /* ── DEVICE 2 — the double-rule frame + registration crosses ───────────── */ @@ -83,7 +83,9 @@ body::before{ /* Editorial spread: 4 / 8. composition.md forbids 50:50 — this is 1/3 : 2/3. */ .spread{display:grid;grid-template-columns:4fr 8fr;gap:0 var(--s4);} -.rail{border-right:1px solid var(--line-soft);padding-right:var(--s4);} +/* The rail is now a primary structural device, not a hint — with the tiled + grid gone it is what holds the 4:8 split visible. */ +.rail{border-right:1px solid var(--line);padding-right:var(--s4);} /* Full-bleed hairline separator — the one carried over from /how-it-works/. */ .sec{border-top:1px solid var(--line);padding:var(--s5) 0;position:relative;} From 642314bc6b67ad95fea01081bfdb67024c3c3da7 Mon Sep 17 00:00:00 2001 From: Akash Goenka Date: Fri, 4 Sep 2026 13:59:28 +0530 Subject: [PATCH 05/24] site: rebuild specimen B on DESIGN.md 4's own 5/7 layout The first cut invented a 4/8 split from a print composition rule instead of rendering the layout already settled in 4. This uses .split (5/7, sticky argument left, artifact right) and .plain (cols 1-8) as specified. The rail replaces 5's position:fixed seam: an absolute line inside the section, measured in the same grid units as the columns, so it needs no viewport arithmetic and cannot drift. Hidden on .plain, which has no 5/7 boundary to mark. Kept from the first cut: Fig. numbering, dimension lines, title block, radius 0. Dropped: the tiled grid and the 4/8 ratio. Fixes found by rendering: Astro collapses template newlines, so the terminal's white-space:pre ran the whole transcript onto one line - now one div per line; h1 at 58px wrapped to six lines in a 5-column measure and drove ~400px of dead space; ligatures off so --match is not an en dash. Co-Authored-By: Claude Opus 5 --- site-astro/src/pages/specimen/plate.astro | 342 ++++++++++++---------- 1 file changed, 189 insertions(+), 153 deletions(-) diff --git a/site-astro/src/pages/specimen/plate.astro b/site-astro/src/pages/specimen/plate.astro index f8341bb..93d178e 100644 --- a/site-astro/src/pages/specimen/plate.astro +++ b/site-astro/src/pages/specimen/plate.astro @@ -1,16 +1,18 @@ --- -// COMPOSITION PATTERN: Editorial spread (4 / 8 hard asymmetric split). -// Scene: "you are looking at an engineering drawing of a codebase." +// Specimen B — rebuilt on DESIGN.md §4's OWN layout (5 / 7 .split + 1-8 .plain), +// not the 4/8 print ratio the first cut borrowed from EpicInfographics. // -// Specimen B. Self-contained on purpose — imports none of the real stylesheets, -// so it can be approved or thrown away without touching the live site. Not -// linked from nav; noindex. Sits alongside /specimen/ for direct comparison. +// Self-contained on purpose: imports none of the real stylesheets, so it can be +// approved or thrown away without touching the live site. Not linked; noindex. // -// Adapted from EpicInfographics `blueprint` + `composition.md`, on coldstart's -// own dark ground. Deliberately breaks DESIGN.md §12 on ONE point (radius 0, -// not 6/10px) — that is the experiment. Everything else in §12 is honoured. +// Kept from the first cut: Fig. numbering, dimension lines, the title block, +// radius 0, and the drawn rail. The rail now REPLACES §5's position:fixed seam +// — it is an absolute line inside the section, so it needs no viewport maths +// and cannot drift out of alignment with the columns it marks. +// +// Dropped: the tiled drafting grid (a repeating pattern is the generated-site +// tell on the web, whatever it is made of) and the 4/8 ratio. const findCmd = 'coldstart ' + 'find cochange sidecar keeper'; -const gsCmd = 'coldstart ' + 'gs src/cli.ts --match cochange'; --- @@ -28,88 +30,100 @@ const gsCmd = 'coldstart ' + 'gs src/cli.ts --match cochange'; --ember:#ef9448; --ok:#7ec89a; - /* Text. Prose is near-white (DESIGN.md §12). Grey is chrome only. */ - --ink:#eef3fa; + --ink:#eef3fa; /* all prose — §12, never grey */ --muted:#a8b6c9; - --faint:#7a889d; + --faint:#7a889d; /* mono labels only, never a sentence */ - /* Drawing ink — structural linework, never data. */ --line:rgba(216,232,248,.17); --line-2:rgba(216,232,248,.30); - --line-soft:rgba(216,232,248,.055); + --line-soft:rgba(216,232,248,.07); --display:"Archivo",system-ui,sans-serif; --sans:"IBM Plex Sans",system-ui,sans-serif; --mono:"JetBrains Mono",ui-monospace,monospace; - --cell:40px; /* the drafting grid everything snaps to */ --wrap:1120px; - --s1:8px; --s2:16px; --s3:24px; --s4:40px; --s5:64px; + --gap:24px; + --s1:8px; --s2:16px; --s3:24px; --s4:40px; --s5:84px; } *{box-sizing:border-box;} -html{-webkit-text-size-adjust:100%;} body{ margin:0;background:var(--ground);color:var(--ink); - font:400 16px/1.65 var(--sans); - -webkit-font-smoothing:antialiased; + font:400 17px/1.65 var(--sans);-webkit-font-smoothing:antialiased; + /* `--match` must not ligate into an en dash on a CLI tool's site. */ + font-variant-ligatures:none; } -/* ── DEVICE 1 — the field ──────────────────────────────────────────────── - NO tiled grid. A repeating background pattern is the web's most common - generated-site tell, whatever it is made of — composition.md's "the - background must participate" rule is written for a print canvas, and it - does not survive the move to a scrolling page. Structure here is carried - by DRAWN, NON-REPEATING linework instead: the frame, the rails, the - section rules, the dimension lines. The only field is the §12 ramp. */ +/* The field: the §12 ramp, and nothing else. No tiled pattern. */ body::before{ content:"";position:fixed;inset:0;z-index:-1;pointer-events:none; - background: - linear-gradient(90deg, - rgba(79,191,224,.17) 0%, transparent 42%, - transparent 58%, rgba(239,148,72,.16) 100%); + background:linear-gradient(90deg, + rgba(79,191,224,.17) 0%, transparent 42%, + transparent 58%, rgba(239,148,72,.16) 100%); +} +@media(max-width:860px){ + body::before{background:linear-gradient(180deg, + rgba(79,191,224,.17) 0%, transparent 42%, + transparent 58%, rgba(239,148,72,.16) 100%);} } -/* ── DEVICE 2 — the double-rule frame + registration crosses ───────────── */ +/* Frame + registration marks — singular chrome, not a repeating pattern. */ .frame{position:fixed;inset:14px;border:1px solid var(--line);z-index:5;pointer-events:none;} .frame::after{content:"";position:absolute;inset:5px;border:1px solid var(--line-soft);} -.reg{position:fixed;width:13px;height:13px;z-index:5;pointer-events:none;opacity:.75;} +.reg{position:fixed;width:13px;height:13px;z-index:5;pointer-events:none;opacity:.7;} .reg::before,.reg::after{content:"";position:absolute;background:var(--line-2);} .reg::before{left:6px;top:0;width:1px;height:13px;} .reg::after{top:6px;left:0;height:1px;width:13px;} .reg.tl{left:34px;top:34px;} .reg.tr{right:34px;top:34px;} .reg.bl{left:34px;bottom:34px;} -.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--s5);} +/* ── §4 layout ─────────────────────────────────────────────────────────── + 12 columns, 1120px, 24px gutter. Two section types and only two. */ +.wrap{max-width:var(--wrap);margin:0 auto;padding:0 28px;} +.sec{padding:var(--s5) 0;position:relative;} +.sec + .sec{border-top:1px solid var(--line);} /* full-bleed hairline */ -/* Editorial spread: 4 / 8. composition.md forbids 50:50 — this is 1/3 : 2/3. */ -.spread{display:grid;grid-template-columns:4fr 8fr;gap:0 var(--s4);} -/* The rail is now a primary structural device, not a hint — with the tiled - grid gone it is what holds the 4:8 split visible. */ -.rail{border-right:1px solid var(--line);padding-right:var(--s4);} +.split{display:grid;grid-template-columns:repeat(12,1fr);gap:0 var(--gap);} +.arg{grid-column:1 / span 5;padding-right:var(--s4);} +.art{grid-column:6 / span 7;min-width:0;} +.plain > *{grid-column:1 / span 8;} +/* A one-column section has no 5/7 boundary, so the rail must not cut it. */ +.plain::before{display:none;} -/* Full-bleed hairline separator — the one carried over from /how-it-works/. */ -.sec{border-top:1px solid var(--line);padding:var(--s5) 0;position:relative;} -.sec:first-of-type{border-top:0;} +/* The argument holds while a long artifact scrolls past it. */ +@media(min-width:1024px){ + .arg{position:sticky;top:56px;align-self:start;} +} -/* ── DEVICE 3 — Fig. numbering. Every panel is captioned in the outermost - column, top-aligned, museum-caption style. Nothing is unlabelled. ───── */ -.fig{font:700 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase; - color:var(--frost);margin:0 0 var(--s2);} -.fig.warm{color:var(--ember);} -.figcap{font:400 13px/1.6 var(--mono);color:var(--faint);margin:0;max-width:26ch;} +/* ── The rail — replaces §5's fixed seam ───────────────────────────────── + An absolute line inside the section, sitting in the gutter between col 5 + and col 6. Because it is measured in the same grid units as the columns, + it cannot drift; the old fixed version needed viewport arithmetic. */ +.split::before{ + content:"";position:absolute;top:0;bottom:0;width:1px;background:var(--line); + left:calc((100% - 11 * var(--gap)) / 12 * 5 + 4.5 * var(--gap)); +} +.sec:first-child .split::before{top:var(--s4);} +/* ── Type ────────────────────────────────────────────────────────────── */ h1,h2,.d{font-family:var(--display);font-variation-settings:"wdth" 112; - font-weight:600;letter-spacing:-.022em;margin:0;} -h1{font-size:clamp(38px,6.2vw,64px);line-height:1.00;} -h2{font-size:26px;line-height:1.08;margin:0 0 var(--s2);} -p{margin:0 0 var(--s3);max-width:62ch;} -.lead{font-size:18px;line-height:1.6;color:var(--ink);} + font-weight:600;letter-spacing:-.022em;margin:0;} +/* Sized for a 5-column measure, not a full-bleed hero — 58px wrapped to six + lines and drove ~400px of dead space into the artifact column. */ +h1{font-size:clamp(34px,4.2vw,50px);line-height:1.02;} +h2{font-size:30px;line-height:1.06;margin:0 0 var(--s3);} +p{margin:0 0 var(--s3);max-width:64ch;} +.lead{font-size:18px;color:var(--ink);} .eyebrow{font:500 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase; - color:var(--faint);margin:0 0 var(--s3);} + color:var(--faint);margin:0 0 var(--s3);} + +/* Fig. numbering — every panel captioned, in the argument column. */ +.fig{font:700 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase; + color:var(--frost);margin:0 0 var(--s2);} +.fig.warm{color:var(--ember);} -/* ── DEVICE 4 — dimension lines. Real values measured on the drawing, - with a knockout label breaking the line. Data as annotation. ────────── */ -.dim{position:relative;height:1px;background:var(--line-2);margin:var(--s4) 0;} +/* Dimension line — a real value measured on the drawing, knockout label. */ +.dim{position:relative;height:1px;background:var(--line-2);margin:var(--s4) 0 0;} .dim::before,.dim::after{content:"";position:absolute;top:-3px;width:7px;height:7px; border-left:1px solid var(--line-2);border-bottom:1px solid var(--line-2);} .dim::before{left:0;transform:rotate(45deg);} @@ -118,80 +132,88 @@ p{margin:0 0 var(--s3);max-width:62ch;} background:var(--ground);padding:0 12px;white-space:nowrap; font:500 11px/1 var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--muted);} -/* Hero. Swiss "massive number, tiny label" living in the thin column, and it - CROSSES A BOUNDARY — the numeral overhangs the rail to the left. */ -.hero{padding:var(--s5) 0 var(--s5);} +/* Swiss "massive number, tiny label" — sits in the argument column. */ .count{font-family:var(--display);font-variation-settings:"wdth" 90;font-weight:600; - font-size:clamp(120px,17vw,196px);line-height:.82;letter-spacing:-.05em; - color:var(--ink);margin:0 0 var(--s2) -.07em;} -.count em{font-style:normal;color:var(--frost);} -.countlab{font:500 11px/1.6 var(--mono);letter-spacing:.14em;text-transform:uppercase; - color:var(--faint);margin:0;max-width:20ch;} + font-size:104px;line-height:.82;letter-spacing:-.05em;color:var(--frost); + margin:var(--s4) 0 var(--s2) -.06em;} +.countlab{font:500 11px/1.7 var(--mono);letter-spacing:.14em;text-transform:uppercase; + color:var(--faint);margin:0;max-width:24ch;} -/* Command rows — drawn, not carded. Radius 0, hairline, no fill, no shadow. */ -.cmd{display:flex;gap:var(--s3);align-items:baseline;padding:var(--s2) 0; - border-top:1px solid var(--line-soft);} -.cmd:last-child{border-bottom:1px solid var(--line-soft);} -.cmd b{font:700 11px/1.9 var(--mono);letter-spacing:.14em;text-transform:uppercase; - color:var(--frost);min-width:52px;} -.cmd code{font:400 14px/1.9 var(--mono);color:var(--ink);} -.cmd i{font-style:normal;font-size:14px;color:var(--muted);margin-left:auto; - text-align:right;max-width:30ch;} +/* ── The artifact: a terminal. Radius 0, hairline, no traffic lights. ─── */ +.term{border:1px solid var(--line);background:rgba(255,255,255,.02);} +.termbar{display:flex;gap:var(--s2);align-items:center;padding:10px 14px; + border-bottom:1px solid var(--line);font:500 11px/1 var(--mono); + letter-spacing:.08em;color:var(--faint);} +.termbar b{color:var(--muted);font-weight:500;} +/* One
per line. Astro collapses template newlines, so `white-space:pre` + on a single text block silently ran the whole transcript together. */ +.termbody{padding:16px 18px;font:400 13px/1.85 var(--mono);color:var(--muted); + overflow-x:auto;} +.termbody > div{white-space:pre;min-height:1.85em;} +.termbody .p{color:var(--ok);} +.termbody .c{color:var(--ink);} +.termbody .f{color:var(--frost);} +.termbody .e{color:var(--ember);} +.termbody .d{color:var(--faint);} -/* ── DEVICE 5 — the stage chain. The pipeline drawn as a dimensioned run of - cells on the grid, connected by the drawing line, not as five cards. ── */ -.chain{display:grid;grid-template-columns:repeat(5,1fr);align-items:stretch;margin:var(--s3) 0 0;} -.stage{position:relative;border:1px solid var(--line);border-right:0;padding:var(--s3) var(--s2);} +/* Pipeline stages — drawn as a run of cells, not five cards. */ +.chain{display:grid;grid-template-columns:repeat(5,1fr);} +.stage{position:relative;border:1px solid var(--line);border-right:0;padding:var(--s3) 14px;} .stage:last-child{border-right:1px solid var(--line);} .stage b{display:block;font:700 12px/1 var(--mono);letter-spacing:.09em; - text-transform:uppercase;color:var(--ink);margin-bottom:var(--s1);} + text-transform:uppercase;color:var(--ink);margin-bottom:6px;} .stage span{font:400 11px/1.5 var(--mono);color:var(--faint);} .stage::after{content:"";position:absolute;right:-4px;top:50%;width:7px;height:7px; border-top:1px solid var(--line-2);border-right:1px solid var(--line-2); transform:translateY(-50%) rotate(45deg);background:var(--ground);} .stage:last-child::after{display:none;} -/* Hatch fill marks the one stage that is cached, not recomputed. */ .stage.hatch{background:repeating-linear-gradient(45deg, rgba(79,191,224,.10) 0 1.5px,transparent 1.5px 7px);} -/* Notebook zone — ember. Same drawing rules, different ink. */ +/* Note card — ember ink, same drawing rules. */ .note{border:1px solid var(--line);border-left:2px solid var(--ember); - padding:var(--s3);background:rgba(239,148,72,.045);} + padding:var(--s3);background:rgba(239,148,72,.045);} .note .nmeta{font:500 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase; - color:var(--ember);margin:0 0 var(--s2);} + color:var(--ember);margin:0 0 var(--s2);} .note p{margin:0;font-size:15px;} .note .npath{font:400 12px/1.7 var(--mono);color:var(--faint);margin-top:var(--s2);} .tag{display:inline-block;font:500 10px/1 var(--mono);letter-spacing:.1em; - text-transform:uppercase;color:var(--ok);border:1px solid rgba(126,200,154,.35); - padding:4px 7px;margin-left:var(--s1);} + text-transform:uppercase;color:var(--ok);border:1px solid rgba(126,200,154,.35); + padding:4px 7px;margin-left:var(--s1);} -/* ── DEVICE 6 — the title block. The footer IS the stamp. ──────────────── */ -.block{border:1px solid var(--line-2);margin:var(--s5) 0 0;max-width:520px;} +/* Install rows, in a .plain section. */ +.inst{border-top:1px solid var(--line-soft);padding:14px 0;display:flex; + gap:var(--s3);align-items:baseline;} +.inst:last-of-type{border-bottom:1px solid var(--line-soft);} +.inst b{font:700 11px/1.9 var(--mono);letter-spacing:.14em;text-transform:uppercase; + color:var(--frost);min-width:64px;} +.inst code{font:400 14px/1.9 var(--mono);color:var(--ink);} + +/* The title block — the footer IS the device. */ +.block{border:1px solid var(--line-2);margin-top:var(--s4);max-width:480px;} .block .binner{border:1px solid var(--line-soft);margin:4px;} -.brow{display:grid;grid-template-columns:104px 1fr;border-top:1px solid var(--line-soft);} +.brow{display:grid;grid-template-columns:96px 1fr;border-top:1px solid var(--line-soft);} .brow:first-child{border-top:0;} .brow dt{font:500 10px/1 var(--mono);letter-spacing:.13em;text-transform:uppercase; - color:var(--faint);padding:10px 12px;border-right:1px solid var(--line-soft);margin:0;} + color:var(--faint);padding:10px 12px;border-right:1px solid var(--line-soft);margin:0;} .brow dd{font:500 11px/1 var(--mono);color:var(--muted);padding:10px 12px;margin:0;} dl{margin:0;} -footer{padding:var(--s5) 0 96px;} - -@media(max-width:900px){ - :root{--cell:32px;} - .wrap{padding:0 var(--s3);} - .spread{grid-template-columns:1fr;gap:var(--s3);} - .rail{border-right:0;padding-right:0;border-bottom:1px solid var(--line-soft); - padding-bottom:var(--s3);} - .reg,.frame{display:none;} +/* Mobile — §4: split collapses, artifact under argument, sticky off, rail hidden. */ +@media(max-width:860px){ + :root{--s5:56px;} + .wrap{padding:0 20px;} + .arg,.art,.plain > *{grid-column:1 / -1;} + .arg{padding-right:0;margin-bottom:var(--s4);} + .split::before{display:none;} + .frame,.reg{display:none;} .chain{grid-template-columns:1fr;} .stage{border-right:1px solid var(--line);border-bottom:0;} .stage:last-child{border-bottom:1px solid var(--line);} .stage::after{right:auto;left:50%;top:auto;bottom:-4px; - transform:translateX(-50%) rotate(135deg);} - .cmd{flex-wrap:wrap;} - .cmd i{margin-left:0;text-align:left;flex-basis:100%;} - .count{margin-left:0;} + transform:translateX(-50%) rotate(135deg);} + h1{font-size:34px;} + .count{font-size:76px;} } @@ -202,50 +224,67 @@ footer{padding:var(--s5) 0 96px;}
- -
-
-
-

2

-

Operations. No model call, no network, no embedding.

-
-
+ +
+
+
+

Fig. 1 — the query

Coldstart — navigation layer for coding agents

A drawing of the codebase, made before anything is read.

- An agent dropped into an unfamiliar repo reads its way to the answer, one - file at a time. Coldstart answers the question underneath that search — - which files are relevant to this task — from a static index of - paths, symbols and exports. Two commands, answered locally in milliseconds. + An agent dropped into an unfamiliar repo reads its way to the answer, + one file at a time. Coldstart answers the question underneath that + search — which files are relevant to this task — from a static index + of paths, symbols and exports.

-
- find{findCmd} - Ranked paths, with the lines your terms cluster in -
-
- gs{gsCmd} - One file: symbols, callers, importers, co-edits +

2

+

Operations. No model call, no network, no embedding.

+
+
+
+
coldstartmain·18 ms
+
+
$ {findCmd}
+
+
▸ src/indexer/cochange.ts [3/3]
+
Role: defines cochange · imports keeper
+
42 export function buildCochange(root) {'{'}
+
57 const pairs = pairsFromLog(window)
+
+
▸ src/index-manager.ts [2/3]
+
Role: imports cochange · defines keeper
+
Wired: uses cochange.ts
+
near cochange-nudge.mjs
+
+
▸ hooks/cochange-nudge.mjs [2/3]
+
Summary: Delivers co-change partners
+
on the edit event, unasked. [fresh]
+
full note: notes/cochange-nudge.md
+
+
▸ tests/cochange-nudge.test.ts [2/3]
+
Role: imports cochange, keeper
+
+
4 files · 0 model calls · no network
+
+
Answered locally · 18 ms
- +
-
-
-

Fig. 2

-

The index, end to end. Built once by a background keeper, - read by every query.

-
-
+
+
+

Fig. 2 — the index

Built once. Read cold.

-

A single keeper process watches the repo and keeps one on-disk cache - fresh. Queries never build — they open the cache, rank, and exit.

+

A single background process watches the repo and keeps one on-disk + cache fresh. Queries never build — they open the cache, rank, exit.

+
+
Walkrespecting ignores
-
Parse15 grammars, wasm
+
Parse15 grammars
Resolveimports to files
Graphcalls + co-edits
Cacheatomic, on disk
@@ -255,24 +294,22 @@ footer{padding:var(--s5) 0 96px;}
- +
-
-
-

Fig. 3

-

The notebook — what previous agents worked out here, kept - next to the code.

-
-
+
+
+

Fig. 3 — the notebook

The second time is not like the first.

An index says where code lives. It cannot say what was already tried. Agents write notes after real work, anchored to the files they touched, and every note is stamped against those files.

+
+

Flow · how notebook capture firesFresh

Capture is trigger-timed, not per-stop: every stop quietly updates - per-file evidence and a score, and only when the trigger fires is the - checklist delivered.

+ per-file evidence and a score, and only when the trigger fires is + the checklist delivered.

.coldstart/notebook/notes/how-notebook-capture-fires.md

Anchored · versioned · committed with the repo
@@ -280,24 +317,23 @@ footer{padding:var(--s5) 0 96px;}
- -
-
-
-

Fig. 4

-

Plate stamp.

-
+ +
+
+

Fig. 4 — install

+

Two commands, wired in one.

+
Installnpm i -g @cstart/coldstart
+
Wirecoldstart init
Title
Coldstart — navigation layer
-
Drawing
SPECIMEN B · PLATE I
-
Scale
40px module · 4:8 spread
-
Source
DESIGN.md §2 §5 §12
+
Drawing
SPECIMEN B · PLATE II
+
Layout
DESIGN.md §4 · 5/7 split
Date
2026-09-04
-
+
From 43401f352e9ddd0bb2e918f6c42ddd777ebd0d89 Mon Sep 17 00:00:00 2001 From: Akash Goenka Date: Fri, 4 Sep 2026 14:11:34 +0530 Subject: [PATCH 06/24] site: two-column landing layout + page-wide frost/ember field Layout only. The copy is word-for-word identical to main (verified by diffing the rendered text of both) - the ask was a layout change, and changing the words at the same time would make it impossible to judge. Two columns, one shape for every section: the argument on the left, the artifact it is talking about on the right, at 5/7. The text column keeps a single left edge down the whole page and the claim stays sticky while a tall artifact scrolls past. Nothing is centred any more. Below 900px it collapses to one column. The background is now ONE page-scale ramp - frost on the left edge, ember on the right - defined once in backdrop.css, so docs and blog get it too. It replaces the per-section colour bands (.navsec/.phil/.faq on --ink-1, .nb on a warm ground with two radial blobs) and the hero's own glow; sections are now divided by a hairline over a continuous field. The 30px dot grid that used to live in backdrop.css is gone - a repeating pattern reads as templated, and it fought the ramp for the same layer. Revert this one commit to get the current site back. Co-Authored-By: Claude Opus 5 --- site-astro/src/pages/index.astro | 36 +++++++++++--- site-astro/src/styles/backdrop.css | 28 +++++++++-- site-astro/src/styles/landing.css | 78 ++++++++++++++++++------------ 3 files changed, 98 insertions(+), 44 deletions(-) diff --git a/site-astro/src/pages/index.astro b/site-astro/src/pages/index.astro index 3fced9e..2030993 100644 --- a/site-astro/src/pages/index.astro +++ b/site-astro/src/pages/index.astro @@ -87,10 +87,21 @@ const faqJsonLd = {
+
+
Codebase memory — what your agents learned, kept for the next session

Your agent relearns your codebase
from scratch — every
session.

coldstart gives it persistent memory of your codebase — a notebook it writes itself, so what one session figures out, the next already knows — plus an exact index to find the right file without three wrong reads. No embeddings, no API key: it runs on the model you already pay for.

+ +

MIT · Node 18+ · runs offline · no embeddings, no API key

+
+ +
your-project
@@ -102,32 +113,30 @@ const faqJsonLd = { index warming in the background — your first lookup is instant.
- - -

MIT · Node 18+ · runs offline · no embeddings, no API key

+
+
+
The notebook

The second time a question comes up, the answer is already written down.

An agent writes down what it learns while it works. The next one gets it for free, checked against the code so a stale note never passes as fact.

-
  1. Written after a real task, by the agent that just did the work, citing the exact file and symbol.
  2. Kept honest by a content hash — the background keeper flags it the moment the code moves.
  3. Injected automatically when a prompt matches, before the agent starts searching.
+
+
What step three actually injects
@@ -160,6 +169,7 @@ const faqJsonLd = {
+
Shared, it compounds @@ -173,11 +183,15 @@ const faqJsonLd = {