# FESA Agent/Skill Workflow Consolidation Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Consolidate the FESA development workflow into eight stages, merge three redundant agents and two redundant skills into their approved owners, make `coordinator-agent` the main orchestrator, and group all feature evidence under `docs/<feature-id>/`.

**Architecture:** Keep one main Coordinator and ten specialist sub-agents. Merge reference-model preparation into Numerical Review and merge build/test plus reference comparison into Implementation, while retaining separate evidence documents for auditability. Migrate existing feature documents without rewriting historical owners or verdicts, and protect the resulting structure with repository-level Python contract tests.

**Tech Stack:** Codex agent TOML, project-local Codex `SKILL.md` and `agents/openai.yaml`, Markdown workflow contracts, Python 3 standard library (`pathlib`, `tomllib`), pytest, PowerShell, Git.

## Global Constraints

- The approved design is `docs/superpowers/specs/2026-08-15-agent-skill-workflow-consolidation-design.md`.
- All new feature evidence lives under exactly `docs/<feature-id>/`.
- Keep separate `implementation-report.md`, `build-test.md`, and `reference-comparison.md` files even though one Implementation Agent owns them.
- Keep separate `numerical-review.md` and `reference-model.md` files even though one Numerical Review Agent owns them.
- `coordinator-agent` is the only main agent; every other `.codex/agents/*.toml` profile is a sub-agent.
- Keep `correction-agent` as an on-demand rework sub-agent outside the eight numbered stages.
- Preserve `model_reasoning_effort = "extra high"` in every agent profile.
- Preserve historical document content, `owner_agent`, status, and numerical verdict; only relocate files and repair path references.
- Do not create empty evidence files for outputs that never existed. Create `corrections.md` only after a real correction.
- Do not modify solver C++ source, C++ tests, CMake/CTest configuration, `.codex/hooks.json`, Harness executor behavior, phase status/result content, or `reference/` artifacts.
- Keep project-local `harness` planning/execution boundaries unchanged.
- Use conventional commit messages.

---

## Final File Map

### Create

- `tests/test_agent_skill_workflow_contract.py`: static contract tests for agent inventory, skill inventory, hierarchy, merged responsibilities, output layout, and live-path cleanup.
- `docs/linear-static-3d-euler-beam/coordination.md`: migrated feature worklist and closure inventory.
- `docs/linear-static-mitc4-shell/coordination.md`: migrated feature worklist and closure inventory.

### Modify

- `AGENTS.md`: eight-stage process, consolidated agent/skill table, main/sub-agent policy, and `docs/<feature-id>/` layout.
- `.codex/agents/coordinator-agent.toml`: main-agent orchestration, dispatch loop, worklist, gate decisions, and rework control.
- `.codex/agents/requirement-agent.toml`: sub-agent contract, new paths, and Numerical Review handoff for reference evidence.
- `.codex/agents/research-agent.toml`: sub-agent contract, new paths, and Numerical Review handoff for reference candidates.
- `.codex/agents/formulation-agent.toml`: sub-agent contract, new paths, and consolidated Numerical Review handoff.
- `.codex/agents/numerical-review-agent.toml`: numerical review plus reference-model ownership.
- `.codex/agents/io-definition-agent.toml`: sub-agent contract and final HDF5 projection ownership after merged review.
- `.codex/agents/implementation-planning-agent.toml`: new paths, consolidated skill inputs, and Implementation-only downstream validation handoff.
- `.codex/agents/implementation-agent.toml`: TDD implementation, MSVC build/CTest, reference comparison, and three-document evidence ownership.
- `.codex/agents/correction-agent.toml`: on-demand rework from Implementation evidence and return to Implementation.
- `.codex/agents/physics-evaluation-agent.toml`: consume Implementation-owned reference comparison and route model gaps to Numerical Review.
- `.codex/agents/release-agent.toml`: audit consolidated Implementation evidence and new paths.
- `.codex/skills/fesa-numerical-review/SKILL.md`: absorb reference-case inventory and readiness workflow.
- `.codex/skills/fesa-numerical-review/agents/openai.yaml`: describe consolidated numerical/reference review.
- `.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`: absorb build/test reporting and reference comparison workflow.
- `.codex/skills/fesa-cpp-msvc-tdd/agents/openai.yaml`: describe consolidated implementation/verification work.
- `.codex/skills/fesa-requirements-baseline/SKILL.md`: new output path and Numerical Review handoff.
- `.codex/skills/fesa-research-evidence/SKILL.md`: new output path and Numerical Review handoff.
- `.codex/skills/fesa-formulation-spec/SKILL.md`: new output path and consolidated handoff.
- `.codex/skills/fesa-io-contract/SKILL.md`: new output path and final HDF5/reference mapping responsibility.
- `.codex/skills/fesa-physics-sanity/SKILL.md`: new paths and consolidated failure routing.
- `.codex/skills/fesa-release-readiness/SKILL.md`: new paths and consolidated gate evidence.
- `docs/SOLVER_AGENT_DESIGN.md`: surviving roles, eight-stage flowchart, gates, status transitions, and output layout.
- `docs/SOLVER_SKILL_DESIGN.md`: eight workflow skills and consolidated agent-to-skill mapping.
- Moved feature documents and tracked plan/spec/phase documents containing old feature-document paths: repair path references only.

### Delete after absorption

- `.codex/agents/reference-model-agent.toml`
- `.codex/agents/build-test-executor-agent.toml`
- `.codex/agents/reference-verification-agent.toml`
- `.codex/skills/fesa-reference-models/`
- `.codex/skills/fesa-reference-comparison/`
- Agent-oriented output-folder README files under `docs/coordination/`, `docs/requirements/`, `docs/research/`, `docs/formulations/`, `docs/numerical-reviews/`, `docs/io-definitions/`, `docs/reference-models/`, `docs/implementation-plans/`, `docs/build-test-reports/`, `docs/corrections/`, `docs/reference-verifications/`, `docs/physics-evaluations/`, and `docs/releases/`.

---

### Task 1: Add RED workflow-contract tests

**Files:**

