Commit Graph
19 Commits
Author SHA1 Message Date
DottaandPaperclip a8211dce1d test(runner): add Phase 7 eval conformance suite
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-09 14:05:17 +00:00
DottaandClaude Opus 5 fb006b75ca feat(runner): add Phase 7 browser scenario explorer
Implements the standalone, package-local Phase 7 scenario explorer against the
approved interaction map (docs/design/phase-7-scenario-explorer-ux.md).

Scenario runtime (src/phase7, no DOM, no network):
- Scenario index over all 106 eval cases and 16 groups, with actor role, task
  mode, fixture seed, and catalog claims declared in a profile table rather
  than inferred from case prose. Claims that cannot unlock an operation in a
  scenario's task mode or for its actor role are dropped, so no scenario shows
  a grant that unlocks nothing.
- Deterministic fixture seeds and fake-agent plans: twelve authored plans for
  the UX acceptance scenarios, derived plans for the rest. Derived plans only
  invoke operations the run actually exposes, so any denial in a derived
  transcript is a real policy result, not a scripting artefact.
- A run-artifact builder that executes each plan against the Phase 7C mock
  control plane through the Phase 7D authorization engine and records the
  ordered timeline (both channels), tool exposure, authorization records, an
  immutable ten-domain state diff, and a parity verdict. Descriptor redaction
  rules are applied at the artifact boundary so no raw secret can reach a
  rendered record.
- Parity is judged in the runtime, never in a component. Phase 7E's per-case
  result is carried through verbatim in its own labelled block and renders
  "Not run" when no report is bundled.

Explorer (examples/phase7-explorer):
- Read-only surface over the frozen SDK: hash routing, scenario picker with
  faceted filters, agent and control-plane transcript channels, and Context,
  Authorization, State diff, and Parity inspector tabs. Tokens only; the
  0.1.2 export surface is unchanged and the runtime is reached through the
  deliberately package-local @paperclip-runner-local/phase7 alias.
- Checked-in inputs arrive as declared virtual modules, so the example
  consumer keeps its boundary and fake mode does no network I/O.

Verification: 45 unit tests (index, plans, all-scenario runs and parity,
components, routes), 19 Playwright tests (route determinism, evidence routes,
credential boundary, keyboard paths, responsive), and the 24-image screenshot
acceptance set.

Fixes found while building: SDK badges overflowed at 390px inside disclosure
summaries; SDK badge capitalisation broke the label vocabulary; hash-change
deep links left the wrong mobile segment; screenshot capture leaked run state
between shots. All recorded as revisions in the interaction map.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 13:30:32 +00:00
DottaandPaperclip 4d97afc2ed feat(runner): generate normative Phase 7 inventory
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-09 12:33:39 +00:00
DottaandClaude Fable 5 5e0014a239 docs(runner): add Phase 7B scenario explorer UX spec and mockup
Interaction map, screenshot acceptance matrix, and annotated mockup for
the Phase 7 browser scenario explorer (PAP-16899). Binds picker facets,
transcript channels, inspector tabs, deterministic routes, and the
twelve-shot acceptance set to the 7A capability contract.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 12:29:21 +00:00
DottaandPaperclip cc945e4c72 feat(runner): extract Phase 5 browser SDK
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 07:42:57 +00:00
DottaandClaude Opus 5 cda1fb03ab fix(runner): preserve phase 4b request terminal and goal semantics
Five protocol corrections from the CTO review of the Phase 4b work.

Canonical runtime request outcome. The real driver emitted `resolution`
while the scripted driver and browser read `action`, so a real resolved
card reported an unknown outcome. `harnessRuntimeRequestOutcome` is now
the one payload every driver emits for a terminal `runtime_request.*`
fact, carrying `requestId`, `requestKind`, `turnId`, and `itemId` in the
payload as well as the event binding.

Decoded request identities. Path segments are split before they are
decoded, so a percent-encoded reserved character stays inside the segment
the browser meant it for; malformed encoding fails with 400.

