Skip to content

feat: land the deferred 1.15 update dry-run plan preview (update-dry-run-plan-preview) - #316

Merged
Gaubee merged 3 commits into
mainfrom
feat/update-dry-run-preview
Oct 29, 2026
Merged

Gaubee merged 3 commits into
mainfrom
feat/update-dry-run-preview

Conversation

@Gaubee

@Gaubee Gaubee commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Lands B1 of the 15.0.0 line — the update --dry-run --json preview projection that
target-openspec-cli-15-line (PR #312, merged and released as 15.0.0) explicitly deferred as "a new
cross-layer projection (out of scope)". Change: openspec/changes/update-dry-run-plan-preview/.

Context: PR #315 was a duplicate full v15 line developed against a stale local main ref; after
discovering the merged/released 15.0.0 line, everything it already covers (window, registry,
fixtures, docs, standalone scope) was dropped and only the genuinely missing pieces were
re-based onto origin/main. PR #315 will be closed as superseded.

What this adds

  • updateDryRun capability in deriveOpenSpecCliCapabilities (target-series gated).
  • Typed UpdatePlan contract + gated updatePlan executor method: changes/notes/failures
    always present arrays; closed add|update|delete action and two-code note enums; no rename
    action
    (moves plan as delete+add pairs); per-tool failures are plan data beside exit 0; the
    failed-command envelope (empty plan keys + status[] code: 'update_error', exit 1) decodes
    through the same schema while exit/success carry the failure truth.
  • agentIntegrations.updatePlanPreview read transport (through runPlanningRootRead +
    the gated executor; unavailable pre-argv on non-admitted sessions). The real
    updateStream/repairStream mutations are unchanged and never gated by the preview.
  • Config Agents Update/Repair dialog preview: action chips, wrapped mono paths, notes by code,
    amber would-fail rows, failed-command alert; muted unavailability that never disables the real
    run; generation guard on the preview fetch.
  • Real-binary positive fixture (official-cli-v15-update-plan-fixtures.test.ts): init →
    corrupt/delete managed files → plan shows update/add rows sorted, disk unwritten → settle →
    empty re-plan. UpdatePlan first-party source anchors in upstream-contract-regression.test.ts.
  • Repairs in passing: the stale v9-era check-openspec-reference.mjs fake green gate → asserts
    the v1.15 line; the stale tsconfig.workflow-contract-tests.json lane entries (v14 names for
    files renamed in the 15.0.0 line) → actual v15 names, and the new fixture joins the lane.
  • Changeset: minor ×4 (feature on top of 15.0.0). AGENTS.md gains the dated decision line landing B1.

Verification (this worktree)

Gate Result
pnpm format:check ✅
typecheck (core, server, web, cli) ✅
core full suite ✅ 864 passed, 13 skipped
compat / workflow-contract lanes ✅ 10 + 78 (incl. 6 UpdatePlan contract tests, real-binary fixture in lane)
preview router lane ✅ 4/4 (argv/force, exit-0-with-failures, envelope, pre-argv refusal)
dialog browser lane ✅ 4/4; config-agents/cli-runner unit lanes ✅ 15/15
node scripts/check-openspec-reference.mjs ✅ OK: v1.15.0

CI will run via workflow_dispatch (the pull_request event currently does not fire on this repo —
observed on PR #315 and documented there).

…view (update-dry-run-plan-preview)

- updateDryRun capability + typed UpdatePlan contract (three keys always arrays, closed
  action/note enums, no rename action, per-tool failures as plan data beside exit 0,
  update_error envelope beside exit 1) with the gated updatePlan executor method
- agentIntegrations.updatePlanPreview read transport: unavailable pre-argv on
  non-admitted sessions; executed evidence keeps exit/diagnostics/stderr/contractError
  separate; the real update/repair mutations are unchanged and never gated
- Config Agents Update/Repair dialog renders the plan as verbatim evidence (action
  chips, wrapped paths, notes by code, amber would-fail rows, failed-command alert)
  with a generation guard on the preview fetch
- real-binary positive fixture (corrupt/delete → update/add rows → disk unwritten →
  settle → empty re-plan) and UpdatePlan first-party source anchors
- repair the stale v9-era check-openspec-reference gate to the v1.15 assertion and
  fix the stale tsconfig.workflow-contract-tests lane names to the actual v15 files
@Gaubee

Gaubee commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

CI round 1 triage: Fast Gate failed at src/opsx-kernel.test.ts > refreshes status for question-mark glob artifacts (waitFor 75s timeout) — a file this PR does not touch (git diff origin/main...HEAD contains no opsx-kernel paths). Local rerun of the full file passes 12/12. Same shape as the recorded tool-subscription-router flake (d445831, passed on zero-change rerun). Zero-change rerun dispatched (run 40880020086).

@Gaubee
Gaubee merged commit 53d4ae2 into main Oct 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant