diff --git a/.claude/skills/simic-design/readme.md b/.claude/skills/simic-design/readme.md index 25cc025..7d63eb5 100644 --- a/.claude/skills/simic-design/readme.md +++ b/.claude/skills/simic-design/readme.md @@ -31,13 +31,15 @@ Source repo: https://github.com/foundryside-dev/simic — explore it for the can ## VISUAL FOUNDATIONS -**Color**: OKLCH throughout. Blue-green world: hue 225 ("ink") carries all structure — backgrounds, text, borders; hue 175 (teal) carries emphasis — links, accents, active nav, callout spines; hue 85 (amber) is the sole warning color. Both themes come from one palette via `light-dark()`; `color-scheme: light dark` follows the OS, `[data-theme]` overrides. Max 2 background colors per page (`--color-bg`, `--color-bg-subtle`), plus tinted note backgrounds. Never pure black/white. +**Color**: OKLCH throughout. Blue-green world: hue 225 ("ink") carries all structure — backgrounds, text, borders; hue 175 (teal) carries emphasis — links, accents, active nav, callout spines; hue 85 (amber) is the sole warning color. A callout holds its family's hue on both sides of `light-dark()` — never let the dark side drift off-hue. Both themes come from one palette via `light-dark()`. Max 2 background colors per page (`--color-bg`, `--color-bg-subtle`), plus the two tinted note grounds (`--color-bg-note`, `--color-bg-note-status`). Never pure black/white. + +**Theme model — two-state, not three.** The marketing site follows the OS via `color-scheme: light dark` and **has no toggle**: it ships zero JavaScript, so nothing ever sets `data-theme`. The `:root[data-theme]` rules in `site/style.css` are an unreached hook, kept for a future toggle; the diagrams cannot follow them at all (they select via ``, resolved by the layout engine). Only the **wiki** is three-state — MkDocs Material supplies its own toggle. Do not describe the marketing site as having a theme switcher. **Type**: system stacks only, on purpose (zero third-party requests — a privacy stance, not an omission). Body `system-ui…`; code/labels `ui-monospace…`. Mono is the brand's display voice: the wordmark, taglines, note labels, invariant chips, table `name` cells are all mono. Fluid heading sizes via `clamp()`. Base 1rem/1.65. h1 tracking -0.02em; mono labels tracked out (+0.04–0.08em) and often uppercase at ~0.78rem. **Spacing/layout**: 8px-base scale (`--space-1..7` = 4/8/16/24/32/48/72px). Two widths: prose `--measure` 46rem, wide blocks (tables, diagrams, grids) `--page` 62rem. Prose is narrow by default; wide elements opt out. -**Backgrounds**: flat solid colors only. No gradients, no textures, no imagery, no photography. The only "images" are pre-rendered Mermaid diagram SVGs, shipped in light+dark pairs and swapped with the color tokens. +**Backgrounds**: flat solid colors only. No gradients, no textures, no imagery, no photography. The only "images" are pre-rendered Mermaid diagram SVGs, shipped in light+dark pairs and selected by `` + `media="screen and (prefers-color-scheme: dark)"` — one variant fetched, and print falls through to the light one. The single exception is `site/assets/social-card.png`, a 1200×630 Open Graph card rendered from `social-card.src.html`; it is a fixed dark artefact and does not track the viewer's theme. **Borders & radius**: 1px hairline `--color-border` everywhere (h2 top rules, table rows, cards, code); `--color-border-firm` for firmer edges. Radius `4px` (3px on inline code, 2px on focus rings). Callouts and quotes use a 3px left spine (teal = note/canon, amber = status, neutral = plain quote). @@ -47,12 +49,27 @@ Source repo: https://github.com/foundryside-dev/simic — explore it for the can **Motion**: essentially none. One 120ms ease-out transition (skip link). `prefers-reduced-motion` kills everything. Do not add animation. -**Dark mode**: not an afterthought — every token is a `light-dark()` pair; diagrams swap variants; print forces light. +**Dark mode**: not an afterthought — every token is a `light-dark()` pair; diagrams ship as light/dark pairs selected by ``; print falls back to light. + + + + ## ICONOGRAPHY There is **no icon system**. The site ships zero icon fonts, zero icon SVG sets. The complete iconography: -- **The mark**: a teal diamond (`assets/mark.svg`, `#0f9b8e`), used as favicon and rendered as the `◈` character before the wordmark (`.wordmark::before`, colored accent). This is the closest thing to a logo — there is no wordmark image; the wordmark is live text in mono. +- **The mark**: a teal diamond, used as favicon and rendered as the `◈` character before the wordmark (`.wordmark::before`, colored accent). This is the closest thing to a logo — there is no wordmark image; the wordmark is live text in mono. One file, two deployed copies kept byte-identical: `site/assets/mark.svg` (marketing) and `tools/wiki/assets/mark.svg` (wiki logo + favicon). Its `#0f9b8e` is a fixed hex, not a token — a favicon cannot use `light-dark()` — and sits between `--teal-600` and `--teal-400`; do not introduce a fourth teal to match it. - **Unicode as UI glyphs**: `◈` (wordmark), `→` (forward links "Read the architecture →"), `›` (breadcrumbs), `·` (footer separators). - **Diagrams**: pre-rendered Mermaid SVGs in `assets/diagrams/` (light/dark pairs) — the only illustrations in the brand. - The wiki (Material theme) uses Material Design icons only for chrome (theme toggle, GitHub link, permalinks); content uses none. @@ -61,13 +78,49 @@ Do not introduce icon sets, emoji, or drawn illustrations. When an icon urge str ## Index -- `styles.css` — global entry (imports everything below) -- `tokens/` — `colors.css`, `typography.css`, `spacing.css`, `base.css` -- `assets/` — `mark.svg`, `diagrams/` (6 Mermaid SVGs, light/dark pairs) -- `guidelines/` — foundation specimen cards -- `components/site/` — Masthead, SiteFooter, PageHead, Note, CanonQuote, Spine, CardGrid, DataTable, Split, Diagram (the full inventory `site/style.css` defines — nothing invented) -- `ui_kits/website/` — recreation of the overview page -- `ui_kits/wiki/` — recreation of a design-docs wiki page (MkDocs Material) +> **⚠ INCOMPLETE EXPORT — read before using this skill.** Only the eight +> metadata files were committed (`6e74997`). The 33 files listed below under +> `tokens/`, `components/`, `guidelines/` and `ui_kits/` are **absent from this +> directory** and are not gitignored — they were never committed. `styles.css` +> was therefore four dangling `@import`s loading nothing; it has since been +> flattened locally (see its provenance header). +> +> Until the export is completed, **treat `site/style.css` in the repo as the +> token source of truth** (it always was — see the note above). Do not +> hand-author replacements for the files below: they exist in the upstream +> Claude Design project `SimicDesignSystem_5a908e` and re-exporting or pulling +> them (`DesignSync`) is the fix. Do not edit this Index to match the disk +> either — the gap is the record of what is missing. +> +> **⚠ THE GENERATED FILES ARE NOW STALE — a re-sync will REGRESS the site.** +> `_ds_manifest.json` and `_adherence.oxlintrc.json` are generated output and +> were deliberately **not** hand-edited, so they still describe the palette as +> it stood on 2026-08-08, before the static-site review (M2, m6). Three +> divergences, all verified 2026-08-09: +> +> | Token | `site/style.css` (correct) | generated files (stale) | +> |---|---|---| +> | `--color-bg-note` dark | hue **175** | hue **195** | +> | `--color-bg-note-status` dark | hue **85** | hue **75** | +> | `--color-accent-quiet` | **deleted** (unused; 4.22:1 on `--color-bg`, fails AA) | still declared, and allowlisted at `_adherence.oxlintrc.json:124,192` | +> +> Nothing shipped is wrong — the consumed stylesheets (`site/style.css` and the +> flattened `styles.css`) both carry the corrected values. The hazard is +> directional: **a `DesignSync` re-sync overwrites these files from upstream and +> would silently reintroduce all three.** Whoever completes the export must +> re-apply the two hue corrections and re-delete `--color-accent-quiet` +> (including both `_adherence.oxlintrc.json` entries) as part of that sync, then +> diff the manifest's tokens against `site/style.css` before considering it +> done. This is a recorded deferral, not an oversight. + +- `styles.css` — global entry (imports everything below) — **present but inert** +- `tokens/` — `colors.css`, `typography.css`, `spacing.css`, `base.css` — **missing** +- `assets/` — `mark.svg`, `diagrams/` (6 Mermaid SVGs, light/dark pairs) — **missing** (both live in the repo: `site/assets/mark.svg`, `site/assets/diagrams/`) +- `guidelines/` — foundation specimen cards (14 files) — **missing** +- `components/{content,data,navigation}/` — Masthead, SiteFooter, PageHead, Note, CanonQuote, Spine, CardGrid, DataTable, Split, Diagram (the full inventory `site/style.css` defines — nothing invented) — **missing** +- `ui_kits/website/` — recreation of the overview page — **missing** +- `ui_kits/wiki/` — recreation of a design-docs wiki page (MkDocs Material) — **missing** +- `_ds_manifest.json` — component/token index; the only complete record of the palette in this directory - `SKILL.md` — agent skill entry point **Intentional additions**: none. The component list is exactly the class inventory of `site/style.css`. The wiki surface is stock MkDocs Material (teal/teal, `font: false`) — recreated as a UI kit screen, not as components. diff --git a/.claude/skills/simic-design/styles.css b/.claude/skills/simic-design/styles.css index 45decae..a5a2d3d 100644 --- a/.claude/skills/simic-design/styles.css +++ b/.claude/skills/simic-design/styles.css @@ -1,4 +1,110 @@ -@import "tokens/colors.css"; -@import "tokens/typography.css"; -@import "tokens/spacing.css"; -@import "tokens/base.css"; +/* ========================================================================== + Simic Design System — global entry point + + PROVENANCE. This file is a LOCAL FLATTENING, not the original export. The + upstream Claude Design project (namespace SimicDesignSystem_5a908e) split + these tokens across tokens/colors.css, tokens/typography.css, + tokens/spacing.css and tokens/base.css, and this file was four @import + statements pointing at them. Those four files — and 29 others under + components/, guidelines/ and ui_kits/ — were never committed (see the + warning in readme.md), so the imports resolved to nothing and this + stylesheet loaded no rules at all. + + Rather than leave a dead import chain, the token layer is inlined below, + lifted verbatim from `site/style.css`, which is and remains the ground + truth for every value here. The four tokens/*.css paths are still named in + _ds_manifest.json and readme.md's Index on purpose: that is the record of + what is missing, and re-exporting the project is the real fix. + + CONSEQUENCE: this file carries TOKENS ONLY. The component rules (Masthead, + Note, CanonQuote, Spine, CardGrid, DataTable, Split, Diagram) live in + `site/style.css` and were not duplicated here — one copy of a component + layer is correct, and a second would drift. To style a real surface, read + `site/style.css`. + + Keep in sync with site/style.css. If the two ever disagree, site/style.css + wins. + ========================================================================== */ + +:root { + color-scheme: light dark; + + /* --- Primitives ------------------------------------------------------- + Simic reads blue-green. Hue 225 carries structure, hue 175 carries + emphasis, hue 85 is the sole warning colour. OKLCH so the light and dark + ramps stay perceptually matched. */ + --ink-050: oklch(0.985 0.004 225); + --ink-100: oklch(0.955 0.008 225); + --ink-200: oklch(0.905 0.012 225); + --ink-300: oklch(0.825 0.016 225); + /* ink-500 is the light-mode muted text; kept dark enough that muted text + clears WCAG AA (4.5:1) against --color-bg-subtle, not just --color-bg. */ + --ink-500: oklch(0.495 0.024 225); + --ink-700: oklch(0.375 0.030 225); + --ink-850: oklch(0.235 0.026 225); + --ink-900: oklch(0.185 0.024 225); + --ink-950: oklch(0.145 0.020 225); + + --teal-400: oklch(0.780 0.110 175); + /* Ramp midpoint. No current consumer — kept so the ramp stays derivable, and + because the mark's fixed #0f9b8e sits beside it. Do not use it for text: + it measures 4.22:1 on --color-bg, which fails AA. */ + --teal-600: oklch(0.560 0.105 175); + --teal-700: oklch(0.470 0.098 175); + + --amber-400: oklch(0.800 0.105 85); + --amber-700: oklch(0.520 0.105 85); + + /* --- Semantic tokens (one declaration each) --------------------------- */ + --color-bg: light-dark(var(--ink-050), var(--ink-950)); + --color-bg-subtle: light-dark(var(--ink-100), var(--ink-900)); + --color-bg-code: light-dark(var(--ink-100), var(--ink-850)); + /* Tinted callout grounds. Each holds its family's hue on BOTH sides — teal + 175 for the plain note, amber 85 for the status note — so a callout never + drifts off the three-hue palette when the theme flips. */ + --color-bg-note: light-dark(oklch(0.965 0.020 175), oklch(0.235 0.030 175)); + --color-bg-note-status: light-dark(oklch(0.975 0.022 85), oklch(0.235 0.028 85)); + + --color-text: light-dark(var(--ink-900), var(--ink-100)); + --color-text-muted: light-dark(var(--ink-500), var(--ink-300)); + --color-heading: light-dark(var(--ink-950), var(--ink-050)); + + --color-border: light-dark(var(--ink-200), oklch(0.300 0.020 225)); + --color-border-firm: light-dark(var(--ink-300), oklch(0.380 0.024 225)); + + --color-accent: light-dark(var(--teal-700), var(--teal-400)); + --color-warn: light-dark(var(--amber-700), var(--amber-400)); + + --color-link: var(--color-accent); + --color-link-hover: color-mix(in oklch, var(--color-link) 72%, var(--color-text) 28%); + + /* --- Typography ------------------------------------------------------- */ + --font-body: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", + Arial, sans-serif; + --font-code: ui-monospace, "SFMono-Regular", Menlo, Consolas, + "Liberation Mono", monospace; + + --text-h1: clamp(2rem, 1.45rem + 2.6vw, 3.1rem); + --text-h2: clamp(1.35rem, 1.18rem + 0.8vw, 1.75rem); + --text-h3: clamp(1.08rem, 1.02rem + 0.3vw, 1.22rem); + + /* --- Spacing (8px base) ----------------------------------------------- */ + --space-1: 0.25rem; + --space-2: 0.5rem; + --space-3: 1rem; + --space-4: 1.5rem; + --space-5: 2rem; + --space-6: 3rem; + --space-7: 4.5rem; + + /* --- Layout ------------------------------------------------------------ */ + --measure: 46rem; /* prose column */ + --page: 62rem; /* wide elements: tables, diagrams */ + --radius: 4px; +} + +/* Hook for an explicit reader override. NOTHING SETS data-theme on the + marketing site: it ships zero JavaScript and is system-preference-only. + Only the MkDocs wiki is three-state. See readme.md § VISUAL FOUNDATIONS. */ +:root[data-theme="light"] { color-scheme: light; } +:root[data-theme="dark"] { color-scheme: dark; } diff --git a/.github/workflows/deploy-site.yml b/.github/workflows/deploy-site.yml index 1e11433..6839613 100644 --- a/.github/workflows/deploy-site.yml +++ b/.github/workflows/deploy-site.yml @@ -25,6 +25,9 @@ on: - 'docs/design/**' - 'docs/adr/**' - 'tools/wiki/**' + # The pre-upload gate: a change to the checker must re-run against the + # current site, not wait for the next content edit to notice it. + - 'tools/ci/**' - '.github/workflows/deploy-site.yml' workflow_dispatch: @@ -76,12 +79,24 @@ jobs: java-version: '21' - name: Cache diagram toolchain - # The pinned jars build.sh downloads on first run (~15 MB). Keyed on - # build.sh because that is where the versions are pinned. + # The pinned jars build.sh downloads on first run (~15 MB). + # + # Keyed on all three inputs that can change what lands in .cache, not + # just build.sh: the jar versions are pinned in build.sh, but the cache + # also holds mkdocs-material's privacy-plugin vendored assets, whose + # content follows the plugin config in mkdocs.yml and the pinned + # package versions in requirements.txt. Keying on build.sh alone let an + # mkdocs.yml or dependency change reuse assets fetched under the old + # config — a stale-cache bug that survives until someone edits build.sh. uses: actions/cache@v4 with: path: tools/wiki/.cache - key: wiki-diagram-jars-${{ hashFiles('tools/wiki/build.sh') }} + key: >- + wiki-diagram-jars-${{ hashFiles( + 'tools/wiki/build.sh', + 'tools/wiki/mkdocs.yml', + 'tools/wiki/requirements.txt' + ) }} - name: Build the design-docs wiki # build.sh compiles the Structurizr model to SVGs, stages docs/design/ @@ -102,6 +117,12 @@ jobs: rm -rf _pages mkdir -p _pages cp -r site/. _pages/ + + # Build-time sources that live under site/ for convenience but must + # not be served. og-card.src.html is the 1200x630 card's source; the + # PNG it produces ships, the source does not. + rm -f _pages/assets/og-card.src.html + test ! -e _pages/design || { echo "site/design would collide with the wiki mount"; exit 1; } mkdir -p _pages/design cp -r tools/wiki/build/site/. _pages/design/ @@ -110,6 +131,47 @@ jobs: echo " root pages: $(find _pages -maxdepth 1 -name '*.html' | wc -l)" echo " wiki pages: $(find _pages/design -name '*.html' | wc -l)" + - name: Validate the hand-written pages + # The wiki half is gated by `mkdocs build --strict` above; this is the + # equivalent gate for site/, which is hand-written and had none. Scoped + # to the ROOT pages on purpose — the generated Material output is the + # upstream theme's business, not ours, and linting it here would fail + # the deploy on markup we do not author. + # + # Pinned to the major: unpinned `npx html-validate` resolves latest at + # run time, so a new major's rules could fail the deploy on markup that + # did not change. @11 is what npx installs today (11.6.2) — do NOT + # "stabilise" onto @9, which would be a two-major downgrade and a + # behaviour change in its own right. + # + # The quoted glob is deliberate: it reaches html-validate unexpanded, so + # a zero-match glob is html-validate's error ("No files matching + # patterns", exit 1) rather than a silently-passing empty shell + # expansion. Verified — this gate cannot pass by matching nothing. + run: npx --yes html-validate@11 '_pages/*.html' + + - name: Check internal links and fragments + # Offline: every href/src in the root pages must resolve to a file in + # the artifact, and every #fragment to a real id on the target page. + # External URLs are listed, never fetched — a deploy must not fail + # because GitHub rate-limited us. + # + # This exists because the marketing pages deep-link into the generated + # wiki (/design/02-constitution/#53-the-canonical-sentence). Those slugs + # derive from chapter headings, so rewording a heading silently breaks a + # citation on the other half of the site — precisely the class of break + # `--strict` catches inside the wiki and nothing caught across the seam. + # + # WHY NOT lychee: it is a Rust binary, not an npm package, so `npx + # lychee` fails outright ("could not determine executable to run"). The + # supported route is the lycheeverse/lychee-action, which could not be + # exercised locally before committing; this stdlib equivalent was tested + # instead, including a negative test (an injected bad slug and a bad + # path both produced exit 1 naming the offender). Swapping in the pinned + # action later is fine — it needs --include-fragments to cover the + # anchor case above, which is the whole point of this gate. + run: python3 tools/ci/linkcheck.py _pages + - name: Upload Pages artifact uses: actions/upload-pages-artifact@v3 with: diff --git a/.gitignore b/.gitignore index 5f9b660..504b3e5 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ tools/wiki/build/ # Pinned structurizr-cli/plantuml jars fetched by tools/wiki/build.sh tools/wiki/.cache/ tools/diagrams/build/ + +prompts/ diff --git a/site/404.html b/site/404.html new file mode 100644 index 0000000..07e68d4 --- /dev/null +++ b/site/404.html @@ -0,0 +1,91 @@ + + + + + +Page not found — Simic + + + + + + + + + +
+ +
+ +
+
+ +
+