- Create: `tests/test_agent_skill_workflow_contract.py`
- Read: `docs/superpowers/specs/2026-08-15-agent-skill-workflow-consolidation-design.md`

**Interfaces:**

- Consumes: approved agent names, skill names, feature folders, artifact filenames, and mandatory contract phrases from the design.
- Produces: pytest functions used as acceptance gates by Tasks 2–6.

- [ ] **Step 1: Create the static contract test module**

Add this complete test module:

```python
from pathlib import Path
import tomllib


ROOT = Path(__file__).resolve().parents[1]
AGENT_DIR = ROOT / ".codex" / "agents"
SKILL_DIR = ROOT / ".codex" / "skills"

EXPECTED_AGENTS = {
    "coordinator-agent",
    "correction-agent",
    "formulation-agent",
    "implementation-agent",
    "implementation-planning-agent",
    "io-definition-agent",
    "numerical-review-agent",
    "physics-evaluation-agent",
    "release-agent",
    "requirement-agent",
    "research-agent",
}

EXPECTED_SKILLS = {
    "fem-theory-query",
    "fesa-cpp-msvc-tdd",
    "fesa-formulation-spec",
    "fesa-io-contract",
    "fesa-numerical-review",
    "fesa-physics-sanity",
    "fesa-release-readiness",
    "fesa-requirements-baseline",
    "fesa-research-evidence",
}

LEGACY_OUTPUT_DIRS = {
    "coordination",
    "requirements",
    "research",
    "formulations",
    "numerical-reviews",
    "io-definitions",
    "reference-models",
    "implementation-plans",
    "build-test-reports",
    "corrections",
    "reference-verifications",
    "physics-evaluations",
    "releases",
}

FEATURE_FILES = {
    "linear-static-3d-euler-beam": {
        "coordination.md",
        "requirements.md",
        "research.md",
        "formulation.md",
        "numerical-review.md",
        "reference-model.md",
        "io.md",
        "implementation-plan.md",
        "implementation-report.md",
        "build-test.md",
        "reference-comparison.md",
        "physics-evaluation.md",
        "release.md",
    },
    "linear-static-mitc4-shell": {
        "coordination.md",
        "requirements.md",
        "research.md",
        "formulation.md",
        "numerical-review.md",
        "reference-model.md",
        "io.md",
        "implementation-plan.md",
        "build-test.md",
        "reference-comparison.md",
        "physics-evaluation.md",
        "release.md",
    },
}

LIVE_CONTRACT_FILES = (
    ROOT / "AGENTS.md",
    ROOT / "docs" / "SOLVER_AGENT_DESIGN.md",
    ROOT / "docs" / "SOLVER_SKILL_DESIGN.md",
)

RETIRED_TOKENS = (
    "reference-model-agent",
    "reference model agent",
    "build-test-executor-agent",
    "build/test executor agent",
    "reference-verification-agent",
    "reference verification agent",
    "fesa-reference-models",
    "fesa-reference-comparison",
    "docs/coordination/",
    "docs/requirements/",
    "docs/research/",
    "docs/formulations/",
    "docs/numerical-reviews/",
    "docs/io-definitions/",
    "docs/reference-models/",
    "docs/implementation-plans/",
    "docs/build-test-reports/",
    "docs/corrections/",
    "docs/reference-verifications/",
    "docs/physics-evaluations/",
    "docs/releases/",
)


def read(path: Path) -> str:
    return path.read_text(encoding="utf-8")


def live_contract_text() -> str:
    paths = list(LIVE_CONTRACT_FILES)
    paths.extend(sorted(AGENT_DIR.glob("*.toml")))
    paths.extend(sorted(SKILL_DIR.glob("*/SKILL.md")))
    return "\n".join(read(path) for path in paths)


def test_agent_inventory_is_consolidated():
    actual = {path.stem for path in AGENT_DIR.glob("*.toml")}
    assert actual == EXPECTED_AGENTS


def test_project_skill_inventory_is_consolidated():
    actual = {
        path.name
        for path in SKILL_DIR.iterdir()
        if path.is_dir() and (path / "SKILL.md").is_file()
    }
    assert actual == EXPECTED_SKILLS


def test_existing_feature_artifacts_are_bundled():
    docs_dir = ROOT / "docs"
    for legacy_dir in LEGACY_OUTPUT_DIRS:
        assert not (docs_dir / legacy_dir).exists(), legacy_dir

    for feature_id, expected_files in FEATURE_FILES.items():
        feature_dir = docs_dir / feature_id
        actual_files = {path.name for path in feature_dir.glob("*.md")}
        assert actual_files == expected_files


def test_numerical_review_absorbs_reference_model_contract():
    assert not (AGENT_DIR / "reference-model-agent.toml").exists()
    assert not (SKILL_DIR / "fesa-reference-models").exists()
    text = read(SKILL_DIR / "fesa-numerical-review" / "SKILL.md").lower()
    for marker in (
        "numerical-review.md",
        "reference-model.md",
        "reference case inventory",
        "source identity",
        "row precheck",
        "tolerance",
        "pass-for-io-definition",
    ):
        assert marker in text


def test_implementation_absorbs_build_test_and_reference_comparison():
    assert not (AGENT_DIR / "build-test-executor-agent.toml").exists()
    assert not (AGENT_DIR / "reference-verification-agent.toml").exists()
    assert not (SKILL_DIR / "fesa-reference-comparison").exists()
    text = read(SKILL_DIR / "fesa-cpp-msvc-tdd" / "SKILL.md").lower()
    for marker in (
        "implementation-report.md",
        "build-test.md",
        "reference-comparison.md",
        "artifact check -> compare -> classify -> report",
        "pass-for-physics-evaluation",
    ):
        assert marker in text


def test_agent_hierarchy_is_explicit():
    coordinator = read(AGENT_DIR / "coordinator-agent.toml").lower()
    assert "main agent" in coordinator
    assert "docs/<feature-id>/coordination.md" in coordinator
    assert "worklist" in coordinator
    assert "sub-agent dispatch" in coordinator

    for path in sorted(AGENT_DIR.glob("*.toml")):
        if path.name == "coordinator-agent.toml":
            continue
        text = read(path).lower()
        assert "sub-agent" in text, path.name
        assert "coordinator agent" in text, path.name


def test_live_contracts_have_no_retired_names_or_paths():
    text = live_contract_text().lower()
    assert "docs/<feature-id>/" in text
    for token in RETIRED_TOKENS:
        assert token not in text, token


def test_live_guidance_declares_eight_stage_workflow():
    for path in LIVE_CONTRACT_FILES:
        text = read(path)
        assert "8단계" in text, path
        assert "docs/<feature-id>/" in text, path


def test_agent_toml_and_skill_ui_metadata_are_parseable():
    for path in sorted(AGENT_DIR.glob("*.toml")):
        parsed = tomllib.loads(read(path))
        assert parsed["name"] == path.stem
        assert parsed["model_reasoning_effort"] == "extra high"

    for skill_name in EXPECTED_SKILLS:
        skill_dir = SKILL_DIR / skill_name
        skill_text = read(skill_dir / "SKILL.md")
        ui_text = read(skill_dir / "agents" / "openai.yaml")
        assert f"name: {skill_name}" in skill_text
        assert f"${skill_name}" in ui_text
```

