Skip to content

v7.200.3

Choose a tag to compare

@github-actions github-actions released this 26 Oct 12:37
5cc4257

Dual-host CI lane, v2 adapter hardening, and the deferred #2910 tail

What

  • Dual-host CI lane landed (issue #2910, ADR-0003's deferred follow-up): the smoke job gains a merge-group-gated v2-host-smoke step running three legs — scripts/repro-2910-v2.mjs (Node dual-shape + setup() timing, min-of-2 within the 400 ms repro-704-class deadline), scripts/repro-2910-v2-host.mjs (a real pinned @opencode/cli@2.0.29 host loaded auth-free: plugin-load line, banner, agent.updated/command.updated registration events, .swarm/ materialization — no credentials required in CI), and the v2 guidance-parity fixture test. Weekly host-contract-check gains a failure-independent v2 digest leg (scripts/check-host-contract-v2.ts) over a dual corpus — 12 @opencode/plugin d.ts files + the @opencode/schema/@opencode/client permission-bearing surfaces + three sst/opencode host sources (model-request.ts, context.ts, v1/config/migrate.ts) — pinned against an emitted 2.0.26 fixture; advisory on PRs, blocking + tracking-issue routing weekly. drift-check gains a v2 vendored-pin freshness notice (the src/host/v2/types.ts pin vs npm-latest, fail-open). First live run of the digest honestly reports STRUCTURAL_DRIFT at npm-latest 2.1.4 (Context.credential, PermissionDomain, Agent.Info shape changes) — the detector working as designed.
  • v2 adapter hardening (folded issues, user-authorized single PR):
    • #3351: the tool-permission bridge is assert-first — ask() routes through the documented permission.assert (resolve=allow, reject=deny; input {sessionID, agent, action, resources} with the host-exact action normalization); on reply-only hosts (2.0.26 pin) any reply resolution now DENIES (reply is the answer-side RPC; recorded decision on the issue). No more fail-open on resolved denials.
    • #3352: sibling v2 registrations are atomic (a first execute.before/agent-transform/compaction rejection no longer skips its sibling) and the agent-transform surface is owner-token keyed — one setup instance's cleanup can no longer clear another live instance's state.
    • #3318: /swarm commands register independently of agents; a leading /swarm/swarm token is stripped from the host's argument text; every failure arm (no prompt surface, rejected prompt, thrown dispatch, safeHook-swallowed handler errors via a new bounded read-once registry) reaches the operator through the deferred-warning buffer + stderr instead of debug-only logs; invocation.delivery is honored on submit; a debug trace of the raw invocation makes the live contract observable. The live cause of the reported v2 failure is not claimed fixed: the hardening removes the repo-side silent failure modes and makes the live contract observable; the live triage is auth-blocked and recorded on #3318.
    • #3350: a failed v2 startup preflight (config-read timeout OR degraded load) is operator-visible (exactly one warning naming the live budget); the registration-stage budget is test-seamable (_internals) and the unreachable pending.length > 0 guard is removed (recorded decision: the timeout catch always warns); the constant-name collision is gone.
    • #2910 permission port: v2 agents now carry the v1 permission block mapped with the host's own migration semantics (write/patch→edit, task→subagent, bash→shell, verbatim otherwise; string effects → resource:'*'; nested globs expand; rules appended after the host defaults under last-match-wins) — the deny-by-default tool surface and the memory/external-skills opt-in maps are enforced at the agent level on v2.
    • #2910 reload wiring: buildV2RegistrationTables (fresh config read, init-parity inputs, no side-effecting re-init) + deferredV2RefreshRegistrations re-derive the agent/command tables and call the domain reload()s when they change — triggered by successful config doctor --fix writes through policy-permitted in-process dispatches (the v1 tool-policy routes --fix to the human CLI path, where a host restart applies the new tables — disclosed limitation) through both the shortcut and the generic swarm route.
  • Docs: host-support matrix in docs/installation.md; a dual-host architecture section in docs/architecture.md; README/modes lane-status corrections; the ADR-0003 append-only delivery note; hook-inventory rows 4/5/8/11 and the Epic per-consumer row refreshed to the shipped state.

Why

ADR-0003 deferred the dual-host CI lane to "the #2910 follow-up PR … before the next minor release cut so the v2 lane is CI-proven, not smoke-proven only." Until now, a v2-only break (the #3004 decode-error class) was invisible until a manual spike run, the v2 parity transport had no committed oracle, the v2 permission/opt-in surface was unenforced at the agent level, and four audited defect classes in the adapter (fail-open permission bridge, dropped sibling registrations, silent command-path failures, invisible preflight timeouts) shipped with only debug-gated logging. The folded issues (#3318/#3350/#3351/#3352) were all verified-open on main and are the same adapter surface this lane proves.

7.200.3 (2026-10-26)

Bug Fixes

  • host/v2: dual-host CI lane, v2 adapter hardening, and the deferred #2910 tail (d539a93)