From 1dd286ece20672adb8bf43ca0f4c2560420053c4 Mon Sep 17 00:00:00 2001 From: Jared Scott Date: Fri, 12 Jun 2026 12:45:58 +0800 Subject: [PATCH 001/115] =?UTF-8?q?docs=20site:=20address=20Karen's=20feed?= =?UTF-8?q?back=20=E2=80=94=20simplify,=20dedupe,=20fix=20rendering?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply the Recce doc-writing principle as a standing directive and act on the review of Karen's feedback: - Add docs/site/CLAUDE.md authoring directive (simplicity + concept/tutorial/ reference structure), excluded from the published build; defers to voice-and-tone.md for voice. - Home: lead with the problem before the "multi-agent orchestrator" claim; cut the up-front term dump from 7 to 2. - Fix the install-page ordered-list numbering bug (3- to 4-space indent) and collapse the three install paths into tabs. - Fix dark-on-dark header in slate mode (brand.css header foreground). - Reframe stage-lifecycle so stages read as workflow-defined, not canonical. - worked-example: show real artifact excerpts instead of only narrating them. - Dedupe: operating -> gates-and-decisions; first-launch -> survey; first-workflow -> commission (and correct the design-pass to 4 things). - Move command grammar off install; move build-from-source to Contributing; merge multi-host into contributing/adding-a-runtime; remove sprints-and-roadmap. - frontmatter-contract: move rationale prose into concept pages, keep tables. - mkdocs: canonical site_url https://spacedock.md/docs/. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/CLAUDE.md | 50 ++++++ docs/site/advanced/sprints-and-roadmap.md | 64 ------- docs/site/concepts/gates-and-decisions.md | 2 + docs/site/concepts/stage-lifecycle.md | 6 +- docs/site/concepts/worked-example.md | 33 ++-- docs/site/concepts/workflows-and-entities.md | 2 + docs/site/contributing/adding-a-runtime.md | 129 +++++++++++++- docs/site/contributing/build-from-source.md | 34 ++++ docs/site/get-started/first-launch.md | 31 ++-- docs/site/get-started/first-workflow.md | 92 ++++------ docs/site/get-started/install.md | 178 +++++++------------ docs/site/index.md | 10 +- docs/site/reference/command-reference.md | 31 +++- docs/site/reference/frontmatter-contract.md | 4 +- docs/site/reference/multi-host.md | 1 - docs/site/running-workflows/operating.md | 8 +- docs/site/stylesheets/brand.css | 4 + mkdocs.yml | 9 +- 18 files changed, 383 insertions(+), 305 deletions(-) create mode 100644 docs/site/CLAUDE.md delete mode 100644 docs/site/advanced/sprints-and-roadmap.md create mode 100644 docs/site/contributing/build-from-source.md delete mode 120000 docs/site/reference/multi-host.md diff --git a/docs/site/CLAUDE.md b/docs/site/CLAUDE.md new file mode 100644 index 00000000..7d7aa84a --- /dev/null +++ b/docs/site/CLAUDE.md @@ -0,0 +1,50 @@ +# Authoring directive for `docs/site/` + +**Always apply this when creating or modifying any content under `docs/site/`.** It is the Spacedock adaptation of Recce's documentation-writing standard ([`writing-content/reference/doc.md`](https://github.com/DataRecce/recce-team/blob/main/recce-team/skills/writing-content/reference/doc.md)). It governs **structure and simplicity**; [`contributing/voice-and-tone.md`](contributing/voice-and-tone.md) governs **voice, terminology, and capitalization**. When they overlap, follow voice-and-tone for wording and this file for shape. When both are silent, fall back to the `elements-of-style:writing-clearly-and-concisely` (Strunk) skill. + +## The first rule: simple beats complete + +Spacedock is not complicated; wordy docs make it *feel* complicated. Every edit should make the reader's job smaller, not bigger. + +- **Lead with the problem or the payoff, not the definition.** Open each page with why the reader is here and what they will be able to do — then name the mechanism. + - ✗ "Spacedock is a multi-agent orchestrator." + - ✓ "You have work that needs doing in stages, with a human sign-off before anything ships. Spacedock runs that for you." +- **Introduce the fewest terms possible, as late as possible.** Don't front-load a glossary. Define a term on first real use, gloss it once, then just use it. If a page introduces more than a handful of new terms, cut or defer some. +- **Cut, don't pad.** If a sentence still carries its meaning with a clause removed, remove the clause. If a paragraph repeats the page above it, delete it and link instead. +- **Don't repeat content across pages.** One page owns each idea; others link to it. Duplicated explanation is the main thing that makes the docs feel long. +- **Two levels of structure only:** section → page. No deeper nesting; no page that exists only to hold sub-pages. + +## Pick the page type, then follow its shape + +Every page is one of three types. The nav already sorts roughly this way — match the type to the reader's question. + +| Type | Reader asks | Spacedock sections | Must NOT contain | +|------|-------------|--------------------|------------------| +| **Concept** | "What is this / why does it matter?" | Concepts | Step-by-step instructions — link to the how-to instead | +| **Tutorial / how-to** | "How do I do X?" | Get started, Running workflows | Long conceptual digressions — link to the concept instead | +| **Reference** | "What are the options / the exact contract?" | Reference | Narrative prose, tutorial steps | + +### Concept pages +Opening (1–2 sentences: what + why) → how it works (2–4 short paragraphs, ideally one diagram or worked snippet) → when to use / when not → **Related** links (tutorial + reference). Describe the system; don't instruct. If you're numbering steps, you're in the wrong page type. + +### Tutorial / how-to pages +State the goal in one sentence. List prerequisites up front (never bury them mid-page). Numbered steps, **one action per step**, each showing the expected result (name the command *and* the output, e.g. ``spacedock status --next`` then what it prints). End with verification and "next steps" links. Push command-grammar / theory to the bottom or to a linked concept — the reader wants the outcome first. + +### Reference pages +Optimize for lookup in seconds. Use **tables** for flags, fields, and options (Name · Type/required · Description · Default). Give copy-paste examples. Mark required vs optional; show defaults; note edge cases. If a "reference" page is really an explanation, it belongs in Concepts; if it's really a procedure, it belongs in a how-to. + +## Link instead of repeat +- Cross-link liberally with **relative** internal links (so `mkdocs build --strict` resolves them). Concept → tutorial + reference; tutorial → concept + reference; reference → concept. +- Link the first mention of a load-bearing term (`workflow`, `gate`, `ensign`, `commission`) to the page that owns it, rather than re-explaining it. +- Descriptive link text, never "click here". + +## Before you commit a docs change +- [ ] Page opens with the problem/payoff, not a definition. +- [ ] Introduces only the terms this page actually needs; each defined on first use. +- [ ] Matches its type's shape (concept / how-to / reference) — no steps in concepts, no essays in reference. +- [ ] No content duplicated from another page; shared ideas are linked, not repeated. +- [ ] Internal links are relative and descriptive; first mentions of key terms link out. +- [ ] Ordered lists actually count up (watch for fenced blocks resetting the counter to 1). +- [ ] Voice and terminology follow [`contributing/voice-and-tone.md`](contributing/voice-and-tone.md). +- [ ] `mkdocs build --strict` passes. +- [ ] Read it back once and cut every sentence that survives removal. diff --git a/docs/site/advanced/sprints-and-roadmap.md b/docs/site/advanced/sprints-and-roadmap.md deleted file mode 100644 index 2dbeefe5..00000000 --- a/docs/site/advanced/sprints-and-roadmap.md +++ /dev/null @@ -1,64 +0,0 @@ -# Sprints & roadmap - -A roadmap is the strategy layer above the per-entity workflow: it owns outcome, scope, sequencing, and definition-of-done; the workflow owns task state. The two never overlap. Spacedock's own build uses this split. `docs/roadmap/README.md` is the strategy layer, and `docs/dev/.spacedock-state/` holds the executable entities that `spacedock status` queries. The roadmap explicitly "does **not** track task state." - -This page describes that construct as Spacedock practices it on itself. It is a convention (prose, frontmatter, and the native `status --where` query), not new binary behavior. There is no `sprint` recognizer, no `--sprint-validate` gate, and no contract bump. If you want this discipline for your own workflow, you adopt the convention; nothing in the launcher enforces it. - -## The roadmap as strategy layer - -The roadmap file owns four things the workflow does not: the **outcome** each sprint unlocks, the **scope** (which entities are in), the **sequencing** (value-ordered sprint list), and the **definition-of-done** per sprint. Task state, meaning which stage an entity is in and whether its gate passed, stays in the entities and is read with `spacedock status`. Keep the two separate: a roadmap that starts tracking stage transitions has duplicated the workflow and will drift from it. - -A roadmap groups its work into sprints. A sprint is a set of entities driven to one deliverable, with its own `index.md` recording the goal, the members-as-query, the DoD, and what is out of scope. - -## The shaping-FO / Commander split - -A sprint is run by two distinct roles, and the boundary between them is the load-bearing rule of the construct. - -- **Shaping FO** owns strategy and shape: the roadmap, each sprint's *definition* (deliverable + DoD), the gating ideation of the sprint's entities, the cross-entity coherence check, the staff readiness review, and packaging the sprint for execution. It stays high-level and does **not** hand-drive stage execution. -- **Commander** takes one packaged sprint and drives it to its deliverable: dispatches each stage, approves execution gates and merges, runs the sprint-wide integration test, and produces the report. The Commander boots `spacedock:first-officer` and creates its own team. - -The handoff between them is a **conn-to-drive dispatch**: a self-contained sprint package at `NNN-/dispatch-sprint-execution.md` that the Commander runs from a cold boot. It is a package, not a context transfer. The Commander does not inherit the shaping FO's session, and escalates back to the shaping FO and captain only on a third feedback cycle, a budget blowout, an irrecoverable block, or a genuine scope fork. - -## Sprint lifecycle: shape, drive, close - -A sprint moves through three phases, owner-tagged. The per-sprint checklist lives in the sprint's `index.md`; the canonical template is the lifecycle checklist in `docs/roadmap/README.md`. - -**Shape (shaping FO).** - -1. **Scope-lock** with the captain: which entities are in, which defer. The captain decides. -2. **Carve.** Stamp `sprint`, `group`, and `sprint-readiness` frontmatter on the members; write `index.md` (goal, members-as-query, DoD, out-of-scope). -3. **Ideate** each gated member: problem, approach, acceptance criteria, and test plan, with the **riskiest mechanism exercised first** (a spike, or a recorded "no spike needed"). Check existing ideation state first; never re-ideate a banked design. -4. **Preflight staff review.** Dispatch an *independent* reviewer to refute the designs. This is not optional and never a self-review: the reviewer is neither the FO nor the ideation ensigns, because the value is refuting the FO's own assumptions. Findings land in `staff-review.md` and Material ones are folded before the gates lock. -5. **Present ideation gates**, with checklist accounting and acceptance-criteria cross-check per member. The captain decides; the FO never self-approves. -6. **Package.** Write `dispatch-sprint-execution.md`: the boot recipe, per-member build notes, in-drive gates, and the release-cut recipe. - -**Drive (Commander, a separate cold-booted session).** - -1. Move each member through implementation, validation, and done, with a **detached adversarial audit at validation** for every high-stakes surface (front door, status guards, shipped scaffolding, CI/release machinery). -2. Merge each member to `next` by PR; keep state commits concurrency-safe. -3. **Pre-cut antipattern audit.** With all members merged and the tag not yet fired, dispatch an *independent* reviewer over the assembled sprint to catch cross-cutting antipatterns and integration holes before they ship. Ship-blockers are fixed before the cut; non-blockers are recorded for the next sprint. Running it after the tag means the antipattern has already shipped. -4. **Cut the release.** Confirm `go test ./...` is green from the root, then follow the authoritative cut procedure (see [Releasing](../contributing/releasing.md)). The captain authorizes the cut. - -**Close (shaping FO).** - -1. **Seed the next sprint.** Fold the pre-cut audit's deferred and non-blocking findings into the next sprint's backlog, and run a light post-cut release verification, since some release-machinery issues only manifest once the tag actually fires. - -## Membership is a query, not a list - -A sprint groups its entities by frontmatter query, never a hard-coded roster. Members carry `sprint`, `group`, and `sprint-readiness` frontmatter, and the rollup is the native `--where` filter on `spacedock status`. Run it against the workflow that holds the entities (`docs/dev` in Spacedock's own build): - -```bash -# every member of a sprint -spacedock status --workflow-dir docs/dev --where sprint=0200-flip - -# the drivable set — excludes deferred members -spacedock status --workflow-dir docs/dev --where sprint=0200-flip --where 'sprint-readiness != defer' -``` - -Each `--where` clause is `field value`, where `` is `=` or `!=`. Stacking clauses ANDs them: an entity is listed only when it matches every clause. The operator forms also cover presence and absence: `field !=` matches a non-empty value, `field =` matches an empty one. This is the same filter any reader can run; the sprint is a convention layered on top of it, not a separate command. - -`sprint-readiness: defer` is how a member stays in the sprint's definition but out of the Commander's drivable set. In the `0200-flip` capstone, `pj` is marked `defer` to mean "driven in the shaping session, not by the cold-boot Commander". That defers it from one driver; it is not dropped from the sprint. - -## Adopting it for your own workflow - -You do not need any launcher feature to use this. Add a roadmap file above your workflow, stamp `sprint` / `group` / `sprint-readiness` on the entities you group, and read membership with `status --where`. The construct buys you the strategy/state separation and the shaping-FO/Commander discipline; it costs you a convention you maintain by hand. Spacedock runs it on itself precisely to learn whether the convention earns a graduation to first-class support before any code is written for it. diff --git a/docs/site/concepts/gates-and-decisions.md b/docs/site/concepts/gates-and-decisions.md index a17619cb..0625a9cb 100644 --- a/docs/site/concepts/gates-and-decisions.md +++ b/docs/site/concepts/gates-and-decisions.md @@ -47,6 +47,8 @@ You answer a gate with one of three calls. A redo and a reject at a `feedback-to` stage run the same routing machinery. The difference is whether you are correcting a direction you accept or sending it back. Both name the concrete fix asks so the next worker has something to act on. +**A terminal close needs a recorded verdict.** Approving the terminal stage finalizes the entity, and Spacedock refuses to finalize or archive a terminal entity that carries no `verdict`: the verdict is the outcome on the record, and closing without one is the failure the guard exists to catch. The mechanics are in the [frontmatter contract](../reference/frontmatter-contract.md#entity-fields). + ## Feedback cycles and the loop cap When a feedback stage recommends `REJECTED`, or you reject at a `feedback-to` stage, the work routes back to the stage named in `feedback-to`: the stage that owns the fix, not the reviewer that flagged it. In the dev workflow, `validation` has `feedback-to: implementation`, so a rejected validation sends the deliverable back to implementation, not back to the validator. diff --git a/docs/site/concepts/stage-lifecycle.md b/docs/site/concepts/stage-lifecycle.md index 6e719044..a1df6ef9 100644 --- a/docs/site/concepts/stage-lifecycle.md +++ b/docs/site/concepts/stage-lifecycle.md @@ -1,6 +1,6 @@ # The stage lifecycle -An entity moves through a fixed chain of stages, one at a time, and each stage declares the work it owns and the proof it must produce. The dev workflow's chain is `backlog → ideation → implementation → validation → done`; your own workflow names its own stages, but the mechanics are the same. The first officer advances an entity stage by stage, dispatching one ensign per stage and pausing at the gates you declared. +An entity moves through an ordered chain of stages that the workflow defines, one at a time, and each stage declares the work it owns and the proof it must produce. The dev workflow's chain is `backlog → ideation → implementation → validation → done`; your own workflow names its own stages, but the mechanics are the same. The first officer advances an entity stage by stage, dispatching one ensign per stage and pausing at the gates you declared. The stage order, names, and per-stage properties live in the workflow README's frontmatter under `stages.states`. This page uses the dev workflow (`docs/site/contributing/development-workflow.md`) as the running example; read that page for the full per-stage Inputs/Outputs/Good/Bad detail. @@ -21,9 +21,9 @@ Each entry under `stages.states` is a stage name plus a set of boolean or string Beyond these properties, the prose of each stage's `###` subsection in the README is the stage definition: its Inputs, Outputs, and the Good/Bad bar. The first officer copies that subsection verbatim into the ensign's assignment, so what a stage declares in prose is exactly what the worker is told to do. -## The stages +## The dev workflow's stages -Read the chain as a pipeline: each stage takes the prior stage's output as its input, and the bar rises from "is this clear?" to "is this proven?". +These five are this workflow's stages, not a canonical set. Read the chain as a pipeline: each stage takes the prior stage's output as its input, and the bar rises from "is this clear?" to "is this proven?". - **`backlog`, the seed.** An entity enters here when first proposed: a title, a source, a brief description, and the test gates future stages must satisfy. No design work yet. `initial: true`, so this is where every new entity starts. The dev workflow also marks it `gate: true`, so the first officer presents a new entity for your go-ahead before it advances. - **`ideation`, the design.** A worker clarifies the problem, explores approaches, and produces a fleshed-out body: problem statement, proposed approach, acceptance criteria, and a test plan. Each acceptance criterion names how it will be checked. This stage is `gate: true` in the dev workflow, so the first officer presents the design for your approval before any code is written. diff --git a/docs/site/concepts/worked-example.md b/docs/site/concepts/worked-example.md index d0c11692..406ec84d 100644 --- a/docs/site/concepts/worked-example.md +++ b/docs/site/concepts/worked-example.md @@ -1,7 +1,7 @@ # A worked example This page traces one real entity, `z9` `codex-plugin-auto-install`, from -backlog through to `done` / PASSED, using artifacts that live in this repo. It is +backlog through to `done` / PASSED, using artifacts from the project repo. It is a concrete read of the abstract stage machine: backlog → ideation → implementation → validation → done, the gates between them, and what the captain actually decides at each one. @@ -64,16 +64,20 @@ Once the design is approved, `z9` moves to implementation. The dev workflow runs this stage in a `worktree` (`worktree: true`), so the dispatched ensign works in an isolated checkout, not the shared tree. -The dispatch package gave the implementer three concrete build notes, all of -which the work honored: +The dispatch package handed the implementer three build notes, verbatim from the +sprint's `dispatch-sprint-execution.md`: -- **Install on the shared `devBranch`**, via `ops.Install("codex", - marketplaceSource, devBranch)` and `--ref `, not a hardcoded - `next`, so the channel tracks the flip's later `devBranch` retarget. -- **Fix the now-false comments and error strings** it builds around - (`host_exec.go`, `frontdoor.go`), rather than adding new code around stale text. -- **Invert the obsolete test** `TestCodexFrontDoorNoPluginFailsFastWithoutInstalling`, - whose old assertion contradicted the new auto-install behavior. +> Build notes: **(a)** the codex install branch MUST be the shared `devBranch` +> (`ops.Install("codex", marketplaceSource, devBranch)` + `--ref `), +> NOT a hardcoded `next` — so it tracks the channel … **(b)** **fix** the +> now-false comments/error-strings it builds around (`host_exec.go:271-273`, +> `:32-34`; `frontdoor.go:314-316`), don't add around them; **(c)** inverts +> `frontdoor_test.go:414`. + +The work honored all three: it installed on the shared `devBranch` so the +install channel tracks the flip, fixed the stale comments and error strings in +place, and inverted the obsolete test whose old assertion contradicted the new +auto-install behavior. Implementation is complete when the deliverable is committed and the stage report is filed. It is not a parking spot: a completed implementation routes straight to @@ -103,10 +107,11 @@ PASSED recommendation goes to the captain for the terminal decision. `z9` reaches `done` when the captain reads the validation report and approves. The terminal stage records the outcome in frontmatter: `status: done`, -`verdict: PASSED`, and a `completed` timestamp. The sprint's `post-sprint-audit.md` -confirms `z9` finished `status: done`, `verdict: PASSED`, archived, with PR -reference #329, alongside its three sprint siblings (`kb` #327, `qa` #328, -`vh` #330). +`verdict: PASSED`, and a `completed` timestamp. The sprint's +`post-sprint-audit.md` confirms it in one line, `z9` alongside its three siblings: + +> kb / qa / z9 / vh entities are all `status: done`, `verdict: PASSED`, archived, +> with PR refs #327 / #328 / #329 / #330. That is the whole point of the machine: nothing reached `done` on assertion alone. `z9` advanced only on an approved design, an isolated implementation, a diff --git a/docs/site/concepts/workflows-and-entities.md b/docs/site/concepts/workflows-and-entities.md index f8675364..afb9fe48 100644 --- a/docs/site/concepts/workflows-and-entities.md +++ b/docs/site/concepts/workflows-and-entities.md @@ -68,6 +68,8 @@ The frontmatter is the machine-readable state. The full schema lives in the work | `worktree` | The worktree path while a dispatched agent is active; empty otherwise. | | `issue` | Optional external ticket reference, e.g. `ENG-123`, `kata:task-abc123`, or `owner/repo#42`. | +The frontmatter parser is line-oriented, so keep fields flat and top-level. If a workflow needs more metadata, add more flat custom fields rather than nested YAML — the v1 parser preserves lines, not arbitrary nested structure. + `status` is the field that drives everything: the first officer reads it to decide which entities are ready to advance. To see the queue, run the status viewer against the workflow directory: ```bash diff --git a/docs/site/contributing/adding-a-runtime.md b/docs/site/contributing/adding-a-runtime.md index 27cd5ba3..abb24ef5 100644 --- a/docs/site/contributing/adding-a-runtime.md +++ b/docs/site/contributing/adding-a-runtime.md @@ -2,7 +2,7 @@ A host is supported when a live or fixture-backed run launches it as a first officer, dispatches an ensign through that host's native agent mechanism, and verifies durable workflow state: process exit, entity body, state-checkout git log, and clean status. A host is not supported because its instructions mention Spacedock, and a substring search over code or prose is not proof of behavior. Spacedock ships `spacedock claude` and `spacedock codex` as proven front doors; adding a host means earning the same level of proof. -This page is the contributor's orientation. The full procedure, the exact checklists, and the worked Pi example live in [Multi-host support](../reference/multi-host.md). Read that before you write code. +This page is the full procedure: what "supported" means, the layers to add support in, the acceptance checklist, and a worked Pi example. Use it when adding a new host such as Pi, or when turning a spike into a supported runtime lane. ## What "supported" means @@ -25,6 +25,10 @@ Add support in small layers, each with its own proof at its own abstraction leve 4. **Launch/install UX.** Add `spacedock ` only after a manual or live harness proves the runtime path. Add `spacedock install --host ` only when the install path is known and checkable without mutating unrelated global host state. Add `spacedock doctor --host ` when there is a manifest, package, or runtime health check to verify. 5. **Live runner.** Prove the host with a live-gated test when the claim is runtime integration. Use a temp workflow fixture, isolated host config and session directories, and copied credentials rather than global host state. Assert process exit, entity content, git log, and clean status. Never pass on transcript phrasing. +## Launcher binary propagation through wrappers + +`spacedock claude` and `spacedock codex` attach `SPACEDOCK_BIN` to the process they exec, including the outer `safehouse -- ...` process when safehouse wrapping is active. Spacedock does not modify safehouse internals or assume a private passthrough mechanism; if a wrapper or runtime strips `SPACEDOCK_BIN` before the agent session observes it, the skill contract's `${SPACEDOCK_BIN:-spacedock}` convention degrades to the existing `$PATH` lookup. + ## Match the proof to the claim Use the smallest proof at the same abstraction level as the claim: @@ -37,6 +41,18 @@ Use the smallest proof at the same abstraction level as the claim: The failure mode to guard against: declaring a host supported because its prose looks right. Substring presence is acceptable proof only when the claim itself is about text being present or absent. +## Acceptance checklist + +A new runtime support slice is not done until the entity or PR records evidence for each applicable item: + +- Dispatch output uses the host-native contract and excludes incompatible host tool names. +- The first-officer and ensign skills load host runtime adapters. +- Split-root entity paths remain in the state checkout and are not rewritten into a code worktree. +- Follow-up/reuse cannot accept stale completion evidence, if reuse exists. +- Optional team substrates are represented as adapters over their real action schema. +- A live smoke proves the default dispatch path when runtime behavior is the claim. +- Install/launch commands exist only after the underlying mechanism is proven. + ## Manifesting from void When a runtime looks unsupported on first contact, do not read setup friction as proof the product path is impossible. A missing `auth.json`, an extension not auto-discovered in a temp home, or a subagent tool schema that differs from Claude's is harness work, not a blocker. A real blocker is a proven inability to launch, delegate, observe completion, or verify durable state *after* the harness is correct. @@ -55,4 +71,113 @@ Assume support is supposed to work. Do not treat missing polish, auth The prompt earns its place by changing the default interpretation of a failure: harness work gets fixed in-loop, and only a proven product or design blocker stops the work. -The worked Pi runtime is in [Multi-host support](../reference/multi-host.md): the live smoke mechanism, the exact parent prompt, the install and doctor surface, and the full acceptance checklist. +## The worked Pi runtime + +Pi is the worked example of a host taken from spike to supported runtime: the live-smoke mechanism, the exact parent prompt, the install and doctor surface, and the skill load paths. + +### Pi live-smoke mechanism + +The Pi proof used a live-gated test named: + +```bash +go test -tags live -run TestLivePiSubagentEnsignSmoke ./internal/ensigncycle -v -count=1 +``` + +The harness did this: + +1. Resolve `pi` from `PATH` and the local Spacedock repo root. +2. Resolve the installed `pi-subagents` package root, defaulting to: + + ```text + ~/.pi/agent/npm/node_modules/pi-subagents + ``` + +3. Create temp runtime state: + + ```text + PI_CODING_AGENT_DIR= + PI_CODING_AGENT_SESSION_DIR= + --session-dir + HOME= + ``` + +4. Copy only the operator's existing OAuth file into the isolated Pi home: + + ```text + ~/.pi/agent/auth.json -> $PI_CODING_AGENT_DIR/auth.json + ``` + +5. Launch `pi --print` with explicit local resources: + + ```text + --extension ~/.pi/agent/npm/node_modules/pi-subagents/src/extension/index.ts + --skill ~/.pi/agent/npm/node_modules/pi-subagents/skills/pi-subagents + --skill /skills/first-officer + --skill /skills/ensign + ``` + +6. Create a temp split-root workflow: + - `README.md` declares `state: .spacedock-state`. + - The entity is folder-form in `.spacedock-state/pi-live-smoke/index.md`. + - Both workflow root and state checkout are git repositories. + +7. Ask the Pi parent to call `subagent(...)` exactly once. +8. Require the worker to append a stage report and commit only the state-checkout entity path. +9. Assert durable outcomes: + - Pi process exits successfully. + - Entity body contains the exact smoke marker and stage report shape. + - State checkout git log contains the worker commit. + - The entity path has no uncommitted changes. + +For Pi, the concrete "assume it works" prompt was: + +```text +Assume Pi support is supposed to work. Do not treat missing polish, auth setup friction, or tool-shape mismatch as proof the runtime is impossible. In FO capacity, iron out the frictions: + +- if Pi auth is missing in an isolated harness, copy/reuse the existing Pi OAuth auth file correctly; +- if the dispatch substrate needs a local package/extension path, wire it explicitly; +- if the Pi tool shape differs from Claude/Codex, adapt to the Pi-native contract rather than emulating Claude tools; +- if a live test fails due to harness setup, fix the harness and rerun; +- only stop for a real product/design blocker, not for first-contact setup friction. +``` + +### Exact Pi parent prompt + +The live test formats this prompt with repository and temp paths. Keep the structure when debugging Pi runtime support; only substitute the paths and marker. + +```text +You are the Spacedock first officer for a live Pi smoke test. + +Use the pi-subagents subagent(...) tool exactly once to dispatch one Pi ensign worker. Do not use or mention Claude Agent, SendMessage, TeamCreate, or TeamDelete tools. + +Dispatch a worker with agent "delegate" and this task: + +Load and follow the local Spacedock ensign skill at /skills/ensign/SKILL.md and the Pi ensign adapter at /skills/ensign/references/pi-ensign-runtime.md. This is a split-root Spacedock workflow. + +Workflow directory: +State checkout: +Entity file: +Target stage: implementation + +Required worker actions: +1. Read the workflow README and entity file. +2. Do not edit YAML frontmatter. +3. Append an implementation stage report to the entity body containing the exact marker PI-LIVE-SUBAGENT-ENSIGN-SMOKE, at least one '- DONE:' item, and a '### Summary' subsection. +4. Commit only the entity path in the state checkout with message 'ensign: pi live smoke'. Use a path-scoped git add/commit for pi-live-smoke/index.md. +5. Return a concise completion result naming the entity file and commit evidence. + +After subagent(...) returns, you as first officer must verify the entity file contains PI-LIVE-SUBAGENT-ENSIGN-SMOKE and verify the state checkout git log contains 'ensign: pi live smoke'. Exit successfully only after those durable checks pass. +``` + +### Skill install and load paths + +For Pi, `spacedock pi` launches the proven front door by loading local resources explicitly: + +```text +/skills/first-officer +/skills/ensign +~/.pi/agent/npm/node_modules/pi-subagents/skills/pi-subagents +~/.pi/agent/npm/node_modules/pi-subagents/src/extension/index.ts +``` + +`spacedock install --host pi` is an idempotent readiness check and setup guide for that substrate; it does not install a Claude/Codex-style marketplace plugin and does not accept `--plugin-dir`. Resolve the local skill checkout by running it from the checkout or setting `SPACEDOCK_REPO_ROOT`. `spacedock doctor --host pi` reports the Pi CLI, auth file, `pi-subagents` extension/skill, local Spacedock skill health, and supervisor-talkback setup prerequisites: the `pi-subagents` intercom bridge source, the resolved `PI_INTERCOM_PACKAGE_ROOT` package root, and the `pi-intercom` skill resource. Current `pi-subagents`/`pi-intercom` packages do not expose stable `pi-intercom` or `subagents-doctor` PATH commands, so readiness is based on package/resource paths instead of command shims. These doctor/install checks are necessary setup checks but insufficient to prove live supervisor talkback. Live proof still requires the cq-style `pi-intercom-supervisor-talkback` probe: progress update -> decision request -> supervisor reply -> child resume -> durable marker evidence. Live tests should not mutate global `~/.pi/agent`; they should keep using isolated Pi homes with copied auth. diff --git a/docs/site/contributing/build-from-source.md b/docs/site/contributing/build-from-source.md new file mode 100644 index 00000000..2d23bbc5 --- /dev/null +++ b/docs/site/contributing/build-from-source.md @@ -0,0 +1,34 @@ +# Build from source + +Use this when you're working on Spacedock itself. It builds the launcher from the +development branch and loads the plugin from your checkout, so local changes take +effect immediately. For a normal install, see [Install Spacedock](../get-started/install.md). + +1. **Clone and build.** + + ```bash + git clone --branch next https://github.com/spacedock-dev/spacedock + cd spacedock + go build -o spacedock ./cmd/spacedock + ``` + +2. **Confirm the binary.** + + ```bash + ./spacedock --version + ``` + + Prints `spacedock ` for your local build. + +3. **Launch with the local plugin.** + + ```bash + ./spacedock claude "your task" -- --plugin-dir "$PWD" + ``` + + `--plugin-dir` is a host flag, so it rides after `--`. It loads the + first-officer and ensign agents from your checkout instead of the installed + plugin. Edits to the repo are live. + +The `next` branch is the development channel. It has no Homebrew release; use the +[Homebrew install](../get-started/install.md) for a stable build. diff --git a/docs/site/get-started/first-launch.md b/docs/site/get-started/first-launch.md index 5659cafe..2edfaa56 100644 --- a/docs/site/get-started/first-launch.md +++ b/docs/site/get-started/first-launch.md @@ -6,10 +6,22 @@ One command starts your first session and orients you in a project you already h spacedock claude "/spacedock:survey" ``` -This launches the first officer (the orchestrator agent that runs a Spacedock workflow) inside Claude Code, and hands it the survey task. The first launch sets up the plugin for you, so this single line is enough; you do not need a separate setup step. When a `.safehouse` profile is present in the working directory, the launch runs sandboxed automatically. +This launches the [first officer](../concepts/operating-model.md#three-roles) (the orchestrator agent that runs a Spacedock workflow) inside Claude Code, and hands it the survey task. The first launch sets up the plugin for you, so this single line is enough; you do not need a separate setup step. When a `.safehouse` profile is present in the working directory, the launch runs sandboxed automatically. Run it from inside a project that already has some agent history, such as a repo you have been coding in with Claude Code. Survey reads that history; an empty directory has nothing to report on. +## What survey reports + +In one read-only pass — it never edits your files — survey reconstructs what the agents in this project have implicitly been doing. It leads with **the decisions still open and waiting on you**, then names the [workflow](../concepts/workflows-and-entities.md) you have been running without naming it, the distinct workstreams, and how often you have had to step in, under a one-line headline (project, sessions, date range, decision and interruption counts). If the project has no agent history, it says so and stops. + +For the full section-by-section breakdown and how survey reads your history, see [what survey reports](../running-workflows/survey.md#what-it-reports). + +## What comes next + +Survey ends with an offer, not an action. After the report, it asks whether you want it to [commission](../running-workflows/commission.md) a real Spacedock [workflow](../concepts/workflows-and-entities.md) built from what it found, turning the open decisions into [approval gates](../concepts/gates-and-decisions.md) and the workstreams into work items. You can say yes and let it scaffold the workflow, or say no and keep the survey as a standalone orientation. Either way, nothing has changed in your project until you choose. + +To go straight to defining a workflow yourself instead, see [your first workflow](first-workflow.md). If `spacedock` is not yet installed, start with [installing Spacedock](install.md). + ## The command grammar The front door is one shape, and every launch uses it: @@ -23,20 +35,3 @@ spacedock claude "task" [--safehouse…] [-- host-flags…] - **Anything after `--` forwards verbatim to the host** (`claude` itself), including flags like `--resume`, `--model`, and `--plugin-dir`. `spacedock codex "task"` and `spacedock pi "task"` take the same shape for the Codex and Pi harnesses. Claude Code is the primary surface; the examples here use it. - -## What survey reports - -Survey reconstructs what the agents in this project have implicitly been doing, then reports it back. The survey is read-only; it never edits your files. It reads your recorded agent session history (through the `agentsview` tool, which it offers to install if it is missing), and it shows you, in one pass: - -- **The inferred workflow**: the loop you have been running without naming it, written out as a stage chain. -- **The workstreams**, the distinct tracks of work, each labeled as mechanical (a routine loop) or exploration (human-driven creative work). -- **The decisions still open and waiting on you.** These are the forks that were raised but never resolved. Survey leads with them, because they are the work that is actually blocked on you. -- **How often you had to step in.** Survey counts the interruptions and decision points across those sessions, so you can see where your attention has been going. - -A typical report opens with a one-line headline naming the project, the number of sessions, the date range, and the decision and interruption counts, then lays out each section below it. If the project has no agent history, survey says so plainly and stops; there is nothing to misreport. - -## What comes next - -Survey ends with an offer, not an action. After the report, it asks whether you want it to commission a real Spacedock workflow built from what it found, turning the open decisions into approval gates and the workstreams into work items. You can say yes and let it scaffold the workflow, or say no and keep the survey as a standalone orientation. Either way, nothing has changed in your project until you choose. - -To go straight to defining a workflow yourself instead, see [your first workflow](first-workflow.md). If `spacedock` is not yet installed, start with [installing Spacedock](install.md). diff --git a/docs/site/get-started/first-workflow.md b/docs/site/get-started/first-workflow.md index 182022b6..fb36378d 100644 --- a/docs/site/get-started/first-workflow.md +++ b/docs/site/get-started/first-workflow.md @@ -1,11 +1,13 @@ # Your first workflow -A workflow is a directory of plain-text work items plus a README that defines -the stages they move through, the schema each item carries, and the gates where -you make a call. You create one by describing what you want, in plain language, -to the `/spacedock:commission` skill. This page walks that first commission end -to end: the questions it asks, the design and review gates it sets up, and what -happens once the workflow starts running. +Your first workflow comes from one of two places: [survey](first-launch.md) +offers to build one from what it found in your project, or you describe one from +scratch to the `/spacedock:commission` skill. Either way you land here. A +workflow is a directory of plain-text work items plus a README that defines the +stages they move through, the schema each item carries, and the gates where you +make a call. This page walks the commission end to end: the questions it asks, +the design and review gates it sets up, and what happens once the workflow starts +running. A few terms used below, defined on first use: @@ -19,8 +21,10 @@ A few terms used below, defined on first use: for your call instead of advancing on its own. You are addressed as the captain, the workflow operator who makes the calls at -gates. The first officer is the orchestrator agent that runs the workflow; the -ensign is the worker agent that moves one entity through one stage. +gates; the first officer is the orchestrator agent that runs the workflow, and +the ensign is the worker that moves one entity through one stage. The +[operating model](../concepts/operating-model.md#three-roles) covers the three +roles in full. ## Commission a workflow @@ -38,23 +42,14 @@ scratch. The skill greets you and walks three phases: **design** (a few questions), **generate** (it writes the files), and a **pilot run** (it starts the workflow -on your seed items). The design phase asks you three things, one question at a -time: - -1. **The mission and the entity.** What the workflow is for, and what each work - item represents: "a design idea", "a bug report", "a candidate feature". The - skill derives a short label from your answer (a "design idea" becomes an - `idea`). -2. **The stages.** It proposes an ordered list from your mission (for a design - workflow, something like `backlog → ideation → implementation → validation → - done`), and you confirm, add, remove, or rename them. -3. **Seed entities.** Two or three starting items to run through, each with a - title and a short description (and an optional score). These become the - workflow's first work. - -From your answers the skill then derives the gates: which stages pause for your -approval, and which earlier stage rejected work bounces back to. By default it -gates the stage before the terminal one. +on your seed items). In the design phase it asks, one question at a time: what +the workflow is for and what each entity is (a "design idea" becomes an `idea`), +the stages an entity moves through, which of those stages are gated and where a +rejected entity bounces back to, and the quality bar for each stage — then the +entity-ID style and two or three seed items to start on. You confirm or adjust +each proposal. The +[commission reference](../running-workflows/commission.md#the-four-things-you-name) +covers every decision in full. You do not have to get every answer right. After the questions, the skill presents the full design as a summary (stages, gates, seed items, where the @@ -63,25 +58,17 @@ what to change and it re-presents. ## What gets generated -Once you accept, the skill writes the workflow into a new directory under -`docs/` and confirms each file it created: - -- `README.md`, the workflow's living spec. It holds the mission, the schema each - entity carries, and a section per stage describing its inputs, outputs, and - quality bar (`Good:` / `Bad:`). -- One file per seed entity, named from its title, with YAML frontmatter that - records its `status`, `score`, and other fields. - -The per-stage prose in the README is a best-guess starting point, not a -commitment. The skill flags this directly and offers a `review stages` walk that -steps through each stage's expectations so you can tighten the quality bar before -any work runs. Tightening here is cheap; an agent dispatched against a vague bar -is not. +Once you accept, the skill writes the workflow into a new directory under `docs/`: +a `README.md` that is the workflow's living spec (mission, schema, and a section +per stage with its `Good:` / `Bad:` bar) and one file per seed entity. The +per-stage prose is a best-guess starting point — tighten it before any work runs, +because an agent dispatched against a vague bar is expensive to correct. See +[what gets generated](../running-workflows/commission.md#what-gets-generated) for +the full file layout and the `review stages` walk. ## The design and review gates -A gate is where the workflow stops and hands you a decision instead of advancing -on its own. This is the line Spacedock draws: work flows through the stages, but +This is the line Spacedock draws: work flows through the stages, but **nothing crosses a gate without a recorded decision.** A development workflow gates the design stage and the review stage among others, so you sign off on the approach before code is written, and on the result before it ships. @@ -102,21 +89,8 @@ call that produced it. ## What happens after When you accept the design, the commission skill launches a pilot run on your -seed entities. It takes on the first-officer role itself for this first run: -it reads the workflow README, checks which entities are ready to advance, and -dispatches ensigns to move them through their stages. Stages that modify the -repo run in their own git worktree; lighter stages run inline. - -The run proceeds until the workflow goes idle or reaches a gate. There the first -officer stops and reports what happened: which entities moved, which stages they -passed through, which gate is waiting on you. From that point you are running the -workflow: approve, send back, or reject, and work continues. - -To resume the workflow in a later session, launch the first officer with no task: - -```bash -spacedock claude -``` - -It reads the saved workflow state, picks up where you left off, and dispatches -ensigns for any entity ready for its next stage. +seed entities: it takes the first-officer role itself, reads the README, and +dispatches ensigns to move ready entities through their stages until the workflow +goes idle or reaches a gate. From there you are running the workflow — approving, +sending back, and resuming in later sessions. [Operating a workflow](../running-workflows/operating.md) +covers the day-to-day loop and how to resume. diff --git a/docs/site/get-started/install.md b/docs/site/get-started/install.md index b034b524..a1181344 100644 --- a/docs/site/get-started/install.md +++ b/docs/site/get-started/install.md @@ -14,135 +14,84 @@ Spacedock itself is two pieces that install separately: harness (Claude Code, Codex, or Pi). The recommended setup installs the launcher with Homebrew, then adds the plugin. -A from-source build is available for development. +Pick your platform, then confirm and launch — those last two steps are the same +everywhere. A from-source build is available for development. -## Install with Homebrew (recommended) +## Install the launcher -1. **Install the launcher.** +=== "macOS (Homebrew)" - ```bash - brew tap spacedock-dev/homebrew-tap - brew install spacedock - ``` + ```bash + brew tap spacedock-dev/homebrew-tap + brew install spacedock + ``` -2. **Confirm it.** +=== "Linux / no Homebrew" - ```bash - spacedock --version - ``` + The Homebrew cask is macOS-only. On Linux — or on macOS without Homebrew — + the `curl | sh` script detects your OS and architecture, downloads the + matching tarball from the latest GitHub Release, verifies it against the + release `checksums.txt`, and installs the `spacedock` binary to + `~/.local/bin`. - Prints the installed version, e.g. `spacedock 0.20.0`. + ```bash + curl -fsSL https://raw.githubusercontent.com/spacedock-dev/spacedock/next/install.sh | sh + ``` -3. **Launch.** Point it at a project you already have and let it survey. + If `~/.local/bin` is not on your `PATH`, the script prints a note; add it + (`export PATH="$HOME/.local/bin:$PATH"`) so the `spacedock` command resolves. + Set `SPACEDOCK_INSTALL_DIR` to install elsewhere (e.g. + `SPACEDOCK_INSTALL_DIR=/usr/local/bin`, which may need `sudo`). - ```bash - spacedock claude "/spacedock:survey" - ``` + **Sandboxing.** Safehouse behaves the same as on macOS: when a `.safehouse` + profile is present in the working directory, Spacedock wraps the launch + through the `safehouse` command. Spacedock ships no sandbox of its own — a + run is sandboxed only when a Linux-capable `safehouse` binary is on your + `PATH`; when the binary is absent, Spacedock prints an install hint and the + launch proceeds **unsandboxed**. The macOS-only Gatekeeper/quarantine + handling does not apply on Linux and is not needed there. - Starts the first officer in Claude Code and runs the survey. The first launch - sets up the plugin for you, so this single command is enough. When a - `.safehouse` profile is present in the working directory, the launch runs - sandboxed. +=== "Codex or Pi" - To set up the plugin ahead of time, or to refresh it later, run - `spacedock install --host claude`. + Claude Code is the primary surface; Codex and Pi are supported but + experimental. Install the launcher with Homebrew (the macOS tab), then add + the plugin for your host: -## Install on Linux (or macOS without Homebrew) + ```bash + spacedock install --host codex # or: --host pi + ``` -The Homebrew cask is macOS-only. On Linux — and on macOS if you'd rather not use -Homebrew — install the launcher with the `curl | sh` script. It detects your -OS and architecture, downloads the matching tarball from the latest GitHub -Release, verifies it against the release `checksums.txt`, and installs the -`spacedock` binary to `~/.local/bin`. + Codex installs plugins from your shell rather than programmatically, so this + prints the `codex plugin` commands to run. -1. **Install the launcher.** +## Confirm it - ```bash - curl -fsSL https://raw.githubusercontent.com/spacedock-dev/spacedock/next/install.sh | sh - ``` - - Installs `spacedock` to `~/.local/bin`. If that directory is not on your - `PATH`, the script prints a note; add it (`export PATH="$HOME/.local/bin:$PATH"`) - so the `spacedock` command resolves. Set `SPACEDOCK_INSTALL_DIR` to install - elsewhere (e.g. `SPACEDOCK_INSTALL_DIR=/usr/local/bin`, which may need `sudo`). - -2. **Confirm it.** - - ```bash - spacedock --version - ``` - - Prints the installed version, e.g. `spacedock 0.20.0`. - -3. **Add the plugin and launch** exactly as in the Homebrew steps above - (`spacedock claude "/spacedock:survey"`). - -**Sandboxing on Linux.** Spacedock's safehouse integration behaves the same on -Linux as on macOS: when a `.safehouse` profile is present in the working -directory, Spacedock wraps the launch through the `safehouse` command. Spacedock -does not ship a sandbox — it detects the profile and delegates. A run is -sandboxed only when a Linux-capable `safehouse` binary is on your `PATH`. When -the binary is absent, Spacedock prints an install hint and the launch proceeds -**unsandboxed**. Install safehouse separately if you need the sandbox on Linux; -the macOS-only Gatekeeper/quarantine handling does not apply on Linux and is not -needed there. - -## Use Codex or Pi instead - -Codex and Pi are supported but experimental. Claude Code is the primary surface. - -1. **Install the launcher** (same Homebrew step as above). - -2. **Add the plugin** for your host. - - ```bash - spacedock install --host codex # or: --host pi - ``` - - Codex installs plugins from your shell rather than programmatically, so this - prints the `codex plugin` commands to run. Run them, then use the - first-officer skill in your Codex session. - -3. **Launch** with the matching subcommand. - - ```bash - spacedock codex "your task" # or: spacedock pi "your task" - ``` - -## Build from source (for development) - -Use this when you're working on Spacedock itself. It builds the launcher from -the development branch and loads the plugin from your checkout, so local changes -take effect immediately. - -1. **Clone and build.** - - ```bash - git clone --branch next https://github.com/spacedock-dev/spacedock - cd spacedock - go build -o spacedock ./cmd/spacedock - ``` +```bash +spacedock --version +``` -2. **Confirm the binary.** +Prints the installed version, e.g. `spacedock 0.20.0`. - ```bash - ./spacedock --version - ``` +## Launch - Prints `spacedock ` for your local build. +Point Spacedock at a project you already have and let it survey: -3. **Launch with the local plugin.** +```bash +spacedock claude "/spacedock:survey" +``` - ```bash - ./spacedock claude "your task" -- --plugin-dir "$PWD" - ``` +Starts the first officer in Claude Code and runs the survey. The first launch +sets up the plugin for you, so this single command is enough. When a +`.safehouse` profile is present in the working directory, the launch runs +sandboxed. To set up the plugin ahead of time, or to refresh it later, run +`spacedock install --host claude`. - `--plugin-dir` is a host flag, so it rides after `--`. It loads the - first-officer and ensign agents from your checkout instead of the installed - plugin. Edits to the repo are live. +With Codex or Pi, launch with the matching subcommand instead: +`spacedock codex "your task"` or `spacedock pi "your task"`. -The `next` branch is the development channel. It has no Homebrew release. Use the -Homebrew path above for a stable install. +Working on Spacedock itself? See [Build from source](../contributing/build-from-source.md) +in Contributing — it builds the launcher from the `next` branch and loads the +plugin from your checkout so local edits are live. ## Keep things in sync @@ -156,13 +105,8 @@ spacedock install --host claude If the `spacedock` command itself is missing, install the launcher with Homebrew first, then run `spacedock install --host claude`. -## Command grammar - -The front door is `spacedock claude "task" [--safehouse…] [-- host-flags…]` -(and the same shape for `spacedock codex` and `spacedock pi`): +## Next -- The task comes first. It's handed to the first officer as the launch prompt. -- Anything after `--` forwards verbatim to the host (`claude` / `codex` / `pi`), - including `--plugin-dir`, `--resume`, `--model`, and the like. -- `--safehouse` forces the launch through the sandbox. A `.safehouse` profile in - the working directory does the same automatically. +Run your [first launch](first-launch.md). For the full launch grammar — the task +argument, what rides after `--`, and the sandbox flags — see the +[command reference](../reference/command-reference.md#launch-claude-codex-pi). diff --git a/docs/site/index.md b/docs/site/index.md index 7ea8ad5c..9ed95e1f 100644 --- a/docs/site/index.md +++ b/docs/site/index.md @@ -1,14 +1,10 @@ # Spacedock -**Spacedock is a multi-agent orchestrator where nothing ships without a decision.** It lives within your existing harness: Claude Code, Codex, or Pi. +You're the human, and agents from a dozen sessions ping you all day — a design call, a one-line approval, "ship without full coverage?" — none of it on a schedule you can plan. Generation got cheap; your judgment is now the bottleneck, and every task still ends in a decision someone has to own. -Spacedock breaks work into stages and surfaces the decisions each stage needs, batched for you. Each decision arrives with evidence measured against a predefined bar for what good looks like. You approve, send back, or escalate. You can also delegate the call to an agent. Either way, the decision is recorded with its evidence and reason. +**Spacedock is a multi-agent orchestrator where nothing ships without a decision.** It lives within your existing harness — Claude Code, Codex, or Pi. It breaks work into stages and surfaces the decisions each stage needs, batched for you. Each decision arrives with evidence measured against a predefined bar for what good looks like. You approve, send back, or escalate — or delegate the call to an agent. Either way, the decision is recorded with its evidence and reason. -A few terms you'll meet throughout these docs: - -- A **workflow** is a directory of plain-text work item files plus a README that defines the stages, the schema, and the gates. -- An **entity** is one work item, a markdown file (or folder) that carries everything about the work: the problem, the design notes, the bar for done, and the stage reports. -- A **stage** is one step in the lifecycle; a **gate** is the decision point at its end. +You'll meet two terms right away: a **workflow** is the directory of work that defines the stages and the gates, and a **gate** is the point where the workflow pauses for your decision instead of advancing on its own. Entities (the individual work items) and stages are introduced in [Concepts](concepts/operating-model.md), where you first need them. Three roles run a workflow: diff --git a/docs/site/reference/command-reference.md b/docs/site/reference/command-reference.md index 29d24470..fecac593 100644 --- a/docs/site/reference/command-reference.md +++ b/docs/site/reference/command-reference.md @@ -1,11 +1,26 @@ # Command reference -The `spacedock` binary has ten subcommands in three groups (Launch, Setup, and -Workflow), plus a top-level `--version`. Run `spacedock` with no arguments to -print the grouped help; run `spacedock --help` for a command's own -flags. An unknown command or a stray leading flag exits 2 with a diagnostic on -stderr, and an unknown command resolution under cobra also exits 2. The verbs are -registered in `internal/cli/cli.go`. +The `spacedock` binary has ten subcommands in three groups, plus a top-level +`--version`: + +| Command | Group | What it does | +|---------|-------|--------------| +| [`spacedock claude`](#launch-claude-codex-pi) | Launch | Start Claude Code with the first officer loaded | +| [`spacedock codex`](#launch-claude-codex-pi) | Launch | Start Codex (experimental) with the first officer | +| [`spacedock pi`](#launch-claude-codex-pi) | Launch | Start Pi (experimental) with the first officer | +| [`spacedock install`](#setup-install-doctor) | Setup | Install the per-host plugin, then run the compatibility check | +| [`spacedock doctor`](#setup-install-doctor) | Setup | Run the compatibility check alone | +| [`spacedock status`](#status) | Workflow | Read or mutate workflow state — the table, `--next`, `--where`, `--set`, … | +| [`spacedock new`](#new) | Workflow | Create an entity from stdin (alias for `status --new`) | +| [`spacedock state`](#state) | Workflow | Manage a split-root workflow's state checkout | +| [`spacedock completion`](#completion) | Workflow | Print a bash or zsh completion script | +| [`spacedock dispatch`](#dispatch) | Workflow | Build the worker dispatch artifacts the first officer hands an ensign | +| [`spacedock --version`](#-version) | — | Print the binary version and the contract level | + +Run `spacedock` with no arguments to print the grouped help, and +`spacedock --help` for a command's own flags. An unknown command or a +stray leading flag exits 2 with a diagnostic on stderr. The verbs are registered +in `internal/cli/cli.go`. ## --version @@ -178,5 +193,5 @@ Builds the worker dispatch artifacts the first officer hands an ensign. `build` assembles the assignment (requires `--workflow-dir` unless `--print-schema` or validate-only); `show-stage-def` prints a stage's definition (`--workflow-dir` and `--stage`). A missing or unknown subcommand exits 2. See -[Adding runtime support](multi-host.md) for how `dispatch build` learns a new -host mode. +[Adding a runtime](../contributing/adding-a-runtime.md) for how `dispatch build` +learns a new host mode. diff --git a/docs/site/reference/frontmatter-contract.md b/docs/site/reference/frontmatter-contract.md index 8fe3f340..ab8703a9 100644 --- a/docs/site/reference/frontmatter-contract.md +++ b/docs/site/reference/frontmatter-contract.md @@ -2,7 +2,7 @@ Every entity is a markdown file (or a folder with an `index.md`) whose YAML frontmatter carries the fields Spacedock reads to track and move it. The always-current schema lives in the development workflow's [Schema / Field Reference](../contributing/development-workflow.md#field-reference); this page surfaces that table and the external-tracker bridge fields in one place for reference. A standalone `docs/specs/frontmatter-contract.md` is a planned follow-up; until it lands, the development workflow README is the source of truth. -The frontmatter parser is line-oriented. Keep fields flat and top-level. If richer metadata becomes necessary, add more flat custom fields rather than nested YAML, because the v1 parser preserves lines, not arbitrary structure. +Keep fields flat and top-level; add more flat custom fields rather than nested YAML. (The [entity frontmatter concept](../concepts/workflows-and-entities.md#entity-frontmatter) explains why the line-oriented parser requires this.) ## Entity fields @@ -23,7 +23,7 @@ These are the fields the development workflow declares for a `task` entity. Othe The `status` field is the execution state. `spacedock status` reads stage declarations from the workflow README and reports each entity's `status` against them; `--set status=` is the mutation that advances an entity. The status read path does not invent stages. If the README declares no stages block, membership cannot be validated. -The `verdict` field is guarded on the finalize action, not on reaching a terminal stage. The guard keys on the finalize shape (a `--set` that writes `completed`, or an `--archive` of a terminal entity) and refuses it (exit 1, entity unmutated) when the post-state `verdict` is empty (see `internal/status/verdict_guard_test.go`). A bare dispatch into a terminal stage that does not write `completed` passes without a verdict, because the verdict is the outcome of work that has not happened yet. A finalize on an entity that already carries a verdict also passes, even when that `--set` does not re-name it. `--force` bypasses the guard. The failure mode the guard catches is finalizing or archiving a terminal entity with no verdict on record. +The `verdict` field is guarded on the finalize action, not on reaching a terminal stage: writing `completed` (via `--set`) or archiving a terminal entity is refused with exit 1 (entity unmutated) when `verdict` is empty, and `--force` bypasses. A bare dispatch into a terminal stage that does not write `completed` passes without a verdict. See [gates and decisions](../concepts/gates-and-decisions.md#the-three-calls) for why a terminal close requires a verdict. ## Copy-paste starter diff --git a/docs/site/reference/multi-host.md b/docs/site/reference/multi-host.md deleted file mode 120000 index a7ccb9a2..00000000 --- a/docs/site/reference/multi-host.md +++ /dev/null @@ -1 +0,0 @@ -../../runtime-support.md \ No newline at end of file diff --git a/docs/site/running-workflows/operating.md b/docs/site/running-workflows/operating.md index 47dc885c..15fd75fb 100644 --- a/docs/site/running-workflows/operating.md +++ b/docs/site/running-workflows/operating.md @@ -60,12 +60,6 @@ It stops and returns to you only at a gate, at a terminal entity's merge ceremon ## Handle gate decisions -A gate is the decision point at the end of a stage marked `gate: true` in the workflow. When an entity reaches one, the first officer presents the stage report and the result of its review, then waits. It never self-approves. You decide: - -- **Approve.** The entity advances to its next stage. The first officer dispatches it (or, at a terminal stage, runs the merge-and-cleanup ceremony to close the entity with its verdict). -- **Reject.** On a stage with a `feedback-to` target (`validation` routes back to `implementation` in the `docs/dev` workflow), the rejection routes the concrete findings back to that stage and re-runs the work, then re-validates. A repeated rejection escalates back to you rather than bouncing indefinitely. -- **Send it back with direction.** If the result is close but not right, give the first officer the specific change to make. It updates the entity body, acceptance criteria, and test plan together, then re-runs the stage. - -The gate review names the chosen direction, cites the stage report, and ends with a single recommendation, approve or reject. Read the report it cites before deciding; overriding a `REJECTED` recommendation without a reason is exactly the kind of unexamined approval the gate exists to catch. +A gate stops the loop and hands you the call: the first officer presents the stage report and its review, then waits — it never self-approves. You make one of three calls — **approve**, **send it back with direction**, or **reject**. What each one does, what the gate report carries, and the feedback-cycle cap are covered in full in [the three calls](../concepts/gates-and-decisions.md#the-three-calls). When you approve a terminal stage, the entity is closed: the first officer records the merge, sets the `completed` timestamp and `verdict`, clears the worktree, and tears the worker down. At that point the loop returns to the top: run `status --next` and see what moved into reach. diff --git a/docs/site/stylesheets/brand.css b/docs/site/stylesheets/brand.css index 4f4466ad..cdcd7d32 100644 --- a/docs/site/stylesheets/brand.css +++ b/docs/site/stylesheets/brand.css @@ -5,6 +5,10 @@ .md-header, .md-tabs { background-color: var(--bg-2); + /* Material colours header text with --md-primary-bg-color (a dark ink in both + schemes); since we force a dark header bg, set a light fg so the wordmark, + tabs, and icons stay legible under the slate (default) scheme. */ + color: var(--fg); border-bottom: 1px solid var(--line-soft); } diff --git a/mkdocs.yml b/mkdocs.yml index ef7f4c77..27d4c16c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,12 +1,16 @@ site_name: Spacedock site_description: A multi-agent orchestrator where nothing ships without a decision. -site_url: https://spacedock-dev.github.io/spacedock/ +site_url: https://spacedock.md/docs/ repo_url: https://github.com/spacedock-dev/spacedock repo_name: spacedock-dev/spacedock copyright: Spacedock is released under the Apache License 2.0. docs_dir: docs/site +# Internal authoring directive (CLAUDE.md), not a published page. +exclude_docs: | + CLAUDE.md + theme: name: material custom_dir: overrides @@ -78,16 +82,15 @@ nav: - Operating a workflow: running-workflows/operating.md - Debrief & refit: running-workflows/debrief-and-refit.md - Advanced topics: - - Sprints & roadmap: advanced/sprints-and-roadmap.md - Mods & standing teammates: advanced/mods-and-standing-teammates.md - External-tracker bridge: advanced/external-tracker.md - Multi-workflow & split-root state: advanced/split-root-state.md - Reference: - Command reference: reference/command-reference.md - Frontmatter contract: reference/frontmatter-contract.md - - Multi-host support: reference/multi-host.md - Contributing: - The development workflow: contributing/development-workflow.md + - Build from source: contributing/build-from-source.md - Agent development: contributing/agent-development.md - Proof policy: contributing/proof-policy.md - Adding a runtime: contributing/adding-a-runtime.md From 11edebfcbc6bc1019e888fbf426f64996b47978d Mon Sep 17 00:00:00 2001 From: CL Kao Date: Fri, 12 Jun 2026 11:03:29 -0700 Subject: [PATCH 002/115] docs site: prime "simple" on Home; ban AI-writing tells Home leads with the one idea (work moves through stages; nothing crosses a gate without a decision you own) instead of the orchestrator definition. Drops the up-front workflow/entity glossary and the three-role table; links to the operating model for roles. Authoring directive gains a first-impression rule (no glossary or role table in the first screen; name the one idea; the docs home connects forward, it does not re-pitch) and points at the new voice rule. Voice guide gains "Avoid the AI-writing tells": no em-dashes, no "not just X but Y", no rule-of-three padding, no hollow transitions or empty intensifiers. Applies it to its own prose. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/CLAUDE.md | 24 +++++++++++++++------ docs/site/contributing/voice-and-tone.md | 27 ++++++++++++++++++------ docs/site/index.md | 14 +++--------- 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/docs/site/CLAUDE.md b/docs/site/CLAUDE.md index 7d7aa84a..9076085e 100644 --- a/docs/site/CLAUDE.md +++ b/docs/site/CLAUDE.md @@ -6,7 +6,7 @@ Spacedock is not complicated; wordy docs make it *feel* complicated. Every edit should make the reader's job smaller, not bigger. -- **Lead with the problem or the payoff, not the definition.** Open each page with why the reader is here and what they will be able to do — then name the mechanism. +- **Lead with the problem or the payoff, not the definition.** Open each page with why the reader is here and what they will be able to do, then name the mechanism. - ✗ "Spacedock is a multi-agent orchestrator." - ✓ "You have work that needs doing in stages, with a human sign-off before anything ships. Spacedock runs that for you." - **Introduce the fewest terms possible, as late as possible.** Don't front-load a glossary. Define a term on first real use, gloss it once, then just use it. If a page introduces more than a handful of new terms, cut or defer some. @@ -14,21 +14,33 @@ Spacedock is not complicated; wordy docs make it *feel* complicated. Every edit - **Don't repeat content across pages.** One page owns each idea; others link to it. Duplicated explanation is the main thing that makes the docs feel long. - **Two levels of structure only:** section → page. No deeper nesting; no page that exists only to hold sub-pages. +## First impression: "simple," not "enterprise" + +The first screen a reader sees should make them feel *"there is one idea here, and I already get it,"* not *"this is a complex system with a manual."* Front-loading vocabulary or role tables is what makes simple software read as enterprise software. + +- **No glossary or role table in the first screen.** Introduce a term only when the next sentence needs it; defer the rest to the page that owns them and link. A roles or personas table near the top reads as enterprise structure. Link to it, do not lead with it. +- **Name the one idea, then say everything else is detail.** Give the reader permission to feel they understand the core before they read on. For Spacedock that idea is: work moves through stages, and nothing crosses a gate without a decision the reader owns. +- **The docs home connects forward, it does not re-pitch.** A reader who arrived from the landing page has already seen the problem and the promise. Do not restate the pain. State the one idea and point into the docs. + +## Write it plain: cut the AI tells + +The fastest way to make the docs feel padded is generated-prose texture. The voice rules that catch it (no em-dashes, no "not just X but Y", no rule-of-three padding, no hollow transitions or empty intensifiers) live in [`contributing/voice-and-tone.md`](contributing/voice-and-tone.md) under "Avoid the AI-writing tells." Apply them on every edit. + ## Pick the page type, then follow its shape -Every page is one of three types. The nav already sorts roughly this way — match the type to the reader's question. +Every page is one of three types. The nav already sorts roughly this way; match the type to the reader's question. | Type | Reader asks | Spacedock sections | Must NOT contain | |------|-------------|--------------------|------------------| -| **Concept** | "What is this / why does it matter?" | Concepts | Step-by-step instructions — link to the how-to instead | -| **Tutorial / how-to** | "How do I do X?" | Get started, Running workflows | Long conceptual digressions — link to the concept instead | +| **Concept** | "What is this / why does it matter?" | Concepts | Step-by-step instructions (link to the how-to instead) | +| **Tutorial / how-to** | "How do I do X?" | Get started, Running workflows | Long conceptual digressions (link to the concept instead) | | **Reference** | "What are the options / the exact contract?" | Reference | Narrative prose, tutorial steps | ### Concept pages Opening (1–2 sentences: what + why) → how it works (2–4 short paragraphs, ideally one diagram or worked snippet) → when to use / when not → **Related** links (tutorial + reference). Describe the system; don't instruct. If you're numbering steps, you're in the wrong page type. ### Tutorial / how-to pages -State the goal in one sentence. List prerequisites up front (never bury them mid-page). Numbered steps, **one action per step**, each showing the expected result (name the command *and* the output, e.g. ``spacedock status --next`` then what it prints). End with verification and "next steps" links. Push command-grammar / theory to the bottom or to a linked concept — the reader wants the outcome first. +State the goal in one sentence. List prerequisites up front (never bury them mid-page). Numbered steps, **one action per step**, each showing the expected result (name the command *and* the output, e.g. ``spacedock status --next`` then what it prints). End with verification and "next steps" links. Push command-grammar and theory to the bottom or to a linked concept; the reader wants the outcome first. ### Reference pages Optimize for lookup in seconds. Use **tables** for flags, fields, and options (Name · Type/required · Description · Default). Give copy-paste examples. Mark required vs optional; show defaults; note edge cases. If a "reference" page is really an explanation, it belongs in Concepts; if it's really a procedure, it belongs in a how-to. @@ -41,7 +53,7 @@ Optimize for lookup in seconds. Use **tables** for flags, fields, and options (N ## Before you commit a docs change - [ ] Page opens with the problem/payoff, not a definition. - [ ] Introduces only the terms this page actually needs; each defined on first use. -- [ ] Matches its type's shape (concept / how-to / reference) — no steps in concepts, no essays in reference. +- [ ] Matches its type's shape (concept / how-to / reference): no steps in concepts, no essays in reference. - [ ] No content duplicated from another page; shared ideas are linked, not repeated. - [ ] Internal links are relative and descriptive; first mentions of key terms link out. - [ ] Ordered lists actually count up (watch for fenced blocks resetting the counter to 1). diff --git a/docs/site/contributing/voice-and-tone.md b/docs/site/contributing/voice-and-tone.md index 2694356c..3d29a918 100644 --- a/docs/site/contributing/voice-and-tone.md +++ b/docs/site/contributing/voice-and-tone.md @@ -2,26 +2,39 @@ This is the writing-style guide for Spacedock's public documentation. It is grounded in two real voice signals, not invented: -- **The root `README.md`** — Spacedock's actual public voice: direct, anti-hype, claim-first ("Spacedock is a multi-agent orchestrator where nothing ships without a decision"), concrete over abstract, second person addressed to the reader. -- **The `comm-officer` mod** (`docs/dev/_mods/comm-officer.md`) — the project's prose discipline. It applies the `elements-of-style:writing-clearly-and-concisely` skill (Strunk) and is **light-touch by default**: "Preserve the caller's voice, rhythm, and technical vocabulary. Cut empty words, tighten sentences, fix clear grammar errors." Critically, it **defers to a project voice guide when one exists**. This page is that guide — so the comm-officer and any doc-writer apply it. +- **The root `README.md`**: Spacedock's actual public voice. Direct, anti-hype, claim-first ("Spacedock is a multi-agent orchestrator where nothing ships without a decision"), concrete over abstract, second person addressed to the reader. +- **The `comm-officer` mod** (`docs/dev/_mods/comm-officer.md`): the project's prose discipline. It applies the `elements-of-style:writing-clearly-and-concisely` skill (Strunk) and is **light-touch by default**: "Preserve the caller's voice, rhythm, and technical vocabulary. Cut empty words, tighten sentences, fix clear grammar errors." Critically, it **defers to a project voice guide when one exists**. This page is that guide, so the comm-officer and any doc-writer apply it. ## Voice - **Precise, honest, technical.** State what is true and what a thing does. Spacedock's own pitch leads with the claim, not the adjective. -- **No marketing or hype adjectives.** Avoid "powerful", "seamless", "revolutionary", "effortless", "blazing-fast", "game-changing". If a sentence still carries its meaning with the adjective removed, remove it. The product ethos — evidence over assertion — is the writing ethos. +- **No marketing or hype adjectives.** Avoid "powerful", "seamless", "revolutionary", "effortless", "blazing-fast", "game-changing". If a sentence still carries its meaning with the adjective removed, remove it. The product ethos, evidence over assertion, is the writing ethos. - **Concrete over abstract.** Name the command, the file, the outcome. Prefer "`spacedock status --next` lists the items ready to dispatch" over "Spacedock surfaces actionable work." - **Claim-first, then support.** Lead a section with the load-bearing sentence; follow with the detail. Mirrors the README's "what's different" bullets (bold claim, then the mechanism). +## Avoid the AI-writing tells + +Generated prose has a recognizable texture. It reads as padded and impersonal, and it is the fastest way to make simple software feel like a manual. Cut these on sight: + +- **Em-dashes.** Do not use `—`. Rewrite as a period, a comma, a colon, or parentheses. A sentence that needs an em-dash usually wants to be two sentences. +- **The "not just X, but Y" frame** and its cousins ("it's not only…", "more than just…"). State what the thing is. Drop the contrast scaffolding. +- **Rule-of-three padding.** Three parallel adjectives or clauses where one carries the meaning ("clear, simple, and easy to follow"). Keep the load-bearing one. +- **Hollow transitions and hedges.** "That said," "It's worth noting that," "In order to," "It's important to understand." Delete them; start with the content. +- **Empty intensifiers.** "very", "really", "quite", "actually", "simply", "just" (when it adds nothing), "leverage", "utilize". Prefer the plain verb. +- **Throat-clearing openers.** A page or section that opens by restating its own title or announcing what it will cover ("This page covers…", "In this section, we will…"). Open with the content. + +The test is the same as the cut rule: read it back and remove every word that survives removal. If a sentence sounds like it is performing thoroughness rather than saying something, rewrite it. + ## Tone and register per audience - **New-user pages (Get started): welcoming and encouraging, still precise.** Assume no prior Spacedock knowledge; define a term on first use; show the command and the output to expect. Confidence-building, never breezy. - **Operator pages (Concepts, Running workflows): direct and operational.** The reader is doing the work; tell them the steps and the decision points plainly. - **Contributor pages (Contributing, Reference): exact and unembellished.** Precision outranks warmth. Name the contract, the test, the failure mode. -- **Person and tense.** Second person ("you run", "you approve") and present tense for how-to and instructions — the README's register. Imperative for steps ("Run `spacedock doctor`."). Describe the system in the present tense ("the first officer dispatches an ensign"), not the future. +- **Person and tense.** Second person ("you run", "you approve") and present tense for how-to and instructions, the README's register. Imperative for steps ("Run `spacedock doctor`."). Describe the system in the present tense ("the first officer dispatches an ensign"), not the future. ## Canonical terminology and capitalization -Pinned from how the README and skills actually use these forms — not an imposed guess. Use them consistently. +Pinned from how the README and skills actually use these forms, not an imposed guess. Use them consistently. | Term | Form | Notes (grounded in real usage) | |------|------|--------------------------------| @@ -30,7 +43,7 @@ Pinned from how the README and skills actually use these forms — not an impose | First Officer | `First Officer` (role) / `the first officer` (prose) | Same pattern: Title Case in the roles table / when naming the role; lowercase in running prose ("the first officer reads the README"). The orchestrator agent. | | Ensign | `Ensign` (role) / `the ensign`, `ensigns` (prose) | Same pattern. The worker agent that moves one item through one stage. | | workflow | `workflow` | Common noun, lowercase. A directory of markdown entities + a README. | -| entity | `entity` | Common noun, lowercase. One work item (a markdown file or folder). The README also says "work item" — prefer "entity" in docs, gloss it as "work item" on first use for new users. | +| entity | `entity` | Common noun, lowercase. One work item (a markdown file or folder). The README also says "work item"; prefer "entity" in docs, gloss it as "work item" on first use for new users. | | stage | `stage` | Common noun, lowercase. backlog → ideation → implementation → validation → done. | | gate | `gate` | Common noun, lowercase. The decision point at the end of a stage. | | sprint | `sprint` | Common noun, lowercase. A grouped set of entities driven to a deliverable. | @@ -44,7 +57,7 @@ Rule of thumb: capitalize a **role** when you name it as a role (the roles table - **Show expected output.** For a command a reader runs, name the result, as `install.md` does ("Prints the installed version, e.g. `spacedock 0.20.0`"). - **Headings.** Sentence case ("Get started", "Your first workflow"), not Title Case. One `#` h1 per page (the page title); section headings start at `##`. - **Links.** Descriptive link text, never "click here" / "this link". Internal links are relative so `mkdocs build --strict` can resolve them. -- **Lists and emphasis.** Bullets for parallel items; bold for the load-bearing claim of a bullet (the README pattern). Use emphasis sparingly — if everything is bold, nothing is. +- **Lists and emphasis.** Bullets for parallel items; bold for the load-bearing claim of a bullet (the README pattern). Use emphasis sparingly; if everything is bold, nothing is. ## How this guide is applied diff --git a/docs/site/index.md b/docs/site/index.md index 9ed95e1f..e42b885a 100644 --- a/docs/site/index.md +++ b/docs/site/index.md @@ -1,18 +1,10 @@ # Spacedock -You're the human, and agents from a dozen sessions ping you all day — a design call, a one-line approval, "ship without full coverage?" — none of it on a schedule you can plan. Generation got cheap; your judgment is now the bottleneck, and every task still ends in a decision someone has to own. +Spacedock runs your work as a series of stages. **Nothing crosses a gate without a decision you own.** -**Spacedock is a multi-agent orchestrator where nothing ships without a decision.** It lives within your existing harness — Claude Code, Codex, or Pi. It breaks work into stages and surfaces the decisions each stage needs, batched for you. Each decision arrives with evidence measured against a predefined bar for what good looks like. You approve, send back, or escalate — or delegate the call to an agent. Either way, the decision is recorded with its evidence and reason. +A gate is a checkpoint where the workflow pauses and asks you the question the work has reached: ship this, or not? You approve it, send it back, or escalate. You can also delegate the call to an agent. Either way, the decision is recorded with its evidence and its reason. That is the whole idea. Everything else is detail. -You'll meet two terms right away: a **workflow** is the directory of work that defines the stages and the gates, and a **gate** is the point where the workflow pauses for your decision instead of advancing on its own. Entities (the individual work items) and stages are introduced in [Concepts](concepts/operating-model.md), where you first need them. - -Three roles run a workflow: - -| Role | Who | -|------|-----| -| **Captain** | You. You define the mission and make the calls at gates unless you delegate them. | -| **First Officer** | The orchestrator agent that runs the workflow and reports to you at gates. | -| **Ensign** | The worker agent that moves one entity through one stage. | +You are the captain. You set the bar and make the calls; the agents do the rest. See [the operating model](concepts/operating-model.md) for the three roles and how they divide the work. ## What's different From 0476f80c1c74646af770b754ee24e6e476b2353f Mon Sep 17 00:00:00 2001 From: CL Kao Date: Fri, 12 Jun 2026 11:06:11 -0700 Subject: [PATCH 003/115] docs site: fold comm-officer polish into Home lede and voice rule Tighten the roles link clause (omit needless words) and add the bar- sharpens-with-use trust beat to the Home lede. Recast the AI-tells opening to a stronger colon construction and drop the self-referential closing framing. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/contributing/voice-and-tone.md | 4 ++-- docs/site/index.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/site/contributing/voice-and-tone.md b/docs/site/contributing/voice-and-tone.md index 3d29a918..de42caa4 100644 --- a/docs/site/contributing/voice-and-tone.md +++ b/docs/site/contributing/voice-and-tone.md @@ -14,7 +14,7 @@ This is the writing-style guide for Spacedock's public documentation. It is grou ## Avoid the AI-writing tells -Generated prose has a recognizable texture. It reads as padded and impersonal, and it is the fastest way to make simple software feel like a manual. Cut these on sight: +Generated prose has a recognizable texture: padded, impersonal, and the fastest way to make simple software feel like a manual. Cut these on sight: - **Em-dashes.** Do not use `—`. Rewrite as a period, a comma, a colon, or parentheses. A sentence that needs an em-dash usually wants to be two sentences. - **The "not just X, but Y" frame** and its cousins ("it's not only…", "more than just…"). State what the thing is. Drop the contrast scaffolding. @@ -23,7 +23,7 @@ Generated prose has a recognizable texture. It reads as padded and impersonal, a - **Empty intensifiers.** "very", "really", "quite", "actually", "simply", "just" (when it adds nothing), "leverage", "utilize". Prefer the plain verb. - **Throat-clearing openers.** A page or section that opens by restating its own title or announcing what it will cover ("This page covers…", "In this section, we will…"). Open with the content. -The test is the same as the cut rule: read it back and remove every word that survives removal. If a sentence sounds like it is performing thoroughness rather than saying something, rewrite it. +Read it back and remove every word that survives removal. If a sentence sounds like it is performing thoroughness rather than saying something, rewrite it. ## Tone and register per audience diff --git a/docs/site/index.md b/docs/site/index.md index e42b885a..03d85ffe 100644 --- a/docs/site/index.md +++ b/docs/site/index.md @@ -4,7 +4,7 @@ Spacedock runs your work as a series of stages. **Nothing crosses a gate without A gate is a checkpoint where the workflow pauses and asks you the question the work has reached: ship this, or not? You approve it, send it back, or escalate. You can also delegate the call to an agent. Either way, the decision is recorded with its evidence and its reason. That is the whole idea. Everything else is detail. -You are the captain. You set the bar and make the calls; the agents do the rest. See [the operating model](concepts/operating-model.md) for the three roles and how they divide the work. +You are the captain. You set the bar and make the calls; the agents do the rest. The bar starts rough and sharpens every time you reject, so the calls that once needed you become ones you can hand off with confidence. See [the operating model](concepts/operating-model.md) for how the three roles divide the work. ## What's different From 0e1f704937f0646eafc6387d2a34feb974db188c Mon Sep 17 00:00:00 2001 From: CL Kao Date: Fri, 12 Jun 2026 11:09:43 -0700 Subject: [PATCH 004/115] docs site: Home uses plain "work items", defers entity to Concepts Drop the entity gloss and link from the Home "what's different" bullet. Plain "work items" carries the meaning; the entity term is defined where it is owned, in Concepts. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/site/index.md b/docs/site/index.md index 03d85ffe..da2eb880 100644 --- a/docs/site/index.md +++ b/docs/site/index.md @@ -11,7 +11,7 @@ You are the captain. You set the bar and make the calls; the agents do the rest. - **The agent doesn't get to judge its own work.** Review runs as a separate stage with fresh context, no access to the maker's reasoning. It pushes back on thin evidence and work that looks busy without proving its claim. - **Every decision leaves a trail.** Each gate carries a stage report: findings, verdicts, artifacts, anomalies. You decide on evidence, not the transcript, and the record outlives the reviewer. - **The bar sharpens as you use it.** Each stage declares what good means and the agent works to that line. When a standard turns out fuzzy in practice, the agent proposes an edit to the written criteria for your approval. -- **Batch the work; decide as it flows back.** Queue many entities at once. Agents advance each through its stages, and you handle gates as they surface, not one session at a time. +- **Batch the work; decide as it flows back.** Queue many work items at once. Agents advance each through its stages, and you handle gates as they surface, not one session at a time. - **Work survives the context limit.** When an agent runs out of context, a successor carries forward what's in flight. ## Where to go next From 2f0ff26b33e96114f18e74265a91a68eeb16d877 Mon Sep 17 00:00:00 2001 From: CL Kao Date: Fri, 12 Jun 2026 11:12:25 -0700 Subject: [PATCH 005/115] docs site: Home next-steps lead with the two entry paths, drop redundancy The Get-started bullet now frames the two real entry paths by payoff: survey an existing project to see where agents burn your time, or start a fresh workflow from a common shape. Drop the redundant "New here?" closer that repeated the survey-first nudge. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/index.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/site/index.md b/docs/site/index.md index da2eb880..fe47cd4f 100644 --- a/docs/site/index.md +++ b/docs/site/index.md @@ -16,13 +16,11 @@ You are the captain. You set the bar and make the calls; the agents do the rest. ## Where to go next -- **[Get started](get-started/install.md)**: install the `spacedock` launcher and the host plugin, then make your [first launch](get-started/first-launch.md) and build your [first workflow](get-started/first-workflow.md). +- **[Get started](get-started/install.md)**: [install](get-started/install.md) Spacedock, then pick an entry. [Survey an existing project](get-started/first-launch.md) to see where your agents burn your time and the workflow you are already running without naming it. Or [start a fresh workflow](get-started/first-workflow.md) from a common shape like development or research. - **[Concepts](concepts/operating-model.md)** covers the operating model, workflows and entities, the stage lifecycle, gates and decisions, and a worked example. - **[Running workflows](running-workflows/commission.md)** walks through commissioning a workflow, surveying an existing project, operating a running workflow, and debriefing and refitting between sessions. - **[Contributing](contributing/development-workflow.md)** covers the development workflow, agent development, the proof policy, and releasing. -New here? Start with [Install](get-started/install.md). It walks a fresh install end to end and names the output to expect at each step. - ## For agents using Spacedock Spacedock's docs are read by agents too. A user's first officer parsing these docs is itself an agent. The build emits a curated `llms.txt` index of the docs at the site root for product-using agents. (Repo-development guidance for an agent working ON Spacedock lives under Contributing → [Agent development](contributing/agent-development.md).) From e0726d4dfa0df594bbc6cf210da2dc731d9a5182 Mon Sep 17 00:00:00 2001 From: CL Kao Date: Fri, 12 Jun 2026 11:13:03 -0700 Subject: [PATCH 006/115] docs site: tighten survey bullet verb (comm-officer polish) "surface the workflow you are already running" reads cleaner than the participial tail. Keep "burn your time" and "without naming it" as the load-bearing survey framing. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/site/index.md b/docs/site/index.md index fe47cd4f..a22e2cc1 100644 --- a/docs/site/index.md +++ b/docs/site/index.md @@ -16,7 +16,7 @@ You are the captain. You set the bar and make the calls; the agents do the rest. ## Where to go next -- **[Get started](get-started/install.md)**: [install](get-started/install.md) Spacedock, then pick an entry. [Survey an existing project](get-started/first-launch.md) to see where your agents burn your time and the workflow you are already running without naming it. Or [start a fresh workflow](get-started/first-workflow.md) from a common shape like development or research. +- **[Get started](get-started/install.md)**: [install](get-started/install.md) Spacedock, then pick an entry. [Survey an existing project](get-started/first-launch.md) to see where your agents burn your time and surface the workflow you are already running without naming it. Or [start a fresh workflow](get-started/first-workflow.md) from a common shape like development or research. - **[Concepts](concepts/operating-model.md)** covers the operating model, workflows and entities, the stage lifecycle, gates and decisions, and a worked example. - **[Running workflows](running-workflows/commission.md)** walks through commissioning a workflow, surveying an existing project, operating a running workflow, and debriefing and refitting between sessions. - **[Contributing](contributing/development-workflow.md)** covers the development workflow, agent development, the proof policy, and releasing. From 891b2a526de38703db173c0dbbcf9fdccbad8085 Mon Sep 17 00:00:00 2001 From: CL Kao Date: Fri, 12 Jun 2026 11:13:41 -0700 Subject: [PATCH 007/115] docs site: drop Contributing pointers from Home Home is a user surface. Cut the Contributing bullet from "where to go next" and the agent-development pointer from the "for agents" note; both are reachable from the nav for anyone who wants them. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/index.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/site/index.md b/docs/site/index.md index a22e2cc1..4f9edd1d 100644 --- a/docs/site/index.md +++ b/docs/site/index.md @@ -19,8 +19,7 @@ You are the captain. You set the bar and make the calls; the agents do the rest. - **[Get started](get-started/install.md)**: [install](get-started/install.md) Spacedock, then pick an entry. [Survey an existing project](get-started/first-launch.md) to see where your agents burn your time and surface the workflow you are already running without naming it. Or [start a fresh workflow](get-started/first-workflow.md) from a common shape like development or research. - **[Concepts](concepts/operating-model.md)** covers the operating model, workflows and entities, the stage lifecycle, gates and decisions, and a worked example. - **[Running workflows](running-workflows/commission.md)** walks through commissioning a workflow, surveying an existing project, operating a running workflow, and debriefing and refitting between sessions. -- **[Contributing](contributing/development-workflow.md)** covers the development workflow, agent development, the proof policy, and releasing. ## For agents using Spacedock -Spacedock's docs are read by agents too. A user's first officer parsing these docs is itself an agent. The build emits a curated `llms.txt` index of the docs at the site root for product-using agents. (Repo-development guidance for an agent working ON Spacedock lives under Contributing → [Agent development](contributing/agent-development.md).) +Spacedock's docs are read by agents too. A user's first officer parsing these docs is itself an agent. The build emits a curated `llms.txt` index of the docs at the site root for product-using agents. From 7476f6d53ac043220fc367c3182c410af281eda1 Mon Sep 17 00:00:00 2001 From: CL Kao Date: Fri, 12 Jun 2026 11:15:49 -0700 Subject: [PATCH 008/115] docs site: discreet "for agents: llms.txt" footer link Surface the generated llms.txt index from the footer meta row, styled muted so it sits beside the copyright without competing with the user-facing nav. The url filter resolves it to /docs/llms.txt from any page depth. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/site/stylesheets/brand.css | 11 +++++++++++ overrides/partials/footer.html | 1 + 2 files changed, 12 insertions(+) diff --git a/docs/site/stylesheets/brand.css b/docs/site/stylesheets/brand.css index cdcd7d32..b033ee82 100644 --- a/docs/site/stylesheets/brand.css +++ b/docs/site/stylesheets/brand.css @@ -17,6 +17,17 @@ border-top: 1px solid var(--line-soft); } +/* Discreet machine-readers link in the footer meta row */ +.sd-footer-llms { + margin-left: 1em; + font-size: 0.64rem; + opacity: 0.7; + color: inherit; +} +.sd-footer-llms:hover { + opacity: 1; +} + /* Mono display headings -- Material has no display-font slot */ .md-typeset h1, .md-typeset h2 { diff --git a/overrides/partials/footer.html b/overrides/partials/footer.html index b21bab21..e56ae411 100644 --- a/overrides/partials/footer.html +++ b/overrides/partials/footer.html @@ -46,6 +46,7 @@