- [ ] **Step 2: Run each new behavior test and record RED evidence**

Run:

```powershell
uv run --with pytest python -m pytest tests/test_agent_skill_workflow_contract.py -v
```

Expected: `test_agent_toml_and_skill_ui_metadata_are_parseable` passes. The other eight tests fail because the old agents, old skills, old document folders, old paths, old stage count, and non-hierarchical agent contracts still exist.

- [ ] **Step 3: Commit the RED contract tests**

```powershell
git add tests/test_agent_skill_workflow_contract.py
git commit -m "test: define consolidated agent workflow contract"
```

---

### Task 2: Migrate existing evidence into feature folders

**Files:**

- Create: `docs/linear-static-3d-euler-beam/coordination.md`
- Create: `docs/linear-static-mitc4-shell/coordination.md`
- Move: the 23 existing feature evidence files listed below.
- Delete: the 13 old agent-oriented README files after their common policy is covered by the approved design and later live-contract updates.
- Test: `tests/test_agent_skill_workflow_contract.py::test_existing_feature_artifacts_are_bundled`

**Interfaces:**

- Consumes: existing Markdown evidence with historical statuses and the final filename map.
- Produces: canonical `docs/<feature-id>/` bundles consumed by every surviving agent and skill.

- [ ] **Step 1: Create and verify the two explicit target directories**

Run:

```powershell
$targets = @(
  (Resolve-Path -LiteralPath 'docs').Path + '\linear-static-3d-euler-beam',
  (Resolve-Path -LiteralPath 'docs').Path + '\linear-static-mitc4-shell'
)
$docsRoot = (Resolve-Path -LiteralPath 'docs').Path
foreach ($target in $targets) {
  if (-not $target.StartsWith($docsRoot + '\')) { throw "Target escaped docs: $target" }
  New-Item -ItemType Directory -Path $target -Force | Out-Null
}
```

Expected: both resolved targets are direct children of `C:\git\FESADev\docs`.

- [ ] **Step 2: Move the Euler beam evidence using this exact mapping**

```powershell
Move-Item -LiteralPath 'docs\requirements\linear-static-3d-euler-beam.md' -Destination 'docs\linear-static-3d-euler-beam\requirements.md'
Move-Item -LiteralPath 'docs\research\linear-static-3d-euler-beam-research.md' -Destination 'docs\linear-static-3d-euler-beam\research.md'
Move-Item -LiteralPath 'docs\formulations\3d-isoparametric-euler-beam-formulation.md' -Destination 'docs\linear-static-3d-euler-beam\formulation.md'
Move-Item -LiteralPath 'docs\numerical-reviews\linear-static-3d-euler-beam-review.md' -Destination 'docs\linear-static-3d-euler-beam\numerical-review.md'
Move-Item -LiteralPath 'docs\reference-models\linear-static-3d-euler-beam-reference-models.md' -Destination 'docs\linear-static-3d-euler-beam\reference-model.md'
Move-Item -LiteralPath 'docs\io-definitions\linear-static-3d-euler-beam-io.md' -Destination 'docs\linear-static-3d-euler-beam\io.md'
Move-Item -LiteralPath 'docs\implementation-plans\linear-static-3d-euler-beam.md' -Destination 'docs\linear-static-3d-euler-beam\implementation-plan.md'
Move-Item -LiteralPath 'docs\implementation-plans\linear-static-3d-euler-beam-implementation-report.md' -Destination 'docs\linear-static-3d-euler-beam\implementation-report.md'
Move-Item -LiteralPath 'docs\build-test-reports\linear-static-3d-euler-beam.md' -Destination 'docs\linear-static-3d-euler-beam\build-test.md'
Move-Item -LiteralPath 'docs\reference-verifications\linear-static-3d-euler-beam-reference-verification.md' -Destination 'docs\linear-static-3d-euler-beam\reference-comparison.md'
Move-Item -LiteralPath 'docs\physics-evaluations\linear-static-3d-euler-beam-physics-evaluation.md' -Destination 'docs\linear-static-3d-euler-beam\physics-evaluation.md'
Move-Item -LiteralPath 'docs\releases\linear-static-3d-euler-beam-release.md' -Destination 'docs\linear-static-3d-euler-beam\release.md'
```

Expected: all 12 sources disappear and all 12 destinations exist without content rewriting.

- [ ] **Step 3: Move the MITC4 evidence using this exact mapping**

