Skip to content

chore(main): release 7.181.2 - #2778

Merged
zaxbysauce merged 1 commit into
mainfrom
release-please--branches--main--components--opencode-swarm
Sep 14, 2026
Merged

zaxbysauce merged 1 commit into
mainfrom
release-please--branches--main--components--opencode-swarm

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

PR-review consolidated micro prompt ordering

What changed

PR-review base and micro lanes with explicit owned_workflow_lanes now apply the controller-owned explorer output contract before the PR workflow contract. Operator-authored [CANDIDATE] markers remain rejected with the existing diagnostic.

Why

The PR workflow contract names the owned obligations using controller-generated [CANDIDATE] and [CLEAN] markers. Applying the explorer validator afterward incorrectly classified those controller markers as operator prompt content and blocked valid consolidated micro dispatches.

Migration steps

None.

Breaking changes

None.

Known caveats

Ordinary workflow_lane-only lanes retain the existing contract-first ordering.


Stop test_runner's dead-end scope advice and score TESTED SKIPPED as retryable, not failed

Issue: #2756

What changed

  • test_runner remediation text (src/tools/test-runner.ts): the guard that rejects scope:"convention"/"graph"/"impact" without files/targets no longer recommends scope:"all" — the exact scope its sibling guard blocks for agent use (env-gated SWARM_ALLOW_FULL_SUITE) and the test_engineer prompt prohibits. The message field now directs the caller to pass a non-empty files array (or targets for framework-native names) with a concrete example, and both response fields (message and error) enumerate every scope the guard covers. Both guards' rejection semantics are unchanged.
  • Foreground Stage B verdict settlement (src/hooks/delegation-gate.ts): a [TESTED] | task-N | SKIPPED | ... structured verdict (tests were NOT run — prohibited scope, framework detection none, missing test file) no longer emits stage_b_failed. The task stays in its Stage B eligible state (reviewer_run/pre_check_passed), the reviewer's APPROVED gate proof is preserved, and the stageBCompletion entry is untouched, so the architect can re-dispatch the test gate instead of forcing a coder rework of correct code. A warn log records the skip for the orchestrator. Genuine FAIL verdicts and REVIEWED rejections keep the existing stage_b_failedrework_required semantics.
  • Background Stage B ingestion (src/background/stage-b-gates.ts): structuredStageBVerdict now returns 'skip' for TESTED SKIPPED; ingestBackgroundStageBCompletion consumes the record with the new skipped: true result flag and fires no transition and no proof clearing. StageBIngestionResult gains the optional skipped field.
  • Background advisory (src/background/completion-observer.ts): a skipped ingestion publishes skipped (tests not run) — re-dispatch the test gate; reviewer proof preserved; task remains Stage B eligible instead of the generic ingestion failed, so operators can distinguish a retryable skip from a hard failure.

Why

An agent that followed the tool's own advice (scope:"all") could not succeed — the recommended scope is blocked — and models without a natural files: habit (observed: Kimi K2.7 Code, 10–11 identical calls) looped until the repetition breaker fired. The prompt's SKIP CONDITION 1 then legitimately produced a [TESTED] ... SKIPPED verdict, which the gate scored as a code failure: rework_required plus deletion of the reviewer's approval for code that was correct and passing (python -m pytest green). Together with #2755 (no autonomous exit from rework_required, fixed by PR #2760's audited recovery tool), a single tool-argument mistake stranded tasks that only a human could free. This fix removes the wrongful entry: tests-not-run is retryable state, not failure.

Tests

  • tests/unit/tools/test-runner-scope-advice.test.ts — guard-2 response fields direct to files/targets, enumerate all three guarded scopes, and never recommend the blocked scope; guard-1 block characterized as unchanged.
  • tests/unit/hooks/delegation-gate-stage-b-skipped.test.ts — SKIPPED leaves state reviewer_run with durable reviewer proof and the reviewer completion entry intact; FAIL and REVIEWED REJECTED still go rework_required with proof cleared.
  • tests/unit/background/stage-b-gates-skipped-verdict.test.ts — SKIPPED ingest returns skipped: true, no state mutation, proof preserved; FAIL and unparseable output keep the fail-closed rejection.

Restart preserves tightened runtime policy and reconciles interrupted work