Resolution shapes validated by request kind.
`parseHarnessRuntimeRequestResolution` requires `answers` for a
`user_input` submit and `content` for an elicitation submit, and rejects
a mismatched body instead of accepting it as an empty response. Both
drivers and the browser transport run it, and the request card now sends
elicitation answers as `content`.

One terminal fact per reconnect. The demo server snapshots after the
close rather than before it, so requests the close already cancelled are
not replayed into the driver's stale-request recovery path and reported
terminal a second time. Reading afterwards also carries the closing
events' source sequence into the resumed session.

Goal support retired only on a provider denial. A transport or protocol
failure during `thread/goal/get` said nothing about what the build
supports but still set `goals: false`. `CodexRpcError` now carries the
JSON-RPC code, and the capability is retired only when the provider
answers that it will not serve the method.

Three defects surfaced while verifying the above are fixed here too: a
same-origin `EventSource` GET sends no `Origin`, so requiring one on
`/stream` rejected the console's own subscription and no live-console
test could connect; the browser payload redactor covered only
`.paperclip` paths and leaked the app-server's `~/.codex/memories`; and
the browser suite shares one server across 19 sessions against an
interactive cap of 16, now sized through `PAPERCLIP_PHASE4B_MAX_SESSIONS`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 06:04:03 +00:00
DottaandPaperclip 405a4a4506 fix(runner): secure phase4b browser transport
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 05:43:13 +00:00
96092b832d feat(runner): add phase 4b live codex protocol console
Add the package-local browser tracer over the Phase 4b protocol boundary as a
new Live console mode in the standalone devtool.

Surfaces derive only from canonical PRP events and the shared reducer: live
transcript and composer, same-turn steering with stale-turn recovery, three
distinct interrupt races, inline runtime request cards, capability-gated goal
controls, parent/child lineage, reconnect, refresh, replay, and a redacted
protocol inspector.

Add a deterministic scripted driver and eleven demo chats behind the same demo
server routes the real Codex driver uses, so every protocol state is reachable
without a provider account and PAPERCLIP_PHASE4B_DRIVER=codex swaps in the real
session.

Adapt shadcn/ui and Vercel AI Elements source with zero new runtime
dependencies, and extend the boundary check to keep it that way.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 05:26:45 +00:00
DottaandPaperclip 62d384b383 feat(runner): add phase 4b protocol server
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 04:44:00 +00:00
DottaandPaperclip eef193508d fix(runner): stabilize warmed Codex isolation evidence
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 03:11:05 +00:00
DottaandPaperclip 8d4ffe7f2b fix(runner): isolate Codex credentials and hostile output
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 02:07:33 +00:00
DottaandPaperclip 2161ddcc4a feat(runner): add skillless Codex app-server tracer
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 01:33:36 +00:00
DottaandPaperclip b6ec51df04 feat(runner): add durable Phase 3 recovery transport
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-07 23:37:33 +00:00
DottaandPaperclip a9e6db06e0 fix(runner): address phase 2 tutorial QA
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-07 22:13:41 +00:00
DottaandPaperclip bfef34393c fix(runner): harden phase 2 local boundaries
Enforce loopback/same-origin transport and bounded browser resources, frame harness output before allocation, and reconcile terminal state from runner-owned facts.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-07 21:32:24 +00:00
DottaandPaperclip f32331a567 feat(runner): add Phase 2 local harness loop
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-07 21:09:14 +00:00
DottaandPaperclip 1b51f95c6c feat(runner): add phase 1 static replay contract
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-07 19:13:00 +00:00
DottaandPaperclip a86edda579 fix(runner): establish phase 0 rust boundary
Add the production-direction Cargo workspace, make the Rust tracer the default Phase 0 path, and enforce shared-fixture parity with the TypeScript reference. Extend standalone boundary checks and record the correction in the implementation plan and OKF journal.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-07 18:12:48 +00:00
DottaandPaperclip 164e44ef4e feat(runner): add standalone phase 0 skeleton
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-07 16:33:01 +00:00