CodeNomad/dev-docs
Pascal André debbdce33f
feat(missions): add a "Compare two models" Mission template (#1026)
## Summary

Adds a fifth Mission template, **Compare two models** (`compare`). It
runs the same bounded task on two different models and ends with a blind
verdict.

- **Creation:** the user picks **model A** and **model B** in the main
creation form. Both are required and must name different models
(provider + model id; a reasoning variant alone is not a different
model). This is enforced on every creation path: HTTP, prepare,
recurrence create and agent-started missions.
- **Roles:** `model-a`, `model-b` and `comparator`.
  - A and B share one instruction text and report contract.
- The coordinator writes the task, inputs and criteria once, and gives
both byte-identical briefs.
- The server refuses a run task whose brief differs from its sibling's,
or whose per-task execution would change its role's model.
- **Blind judge, always on:** the comparator works on neutral X/Y
labels.
- It reports one versioned `comparison` artifact: the A/B task
references, per-criterion scores for both runs, sourced observations,
and a verdict `a | b | equivalent | inconclusive`.
  - Completion requires both runs and that comparison.
- **Judge model:** frozen once at creation, like every other role.
- An explicit judge is kept; otherwise the judge copies the
coordinator's effective model. When that model is unknown, both stay on
the native default.
  - Replays and retries therefore reuse the stored profile.
  - The editor warns when the judge's model equals A or B.
- **Readers:** the verdict, both model names, a score table and evidence
by path. Hashes stay under Technical details, for current and archived
recurring passages.

The template came out of evaluating Harness2's comparison loop. It
deliberately has **no** lesson, human approval, budget or duration
handling, and leaves the Wayfinder human gate unchanged. Up to five
models, per-run worktrees and launching from the composer's model picker
(OpenChamber-style multi-run) are left for later.

`AGENTS.md` records the single editor exception: the A/B selectors sit
outside the collapsed Options disclosure. All ten locales are updated.

## Size and upkeep

62 files, +837/-96:

| Part | Lines |
|---|---|
| Product code (about 16 files are one-line template-list hooks) |
+280/-57 |
| Locales (13 keys × 10) | +131 |
| Tests | +409 |
| Docs | +17 |

`missions/control.ts` stays oversized (~1,500 lines).

## Validation

- Full server suite: 2,426 tests pass, 7 existing skips. Root and server
typechecks, the server build and the plugin build pass.
- UI: 45 unit tests and 36 browser tests pass.
- The native trajectory fixture, extended with a compare case, passes on
OpenCode 2.0.31. It checks two distinct models, a one-newline brief
difference refused with the journal unchanged, a real blind judgment and
a completed mission. The native contract and recurring Q fixtures also
pass.
- Regressions cover:
  - distinct-model refusals on every creation path;
  - brief and override refusals;
  - artifact validation and the completion policy;
- judge freezing at creation, revision replay, and retry after a
coordinator model change;
  - editor inheritance and readable evidence.
- Independent review rounds ended with no P0-P3 findings.
- The editor and reader were checked from screenshots of the real Solid
components in the browser harness, not in a packaged app.
2026-10-20 13:55:12 +02:00
..
architecture.md docs(sidecars): keep rejected-isolation history out of the architecture notes (#1003) 2026-10-18 03:47:16 +02:00
BROWSER_AUTOMATION.md refactor(automation): unify native browser previews on the shared page engine (#1020) 2026-10-19 09:27:58 +02:00
BROWSER_DEVICE_EMULATION.md fix(layout): make desktop minimums zoom-aware and compact headers at 420px (#817) 2026-10-01 12:44:01 +02:00
CACHE_REFRESH_CONVENTIONS.md fix(files): refresh Workspace with scoped, rate-limited invalidations (#1030) 2026-10-20 00:17:40 +02:00
DESKTOP_DATA_PROFILES.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
DEVELOPER_MODE.md feat(remote-control): add Remote Control over OpenTunnel alongside direct access (#668) 2026-10-09 12:43:25 +02:00
FILES_PANEL.md fix(files): refresh Workspace with scoped, rate-limited invalidations (#1030) 2026-10-20 00:17:40 +02:00
HOTKEYS.md feat(settings): compact Settings, unified notification routing and autosaving Missions preferences (#1014) 2026-10-19 01:23:35 +02:00
INDEX.md docs(help): multilingual help site with in-app Help menu and palette entry (#859) 2026-10-14 22:44:56 +02:00
MISSIONS.md feat(missions): add a "Compare two models" Mission template (#1026) 2026-10-20 13:55:12 +02:00
MISSIONS_AUTONOMOUS_PLUGIN_REQUIREMENTS.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_CONTINUITY_CONTRACT.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_ENVIRONMENT_ADMISSION.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_FAMILY_AUTHORITY.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_HUMAN_ANSWER_RECEIPTS.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_NATIVE_PRODUCT_ACCEPTANCE.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_RECURRING_SIMPLE.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_RECURRING_SIMPLE_QUALIFICATION.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_REFACTOR_VALIDATION.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_SESSION_RECOVERY.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
MISSIONS_WATCHED_SOURCES.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
NATIVE_INTERRUPTION_UX.md fix(chat): keep request icons and show complete red badges (#871) 2026-10-07 14:22:55 +02:00
OPENCODE_V2_COMPATIBILITY.md fix(pending): recover requests in nested checkouts the workspace already owns (#964) 2026-10-15 09:15:42 +02:00
OPENCODE_V2_POST_BETA.md fix(opencode-setup): offer OpenCode 2 when an old or foreign OpenCode blocks setup (#982) 2026-10-16 15:44:17 +02:00
PALETTE_SOURCES.md V2(ui): progressively harmonize the CodeNomad interface (#667) 2026-09-15 14:17:30 +01:00
PANEL_EXTENSIONS.md feat(ui): assign backgrounds by surface role and harmonize menus (#914) 2026-10-12 11:12:37 +02:00
PLUGIN_ACTIVATION_CONTROLS.md feat(plugins): add scoped V2 plugin activation controls (#726) 2026-09-25 01:29:14 +02:00
PROVIDER_ACCOUNTS_UX_PLAN.md fix(usage): explain the ChatGPT token-sharing quota limitation (#999) 2026-10-18 04:27:19 +02:00
REMOTE_CONTROL.md feat(remote-servers): pair a desktop window through a Remote Control link (#928) 2026-10-13 02:20:37 +02:00
RUNTIME_MAINTENANCE.md ci: refresh actions and monitor the bundled Node/npm runtime 2026-10-14 10:36:24 +02:00
SESSION_ENVIRONMENT.md feat(missions): native project coordination, briefings and tracking (#866) 2026-10-11 14:55:49 +02:00
SESSION_HISTORY_NAVIGATION.md refactor(chat): render the transcript header as Virtua's first row (#992) 2026-10-17 16:58:26 +02:00
SESSION_HISTORY_QUERIES.md feat(history): name the conversation and worktree of workspace search results (#993) 2026-10-17 16:02:16 +02:00
SESSION_PRUNING_RPC.md docs: prune obsolete specifications and development readouts 2026-10-08 00:42:53 +02:00
SESSION_PRUNING_SAFETY.md feat(pruning): restore opt-in selective deletion through native plugin RPC (#686) 2026-09-10 13:31:40 +02:00
solidjs-llms.txt update blank session cleanup code for now session store logic 2025-11-27 20:18:22 -05:00
TAURI_UPDATER.md build: ship the Linux deb from Electron and the Windows installer without a ZIP (#955) 2026-10-14 16:45:49 +02:00
TAURI_WINDOWS_RUNNER_REFCOUNT.md fix(tauri): prevent Windows event-loop refcount corruption (#996) 2026-10-18 02:07:17 +02:00
TEXT_DISPLAY_BOUNDS.md fix(transcript): reveal display-truncated text in place instead of a copy-only suffix (#1000) 2026-10-18 05:01:03 +02:00
USER_HELP.md docs(help): multilingual help site with in-app Help menu and palette entry (#859) 2026-10-14 22:44:56 +02:00
WORKTREE_SESSION_PLACEMENT.md docs: prune obsolete specifications and development readouts 2026-10-08 00:42:53 +02:00