Skip to content

fix(missions): apply Missions profile preferences to agent preparations - #1305

Merged
pascalandr merged 21 commits into
devfrom
backlog/9-mission-profiles
Nov 9, 2026
Merged

pascalandr merged 21 commits into
devfrom
backlog/9-mission-profiles

Conversation

@pascalandr

@pascalandr pascalandr commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Problem

When an agent prepares a mission (mission.prepare, or mission.inspect({ start })) without passing profiles, the mission runs on OpenCode's default agents and models instead of the user's Missions preferences (missionProfileDefaults). Only the Missions editor applied them, and the tool reply did not say which profiles were recorded.

Change

Profile selection

  • Agent preparations fill each missing coordinator slot, role slot and taskMode with the same helpers the editor uses (missionDefaultsFor, freezeCompareProfiles, from packages/server/src/missions/profile-defaults.ts, re-exported by the UI). An explicit slot, including {} or an agent-only selection, wins as a whole. When every slot and taskMode is explicit, no preference read happens. The Compare judge without its own model inherits the coordinator model, as in the editor.
  • Replies and inspections expose selection: the recorded coordinator, every role of the template and taskMode, each with its origin (explicit, preference, opencode-default).

Reading preferences

  • The owning CodeNomad backend reads its raw UI configuration over the authenticated bridge, through a strict ownership reader. Preferences are resolved outside the project mission lock; the recorded event or document is re-read inside the lock and wins.
  • Invalid or unreadable preferences, failing ownership reads, ambiguous owners, timeouts and HTTP/auth failures refuse before any effect. A backend without this capability gets a refusal asking to update CodeNomad.
  • When it is proven that no CodeNomad backend owns the session (no registration, dead local PID, refused connection, WSL interop unable to launch, or a clean "not owner" from every live backend), inspect({ start }) proceeds with explicit inputs and OpenCode defaults, and selection.preferences is "unavailable". mission.prepare still requires the owning backend.

Retries and refusals

  • The original request and its resolved provenance are persisted (RPC, journal, unified documents). A retry returns the first recorded choices, and a replay revalidates the coordinator location and the document digest. Historical missions and editor payloads are never re-resolved.
  • Pre-dispatch intents are bounded (128 per project). Definite refusals release only the newly recorded intent; uncertain ones expire after 24 h.
  • Outside an active mission, mission.prepare refuses with a pointer to the Missions editor.

Supporting changes

  • workspaces/: ownership checks take an options object ({ signal, purpose, strict }). The strict reader distinguishes a clean "not owned" from a failed read and gets its own restart budget and final fresh read. Ordinary inventory and ownership behave as on dev.
  • opencode/automation-plugin.ts: bridge registration liveness (filename PID, refused connection) and async, coalesced WSL discovery, documented in dev-docs/BROWSER_AUTOMATION.md.
  • Docs: tool descriptions, dev-docs/MISSIONS.md (profile selection and creation recovery), the Missions skill, and the Missions help page in all ten locales.

Validation

  • UI contract packages/ui/tests/contracts/mission-defaults.test.ts compares the editor's effective payload with the server resolution for all five templates (added to the PR build).
  • Server: full glob 4,170 passed, 34 skipped, 0 failed (Ubuntu, CI locale). Missions 1,063 passed; workspaces 379 passed; Missions UI 285 passed.
  • A cache-invalidation harness run against dev and this branch gives identical traces for ordinary worktree inventory and ownership.
  • Server and UI typechecks, the pruning/automation/Missions/Memory native builds, test:help (28 pages × 10 locales) and git diff --check pass.
  • Full tests-runtime-contracts native sequence: 20/20 on OpenCode 2.2.3, 23/23 on 2.2.5 and 2.2.6. The scripted native fixture checks that a stored preference reaches the recorded profiles and taskMode on both creation paths.
  • Seven rounds of independent review on correctness and standards; their findings are fixed in this branch.

Agent-created preparations now fill missing coordinator, role and task-mode choices from the user's Missions preferences. Explicit whole slots remain authoritative, including empty and agent-only selections, and both preparation tools return the recorded choices and their origins.