Overview › Not found

+

Page not found

+

+ Nothing is published at that address. The site is small enough to list + exhaustively, so one of the links below is almost certainly what you + wanted. +

+
+ + + +

+ If you followed a link from the design-docs wiki or from + the repository and + landed here, that is a broken cross-reference worth reporting as an issue. +

+ +
+
+ + + + + diff --git a/site/architecture.html b/site/architecture.html index cab845f..5ee74d6 100644 --- a/site/architecture.html +++ b/site/architecture.html @@ -1,11 +1,25 @@ - + Architecture — Simic - + + + + + + + + + + + + + + + @@ -21,7 +35,7 @@
  • Architecture
  • Why this design
  • Design docs
  • -
  • Source
  • +
  • Source
  • @@ -44,14 +58,16 @@

    Architecture

    Reading note

    This page is a digest. The canonical text is - docs/design/02-constitution.md (naming constitution and the - 45 invariants) and docs/design/04-architecture.md (system - context, planes, control hierarchy) in - the repository. + 02-constitution.md + (naming constitution and the 45 invariants) and + 04-architecture.md + (system context, planes, control hierarchy), published in full at + /design/ and versioned in + the repository.

    -

    Actors have verbs. Infrastructure has prepositions.

    +

    Actors have verbs. Infrastructure has prepositions.#

    The locked convention distinguishes agents from @@ -68,7 +84,7 @@

    Actors have verbs. Infrastructure has prepositions.

    happen.

    -
    +
    @@ -102,7 +118,7 @@

    Actors have verbs. Infrastructure has prepositions.

    The three infrastructure domains
    -
    +
    @@ -139,12 +155,13 @@

    Actors have verbs. Infrastructure has prepositions.

    reveals the account.

    The canonical sentence — a compact authority map. - docs/design/02-constitution.md §5.3 + 02-constitution.md + § The canonical sentence -

    Architectural planes

    +

    Architectural planes#

    -
    +
    The eleven agent domains
    @@ -165,7 +182,7 @@

    Architectural planes

    Domains grouped by the concern they serve
    -

    The newsroom principle

    +

    The newsroom principle#

    The resemblance to a newsroom is structural rather than decorative. A @@ -175,7 +192,7 @@

    The newsroom principle

    chain corrupts both evidence and accountability.

    -
    +
    @@ -223,16 +240,18 @@

    The newsroom principle

    reject diagnostic or structural hints in Narset's channel.

    -

    The loops

    +

    The loops#

    -

    Observation and commissioning

    +

    Observation and commissioning#

    -
    -

    Assurance and adjudication

    +

    Assurance and adjudication#

    -
    -

    Control hierarchy

    +

    Control hierarchy#

    -
    Tamiyo
    +
    Tamiyo
       └── establishes StrategicEnvelope
             └── Narset chooses local actions
                   ├── WAIT
    @@ -291,7 +312,7 @@ 

    Control hierarchy

    -

    The sentence test

    +

    The sentence test#

    Because each domain owns a verb, the narrative grammar doubles as a cheap @@ -302,7 +323,7 @@

    The sentence test

    Healthy

    -
    Nissa published the same TelemetryEnvelope
    +
    Nissa published the same TelemetryEnvelope
       to Narset and Momir.
     Narset issued a GrowthIntent for Region A
       under Tamiyo's envelope.
    @@ -317,7 +338,7 @@ 

    Healthy

    Triggers review

    -
    Narset forwarded a captioned telemetry
    +
    Narset forwarded a captioned telemetry
       summary to Momir.
     Narset requested an attention-like topology.
     Nissa recommended a wide bottleneck.
    @@ -333,12 +354,13 @@ 

    Triggers review

    The full catalogue of smells — observation to likely cause — is in - docs/design/03-principles.md, Appendix A. The sentence test + 03-principles.md + § Appendix A. The sentence test is not a proof; it is an intentionally cheap first filter, backed by Leyline contracts and authority tests that do the real enforcement.

    -

    Dependency direction

    +

    Dependency direction#

    The naming grammar implies two rules. Agents may consume neutral services @@ -346,7 +368,7 @@

    Dependency direction

    must not import agent policy or encode agent-specific preferences.

    -
    +
    The analogy, desk by desk
    @@ -399,7 +421,7 @@

    The guarantees →

    Simic — a research project by tachyon-beep. Licensed Apache-2.0.

    diff --git a/site/assets/diagrams/assurance-loop-dark.svg b/site/assets/diagrams/assurance-loop-dark.svg index 7647f06..0c15a18 100644 --- a/site/assets/diagrams/assurance-loop-dark.svg +++ b/site/assets/diagrams/assurance-loop-dark.svg @@ -1 +1 @@ -Tezzeret artefactUrabrask buildsa blinded TestPlanTolaria restoresone common SnapshotCandidate branchesControlsMandatory no-opUrabrask verifies conformanceand certifies the measurementsQualityReportAugustin applies eligibility,then the tail-risk veto,then utility policyADMIT one · REJECTDEFER · REQUIRE_RETEST · NO_OP \ No newline at end of file +Tezzeret artefactUrabrask buildsa blinded TestPlanTolaria restoresone common SnapshotCandidate branchesControlsMandatory no-opUrabrask verifies conformanceand certifies the measurementsQualityReportAugustin applies eligibility,then the tail-risk veto,then utility policyADMIT one · REJECTDEFER · REQUIRE_RETEST · NO_OP \ No newline at end of file diff --git a/site/assets/diagrams/assurance-loop-light.svg b/site/assets/diagrams/assurance-loop-light.svg index 3b48bd4..96416dc 100644 --- a/site/assets/diagrams/assurance-loop-light.svg +++ b/site/assets/diagrams/assurance-loop-light.svg @@ -1 +1 @@ -Tezzeret artefactUrabrask buildsa blinded TestPlanTolaria restoresone common SnapshotCandidate branchesControlsMandatory no-opUrabrask verifies conformanceand certifies the measurementsQualityReportAugustin applies eligibility,then the tail-risk veto,then utility policyADMIT one · REJECTDEFER · REQUIRE_RETEST · NO_OP \ No newline at end of file +Tezzeret artefactUrabrask buildsa blinded TestPlanTolaria restoresone common SnapshotCandidate branchesControlsMandatory no-opUrabrask verifies conformanceand certifies the measurementsQualityReportAugustin applies eligibility,then the tail-risk veto,then utility policyADMIT one · REJECTDEFER · REQUIRE_RETEST · NO_OP \ No newline at end of file diff --git a/site/assets/diagrams/core-loop-dark.svg b/site/assets/diagrams/core-loop-dark.svg index 410ac09..40e9447 100644 --- a/site/assets/diagrams/core-loop-dark.svg +++ b/site/assets/diagrams/core-loop-dark.svg @@ -1 +1 @@ -same envelope, publisheddirectlysame envelope, publisheddirectlyGrowthIntentthe assignment briefadmitno-op winsmaintenance warrantTask and data streamTolariatrains the Kasmina hostNissa publishes thecanonical TelemetryEnvelopeNarsetwhether and whereto commission growthMomirdesigns candidate growthTamiyoauthorises strategic resourcesLeyline and Kasmina resolvethe legal GrowthRequestSarpadiaoptional bootstrap ancestryElesh conformsTezzeret compilesUrabrask specifies QATolaria executes the testsUrabrask certifiesthe evidenceAugustin judgescandidate versus no-opKasmina embodiesthe admitted growthNo interventionpolicy utility exactly zeroEmrakul removes what Augustinjudges no longer earns its placeSarpadia retains everysuccess, failure, abstentionOona revealsthe complete account \ No newline at end of file +same envelope, publisheddirectlysame envelope, publisheddirectlyGrowthIntentthe assignment briefadmitno-op winsmaintenance warrantTask and data streamTolariatrains the Kasmina hostNissa publishes thecanonical TelemetryEnvelopeNarsetwhether and whereto commission growthMomirdesigns candidate growthTamiyoauthorises strategic resourcesLeyline and Kasmina resolvethe legal GrowthRequestSarpadiaoptional bootstrap ancestryElesh conformsTezzeret compilesUrabrask specifies QATolaria executes the testsUrabrask certifiesthe evidenceAugustin judgescandidate versus no-opKasmina embodiesthe admitted growthNo interventionpolicy utility exactly zeroEmrakul removes what Augustinjudges no longer earns its placeSarpadia retains everysuccess, failure, abstentionOona revealsthe complete account \ No newline at end of file diff --git a/site/assets/diagrams/core-loop-light.svg b/site/assets/diagrams/core-loop-light.svg index bba05bb..2d226cb 100644 --- a/site/assets/diagrams/core-loop-light.svg +++ b/site/assets/diagrams/core-loop-light.svg @@ -1 +1 @@ -same envelope, publisheddirectlysame envelope, publisheddirectlyGrowthIntentthe assignment briefadmitno-op winsmaintenance warrantTask and data streamTolariatrains the Kasmina hostNissa publishes thecanonical TelemetryEnvelopeNarsetwhether and whereto commission growthMomirdesigns candidate growthTamiyoauthorises strategic resourcesLeyline and Kasmina resolvethe legal GrowthRequestSarpadiaoptional bootstrap ancestryElesh conformsTezzeret compilesUrabrask specifies QATolaria executes the testsUrabrask certifiesthe evidenceAugustin judgescandidate versus no-opKasmina embodiesthe admitted growthNo interventionpolicy utility exactly zeroEmrakul removes what Augustinjudges no longer earns its placeSarpadia retains everysuccess, failure, abstentionOona revealsthe complete account \ No newline at end of file +same envelope, publisheddirectlysame envelope, publisheddirectlyGrowthIntentthe assignment briefadmitno-op winsmaintenance warrantTask and data streamTolariatrains the Kasmina hostNissa publishes thecanonical TelemetryEnvelopeNarsetwhether and whereto commission growthMomirdesigns candidate growthTamiyoauthorises strategic resourcesLeyline and Kasmina resolvethe legal GrowthRequestSarpadiaoptional bootstrap ancestryElesh conformsTezzeret compilesUrabrask specifies QATolaria executes the testsUrabrask certifiesthe evidenceAugustin judgescandidate versus no-opKasmina embodiesthe admitted growthNo interventionpolicy utility exactly zeroEmrakul removes what Augustinjudges no longer earns its placeSarpadia retains everysuccess, failure, abstentionOona revealsthe complete account \ No newline at end of file diff --git a/site/assets/diagrams/observation-loop-dark.svg b/site/assets/diagrams/observation-loop-dark.svg index b29dc65..805b72f 100644 --- a/site/assets/diagrams/observation-loop-dark.svg +++ b/site/assets/diagrams/observation-loop-dark.svg @@ -1 +1 @@ -published directlypublished directlyStrategicEnvelope EGrowthIntent IRegionContract RGrammarProfile Gobservation identityGrowthRequest QNissa observes Snapshot Sat decision point TTelemetryEnvelope ONarsetcommission work? where?under what class?Momirwhat structure would addressthis observed state?TamiyoPure request resolutionO, E, I, R, G QKasminaLeyline \ No newline at end of file +published directlypublished directlyStrategicEnvelope EGrowthIntent IRegionContract RGrammarProfile Gobservation identityGrowthRequest QNissa observes Snapshot Sat decision point TTelemetryEnvelope ONarsetcommission work? where?under what class?Momirwhat structure would addressthis observed state?TamiyoPure request resolutionO, E, I, R, G QKasminaLeyline \ No newline at end of file diff --git a/site/assets/diagrams/observation-loop-light.svg b/site/assets/diagrams/observation-loop-light.svg index c7df72d..e0c2706 100644 --- a/site/assets/diagrams/observation-loop-light.svg +++ b/site/assets/diagrams/observation-loop-light.svg @@ -1 +1 @@ -published directlypublished directlyStrategicEnvelope EGrowthIntent IRegionContract RGrammarProfile Gobservation identityGrowthRequest QNissa observes Snapshot Sat decision point TTelemetryEnvelope ONarsetcommission work? where?under what class?Momirwhat structure would addressthis observed state?TamiyoPure request resolutionO, E, I, R, G QKasminaLeyline \ No newline at end of file +published directlypublished directlyStrategicEnvelope EGrowthIntent IRegionContract RGrammarProfile Gobservation identityGrowthRequest QNissa observes Snapshot Sat decision point TTelemetryEnvelope ONarsetcommission work? where?under what class?Momirwhat structure would addressthis observed state?TamiyoPure request resolutionO, E, I, R, G QKasminaLeyline \ No newline at end of file diff --git a/tools/wiki/assets/mark.svg b/site/assets/mark.svg similarity index 100% rename from tools/wiki/assets/mark.svg rename to site/assets/mark.svg diff --git a/site/assets/og-card.png b/site/assets/og-card.png new file mode 100644 index 0000000..d3b483e Binary files /dev/null and b/site/assets/og-card.png differ diff --git a/site/assets/og-card.src.html b/site/assets/og-card.src.html new file mode 100644 index 0000000..d0ad6b0 --- /dev/null +++ b/site/assets/og-card.src.html @@ -0,0 +1,97 @@ + + + + +Simic social card source + + + + + + +
    simic
    +

    Counterfactual Generative Morphogenesis

    +

    + New neural structure generated from the live state of a host network, then + causally screened against doing nothing. +

    +

    Pre-implementation bootstrap · HLD v4.1 locked

    + + diff --git a/site/index.html b/site/index.html index 47bd9fd..af5afef 100644 --- a/site/index.html +++ b/site/index.html @@ -1,11 +1,25 @@ - + Simic — Counterfactual Generative Morphogenesis - - + + + + + + + + + + + + + + + + @@ -21,7 +35,7 @@
  • Architecture
  • Why this design
  • Design docs
  • -
  • Source
  • +
  • Source
  • @@ -42,17 +56,20 @@

    Simic

    - Project status + Project status — as of 9 August 2026

    - Pre-implementation bootstrap. The design is complete and - locked — HLD v4.1, Namespec 1.0 — and a Python scaffold exists, but there - is no functional code yet. First engineering work is - Phase A: Namespec, Leyline contracts, and dependency boundaries. - Nothing on this site describes a running system or a measured result. + Pre-implementation bootstrap. The design is locked — HLD + v4.1, Namespec 1.0 — and under active design review, with + findings still open against it, including unresolved contract shapes. A + Python scaffold exists, but there is no functional code + yet. First + engineering work is Phase A: Namespec, Leyline contracts, and + dependency boundaries. Nothing on this site describes a running system or + a measured result.

    -

    The idea

    +

    The idea#

    Growing a neural network at runtime raises four questions that existing @@ -77,26 +94,29 @@

    The idea

    lysed when it no longer does.

    -

    The loop, end to end

    +

    The loop, end to end#

    -
    -

    Why counterfactuals, not a reward function

    +

    Why counterfactuals, not a reward function#

    Paired branches start from one snapshot and run over identical futures, so @@ -115,7 +135,7 @@

    Why counterfactuals, not a reward function

    the subject of Why this design looks like this.

    -

    Guarantees

    +

    Guarantees#

    The constitution defines 45 blocking invariants, cited throughout the design @@ -167,7 +187,7 @@

    Guarantees

    -

    Fourteen domains, one sentence

    +

    Fourteen domains, one sentence#

    Authority is split across fourteen bounded domains with deliberately vivid @@ -185,7 +205,9 @@

    Fourteen domains, one sentence

    longer earns continued tenancy. Sarpadia retains every precedent. Oona reveals the account.

    - The canonical sentence — docs/design/02-constitution.md §5.3 + The canonical sentence — + 02-constitution.md + § The canonical sentence

    @@ -206,7 +228,7 @@

    Fourteen domains, one sentence

    Read the architecture →

    -

    What this is not

    +

    What this is not#

    The initial implementation does not attempt:

    @@ -231,7 +253,8 @@

    What this is not

    construction, retrieval, random search, analytic construction, or static over-provisioning?

    - docs/design/01-claim.md §4 + 01-claim.md + § Non-goals

    @@ -240,37 +263,38 @@

    What this is not

    tested scale.

    -

    Where the design lives

    +

    Where the design lives#

    The canonical authority is the HLD chapter set in the repository, not this - site. Paths below are references into - the repository. + site. Each chapter below is published on this domain at + /design/, and the same paths locate it in + the repository.

    -
    +
    Dependency edges and their verdicts
    - - - - - - - - + + + + + + + +
    Repository map
    PathContents
    docs/design/00-INDEX.mdEntry point to the HLD chapter set, with reading paths
    docs/design/01-claim.mdExecutive summary, problem statement, goals, non-goals, the first defensible claim
    docs/design/02-constitution.mdNaming constitution and the 45 blocking invariants
    docs/design/03-principles.mdDesign principles and the architectural smell catalogue
    docs/design/04-architecture.mdSystem context, planes, and the control hierarchy
    docs/adr/Architecture decision records
    docs/product/Product workspace — vision, roadmap, metrics, decisions
    src/simic/Target code layout: one package per domain (scaffold only, today)
    docs/design/00-INDEX.mdEntry point to the HLD chapter set, with reading paths
    docs/design/01-claim.mdExecutive summary, problem statement, goals, non-goals, the first defensible claim
    docs/design/02-constitution.mdNaming constitution and the 45 blocking invariants
    docs/design/03-principles.mdDesign principles and the architectural smell catalogue
    docs/design/04-architecture.mdSystem context, planes, and the control hierarchy
    docs/adr/Architecture decision records
    docs/product/Product workspace — vision, roadmap, metrics, decisions
    src/simic/Target code layout: one package per domain (scaffold only, today)

    Implementation follows Phases A–K, defined in - docs/design/programme/phases.md. Python is the working - language. The project is licensed Apache-2.0. + programme/phases.md. + Python is the working language. The project is licensed Apache-2.0.

    @@ -280,7 +304,7 @@

    Where the design lives

    Simic — a research project by tachyon-beep. Licensed Apache-2.0.

    diff --git a/site/lineage.html b/site/lineage.html index 17ac56f..5235469 100644 --- a/site/lineage.html +++ b/site/lineage.html @@ -1,11 +1,25 @@ - + Why this design — Simic - - + + + + + + + + + + + + + + + + @@ -21,7 +35,7 @@
  • Architecture
  • Why this design
  • Design docs
  • -
  • Source
  • +
  • Source
  • @@ -40,24 +54,27 @@

    Why this design looks like this

    -

    The record this design answers

    +

    The record this design answers#

    - Simic is the third incarnation of one research programme. Early versions of - the simic project (known as esper) built the morphogenetic chassis this - design retains — reversible slots, staged maturation, lifecycle states — and - that working record is the proximate reason for every major choice made - here. Whatever succeeds is Simic; the earlier work is history flowing - backward into that name, not a separate identity. + Simic is the third incarnation of one research programme. Its two + predecessors — ESPER and ESPER LITE — built the morphogenetic chassis this + design retains: reversible slots, staged maturation, lifecycle states. That + working record is the proximate reason for every major choice made here, and + the two strata below are, roughly, its two eras. Whatever succeeds is Simic; + the earlier work is history flowing backward into that name, not a separate + identity.

    The record is documented in full at - docs/design/01-claim.md §2.6, and the principle it produces is - docs/design/03-principles.md §6.20. + 01-claim.md + § The empirical driver, and the principle it produces is + 03-principles.md + § Armour and forward motion.

    -

    What the record proved

    +

    What the record proved#

    Seed telemetry is sufficient for intelligent structural @@ -76,14 +93,14 @@

    What the record proved

    which parts of the programme get pushed forward and which get armoured.

    -

    Where it bled: two strata

    +

    Where it bled: two strata#

    The scars are layered, and they defend different parts of this architecture. Collapsing them into a single story loses information in both directions.

    -

    Stratum one — telemetry-access corruption

    +

    Stratum one — telemetry-access corruption#

    In one generation, machine-generated telemetry code contained @@ -113,10 +130,10 @@

    Stratum one — telemetry-access corruption

    rule that absent signal stays absent and is never a fabricated zero (INV-38), fail-closed typed compatibility (INV-24), direct publication from Nissa with no editorial intermediary (INV-07), observation binding (INV-08), - the defaulting-access ban (ADR-0006), and a poison-pill acceptance harness. + the defaulting-access ban (ADR-0006), and a poison-pill acceptance harness.

    -

    Stratum two — learning-loop and instrument failures

    +

    Stratum two — learning-loop and instrument failures#

    After telemetry access was hardened, the reinforcement-learning loop and its @@ -168,7 +185,7 @@

    Stratum two — learning-loop and instrument failures

    self-deception. The armour is built in both directions accordingly.

    -

    The pivot, stated plainly

    +

    The pivot, stated plainly#

    The earlier work could not shape a reward to incentivise behaviour the reward @@ -194,7 +211,7 @@

    The pivot, stated plainly

    honestly read as the price of that conversion.

    -

    Attribution honesty

    +

    Attribution honesty#

    Read the claims against this @@ -205,11 +222,12 @@

    Attribution honesty

    contributions are the ones that could not: generated (not selected) structure, separated authorities, and provider blindness. The success criteria in - docs/design/01-claim.md §28 should be read against that split. + 01-claim.md + § Success criteria should be read against that split.

    -

    Armour and forward motion

    +

    Armour and forward motion#

    The whole shape follows one rule, stated by the owner: @@ -220,7 +238,8 @@

    Armour and forward motion

    Where capability was validated, push forward; where the programme struggled, build armour.

    - docs/design/03-principles.md §6.20 + 03-principles.md + § Armour and forward motion
    @@ -235,7 +254,7 @@

    The armour

    schemas with fail-closed compatibility (INV-24), validity masks and the absent-is-never-zero rule (INV-38), Nissa's direct publication with no editorial intermediary (INV-07), observation binding (INV-08), the - defaulting-access ban (ADR-0006), and the poison-pill negative-space + defaulting-access ban (ADR-0006), and the poison-pill negative-space harness.

    Against learning-loop self-deception: no shaped-reward authority anywhere on the constitutional path, the evidence/judgement split @@ -260,7 +279,7 @@

    The forward motion

    -

    Two standing obligations

    +

    Two standing obligations#