README
¶
Conformance fixtures
Fixtures are generated by TypeScript extractors against the pinned checkout in .upstream/
(make upstream); committed goldens are never edited by hand. make fixtures regenerates every
registered family, and make fixtures-check generates into a temporary directory and diffs it with
the committed tree. The extractors run with Node 22 or newer; the Makefile installs only the pinned
dev-time tools they need.
There are two tiers. The render-golden families — every F12* directory plus the WP450
replay/preview/UI-demo files — are Orb-owned snapshots of Orb's own renderer (DECISIONS.md P6):
they are excluded from upstream extraction and from the fixtures-check diff, guarded by their Go
comparison tests, and regenerated only by make fixtures-tui (ORB_UPDATE_F12=1), which rewrites
presentation values (frames, highlight output, theme colors, layout) in place while behavior-shaped
values in the same files stay frozen upstream captures. Their manifest.json files keep the
provenance of the original capture. Every other family is an upstream-extracted pi-parity gate.
A fixture change is accepted only when the upstream behavior changed, a case was deliberately added, or (render goldens only) an Orb presentation change was deliberately regenerated. A failing Go comparison is fixed in Go, never by weakening or hand-editing the golden.
Adding a family
Add one extractor under conformance/extract/, call it from generate.ts, emit a stable
manifest.json plus deterministic data under conformance/fixtures/<family>/, and add the Go
consumer. Extractors omit timestamps and other ambient data; IDs, clocks, temp paths and HOME are
fixed or canonicalized at extraction time so goldens stay machine-independent.
Families
- F1 — message serialization, partial JSON and TypeBox-style schemas.
- F2 — provider request bytes, recorded stream/error traces and auth for every API shape:
OpenAI, Anthropic, Google and Vertex, Mistral Conversations, Azure OpenAI Responses, Bedrock
(through the pinned AWS serializer), pi-messages, Codex Responses (SSE and WebSocket framing),
Copilot and xAI subscription metadata. Auth storage cases are byte-exact in both directions,
including the OAuth callback pages and a live cross-runtime
proper-lockfilecontention check. - F3 — upstream's real agent loop and faux provider with fixed clocks and IDs, one exact
JSON.stringify(AgentEvent)per JSONL line;F3-sessionruns upstream'srunPrintModeover a realAgentSession(multiple prompts, queues, retry, compaction, error and abort). - F4 — the edit-diff module: normalization, matching, replacement, display diff and unified patch.
- F5 — truncation helpers and the streaming output accumulator; spilled bytes compare as base64 so invalid UTF-8 stays observable.
- F6 — session tree, branch persistence, fork wire, listing and HTML export (complete hash, embedded payload and a DOM projection).
- F7 — a strict-LF bidirectional RPC transcript replayed through the Go mode and a built
orb --mode rpc.make upstream-rpc-testsalso runs upstream's RPC test files unmodified against the Go binary through upstream'sRpcClient. - F8 — skills and prompt templates: argument substitution, invocation formatting, and extension-command, input-hook, skill-command and template resolution order.
- F9 — system-prompt assembly, including progressive skill disclosure; Orb's identity substitutions are the exact ledgered ones.
- F10 — compaction boundaries and token accounting.
- F11 — the Go-native extension runner (ordered dispatch, middleware, errors, trust, input), built-in tools and product wiring.
- F12 — Orb-owned TUI render snapshots.
- F13-dynamic-workflows —
@quintinshaw/pi-dynamic-workflows@3.5.1driven through thirteen scenarios against real pinnedcreateAgentSessionsessions with the faux provider. The plugin isnpm ci-installed from an embedded integrity-pinned lockfile (the one network-dependent step, served from the npm cache when offline). Files underreference-tui/are reference-only upstream observations; the Go consumer enforces that marking. - WP250 — model pattern resolution, fuzzy
--list-modelstables,models.jsoncomposition and model-store persistence. The large models.dev input lives underai/models/testdata/. - WP360 — pi packages and project trust:
parseGitUrlover the full URL-form battery,DefaultPackageManager.resolve()over declarative fixture trees, settings persistence and the trust manager. - WP370Runtime —
AgentSessionRuntimelifecycle over the session manager. - WP440 / WP440Read — image format handling and the
readtool's image results. - WP450 — Orb-owned replay, preview and UI-demo render snapshots of the interactive components, plus the startup session picker and its search; recorded status-line events and callbacks stay frozen upstream captures.