```powershell
Move-Item -LiteralPath 'docs\requirements\linear-static-mitc4-shell.md' -Destination 'docs\linear-static-mitc4-shell\requirements.md'
Move-Item -LiteralPath 'docs\research\linear-static-mitc4-shell-research.md' -Destination 'docs\linear-static-mitc4-shell\research.md'
Move-Item -LiteralPath 'docs\formulations\mitc4-shell-formulation.md' -Destination 'docs\linear-static-mitc4-shell\formulation.md'
Move-Item -LiteralPath 'docs\numerical-reviews\linear-static-mitc4-shell-review.md' -Destination 'docs\linear-static-mitc4-shell\numerical-review.md'
Move-Item -LiteralPath 'docs\reference-models\linear-static-mitc4-shell-reference-models.md' -Destination 'docs\linear-static-mitc4-shell\reference-model.md'
Move-Item -LiteralPath 'docs\io-definitions\linear-static-mitc4-shell-io.md' -Destination 'docs\linear-static-mitc4-shell\io.md'
Move-Item -LiteralPath 'docs\implementation-plans\linear-static-mitc4-shell-implementation-plan.md' -Destination 'docs\linear-static-mitc4-shell\implementation-plan.md'
Move-Item -LiteralPath 'docs\build-test-reports\linear-static-mitc4-shell-build-test.md' -Destination 'docs\linear-static-mitc4-shell\build-test.md'
Move-Item -LiteralPath 'docs\reference-verifications\linear-static-mitc4-shell-reference-verification.md' -Destination 'docs\linear-static-mitc4-shell\reference-comparison.md'
Move-Item -LiteralPath 'docs\physics-evaluations\linear-static-mitc4-shell-physics-evaluation.md' -Destination 'docs\linear-static-mitc4-shell\physics-evaluation.md'
Move-Item -LiteralPath 'docs\releases\linear-static-mitc4-shell-release.md' -Destination 'docs\linear-static-mitc4-shell\release.md'
```

Expected: all 11 sources disappear and all 11 destinations exist. Do not create `implementation-report.md` because no historical MITC4 implementation report exists.

- [ ] **Step 4: Add the Euler beam coordination inventory**

Create `docs/linear-static-3d-euler-beam/coordination.md` with this evidence, preserving the already-approved release verdict:

```markdown
# Linear Static 3D Euler Beam Coordination Report

## Metadata

- feature_id: linear-static-3d-euler-beam
- status: completed
- owner_agent: coordinator-agent
- date: 2026-08-15
- migration_note: Existing evidence was relocated without rerunning workflow gates.

## Worklist

| stage | owner | status | evidence |
| --- | --- | --- | --- |
| 1. requirements | requirement-agent | passed | `requirements.md` |
| 2. research | research-agent | passed | `research.md` |
| 3. formulation | formulation-agent | passed | `formulation.md` |
| 4. numerical and reference | numerical-review-agent | passed | `numerical-review.md`; `reference-model.md` |
| 5. I/O | io-definition-agent | passed | `io.md` |
| 6. implementation and verification | implementation-planning-agent; implementation-agent | passed | `implementation-plan.md`; `implementation-report.md`; `build-test.md`; `reference-comparison.md` |
| 7. physics | physics-evaluation-agent | passed | `physics-evaluation.md` |
| 8. release | release-agent | passed | `release.md` |

## Current Progress

- active_sub_agent: none
- next_handoff: none
- closure_evidence: `release.md` status `ready-for-release`
- workflow_disposition: completed

## Decision Log

| date | decision | evidence | rationale |
| --- | --- | --- | --- |
| 2026-08-15 | Record migrated workflow as completed | `release.md` | Preserve the existing release verdict without retroactive gate execution. |

## Blockers and Rework

- active_blockers: none
- correction_attempt_count: 0
- needs_user_decision: false
```

- [ ] **Step 5: Add the MITC4 coordination inventory**

Create `docs/linear-static-mitc4-shell/coordination.md` with this content:

```markdown
# Linear Static MITC4 Shell Coordination Report

## Metadata

- feature_id: linear-static-mitc4-shell
- status: completed
- owner_agent: coordinator-agent
- date: 2026-08-15
- migration_note: Existing evidence was relocated without rerunning workflow gates.

## Worklist

| stage | owner | status | evidence |
| --- | --- | --- | --- |
| 1. requirements | requirement-agent | passed | `requirements.md` |
| 2. research | research-agent | passed | `research.md` |
| 3. formulation | formulation-agent | passed | `formulation.md` |
| 4. numerical and reference | numerical-review-agent | passed | `numerical-review.md`; `reference-model.md` |
| 5. I/O | io-definition-agent | passed | `io.md` |
| 6. implementation and verification | implementation-planning-agent; implementation-agent | passed | `implementation-plan.md`; `build-test.md`; `reference-comparison.md` |
| 7. physics | physics-evaluation-agent | passed | `physics-evaluation.md` |
| 8. release | release-agent | passed | `release.md` |

## Current Progress

- active_sub_agent: none
- next_handoff: none
- closure_evidence: `release.md` status `ready-for-release`
- workflow_disposition: completed
- historical_gap: No standalone `implementation-report.md` existed before migration; no replacement was fabricated.

## Decision Log

| date | decision | evidence | rationale |
| --- | --- | --- | --- |
| 2026-08-15 | Record migrated workflow as completed | `release.md` | Preserve the existing release verdict without retroactive gate execution. |

## Blockers and Rework

- active_blockers: none
- correction_attempt_count: 0
- needs_user_decision: false
```

- [ ] **Step 6: Remove the old output-folder README files**

Delete only these files with `apply_patch`; do not recursively delete directories:

```text
docs/coordination/README.md
docs/requirements/README.md
docs/research/README.md
docs/formulations/README.md
docs/numerical-reviews/README.md
docs/io-definitions/README.md
docs/reference-models/README.md
docs/implementation-plans/README.md
docs/build-test-reports/README.md
docs/corrections/README.md
docs/reference-verifications/README.md
docs/physics-evaluations/README.md
docs/releases/README.md
```

- [ ] **Step 7: Run the bundle contract test**

Run:

```powershell
uv run --with pytest python -m pytest tests/test_agent_skill_workflow_contract.py::test_existing_feature_artifacts_are_bundled -v
```

Expected: PASS. Broken links are allowed temporarily and are repaired in Task 6.

- [ ] **Step 8: Commit the evidence migration**

```powershell
git add -A docs/linear-static-3d-euler-beam docs/linear-static-mitc4-shell docs/coordination docs/requirements docs/research docs/formulations docs/numerical-reviews docs/io-definitions docs/reference-models docs/implementation-plans docs/build-test-reports docs/corrections docs/reference-verifications docs/physics-evaluations docs/releases
git commit -m "docs: group solver evidence by feature"
```

---

### Task 3: Merge Reference Model into Numerical Review

**Files:**

- Modify: `.codex/agents/numerical-review-agent.toml:1`
- Delete: `.codex/agents/reference-model-agent.toml`
- Modify: `.codex/skills/fesa-numerical-review/SKILL.md:1`
- Modify: `.codex/skills/fesa-numerical-review/agents/openai.yaml:1`
- Delete: `.codex/skills/fesa-reference-models/SKILL.md`
- Delete: `.codex/skills/fesa-reference-models/agents/openai.yaml`
- Test: `tests/test_agent_skill_workflow_contract.py::test_numerical_review_absorbs_reference_model_contract`

**Interfaces:**

- Consumes: `requirements.md`, `research.md`, `formulation.md`, stored `reference/` artifacts, and the approved tolerance contract.
- Produces: `numerical-review.md` and `reference-model.md` with status `pass-for-io-definition` when both reviews pass.

- [ ] **Step 1: Expand the Numerical Review Agent mission and inputs**

In `.codex/agents/numerical-review-agent.toml`, retain all math/numerical checks and add these exact responsibilities:

```text
- Act as a sub-agent dispatched by Coordinator Agent for the consolidated numerical/reference gate.
- Inventory exact existing reference input and required CSV paths without modifying them.
- Define blocking and warning-only quantities, source identity/components, row prechecks, and approved tolerance.
- Produce docs/<feature-id>/numerical-review.md and docs/<feature-id>/reference-model.md.
- Hand both reports to I/O Definition Agent through Coordinator Agent.
```

Use this input order:

```text
1. Coordinator handoff and user constraints.
2. AGENTS.md and docs/SOLVER_AGENT_DESIGN.md.
3. docs/<feature-id>/requirements.md.
4. docs/<feature-id>/research.md.
5. docs/<feature-id>/formulation.md.
6. Existing stored reference artifacts under reference/, read-only.
```

The agent must not require `io.md`. It defines logical quantities and source identity; I/O Definition owns the final HDF5 dataset projection.

- [ ] **Step 2: Define the two-document output and statuses**

Keep the existing Numerical Review report sections and add a separate Reference Model report contract with:

```text
Metadata
Reference Acceptance Scope
Reference Case Inventory
Source Identity and Component Contract
Row Prechecks
Tolerance and Blocking/Warning Policy
Open Issues and I/O Handoff
```

Use only these consolidated statuses:

```text
pass-for-io-definition
needs-formulation-revision
needs-research
needs-reference-artifacts
needs-user-decision
blocked
```

- [ ] **Step 3: Merge the two skill workflows**

Update `.codex/skills/fesa-numerical-review/SKILL.md` so its frontmatter description triggers for both numerical review and reference-case readiness. Its workflow must include:

```text
FORMULATION REVIEW -> REFERENCE CASE INVENTORY -> CLASSIFY -> REPORT -> I/O HANDOFF
```

The Output Contract must name:

```text
docs/<feature-id>/numerical-review.md
docs/<feature-id>/reference-model.md
```

Absorb exact-path inventory, blocking/warning quantities, source identity/component matching,
missing/extra/duplicate/nonfinite row prechecks, approved tolerance, and read-only artifact boundaries
from the retiring skill. Do not include final HDF5 dataset paths; route that mapping to I/O Definition.

- [ ] **Step 4: Regenerate the consolidated skill UI metadata**

Run:

```powershell
$generator = Join-Path $env:USERPROFILE '.codex\skills\.system\skill-creator\scripts\generate_openai_yaml.py'
python $generator '.codex\skills\fesa-numerical-review' `
  --interface 'display_name=FESA Numerical and Reference Review' `
  --interface 'short_description=Review numerical and reference readiness' `
  --interface 'default_prompt=Use $fesa-numerical-review to review FESA numerical and reference-model readiness.'
```

Expected: `agents/openai.yaml` contains the three quoted interface values and the default prompt names `$fesa-numerical-review`.

- [ ] **Step 5: Delete the absorbed agent and skill files**

Delete the three retiring files with `apply_patch`:

```text
.codex/agents/reference-model-agent.toml
.codex/skills/fesa-reference-models/SKILL.md
.codex/skills/fesa-reference-models/agents/openai.yaml
```

The empty `.codex/skills/fesa-reference-models/` directory then disappears from Git.

- [ ] **Step 6: Run the focused consolidation test**

Run:

```powershell
uv run --with pytest python -m pytest tests/test_agent_skill_workflow_contract.py::test_numerical_review_absorbs_reference_model_contract -v
```

Expected: PASS.

- [ ] **Step 7: Commit the numerical/reference consolidation**

```powershell
git add -A .codex/agents/numerical-review-agent.toml .codex/agents/reference-model-agent.toml .codex/skills/fesa-numerical-review .codex/skills/fesa-reference-models
git commit -m "refactor: merge reference model into numerical review"
```

---

### Task 4: Merge Build/Test and Reference Comparison into Implementation

**Files:**

- Modify: `.codex/agents/implementation-agent.toml:1`
- Delete: `.codex/agents/build-test-executor-agent.toml`
- Delete: `.codex/agents/reference-verification-agent.toml`
- Modify: `.codex/skills/fesa-cpp-msvc-tdd/SKILL.md:1`
- Modify: `.codex/skills/fesa-cpp-msvc-tdd/agents/openai.yaml:1`
- Delete: `.codex/skills/fesa-reference-comparison/SKILL.md`
- Delete: `.codex/skills/fesa-reference-comparison/agents/openai.yaml`
- Test: `tests/test_agent_skill_workflow_contract.py::test_implementation_absorbs_build_test_and_reference_comparison`
- Test: `tests/test_agent_skill_workflow_contract.py::test_agent_inventory_is_consolidated`
- Test: `tests/test_agent_skill_workflow_contract.py::test_project_skill_inventory_is_consolidated`

**Interfaces:**

- Consumes: `implementation-plan.md`, all upstream feature documents, generated `results.h5`, exact reference input/CSV paths, `.harness/config.json`, and the unchanged Harness execution contract.
- Produces: `implementation-report.md`, `build-test.md`, and `reference-comparison.md`; success hands `pass-for-physics-evaluation` to Coordinator.

- [ ] **Step 1: Expand the Implementation Agent execution contract**

In `.codex/agents/implementation-agent.toml`, preserve the current Harness Step ownership rules and replace the downstream-only validation handoff with this full sequence:

```text
RED -> OBSERVED FAILURE -> MINIMAL GREEN -> FOCUSED VERIFY
    -> FULL MSVC BUILD/CTEST -> ARTIFACT CHECK
    -> COMPARE -> CLASSIFY -> REPORT