Share the editor's pure defaults implementation with the server and read the owning backend's raw UI configuration over the authenticated bridge. Invalid or unreadable preferences fail with fixed actionable errors; native catalog and existing-coordinator checks remain authoritative. The editor's already-frozen create payloads are unchanged.

Persist bounded pre-dispatch intentions and optional creation provenance through native RPC, journal and unified-document codecs. Retries preserve original inputs and choices across lost replies, restarts, preference changes and later editor updates. Uncertain preparation evidence survives subsequent prevalidation refusals, while an omitted Compare judge freezes the known coordinator model without completing explicit judge slots. Ordinary sessions are directed to the Missions editor.

Validated shared defaults and UI contracts, authenticated preference failures, both tool responses, uncertain retries, Compare and historical mission compatibility. The extended Missions suite passed 1087 tests with two Windows skips at concurrency four; final targeted regressions passed 87 tests. Server/UI typechecks, native-plugin build invariants, the Missions bundle build and whitespace checks passed.
Explain how agent-prepared missions inherit saved Missions preferences for omitted profile slots and task-session mode, while explicit slots remain authoritative as a whole. Cover saved selection origins, preference errors, frozen retries and the editor guidance outside an active mission.

Align the developer reference and mission skill with the shared server/editor resolver and existing tool descriptions. Update public Missions help in all ten locales using the application labels, including the comparison judge's coordinator-model default.

Validation: npm run test:help passed all 31 checks across 28 pages and 10 locales; git diff --check passed.
Apply the shared Compare profile freeze after resolving coordinator and role slots for agent preparations. A judge selected as an empty or agent-only profile now inherits the coordinator's known model just like the editor payload, while a judge's own model remains authoritative.

Keep the chosen judge slot's explicit or preference origin, retain coordinator-origin inheritance for an omitted judge, and preserve frozen creation receipts across retries. The editor and its existing profile-freezing implementation are unchanged.

Extend the CI contract to compare effective editor payloads after freezing, and cover both agent creation paths, slot origins and restart/retry stability. Update Missions documentation, the skill, tool descriptions and all ten help locales, including two translated playbook clarifications.

Validation: independent QA edge script 5/5; targeted suites 119 passes and two Windows skips; profile UI suites 11/11; server and UI typechecks, Missions bundle build, native-plugin invariants 2/2 and whitespace checks passed. Offline help validation passed 28 pages across ten locales. The recurrence-reader path-sensitive assertion fails only when cwd contains profiles and passes all 24 tests from a neutral cwd. The extended Missions suite and isolated local-source Git test hit the existing local-source deadline; the full help suite exceeded 120 seconds after 17 passing tests. Neither unrelated test was modified.
Definite preparation refusals must not consume all 128 retained-choice slots or turn an identical retry into an uncertain result. Release choices on certified no-effect outcomes, retain genuinely unknown attempts, and remove standalone intentions from inspect-start, whose journal and unified document already retain creation choices.

Bound preparation-choice retention to 24 hours without renewing it on retries or expiring native-effect holds. Serialize dispatch for the same request, preserve prior uncertainty across local and backend preflight failures, and keep cleanup failures from replacing an authoritative success or refusal. Capacity errors and the current Missions documentation explain recovery and the distinction between retained choices and native authorization.

Validate explicit profile roles before preference resolution and reserve the invalid-preferences error for the typed preference-document failure. Share one origin constant, selection type and task-mode resolver; distinguish creation metadata by name. Remove the circular editor assertion, trim repeated tool prose, align the nine translated help paragraphs with English, and explain coordinator-preference overrides without relaxing profile checks.

Added regression coverage for 128 refusals, no-effect certificates, expiry, optional key removal, cleanup failures, uncertain preflight retries and inspect-start failures. The final focused suites passed 115 tests; both fresh independent reviews ended with zero findings. Server/UI typechecks, Missions build, native-plugin invariants 2/2, help tests 31/31 and whitespace checks passed. The full Missions suite ran 1044 tests with 1043 passes and the unchanged local-source Git deadline failure; no unrelated test or shared runtime was modified.
Plugin-only sessions must still prepare a mission through the ordinary model tool loop when no CodeNomad backend owns them. Resolve explicit inputs and OpenCode defaults only after proven owner absence, and record selection.preferences unavailable in the immutable creation provenance so retries retain the warning after a backend appears.