What changed

  • Session-scoped ratchet-tighter QA gate overrides (/swarm qa-gates override) are now durable runtime policy: a new project-DB table
    (qa_gate_session_override, full durability class) is written
    durable-first by the command and restored by rehydrateState, so a host
    restart preserves the effective tightened gates instead of silently
    reverting to the spec-level profile. The override row is deleted in
    lockstep with the session (explicit end, 2-hour stale sweep,
    /swarm reset-session), and a session with no tightened gates keeps no
    row.
  • The get_qa_gate_profile tool now also reports the calling session's
    overrides and the effective gates (profile merged with those
    overrides), so an agent can inspect effective runtime policy after a
    restart through the registered surface.
  • An execution interrupted by a process boundary (serialized
    delegationActive: true) now reconciles to a bounded, owner-named
    outcome instead of expiring silently: a durable artifact
    (.swarm/session/restart-reconciliation.json, 50-entry FIFO deduped by
    session+task) plus a one-shot advisory on the restored session, both
    naming the owning session, agent, and task and classifying the outcome as
    interrupted/UNKNOWN — absence is never treated as success. Ephemeral
    authority still expires exactly as before; only the silence was a defect.
  • New operator documentation (docs/restart-reconciliation.md): the
    durable-vs-ephemeral field classification for the restart boundary, the
    operator-visible reconciliation states, the restart/inspect runbook, and
    the human-resolution rule for external effects.

Why

Issue #2668 (Workstream D slot D15): restart needed to preserve durable
workflow and QA policy while discarding ephemeral execution authority, and
the previously silent expiry of interrupted work left "was interrupted
mid-execution" indistinguishable from "was idle" — an operator could not
tell uncertain from clean, and a valid tightened policy was lost on every
restart.

Tests

  • tests/unit/db/qa-gate-session-override.test.ts — service contract:
    ratchet-only merge, fail-closed malformed rows, clear idempotency,
    empty-overrides invariant, absent-DB read-only behavior.
  • tests/unit/session/restart-policy-reconciliation.test.ts — boundary
    contract: override survives rehydrate (and a double restart), new sessions
    start clean, fail-open restore, owner-named reconciliation artifact +
    advisory, dedupe, bounded cap, both teardown paths delete the durable row.
  • tests/unit/tools/get-qa-gate-profile-effective.test.ts — effective-gates
    tool surface (executor + registered schema fields).
  • tests/unit/execute-journey/j08-restart-policy.test.ts — registered-host
    journey: boot A tightens through the real command and dies mid-execution;
    boot B (fresh server() over the same durable artifacts) preserves the
    tightened effective gates via get_qa_gate_profile and records the
    owner-named reconciliation.

🤖 I have created a release beep boop

7.181.2 (2026-09-14)

Bug Fixes

  • pr-review: preserve controller-owned micro lane markers (af54a41)
  • session: mirror the mutable-resetValue clone into the legacy global rehydrate path (9ad3001)
  • session: preserve durable QA policy and owner-named reconciliation across restart (744a241)
  • session: prune orphaned override rows and repair advisory dedupe (#2668 review) (5330da1)
  • workflow: retryable TESTED SKIPPED verdicts and non-dead-end test_runner scope advice (#2756) (9462f32)

This PR was generated with Release Please. See documentation.

@github-actions

Copy link
Copy Markdown
Contributor Author

Drift check report

Found 2 drift finding(s): 0 error, 0 warning, 2 notice.

required-check-contract (2)

  • 🔵 notice scripts/required-check-contract.json: [RULESET_DIVERGENCE] intended-required context "drift" is not yet required by the captured ruleset
  • 🔵 notice scripts/required-check-contract.json: [RULESET_DIVERGENCE] intended-required context "drift" is not present for every expected event in captured external workflow evidence

@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--opencode-swarm branch from e64eda0 to 20fe253 Compare September 14, 2026 20:53
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--opencode-swarm branch from 20fe253 to 0ce3531 Compare September 14, 2026 21:18
@zaxbysauce
zaxbysauce added this pull request to the merge queue Sep 14, 2026
Merged via the queue into main with commit b865ba2 Sep 14, 2026
34 checks passed
@github-actions

Copy link
Copy Markdown
Contributor Author

🤖 Created releases:

🌻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant