Website spec — implementation contract for "Parallel Cut"
Companion to website-master.md, which owns the IDENTITY (palette, type, signature suite, motion vocabulary). This file owns everything MASTER deliberately does not carry: information architecture, the complete URL mapping, the spacing scale, the content inventory, and the prototype's measured evidence. Produced for T664; approved (or amended) at T665.
Read MASTER first. Nothing here re-decides a value from it.
Update 2026-09-22: this spec describes the "Parallel Cut" direction, which was rejected at prototype the same day it was locked (see website-master-20260827-parallel-cut.md). The live source of truth is website-master.md (the "Six Instruments" direction, six marketing routes, not the single page this spec describes). The page counts and URL mapping below are as of 2026-08-27 and have since drifted from the source tree.
Scope note
T664's done-when says "nothing under docs/ or src/ is modified" — meaning the running VitePress implementation and the product source. This spec and MASTER are NEW files under docs/design/, which are design records rather than site implementation. No existing site file was touched to produce them.
The migration is redirect-free, and that is a finding
The site has never been published: no domain, no public origin, no deploy step, and CYBERINE_DOCS_ORIGIN is unset so no canonical URL was ever emitted. Therefore no external link, search index, or bookmark points at any current URL, and the migration owes no redirects. That is why the mapping below is free to normalize case (/FEATURES -> /docs/features) and to move the whole docs tree under a /docs prefix, both of which would be breaking changes on a published site.
Two obligations survive anyway:
- Internal links between docs pages are numerous and DO break. T669 must rewrite them, and T670's link scan over the built output is what proves it.
- If T671 publishes before T670 cuts over, the redirect-free window closes. Do not publish the VitePress site and then migrate — that ordering creates a redirect obligation out of nothing. T671 depends on T670 for exactly this reason.
Information architecture
Two surfaces, one token system, different boldness budgets (MASTER).
Marketing — /
A single page, no sub-routes. Section order is fixed by the argument it makes, each section owning one of the four signature moves or none:
| # | Section | Signature move | The claim it earns |
|---|---|---|---|
| 1 | Hero | Verdict Gate (on load) | one task -> N agents -> judge -> one verified winner |
| 2 | Isolated worktrees | Worktree Split (scroll) | workers cannot collide; each returns a real git diff |
| 3 | Judge evidence | Diff Gate (scroll) | git apply + tsc --noEmit gate the winner; a worker's own claim is never trusted |
| 4 | Cost-aware routing | Cost Admission (scroll) | zero-marginal-cost workers preferred; a daily cap with admission control |
| 5 | Observable runs | none | run.json + events.jsonl per run, indexed across every project |
| 6 | Surfaces | none | CLI, fleet TUI, chat REPL, web dashboard, MCP server, hooks |
| 7 | Install | none | the command, and the one link into the docs |
Sections 5-7 carry no orchestrated move on purpose: four moves is the maximalist ceiling MASTER set, and a fifth would break the governing rule's claim that each move is the same N-to-1 collapse at a different scale.
No testimonial section, no metric counter, no logo wall — the product has no customers to cite, and MASTER forbids fabricating them.
Docs — /docs/*
Five groups. Sidebar order is the reading order for someone new, not alphabetical:
/docs
├── features what Cyberine supports (the catalog)
├── usage the recipe book (generated from repo-root USAGE.md)
├── providers/ 18 pages - per-provider API + CLI reference
│ ├── (index) the wiring map: env var -> adapter -> upstream doc
│ ├── <16 provider pages>
│ └── upstream tracking changelog-watch, mcp-2.0-audit
├── design/ 16 pages - design notes and decisions
└── eval/ 2 pages - offline evaluation resultsproviders/ and design/ are reference material read by search and deep-link, not front to back. Both get an index page that is a real map rather than a link list — the current providers/README.md already does this (env var -> adapter -> upstream doc in one hop) and is the model to keep.
Search is required, not optional: the dev-tools playbook names "poor documentation with no search-first entry point" as a category anti-pattern, and 36 reference pages are unusable without it.
URL mapping — all 41 pages
Generated from the source tree, not typed by hand. /docs prefix throughout; Fumadocs serves content/docs/** at that root.
| Old VitePress URL | New URL | Note |
|---|---|---|
/design/autonomy-loop | /docs/design/autonomy-loop | direct |
/design/bus-presence-auth-scope | /docs/design/bus-presence-auth-scope | direct |
/design/cli-flag-audit | /docs/design/cli-flag-audit | direct |
/design/cli-streaming-output | /docs/design/cli-streaming-output | direct |
/design/code-context-3act | /docs/design/code-context-3act | direct |
/design/contextq-integration | /docs/design/contextq-integration | direct |
/design/fleet-config-design | /docs/design/fleet-config-design | direct |
/design/hook-matcher-anchoring | /docs/design/hook-matcher-anchoring | direct |
/design/long-term-memory | /docs/design/long-term-memory | direct |
/design/loop-sync-dispatch-verify | /docs/design/loop-sync-dispatch-verify | direct |
/design/lsp-diagnostic-feedback-loop | /docs/design/lsp-diagnostic-feedback-loop | direct |
/design/persona | /docs/design/persona | direct |
/design/plugin-marketplace-decision | /docs/design/plugin-marketplace-decision | was orphaned until 2026-08-27 |
/design/tui-config-interaction-standard | /docs/design/tui-config-interaction-standard | direct |
/design/website-master | /docs/design/website-master | NEW 2026-08-27 - this direction doc |
/design/website-theme-decision | /docs/design/website-theme-decision | was orphaned until 2026-08-27 |
/eval/code-context-3act-eval | /docs/eval/code-context-3act-eval | direct |
/eval/worker-profile-coverage | /docs/eval/worker-profile-coverage | direct |
/FEATURES | /docs/features | case normalized to lowercase |
/ | / | MARKETING - content fully rewritten in T668, not migrated |
/providers/anthropic | /docs/providers/anthropic | direct |
/providers/CHANGELOG-WATCH | /docs/providers/changelog-watch | case normalized |
/providers/claude-code-cli | /docs/providers/claude-code-cli | direct |
/providers/cli-agents | /docs/providers/cli-agents | direct |
/providers/cloud-native | /docs/providers/cloud-native | direct |
/providers/codex-cli | /docs/providers/codex-cli | direct |
/providers/command-code | /docs/providers/command-code | direct |
/providers/deepseek | /docs/providers/deepseek | direct |
/providers/direct-api | /docs/providers/direct-api | direct |
/providers/gemini-cli | /docs/providers/gemini-cli | direct |
/providers/litellm | /docs/providers/litellm | direct |
/providers/mcp-2.0-audit | /docs/providers/mcp-2.0-audit | was orphaned until 2026-08-27 |
/providers/minimax | /docs/providers/minimax | direct |
/providers/moonshot-kimi | /docs/providers/moonshot-kimi | direct |
/providers/ollama-cloud | /docs/providers/ollama-cloud | direct |
/providers/ollama | /docs/providers/ollama | direct |
/providers/openai | /docs/providers/openai | direct |
/providers/opencode-cli | /docs/providers/opencode-cli | direct |
/providers/opencode2-v2-beta | /docs/providers/opencode2-v2-beta | direct |
/providers/openrouter | /docs/providers/openrouter | direct |
/providers/ | /docs/providers | was a rewrites: entry in config.mts; Fumadocs uses index.mdx instead |
/usage | /docs/usage | GENERATED from repo-root USAGE.md by scripts/sync-docs.mjs - keep the sync |
Mapping rules that are decisions, not mechanics
/is not migrated.docs/index.mdis a VitePresslayout: homepage whose entire content (hero, five feature cards) is replaced by T668's seven-section marketing page. Nothing in it carries over except the facts.usagestays generated.scripts/sync-docs.mjscopies repo-rootUSAGE.mdinto the site at build time andUSAGE.mdremains canonical. The new site must keep this — hand-editing the docs copy is how a 6500-line recipe book forks.providers/README.mdbecomesproviders/index.mdx. The current site keeps the README filename (so the GitHub folder view works and thecyberine-project-provider-docsskill can point at it) and uses arewrites:entry to serve it as the index. Fumadocs has no equivalent; the file is renamed and.claude/skills/cyberine-project-provider-docs/SKILL.mdmust be updated in the same change or that skill points at a deleted path.- Case is normalized.
/FEATURESand/providers/CHANGELOG-WATCHbecome lowercase. Free now (see redirect-free above), never free again.
Spacing and density scale
Base unit 4px, geometric steps, bound to role tokens per MASTER's three tiers. Every padding, margin, and gap is a token multiple — an arbitrary px value in a component is a defect the layout audit will find.
| Raw token | px | Use |
|---|---|---|
--cyb-space-0 | 4 | icon-to-label, hairline |
--cyb-space-1 | 8 | chip padding, tight inner |
--cyb-space-2 | 12 | input padding, dense stacks |
--cyb-space-3 | 16 | compact card/section inner padding (the FLOOR — no panel goes below this on any side) |
--cyb-space-4 | 24 | card padding, form-field gap |
--cyb-space-5 | 32 | section rhythm |
--cyb-space-6 | 48 | major section separation |
--cyb-space-7 | 72 | marketing section separation (added above the generic ladder: a shout-once landing needs a step the docs never use) |
Role bindings:
| Role token | Marketing | Docs | Why they differ |
|---|---|---|---|
--cyb-space-container-pad | --cyb-space-5 | --cyb-space-4 | density is MEDIUM on marketing, HIGH on docs (MASTER dials) |
--cyb-space-stack-gap | --cyb-space-4 | --cyb-space-3 | same reason |
--cyb-space-section | --cyb-space-7 | --cyb-space-6 | the landing separates sections theatrically; docs do not |
--cyb-space-lane-gutter | --cyb-space-2 | n/a | the gap between worker lanes; the ONE spacing token unique to the signature |
--cyb-space-lane-gutter is load-bearing for the risk: it must stay constant while lane WIDTHS animate, otherwise the collapse reads as the whole grid squashing rather than lanes being eliminated.
Containment invariants (T670 asserts these with layout-audit.js)
Inherited verbatim from the rigor library — restated because the lane system is unusually good at violating them:
- Inner padding >=
--cyb-space-3on all four sides of every panel. No child flush to an edge. - No child border-box beyond its container content-box, horizontally or vertically.
- No collision between non-siblings.
- Every vertical stack has a gap > 0.
- Siblings in a visual column share a left edge within 1px; in a row, a top edge within 1px. A 2-6px drift is a bug, not a design choice. Deliberate offset is >=8px and consistent. This is the invariant the lane fracture is most likely to break, because an animated
grid-template-columnscan land lanes on fractional pixels — the prototype below is where that gets caught. - Gaps within one stack are token-consistent.
Responsive re-flow — the declared grid
QA asserts the grid THIS project declared, so it is declared here:
| Viewport | Marketing lanes | Docs |
|---|---|---|
| 360px | lanes become horizontal BANDS, stacked, preserving the task -> verdict sequence top to bottom | single column, sidebar in a drawer |
| 768px | lanes return as columns but capped at 3 visible + an overflow count ("+2 more workers") — a real re-flow, not a squeezed desktop | content + collapsible sidebar |
| 1280px | full lane system, 5 lanes; body line length 60-75ch | sidebar + content + page outline |
The 768px cap is the honest answer to a lane system on a tablet: five lanes at 768px would each be ~140px wide, which cannot hold a display face at any width setting. Capping at 3 + a count preserves the IDEA (N racing, one surviving) at a width the type can survive.
Content inventory
| Content | Verdict | Notes |
|---|---|---|
docs/index.md hero + 5 feature cards | rewritten | T668 writes the 7-section page from scratch; the facts survive, the copy does not |
HomeSections.vue (walkthrough, provider wall, quickstart, CTA) | rewritten | its 01/02/03 step cards are on MASTER's blocklist; the Quickstart content and the provider wall FACTS are reused, the components are not |
USAGE.md -> usage | verbatim, generated | keep the sync; never hand-edit the copy |
FEATURES.md | verbatim | already the canonical catalog |
18 providers/* pages | verbatim | fact-checked pre-crawled reference; the cyberine-project-provider-docs skill depends on their content. Only providers/README.md changes, and only its filename |
16 design/* notes | verbatim | design records; rewriting history is not migration |
2 eval/* pages | verbatim | measured results |
providers/README.md retired-workers table | verbatim | added 2026-08-27; mirrors RETIRED_WORKERS |
So: 36 of 41 pages migrate verbatim. The rewrite budget is the landing page and its components, nothing else. Any task that proposes rewriting reference prose is out of scope — that is a separate editorial decision, not part of a restyle.
Prototype
Location: .local/design/prototype-verdict-gate/ (gitignored, throwaway). It exists to answer three questions before T666 pays for a framework migration, and to be deleted after.
- Does the lane fracture read as intentional, or as a broken grid?
- Can
Anybody's WIDTH axis animate together with lane widths at 60fps? - Does the same composition survive both theme modes and 360/768/1280?
It is deliberately NOT the foundation: plain HTML + CSS + a little JS, no Next.js, no build step. If it cannot hold 60fps here — where there is no framework overhead at all — it will not hold in React.
Measured evidence
Recorded below after the prototype runs. An unmeasured 60fps claim is not evidence.
Website MASTER — "Run record" (marketing) + "Day Assembly / Night Approach" (docs)
Read this before any website work. Locked 2026-10-01 by the operator. It supersedes the Plasma home + "Six Instruments" routes MASTER, archived as website-master-20260925-plasma.md; the rejected...
Website theme decision - Dracula, dark-only; rebuild epic shelved
Decided 2026-08-27 by the user, in one sitting, after the three-way color contradiction below was surfaced. This note exists so the question is not re-opened from scratch: the site's palette is...