Use strict preference discovery across local and WSL Windows registries. Ambiguous owners, unreadable registrations, failed probes and indeterminate directory authorization refuse instead of silently falling back. Typed missing-session replies and empty workspace inventories provide negative ownership evidence. Reuse one input codec at the producer and backend boundary, preserve explicit inputs and native coordinator/catalog checks, and keep prepare hand-offs behind the existing owning-backend creation fences.

Extend schema, wire and projection handling for the optional warning, cover standalone tool creation and saved retries, and update tool descriptions, Missions documentation, the skill and all ten help locales. The native contract script and OpenCode sources are unchanged.

Reproduced the CI assertion failure before the fix on isolated OpenCode 2.2.3 and 2.2.5. The unchanged contract now exits zero with all three gates on both runtimes; read-only fixture checks verify one mission and matching warning values in tool output, journal event and unified document. Focused suites passed 117 tests; both typechecks, Missions build, native-plugin invariants 2/2, help tests 31/31 and whitespace checks passed. The full Missions run passed 1043 of 1044 tests with the Git local-source deadline failure. Isolated origin/dev 30527e5 and branch tests both passed 10/10 with identical test/implementation hashes, so the baseline timeout was not reproduced or labelled confirmed pre-existing.
…reads

An unrelated open CodeNomad workspace must not block standalone mission creation. Strict preference probes now distinguish clean non-ownership from physical, Git and WSL read failures while ordinary ownership consumers retain their existing behavior. Native inventory fallback verifies checkout absence when Git discovery fails, and strict probes reject degraded directory-only inventories, including cached ones, without changing normal no-Git conversations.

When the coordinator, every template role and taskMode are explicit, resolve locally without a preference callback or backend probe. Preserve native catalog and coordinator checks, mark every origin explicit, and leave unobserved preference availability absent. Saved creation choices and standalone unavailable warnings remain immutable across retries.

Treat stale endpoints as absent only on a proven refused connection. Windows interop requires curl's connection-refused diagnostic as well as exit 7, since the same exit also covers denied sockets; direct loopback probes bypass proxies and returned errors exclude verbose headers. Keep timeouts, HTTP/auth failures and unreadable live registrations as refusals. Local dead publishing PIDs provide safe absence evidence before parsing, and publisher cleanup preserves unreadable live registrations.

Require intent timestamps and share one intent parser. Narrow the UI facade to editor helpers and types, retain behavioral editor/server parity checks, share template validation, recovery messages and profile descriptions, and replace line-number comments with effect/function references. Update Missions documentation, the skill and the ten help locales for the current selection and fallback rules.

Two independent final reviews returned zero residual findings after fixing their additional unsafe-Git inventory and curl classification cases. Validation passed: 158 focused checks; final ownership/no-Git checks 47/47; bridge/WSL checks 17/17; sequential native Git regressions 4/4; full Missions suite 1047/1047 with no local-source deadline failure; both workspace typechecks; Missions and automation builds; native-plugin invariants 2/2; help 31/31 across 28 pages and ten locales; whitespace checks. The earlier broader Git launch exceeded its 60-second runner limit, then its sequential rerun passed.

The unchanged native contract passed all three gates against isolated OpenCode 2.2.3 and 2.2.5. Read-only fixture verification confirmed exactly one mission, matching persisted unavailable-preferences metadata and the deployed bundle hash. No real missions, shared daemon, OpenCode source, merge or PR-description changes.
Ordinary worktree inventory, history and event routing must retain root-only fallback when Git reports no repository, including configured or ambiguous discovery. Preserve that fallback with an unverified-discovery marker and reject it only at strict ownership expansion, including cached inventories. Validate registered roots before omitting a missing projected folder in another checkout; missing registered roots and the opened root folder remain hard failures.

Wait for both admitted Git identity reads before rejecting so Windows cleanup cannot race a remaining child, and give the targeted fixture bounded removal retries. Replace positional ownership flags with an options object and migrate callers while preserving their exact signals and event/request purposes. Update the browser admission fixture to forward the real AbortSignal through the SDK.

Bound invalidation recovery to two retries and one final fresh read. Shared directory-cache promises represent one scan rather than another caller's recursive retry chain, so concurrent callers retain their own budgets. Bound the native inventory scan chain too, preserving last-good display snapshots, obsolete-response fencing and later recovery.

Parse filename PID liveness once. Ignore malformed foreign Windows advertisements from WSL because they supply no usable current bridge contract, without probing foreign PIDs or deleting their files. Strict file-I/O failures and reachable endpoint failures remain refusals. Infer strict ownership from the preference probe purpose and separate preference resolution from generic mission dispatch while retaining definitive pre-dispatch preparation refusals.

Derive retained-choice copy, role bounds, availability values and task-mode validation from shared constants and schemas. Extract the editor's effective profile composition into a pure helper used by the real editor and contract tests, keeping editable Compare judge inheritance separate from frozen payloads. Keep agent/user guidance actionable and document discovery and liveness details in developer documentation, updating the skill and all ten help locales.

Two fresh independent reviewers returned zero residual findings after fixing their concurrent pending-adoption and browser-signal cases. Windows stability qualification passed ten runs and 70 critical tests with no EBUSY. Focused profile/discovery checks passed 69 tests; route checks 20; final cache checks 19; the real Chromium admission fixture passed all five scenarios. The complete workspace suite with targeted history/worktree routes passed 377 tests with one conditional WSL test skipped and no failures. The complete Missions suite passed 1054/1054 in a serial rerun; its initial parallel run hit the unchanged local-source Git deadline at line 73. No deadline, assertion or native qualification-script changes.

Both workspace typechecks, Missions and automation builds, native-plugin build invariants 2/2, help 31/31 across 28 pages and ten locales, and whitespace checks passed. The unchanged native contract passed all three gates on isolated OpenCode 2.2.3 and 2.2.5; read-only fixture checks confirmed one mission and matching persisted unavailable-preferences metadata for the final bundle. No real missions, shared-daemon or OpenCode changes, merge, force-push or PR-description edits.
…creation

Supply the native Missions fixture's owning backend with a shared raw UI settings reader, and inject it into both the workspace manager and automation route. Assert that agent creation really reads it and records observed OpenCode defaults. Keep production's absent/unreadable-reader refusal instead of bypassing preference inheritance.

Restrict invalidation budgets to strict ownership demands. Ordinary directory and native inventory readers keep origin/dev's trailing reload behavior, including convergence after more than four invalidated scans. Strict and ordinary demands share validated snapshots and native single-scan work without sharing an unbounded retry chain. Make the final fresh read explicit. Qualify checkout absence only in strict ownership and retain that requirement privately in the directory cache; remove the public discovery marker and eager shared-inventory filesystem probe.

Treat ENOENT/ENOEXEC launching Windows discovery interop as absence of reachable Windows backends for that WSL process; timeouts and uncertain failures still refuse. Skip advertisements removed between enumeration and open, bound local PIDs to the signed process API range, and retain safe local pruning. A live backend without the preference/negative-ownership contract remains a refusal with an explicit CodeNomad-update message, protecting any saved preferences.

Share recovery-code error construction and preserve the exact allowlisted defaults-request guidance across the bridge while making other invalid-execution guidance generic. Reuse the title bound and keep future-dated intentions fresh after clock rollback. Move effective profile composition into the shared server module used by the editor and native resolver, preserving editable Compare inheritance and frozen payloads. Reduce the ten help locales to user-facing defaults behavior, keep Hebrew playbook terminology consistent, and align developer docs, the skill and the inspect creation description.

Validation passed: 92 focused checks, a final 25/25 creation-fence rerun, both Node 24.20.0 workspace typechecks, all three native bundle builds, native-plugin invariants, help 31/31 and whitespace checks. Full Missions passed 1056/1056; full workspaces with targeted routes at concurrency four passed 361 with one conditional WSL skip. The same concurrency-four baseline workspace run on origin/dev c29b885 passed 345 with one skip; the unchanged family-authority fence test did not reproduce its reported flake on either tree, so no confirmed pre-existing failure is claimed.

