> For the complete documentation index, see [llms.txt](https://ai-os-and-trend-finder.gitbook.io/ai-os-and-trend-finder-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ai-os-and-trend-finder.gitbook.io/ai-os-and-trend-finder-docs/.spec_system/archive/phases/phase_25/session_02_mission_schema_version_legacy_compatibility.md).

# Session 02: Mission Schema Version Legacy Compatibility

**Session ID**: `phase25-session02-mission-schema-version-legacy-compatibility` **Status**: Completed **Estimated Tasks**: \~12-25 **Estimated Duration**: 2-4 hours

***

## Objective

Version mission documents and harden normalization so legacy and v2.3-shaped mission files load safely through the AI OS read contract.

***

## Scope

### In Scope (MVP)

* Add `schema_version` to mission documents written by create and commit.
* Upgrade missing schema versions in memory on read and persist the upgraded shape on the next write.
* Harden mission and goal normalization for missing `full_prompt`, missing `estimate`, unknown status, active-pointer mismatch, malformed mission entries, and archived mission lists.
* Surface `schema_version` in `src/lib/hermes-types.ts` while keeping the AI OS `ok`, `active`, `mission`, `total`, and `missions` envelope.
* Document raw v2.3 endpoint-envelope incompatibility in code comments and data contract notes.

### Out of Scope

* New UI affordances.
* New write endpoints beyond the Session 01 commit path.
* Full storage migration away from `~/.hermes/missions.json`.

***

## Prerequisites

* [x] Session 01 completed.
* [ ] Legacy mission permutations from the comparison doc available as test fixtures.

***

## Deliverables

1. Versioned mission read/write contract.
2. Legacy normalization coverage for malformed and v2.3-shaped mission files.
3. Updated data contract notes for the AI OS mission envelope.

***

## Success Criteria

* [x] A v2.3-shaped mission store loads without throwing.
* [x] Unknown statuses normalize to `queued`.
* [x] Missing optional goal fields and malformed archived entries are handled without exposing bad browser state.
* [x] `hermes-dev-bridge` and `hermes-types` tests cover all legacy cases.

***

## Folded Comparison Detail

This section preserves the shared Phase 25 reference context and the complete S25-02 session detail from the folded Phase 25 comparison record. This stub is self-contained so the old ongoing-project document can be deleted without losing source anchors, implementation scope, build steps, or exit criteria.

### Source Project Reference Links

#### AI OS

* [Hermes route](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/routes/agents.hermes.tsx)
* [Hermes page shell](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/components/hermes/hermes-read-only-page.tsx)
* [Mission Control UI](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/components/hermes/hermes-mission-control.tsx)
* [Claude Code mission page](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/components/hermes/claude-code-mission-page.tsx)
* [Hermes read hook](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/hooks/use-hermes.ts)
* [Hermes admin hook](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/hooks/use-hermes-admin.ts)
* [Hermes read contracts](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/lib/hermes-types.ts)
* [Hermes admin contracts](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/lib/hermes-admin-types.ts)
* [Hermes read bridge](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/scripts/lib/hermes-dev-bridge.ts)
* [Hermes admin bridge](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/scripts/lib/hermes-admin-bridge.ts)
* [Hermes demo fixtures](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/aios/src/lib/hermes-demo-data.ts)

#### Claude OS v2.3 Reference

* [Reference Hermes route](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/claudeos/claude-os-v2.3/src/routes/agents.hermes.tsx)
* [Reference Mission Control component](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/claudeos/claude-os-v2.3/src/components/hermes-mission-control.tsx)
* [Reference Vite middleware/endpoints](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/claudeos/claude-os-v2.3/vite.config.ts)
* [Reference Documents Gallery](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/claudeos/claude-os-v2.3/src/components/hermes-documents-gallery.tsx)
* [Reference Mnemosyne component](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/claudeos/claude-os-v2.3/src/components/hermes-mnemosyne.tsx)
* [Reference README](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/claudeos/claude-os-v2.3/README.md)
* [Reference CHANGELOG](https://github.com/moshehbenavraham/ai-os/blob/main/home/aiwithapex/projects/claudeos/claude-os-v2.3/CHANGELOG.md)

### Reference Source Map

Every session below carries a **Reference (v2.3)** line pointing at the exact reference code to mirror. Citations are relative to the reference root `v2.3/` = `/home/aiwithapex/projects/claudeos/claude-os-v2.3/`. Line numbers are the 2026-06-08 inspection snapshot - treat them as anchors and re-confirm before editing. The two reference files that matter for this plan:

* `v2.3/src/components/hermes-mission-control.tsx` - the entire Mission Control UI, planning prompt, per-card copy, briefing renderer, and goal rail. Key anchors: `Actor`/`Status`/`MiniGoal`/`Mission` types (265-286); endpoint contract comments (243-249); `LONG_PROMPT_BODY` (313-509); `buildLongPrompt` (511-523); `MissionControlAgent` (532); `refetch` GET (547-555); exact-decimal progress geometry (561-569); tick/clear fetches (610, 633); `EmptyPanel` + `copy()` + Copy-prompt button (783-944); `MissionBody` (945-1034); `estimateToPips` (1035-1073); `buildCopyText` incl. `/goal` safety net (1074-1128); `formatHumanBrief` + `HUMAN_BRIEF_LABELS` (1130-1196); `BriefingDrawer` (1209-1577); `MissionGoalRail` incl. progress bar + milestone ticks (1583-1987).
* `v2.3/vite.config.ts` - the local mission endpoints: GET `/__hermes_missions` (778-799), `optimize` (799-943), `create` (944-1050), `tick` (1051-1099), `clear` (1100-1124); `MISSIONS_FILE` (751).

Where a session has no reference, the capability has no v2.3 equivalent and is marked **Reference (v2.3): none - AI OS-new**; the AI OS contracts/bridges named in that session are the substrate to build on.

### Phase Outcome (binary)

`/agents/hermes` (and the Claude Code mission route) fully restore the v2.3 Mission Control orchestration loop - planning prompt, discovery-driven decomposition, multi-goal authoring, optimized preview -> commit, per-goal `/goal` and human-briefing copy, and archive management - on top of the AI OS typed-contract, admin-gated, tested architecture, with documentation and end-to-end validation. YES/NO at the end of the last session.

### Cross-Cutting Guardrails (every session must hold these)

These are the AI OS strengths the plan must preserve while adding v2.3 affordances. No session may regress them:

1. Admin-gate is never weakened. All writes keep requiring loopback + valid per-run `X-Claude-OS-Token` + `HERMES_DASHBOARD_ADMIN=1` + non-demo + hook-mediated path.
2. Typed contracts stay authoritative. New fields/endpoints get read/admin parsers that reject malformed payloads; no ad hoc JSON.
3. State machine stays explicit. idle / loading / success / empty / error / offline / token-failure / demo / admin-disabled / admin-ready all keep rendering and stay tested.
4. Errors stay bounded and redacted through the existing display helpers.
5. Reads use query invalidation, not polling or fetch bypasses.
6. Demo/live parity holds; demo mode never triggers a real write.
7. Both agent presentations (`hermes`, `claude-code`) stay at parity at the contract layer; differences remain presentation copy only.
8. Every new affordance ships with unit/component coverage in the same session; responsive/e2e coverage lands by S25-08.

### S25-02 - Mission Schema Version, Normalization & Legacy Compatibility

**Resolves:** Priority 2.5, Priority 3.8, Finding #7, Mission Data Contract, Testing Comparison (legacy coverage).

**Reference (v2.3):** `v2.3/src/components/hermes-mission-control.tsx:265-286` (`Actor`, `Status = "queued" | "active" | "done"`, `MiniGoal`, `Mission` - note `done_when`/`full_prompt` are optional and there is **no** `schema_version`), `v2.3/vite.config.ts:751` (`MISSIONS_FILE` = `~/.hermes/missions.json`), `:778-799` (GET returns the bare `{ mission }` endpoint envelope). The legacy permutations to normalize are exactly the gaps between the loose v2.3 mission file entries and the AI OS typed contract; v2.3 has no schema-version or normalization layer, so that hardening is AI OS-new over the v2.3 on-disk `{ active, missions }` shape.

**Objective.** Version the mission document and make the read path robust to legacy/malformed/v2.3-shaped data so existing `~/.hermes/missions.json` files load cleanly and future storage migrations are safe.

**Scope (in).**

* Add a `schema_version` field to the mission document (write it on create and commit; default/upgrade it on read).
* `scripts/lib/hermes-dev-bridge.ts`: harden `normalizeMission` / `normalizeMissionGoal` for missing `full_prompt`, missing `estimate`, unknown status (-> `queued`), active-pointer mismatch, malformed mission entries, and archived (non-active) mission lists.
* `src/lib/hermes-types.ts`: surface `schema_version` and keep the richer envelope (`ok`, `active`, `mission`, `total`, `missions`).
* Document the raw v2.3 endpoint incompatibility (envelope vs `{ mission }`) in the bridge and in the data contract notes.

**Scope (out).** No UI changes; no new endpoints.

**Build steps.**

1. Add the version field + migration-on-read (legacy docs without a version are upgraded in memory; persisted on next write).
2. Expand normalization branches and fixtures for every legacy case listed.
3. Add compatibility tests covering each malformed/legacy permutation.

**Exit criteria.**

* A v2.3-shaped `missions.json` (no version, `{ active, missions }` store, optional fields, mixed statuses) loads without throwing and renders a valid summary.
* `hermes-dev-bridge.test.ts` and `hermes-types.test.ts` cover all six legacy permutations and pass.

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ai-os-and-trend-finder.gitbook.io/ai-os-and-trend-finder-docs/.spec_system/archive/phases/phase_25/session_02_mission_schema_version_legacy_compatibility.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