```

Add exact ownership of:

```text
docs/<feature-id>/implementation-report.md
docs/<feature-id>/build-test.md
docs/<feature-id>/reference-comparison.md
```

The agent remains forbidden from modifying requirements, formulation, numerical/reference contracts,
I/O contracts, tolerance policies, declared inputs, or Abaqus reference CSV files.

- [ ] **Step 2: Absorb Build/Test reporting**

Move these requirements from the retiring Build/Test profile into Implementation:

```text
- Resolve commands from .harness/config.json first, then project defaults.
- Record command, exit code, duration, stdout/stderr tail, failed test names, and environment.
- Classify configure, compile, link, test, reference-comparison, harness, environment, and upstream-contract failures.
- Stop after the first decisive failure unless the implementation plan explicitly requires another diagnostic command.
- Preserve MSVC x64 Debug and CTest command order.
```

`build-test.md` keeps the historical Build/Test report sections but sets `owner_agent: implementation-agent`.

- [ ] **Step 3: Absorb Reference Comparison reporting**

Move these requirements from the retiring Reference Verification profile into Implementation:

```text
ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT
```

Require exact declared input/CSV paths, generated `results.h5`, HDF5 projection from `io.md`,
source identity/component matching, row uniqueness/finite checks, and approved tolerance. Reject
missing, extra, duplicate, and nonfinite required rows before tolerance. Preserve warning-only behavior.

Use these final statuses:

```text
in-progress
pass-for-physics-evaluation
needs-correction
needs-reference-artifacts
needs-environment-fix
needs-upstream-decision
blocked
```

- [ ] **Step 4: Expand `fesa-cpp-msvc-tdd`**

Update its frontmatter and body to cover planning, TDD implementation, build/test reporting,
correction, and reference comparison. The Output Contract must name:

```text
docs/<feature-id>/implementation-plan.md
docs/<feature-id>/implementation-report.md
docs/<feature-id>/build-test.md
docs/<feature-id>/reference-comparison.md
docs/<feature-id>/corrections.md
```

Include the literal workflow marker used by the test:

```text
ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT
```

Send `pass-for-physics-evaluation` evidence to Physics Evaluation Agent through Coordinator Agent.

- [ ] **Step 5: Regenerate the consolidated skill UI metadata**

Run:

```powershell
$generator = Join-Path $env:USERPROFILE '.codex\skills\.system\skill-creator\scripts\generate_openai_yaml.py'
python $generator '.codex\skills\fesa-cpp-msvc-tdd' `
  --interface 'display_name=FESA C++ TDD and Verification' `
  --interface 'short_description=Implement and verify FESA C++ work' `
  --interface 'default_prompt=Use $fesa-cpp-msvc-tdd to plan, implement, build, test, and reference-verify FESA C++ work.'
```

Expected: the default prompt explicitly names `$fesa-cpp-msvc-tdd`.

- [ ] **Step 6: Delete the absorbed agent and skill files**

Delete with `apply_patch`:

```text
.codex/agents/build-test-executor-agent.toml
.codex/agents/reference-verification-agent.toml
.codex/skills/fesa-reference-comparison/SKILL.md
.codex/skills/fesa-reference-comparison/agents/openai.yaml
```

- [ ] **Step 7: Run focused agent/skill inventory tests**

Run:

```powershell
uv run --with pytest python -m pytest `
  tests/test_agent_skill_workflow_contract.py::test_implementation_absorbs_build_test_and_reference_comparison `
  tests/test_agent_skill_workflow_contract.py::test_agent_inventory_is_consolidated `
  tests/test_agent_skill_workflow_contract.py::test_project_skill_inventory_is_consolidated -v
```

Expected: all three tests PASS.

- [ ] **Step 8: Commit the implementation/verification consolidation**

```powershell
git add -A .codex/agents/implementation-agent.toml .codex/agents/build-test-executor-agent.toml .codex/agents/reference-verification-agent.toml .codex/skills/fesa-cpp-msvc-tdd .codex/skills/fesa-reference-comparison
git commit -m "refactor: merge implementation verification workflow"
```

---

### Task 5: Make Coordinator the main orchestrator and normalize all sub-agent contracts

**Files:**

- Modify: `.codex/agents/coordinator-agent.toml:1`
- Modify: every ten surviving sub-agent TOML files under `.codex/agents/`.
- Modify: all eight surviving `fesa-*` `SKILL.md` files under `.codex/skills/`.
- Test: `tests/test_agent_skill_workflow_contract.py::test_agent_hierarchy_is_explicit`

**Interfaces:**

- Consumes: consolidated stage owners and canonical feature-document paths from Tasks 2–4.
- Produces: one main-agent dispatch protocol and ten bounded sub-agent return contracts.

- [ ] **Step 1: Rewrite the Coordinator mission and execution loop**

In `.codex/agents/coordinator-agent.toml`, identify it with the exact phrase `main agent` and define:

```text
INTAKE -> STATE AUDIT -> WORKLIST UPDATE -> SUB-AGENT DISPATCH
       -> EVIDENCE CHECK -> GATE DECISION -> STATUS REPORT