Ran the entire tests-runtime-contracts sequence in the exact workflow order and with its exact flags on isolated OpenCode 2.2.3 and 2.2.5 using Node 24.20.0/npm 11.19.0: minimum 19/19, latest 22/22, including the full Missions integration fixture and latest ABCD recurring journeys. The contract script and its assertions are unchanged. No OpenCode source, shared daemon, real mission, merge, force-push or PR-description changes; the detached comparison checkout was removed.
Resolve inspect-start preferences outside the project mutation lane, then recheck authoritative creation events and frozen documents under admission. Preserve the first recorded selection across concurrent reads or failures, and verify document replay location and digest.

Require positive creation-defaults capability before prepared provenance dispatch, enforce strict command ownership, and share asynchronous Windows discovery with a short failed-result cache. Retain uncertain preparation evidence while isolating damaged intent entries from unrelated capacity.

Use the shared selection schema and direct editor/server profile helpers, restore ordinary worktree refresh behavior, and consolidate canonical guidance. Regression coverage includes concurrency, legacy backend refusal, ownership changes, discovery coalescing, recovery isolation and nonempty native preferences. Pre-merge focused suites and both typechecks pass; full merged runtime qualification follows.
Merge origin/dev at 5939d4c into backlog/9-mission-profiles without rebasing. Preserve dev's cancellable permission recovery, existing-connection lookup and durable event/write draining while forwarding its AbortSignal through the branch's ownsLocation options-object API with event purpose. The reconnect regression now checks that cancellation signal is supplied.

Keep asynchronous, coalesced WSL bridge discovery and negative-result caching; its shared execFile adapter already hides both subprocesses, preserving the incoming console-window intent. Retain nested-folder inventory and creation guards, graceful HTTP shutdown, runtime lifecycle and workflow changes. Full validation and the isolated 2.2.3/2.2.5 runtime matrix run on this merged commit.
The merged nested-workspace inventory retains registered sibling checkouts whose mirrored project folder is unavailable. On POSIX an intermediate regular file reports ENOTDIR rather than ENOENT, so strict ownership must skip both proven unavailable projections after successfully validating the registered checkout root.

Retain hard failures for root and permission errors. Extend the physical-filesystem regression to cover a sibling intermediate file on warm and fresh strict reads, with root-removal rejection unchanged. Full merged validation follows this commit.
Native snapshot generation stamps each read with the current time. Normalize only that read timestamp when proving a coordinator-preference mismatch leaves the snapshot unchanged; continue comparing every durable field and the raw Mission KV rows, and require no provider turn.

The isolated 2.2.3 matrix exposed the timestamp-only assertion mismatch. Requalify the complete native sequence on both assigned runtimes after this fixture correction.
Expose creation selection once in tool inspections while keeping original request metadata in durable storage and authoritative backend snapshots for replay. Share replay-choice comparison and conflict copy, validate inspect-start profiles once, use fixed uncertain-preparation errors and explicitly map the two Compare refusal codes.

Preserve ordinary WSL discovery caching while allowing strict negative-cache retries, and use the effective environment for lookup identity and subprocesses. Force the final strict worktree read past warm directory caches, share its restart limit and use the workspace Git identity facade. Regression checks cover stale negative ownership, effective PATH, fixed refusal codes and selection-only tool replies.

Move profile recovery guidance into its own unindented section, keep shared bridge liveness rules in browser documentation, trim duplicated skill/help prose in all ten locales and restore creation/control safety wording. Archive privacy assertions now target private JSON fields instead of rejecting an ordinary word in checkout paths. Focused suites, both typechecks and help pass before the complete isolated native and full-suite validation.
…uidance

Keep strict refresh scans separate from validated in-flight reads so final ownership checks cannot publish a stale negative. Cover concurrent scan handoffs and bounded retries, use options objects for public ownership helpers, and retain the physical root-fallback tests instead of the redundant history stub.

