OKF Workbench

Acceptance evidence

Acceptance evidence

Evidence semantics

This document deliberately separates deterministic component automation, packaged lifecycle automation, and full user-scenario evidence.

All eight scenarios remain Partial because their remaining UI/provider clauses are material. Here, Partial describes evidence completeness, not implementation status. The qualifiers in the table state whether the partial result has component evidence only or also packaged lifecycle evidence. Do not use this file to claim full MVP acceptance.

Automated component command

Run the dedicated suite without changing package.json:

mise x node@24.18.0 -- npm exec -- vitest run --config test/acceptance/vitest.config.ts

The suite is deterministic: it injects its clock, uses an in-memory workspace and memfs: logical bundle URIs, reads no external fixture, and makes no network request. AC-008 additionally replaces the JavaScript fetch boundary with a throwing test double. That check does not establish operating-system or Electron process network isolation.

The Extension Host suite separately registers an actual non-file: workspace provider and executes the public commands with its Explorer/root URI:

mise x node@24.18.0 -- env VSCODE_TEST_VERSION=1.121.0 npm run test:integration
mise x node@24.18.0 -- env VSCODE_TEST_VERSION=1.129.1 npm run test:integration

That test requires provider reads for the selected bundle, publishes the broken-link diagnostic at the exact okfmem:// concept URI (including authority, Unicode, and a literal %2F filename segment), waits for the graph Webview’s render acknowledgement for the published revision, and asserts that Validate Bundle and Open 3D Graph make no provider mutation. It does not automate a write command, an external remote extension, or packaged installation.

The hosted packaged matrix and preserved local records are linked from the compatibility matrix. The current run closes the cross-platform lifecycle, request-correlated read-command completion, untrusted write-command refusal, and guarded Extension Host CommonJS-owner/global hook subset for its exact candidate. It does not complete the manual UI/provider clauses in the table or establish full user-scenario acceptance.

The current lifecycle harness reports its exact intercepted-property/global inventory. It replaces these properties on the CommonJS builtin export-owner objects returned by require: node:http.get/request, node:https.get/request, node:http2.connect, node:net.connect/createConnection, node:tls.connect, node:dns.lookup/resolve/resolve4/resolve6, node:dgram.createSocket, and the available globalThis.fetch and globalThis.WebSocket globals. It retains those hooks until Extension Host exit. This is not operating-system isolation and does not observe ESM named bindings, cached references, prototypes, raw bindings, dns.promises, child processes, editor-owned traffic, or Webview traffic. The persisted attempt list ends when the report is created; the hooks remain installed to deny later tail calls until process exit. The post-uninstall phase installs no observer and records network attempts and guarded quiescence as not observed; that phase proves extension API absence only. The current retained run attributes the stricter schema and exhaustive four-command untrusted refusal probe to the exact current candidate.

Scenario evidence map

ID Component-automated assertions Packaged-editor proof still required Overall
AC-001 Injectable command handlers initialize the Minimal preset and create one concept through guarded create-only application with no preview or confirmation, select the root, request both generated URIs be opened, and produce a bundle with no conformance error in an in-memory workspace. The current hosted matrix additionally proves clean packaged activation, the six-command catalog, and request-correlated Validate Bundle completion for the exact candidate. Actual QuickPick/input UI, physical or remote no-overwrite workspace creates, active-editor state, and the under-two-minute first-use target. Partial — component + current packaged lifecycle
AC-002 A custom experiment-result type and nested producer fields survive parse → index regeneration → reparse unchanged; unknown values cause no finding. A real supported command/write flow against workspace storage, including byte-level verification after save and reload. Partial — component
AC-003 Invalid YAML and a broken link produce category/severity/URI/range-addressable findings; a repaired revision clears both findings. The development Extension Host additionally publishes the broken-link Problems diagnostic at the exact registered okfmem: provider URI. The current hosted matrix proves request-correlated Validate Bundle diagnostics/runtime publication for the exact packaged candidate. Problems-panel navigation, save-event debounce, watcher convergence, packaged non-file: execution, and external provider coverage. Partial — component + development provider boundary + current packaged lifecycle
AC-004 The injectable index command previews and applies one managed-region update in memory, preserves bytes outside the region, and returns unchanged without a second preview/write. Diff preview rendering, cancellation/apply behavior through actual editor UI, and physical or remote workspace writes. Partial — component
AC-005 The graph model exposes directed backlinks, broken-link counts, and orphan state; Webview state supports NFKC search, type/tag filters, selection, and focus without mutating source input. The development Extension Host additionally waits for the graph render acknowledgement for the same provider-backed revision and observes no provider write. The current hosted matrix proves request-correlated Open 3D Graph data application and no five-file workspace change for the exact packaged candidate. Actual 3D/Webview interaction, keyboard-only traversal, details UI, source opening, and packaged external-provider execution. Partial — component + development provider boundary + current packaged lifecycle
AC-006 Successive create, edit, rename, and delete graph revisions converge in presentation state; renamed/deleted selection clears; stale delivery is ignored. Workspace file watchers, the 250 ms debounce, extension-to-Webview delivery, rendered details convergence, and extension-host continuity. Partial — component
AC-007 The injectable agent command previews, approves, and applies both outputs in memory, preserves unrelated AGENTS.md text, and returns unchanged on its second run. A root-level bundle reload proves that the generated root AGENTS.md and .agents/ Skill stay outside the concept and conformance inventory. The packaged lifecycle also preserves pre-existing AGENTS.md and Skill sentinels through upgrade and uninstall, but does not execute the authoring command. Actual preview/confirmation UI, physical or remote workspace application, collision handling, and a differing-Skill replacement decision in a packaged editor. Partial — component + lifecycle preservation
AC-008 Representative template, parse, validation, index, graph-state, and agent-plan components complete while the JavaScript fetch boundary is disabled. The predecessor headed VS Code record observed zero remote HTTP(S)/WS and other-scheme requests for its recorded identities, which do not match the final candidate. In all seven current hosted lanes, activation and request-correlated Validate/Open completion made zero calls through the listed CommonJS builtin export-owner/global hooks; the hooks remained installed until Extension Host exit, and all four write commands were refused in the untrusted-workspace probe. Capture the final-candidate headed Webview and execute every trusted write-command flow under the hooks. ESM named bindings, cached references, raw/prototype bindings, dns.promises, child processes, and editor-owned traffic remain outside the Extension Host hook assertion. Partial — component + current packaged CommonJS-owner/global hook window; final-candidate headed observation deferred

Remaining release evidence

On 2026-07-27, the maintainer accepted the bounded remaining interactive UI, trusted-write observation, and external-provider gaps for the initial release and assigned the following checks to post-publication verification. This acceptance does not convert any unobserved clause into a pass.

Packaged acceptance should record, at minimum:

  1. VSIX digest and the installed identifier straydog.okf-workbench.
  2. Editor name/version, operating system, workspace scheme, and test fixture revision.
  3. Pass/fail evidence for every user-observable clause listed above.
  4. For AC-008, the exact intercepted entry points, observer lifetime and limitations, and which separately observed process-level traffic was captured.
  5. Any deviation, failure, or manual judgment; an absence of evidence must remain not evidenced, not inferred as a pass.