```

Require `docs/<feature-id>/coordination.md`, the eight-stage worklist, and these work-item statuses:

```text
pending | in-progress | passed | needs-rework | blocked
```

Each dispatch package must contain:

```text
feature_id
target_sub_agent
required_inputs
expected_outputs
acceptance_gate
stop_condition
missing_evidence
```

Coordinator must update `coordination.md` before dispatch and after evidence return. It must not
perform specialist math review, code implementation, build/test, comparison, physics, or release
judgment itself.

- [ ] **Step 2: Replace obsolete Coordinator states and routes**

Remove these intermediate routes and statuses:

```text
needs-reference-model
needs-build-test
needs-reference-verification
pass-for-reference-verification
```

Use this live workflow state set:

```text
intake
needs-requirements
needs-research
needs-formulation
needs-numerical-review
needs-io-definition
needs-implementation-plan
ready-for-implementation
needs-implementation
needs-correction
needs-physics-evaluation
needs-release
ready-for-release
completed
needs-user-decision
blocked
```

Route reference artifact/tolerance gaps to Numerical Review, HDF5 projection gaps to I/O Definition,
compile/test/comparison failures to Implementation first, and repeated or unclear implementation
failures to Correction. Stop automatic rework when the same classification reaches two attempts.

- [ ] **Step 3: Mark all specialist profiles as sub-agents**

Add this invariant to every surviving non-Coordinator TOML:

```text
- You are a sub-agent dispatched by Coordinator Agent.
- Work only on the assigned stage and declared docs/<feature-id>/ outputs.
- Do not dispatch peer agents or advance the workflow yourself.
- Return output paths, status, evidence summary, and blockers to Coordinator Agent.
```

Preserve each profile's technical hard boundaries and `model_reasoning_effort = "extra high"`.

- [ ] **Step 4: Normalize surviving agent paths and handoffs**

Apply these exact path/owner changes:

| Agent | Reads | Writes or returns |
| --- | --- | --- |
| Requirement | `docs/<feature-id>/requirements.md` when revising | `requirements.md`; theory to Research; reference acceptance to Numerical Review |
| Research | `requirements.md` | `research.md`; formulation evidence to Formulation; benchmark/reference evidence to Numerical Review |
| Formulation | `requirements.md`, `research.md` | `formulation.md`; all review evidence to Numerical Review |
| Numerical Review | `requirements.md`, `research.md`, `formulation.md` | `numerical-review.md`, `reference-model.md`; both to I/O Definition |
| I/O Definition | upstream bundle documents including `reference-model.md` | `io.md`; final HDF5 projection to Implementation Planning |
| Implementation Planning | all upstream bundle documents | `implementation-plan.md`; one handoff to Implementation |
| Implementation | all upstream bundle documents and `implementation-plan.md` | `implementation-report.md`, `build-test.md`, `reference-comparison.md` |
| Correction | Implementation-owned reports and code/test/CMake evidence | `corrections.md`; rerun request to Implementation |
| Physics Evaluation | `reference-comparison.md`, `reference-model.md`, physics contracts | `physics-evaluation.md`; model gaps to Numerical Review |
| Release | all feature bundle evidence | `release.md`; closure recommendation to Coordinator |

- [ ] **Step 5: Normalize all surviving FESA skill paths and handoffs**

Update the Inputs, Output Contract, Quality Gate, and Handoff sections of these files:

```text
.codex/skills/fesa-requirements-baseline/SKILL.md
.codex/skills/fesa-research-evidence/SKILL.md
.codex/skills/fesa-formulation-spec/SKILL.md
.codex/skills/fesa-numerical-review/SKILL.md
.codex/skills/fesa-io-contract/SKILL.md
.codex/skills/fesa-cpp-msvc-tdd/SKILL.md
.codex/skills/fesa-physics-sanity/SKILL.md
.codex/skills/fesa-release-readiness/SKILL.md
```

Every feature-document path must start with `docs/<feature-id>/`. Remove all handoffs to retired
agents and skills. Preserve `fem-theory-query` and project-local `harness` usage where already valid.

- [ ] **Step 6: Run the hierarchy test**

Run:

```powershell
uv run --with pytest python -m pytest tests/test_agent_skill_workflow_contract.py::test_agent_hierarchy_is_explicit -v
```

Expected: PASS.

- [ ] **Step 7: Commit the Coordinator and sub-agent contracts**

```powershell
git add .codex/agents .codex/skills
git commit -m "refactor: make coordinator the main workflow agent"
```

---

### Task 6: Align repository guidance and repair document links

**Files:**

- Modify: `AGENTS.md:1`
- Modify: `docs/SOLVER_AGENT_DESIGN.md:1`
- Modify: `docs/SOLVER_SKILL_DESIGN.md:1`
- Modify: moved files under `docs/linear-static-3d-euler-beam/` and `docs/linear-static-mitc4-shell/` only where old paths appear.
- Modify: tracked Markdown under `docs/superpowers/plans/`, `docs/superpowers/specs/`, and `phases/` only where an old feature-document path must be repaired.
- Test: `tests/test_agent_skill_workflow_contract.py::test_live_contracts_have_no_retired_names_or_paths`
- Test: `tests/test_agent_skill_workflow_contract.py::test_live_guidance_declares_eight_stage_workflow`
- Test: `tests/test_agent_skill_workflow_contract.py::test_agent_toml_and_skill_ui_metadata_are_parseable`

**Interfaces:**

- Consumes: canonical agent/skill contracts and bundle paths from Tasks 2–5.
- Produces: one consistent human-readable workflow with no retired live references and valid historical links.

- [ ] **Step 1: Rewrite the AGENTS workflow sections**

In `AGENTS.md`:

1. Replace agent-oriented source-of-truth folders with `docs/<feature-id>/`.
2. Replace the numbered process with the approved eight stages.
3. Replace the Agent/Skill Workflow table with the exact stage/owner/skill/output mapping from the design.
4. State that Coordinator is the main agent and every other profile is a sub-agent.
5. Keep Correction outside the numbered stages as on-demand rework.
6. Keep the Implementation Planning Agent's project-local `harness` approval/materialization contract unchanged.
7. Remove retired agent names, retired skill names, and retired output paths.

- [ ] **Step 2: Rewrite `docs/SOLVER_AGENT_DESIGN.md` around the surviving roles**

The document must contain:

```text
Coordinator main-agent orchestration
10 surviving sub-agent roles
8-stage development-process table
8-stage Mermaid workflow
Numerical/reference merged gate
I/O-owned final HDF5 projection
Implementation-owned TDD/build/test/reference comparison gate
Correction rework loop
docs/<feature-id>/ artifact tree
```

Remove standalone Reference Model, Build/Test Executor, and Reference Verification sections.

- [ ] **Step 3: Rewrite `docs/SOLVER_SKILL_DESIGN.md` around eight workflow skills**

List the eight surviving `fesa-*` skills exactly as specified in the design. Document that:

- `fesa-numerical-review` owns both numerical and reference readiness procedures.
- `fesa-cpp-msvc-tdd` owns implementation planning, TDD, MSVC validation, correction, and reference comparison procedures.
- `fem-theory-query`, project-local `harness`, and `review` remain supporting skills.
- Skill output paths use only `docs/<feature-id>/`.

Update the validation count from ten workflow skills to eight.

- [ ] **Step 4: Repair exact feature-document paths in moved and historical Markdown**

Use `rg` to inventory references before editing:

```powershell
rg -n --hidden --glob '!.git/**' --glob '*.md' `
  'docs/(requirements|research|formulations|numerical-reviews|io-definitions|reference-models|implementation-plans|build-test-reports|corrections|reference-verifications|physics-evaluations|releases|coordination)/' `
  AGENTS.md docs phases