Unify creation-conflict messages by code, classify coordinator moves as foreign sessions, match the native preference-mismatch guidance and distinguish current backend read failures from missing legacy capabilities. Explain plugin-only defaults accurately in all ten help locales using the exact control labels, and centralize shared discovery and retry guidance.
Merge origin/dev at b6bea60 while preserving strict Missions preference ownership and recovery. Combine asynchronous Windows bridge discovery with the incoming bounded cancellable memory path: cancellation remains scoped to its lookup, qualified paths are shared, and ordinary and strict Missions failure-cache behavior stays intact.

Retain memory bridge operations, signal propagation and response bounds alongside the preference protocol and registration liveness checks. Audit the HTTP memory admission and recurrence array prevalidation auto-merges; keep the runtime-contract workflow's new memory build and native check. Public ownership callers retain the options-object signature.
Return the actual tool executor cause through the test-only string envelope and rethrow it in the fixture client. This lets the native preference-mismatch assertion match its actionable guidance rather than accepting or inspecting an unrelated generic RPC transport error. Product RPC and error handling remain unchanged.
Merge origin/dev at d3bfc94, retaining the profile and ownership fixes. The incoming changes make Missions deadline and scroll fixtures deterministic and update get-tsconfig and Cargo dependencies. Runtime minimum and the native runtime-contract sequence remain unchanged; validate this merged checkout before publishing.
@pascalandr

Copy link
Copy Markdown
Contributor Author

Review record

Seven rounds of read-only agent reviews were performed during implementation on two axes: correctness/regression risk and standards/tests/documentation. Those reviews took place in the development session; they were not submitted as GitHub approvals.

Findings addressed include whole-slot profile precedence and Compare judge parity, leaked creation intents and actionable validation errors, standalone/older-backend handling, strict ownership isolation from ordinary worktree reads, concurrent cache refreshes, preference reads outside the project mutation lock, replay/document checks, and documentation consistency.

At the last reviewed revision, the correctness reviewer reported no P0–P2 findings. Subsequent fixes addressed the remaining documentation and narrow race/error-handling findings. This records agent-assisted review, not an independent GitHub approval or a claim that the current merge revision has received a fresh review.

The current integration with dev is being resolved and validated. The final commit and check results will be recorded before merging. No additional review loop is planned.

Merge dev into the mission-profile preferences branch while preserving agent-created profile selection, provenance, retained creation intents and strict owning-backend discovery alongside ordinary bridge and worktree ownership behavior.

Resolve the Missions documentation with the current tree toolbar, depth selector and saved-brief controls while retaining profile precedence and creation recovery. Preserve the native 2.2.6 schedule wake fix. Exempt Mission preference and preparation probes from the browser-capability refusal introduced on dev, with a regression proving strict ownership still applies and ordinary browser claims remain refused.

Validation: server and UI typechecks; 500 route, automation, proxy, receipt, defaults-contract and native-plugin-build checks; 120 focused defaults, creation-intent, control and worktree checks; 401 native Mission unit/integration checks; all four native bundle builds; 31 help checks and the 28-page, ten-locale help build. The full Missions/workspaces run passed 1440 tests with one WSL skip and two load-sensitive failures in unchanged dev code; both files passed all 16 checks on a serial rerun. Merge-specific whitespace checks pass.
@pascalandr

Copy link
Copy Markdown
Contributor Author

Final integration validation

Final head: 8b1b673b9fd19d39e54b1f7a523268e53de124a1.

Merged current dev, resolved the documentation and automation bridge conflicts, and fixed a semantic integration issue: Mission-only discovery probes must bypass the browser-capability gate while retaining strict ownership checks. Ordinary browser refusals remain covered. The scheduled-wake fix from #1350 is unchanged from dev.

Local checks:

  • Server and UI typechecks: pass.
  • Route/automation/proxy/receipts/defaults/native-build tests: 500 passed.
  • Focused defaults/creation/control/worktree tests: 120 passed.
  • Native Missions unit suites (excluding the opt-in presence-native fixture): 401 passed.
  • Recursive Missions/workspaces run: 1,440 passed, 2 failed, 1 skipped. The two failures (mission-local-sources and family-authority-claim) both passed in a serial rerun (16 passed). The parallel run is not represented as fully green.
  • Pruning, automation, Missions and Memory builds: pass.
  • Help tests: 31 passed; help build: 28 pages across 10 locales.
  • Native fixture syntax and whitespace checks: pass.

Worktree clean; pushed head verified; merge-tree with dev conflict-free at validation. No new review cycle was performed, as requested. GitHub validation for this exact head must finish successfully before the requested admin squash merge.

Unblock PR validation after the native WebKit integration: retain the exact build dependency ordering while adding its WebKit qualification gate to the contract assertion, and register the two inline-document browser tests as server-free fixture exemptions. Arm both browsers with the shared navigation budget without weakening fixture enforcement.

Repair the five incompatible windows-sys dependency edges for muda, socket2, tray-icon, uds_windows and window-vibrancy through Cargo's offline resolver. Every package version, source and checksum stays unchanged; no dependency upgrades or manifests change. Current dev contains the same failures, so unrelated later changes are left out.

Validation: the original failing run completed with no additional failures (remaining browser shard: 561 passed). Locally, all 49 CI helper tests, 10 build/WebKit/vendor contract tests, four fixture wiring/navigation tests and both WebKit browser tests pass. Both server/UI typechecks pass. Locked Cargo metadata resolves online, offline and with all features for Windows, Intel/ARM64 macOS and Linux. CI-equivalent resource preparation and cargo check --locked --offline pass. Full CI qualification remains pending on this new head.
Merge current dev after its Missions tree update added the same inline-document fixture exemptions and navigation budgets. Keep one exemption per file and use the pure navigation-budget helper for these server-free WebKit tests instead of the Mission dataset adapter. Preserve the profile-defaults branch, the corrected Cargo dependency edges, the full binary-build test gate and the native 2.2.6 wake fix.

Validation after reconciliation: server/UI typechecks; 10 build, WebKit workflow and vendored-crate checks; 13 fixture navigation/wiring, defaults and Mission-list checks; 13 browser checks covering both WebKit regressions and the incoming Mission tree behavior; help build for 28 pages in ten locales; merge-specific whitespace checks. Cargo manifests and the already validated repaired lockfile are unchanged by this merge. Full CI remains pending on the resulting head.
@pascalandr

Copy link
Copy Markdown
Contributor Author

CI integration repairs

Current head: bdc0b085af0c82208fb089f0db5b302d323b3f3f.

The preceding run completed with three distinct causes of failure:

  • The build-order contract omitted the new tests-tauri-webkit gate. Its exact expected list now includes that gate.
  • Five windows-sys dependency edges in Cargo.lock were inconsistent. Corrected the edges without changing package versions, sources or checksums.
  • Two server-free WebKit fixtures were missing the required browser-fixture wiring. Registered both and armed navigation budgets.

Local validation: both typechecks, 49 CI-helper tests, 10 build contracts, 13 focused unit/wiring checks, 13 browser checks, help build, four-platform locked Cargo resolution and Windows cargo check --locked --offline after resource preparation all passed. Concurrent dev changes were merged, #1350 preserved, remote head verified and worktree clean.

GitHub run 42540817945 is queued. The failed preceding run has not been treated as a successful qualification. The admin squash merge will run only after all checks on this exact head pass.

pascalandr added a commit that referenced this pull request Nov 9, 2026
The corrected Cargo graph passes all five native Tauri jobs, but the baseline still fails its build-order contract and contextual-help browser test. Require the already-present WebKit job in the exact build dependency assertion; this is the same hunk carried by #1305. Await the third native help-opening receipt before the existing URL assertion; this is the one-line correction from #1410.

Keep every production change confined to the five already-reviewed lock edges. No assertion is removed, no deadline changes, and the helper opening must complete before its destination is checked. Merge current dev, which also contains the WebKit fixture-wiring correction. The independent recurrence-Pause flake is still under investigation; a green rerun is not its explanation.
@pascalandr

Copy link
Copy Markdown
Contributor Author

Coordination: #1407 now includes the exact one-line binary-build-order expectation for tests-tauri-webkit already carried here. The added workflow job is already on dev and the stale assertion blocks every other repair PR; taking only this identical test-contract hunk with the baseline Cargo repair avoids circular CI failures. None of this PR's Missions changes or other files were copied or modified. The identical hunk can converge normally when this branch merges dev.