```

Apply the Task 2 filename mapping with `apply_patch`. Update only path strings in historical
evidence and phase/spec/plan records; preserve their agent names, statuses, timestamps, commands,
results, and verdict prose. The current consolidation design and this plan may retain old paths
inside migration descriptions because those references describe sources being removed.

- [ ] **Step 5: Run live-contract and metadata tests**

Run:

```powershell
uv run --with pytest python -m pytest `
  tests/test_agent_skill_workflow_contract.py::test_live_contracts_have_no_retired_names_or_paths `
  tests/test_agent_skill_workflow_contract.py::test_live_guidance_declares_eight_stage_workflow `
  tests/test_agent_skill_workflow_contract.py::test_agent_toml_and_skill_ui_metadata_are_parseable -v
```

Expected: all three tests PASS.

- [ ] **Step 6: Commit the live workflow documentation**

```powershell
git add AGENTS.md docs phases
git commit -m "docs: align consolidated solver workflow"
```

---

### Task 7: Run full validation and close the refactor

**Files:**

- Verify: all files changed in Tasks 1–6.
- Do not modify: solver C++, C++ tests, CMake/CTest files, Harness hooks/executor, or reference artifacts unless a validation check reveals an accidental edit that must be reverted from this task's own changes.

**Interfaces:**

- Consumes: the complete consolidated workflow.
- Produces: fresh validation evidence and a clean implementation handoff.

- [ ] **Step 1: Run the focused workflow-contract suite**

```powershell
uv run --with pytest python -m pytest tests/test_agent_skill_workflow_contract.py -v
```

Expected: 9 tests PASS, 0 fail.

- [ ] **Step 2: Run the complete Python suite**

```powershell
uv run --with pytest python -m pytest -v -rs
```

Expected: all repository Python tests PASS.

- [ ] **Step 3: Validate every remaining project-local skill**

```powershell
$validator = Join-Path $env:USERPROFILE '.codex\skills\.system\skill-creator\scripts\quick_validate.py'
$validationFailed = $false
Get-ChildItem -LiteralPath '.codex\skills' -Directory | Sort-Object Name | ForEach-Object {
  python $validator $_.FullName
  if ($LASTEXITCODE -ne 0) { $validationFailed = $true }
}
if ($validationFailed) { exit 1 }
```

Expected: every remaining skill reports valid frontmatter and naming.

- [ ] **Step 4: Check the final agent/skill inventory and working-tree scope**

```powershell
Get-ChildItem -LiteralPath '.codex\agents' -Filter '*.toml' | Sort-Object Name | Select-Object -ExpandProperty Name
Get-ChildItem -LiteralPath '.codex\skills' -Directory | Sort-Object Name | Select-Object -ExpandProperty Name
git diff --check
git status --short
```

Expected:

- 11 agent TOMLs: one Coordinator plus ten sub-agents.
- 9 project-local skill directories: eight FESA workflow skills plus `fem-theory-query`.
- `git diff --check` exits 0.
- No solver C++, C++ test, CMake, hook, executor, or `reference/` artifact appears in the task diff.

- [ ] **Step 5: Confirm no final C++ validation is required**

Inspect the changed-file list:

```powershell
git diff --name-only HEAD~6..HEAD
```

Expected: only agent/skill configuration, Markdown, and the Python contract test changed. Record
that MSVC build and CTest were not run because no C++ production, C++ test, or CMake/CTest file
changed.

- [ ] **Step 6: Commit only validation-driven corrections if any were required**

If Steps 1–5 required corrections, stage only those corrections and commit:

```powershell
git add -A
git commit -m "fix: correct consolidated workflow contracts"
```

If no corrections were required, do not create an empty commit.

---

## Acceptance Traceability

| Approved requirement | Implemented by | Verified by |
| --- | --- | --- |
| Merge reference-model stage into numerical review | Task 3 | `test_numerical_review_absorbs_reference_model_contract` |
| Merge Build/Test and Reference Comparison into Implementation | Task 4 | `test_implementation_absorbs_build_test_and_reference_comparison` |
| Merge the corresponding skills | Tasks 3–4 | focused merge tests and skill validation |
| Store evidence by feature under `docs/<feature-id>/` | Task 2 | `test_existing_feature_artifacts_are_bundled` |
| Make Coordinator the main orchestrator | Task 5 | `test_agent_hierarchy_is_explicit` |
| Focus Coordinator output on worklist and progress | Tasks 2 and 5 | coordination documents and hierarchy test |
| Preserve historical evidence | Tasks 2 and 6 | migration diff review and bundle inventory |
| Remove stale live references | Tasks 5–6 | `test_live_contracts_have_no_retired_names_or_paths` |
| Keep configs and skill metadata valid | Tasks 3–7 | TOML/metadata pytest and `quick_validate.py` |