The contextual-help import brought browser icon code into the bare-Node right-panel manifest test. Substitute only its Info leaf, retain the actual manifest and info-tip wiring, and assert that every status section still exposes its information renderer. Mission test actions retain data-mission-key locators across passive row replacement instead of stale ElementHandles. Help tests await the native opening receipt and explicitly hold that receipt to cover the race without sleeps.

Prepare the hidden Electron guest's actual nonempty rendering surface before input. Reuse the bounded fixture preparation approach from the preview-rendering work, keep the production compositor and input guards unchanged, never replay input, and preserve the original 500 ms key assertions and late-paint navigation case. Add deterministic preparation checks for transient captures, fatal errors, ownership changes and one shared monotonic budget. Keep the shared task-mode data convention intact; its detailed preference/retry contract stays in the dedicated section, avoiding a documentation conflict with unrelated dev changes.

Validation: both typechecks; all 657 Ubuntu restore-integration checks; full Ubuntu server suite on a native Linux filesystem (4219 passed, 34 skipped), plus 26 downstream Stats/integration checks; 32 focused browser checks, 15 held-receipt/status/wiring checks and 43 broader Mission-control/current-passage checks; three cold Linux/Xvfb preview runs and their preparation tests; help build for 28 pages in ten locales. The original native minimum timeout had no provider calls or diagnostic native error, while at passed; the fixture is unchanged from dev. Both exact local cold cases passed on 2.2.3 with unchanged deadlines, and only the failed minimum job was rerun: its complete qualification passed on the original failing head. No native runtime or timeout change is justified by that unreproduced failure.
@pascalandr

Copy link
Copy Markdown
Contributor Author

CI follow-up — 46fc7d6

Fixed the Node restore fixture's browser-only icon dependency while retaining manifest assertions; replaced detached Mission ElementHandles with identity-bound locators; made help-link checks await native opener receipts; added bounded rendered-surface preparation for the hidden preview guest, retaining the 500 ms key assertion.

The failed minimum-runtime cold schedule fixture was investigated using its artifacts: no provider turn or native error was recorded for the failed in case. Both timing kinds passed locally on 2.2.3 and the exact failed CI job rerun passed. No runtime implementation or deadline was changed; the original failure's cause remains unproven.

Validation: Ubuntu server 4,219 passed / 34 skipped; restore integration 657 passed; downstream Stats/integration 26 passed; focused browser tests 32 passed and broader Mission suites 43 passed; three cold Linux/Xvfb preview runs passed. Both typechecks, fixture wiring and help build pass. Worktree and merge-tree clean, remote head verified.

Run 42552884983 validates this head. Merge remains conditional on successful checks; previous failed runs are not represented as successful qualifications.

@pascalandr

Copy link
Copy Markdown
Contributor Author

Coordination follow-up: #1407 now fixes the core Status manifest import failure through the existing renderer-injection seam rather than stubbing lucide-solid in the unit test. StatusTab and the real contextual-help fixture supply SettingsInfoTip, preserving help URLs/locales. The factory and registry tests no longer import browser components. This is an alternative to the Info-loader stub in this PR; please retain only the source-seam approach once #1407 lands. No Missions profile changes were copied. The 657-test restore-ownership command passes locally, with 12 units and 47 headless browser tests independently repeated.

@pascalandr
pascalandr merged commit 16104c2 into dev Nov 9, 2026
32 checks passed
@pascalandr
pascalandr deleted the backlog/9-mission-profiles branch November 9, 2026 04:16
pascalandr added a commit that referenced this pull request Nov 9, 2026
#1305 already supplies the Cargo graph repair, build-order contract, native-help receipt synchronization and manifest-test compatibility. Keep its implementation and controlled tests rather than overwriting them with alternative fixes from this branch. The resulting diff against dev contains only five Missions test/fixture files.

Retain the proven catalog-wave receipts, synchronous editor retirement, partial-result publication wait and compact-form fixture corrections. All 46 targeted tests pass on a fresh current-dev source snapshot with the exact lock-matched dependencies and Node 24.22.2. No assertion, deadline, retry or failed-request filtering changes. Full CI must run on this new combination; no force push.
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