Geoeconomics Eval-Ready 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: Move geoeconomics from a deferred candidate shell to eval_ready with a subject-owned fixture pack, manifest-backed signals, method-only borrowing, mixed-adjacent coverage, and near-miss guards.
Architecture: Reuse the existing runtime subject contract and subject router evaluation gate. Geoeconomics should be measurable only under the eval-ready gate through evaluation_subjects=["geoeconomics"]; default runtime behavior remains suppressed until a later promotion-ready/runtime-enabled review.
Tech Stack: Python 3, unittest, JSON subject router fixtures, YAML runtime subject manifests, Qiongli subject router evaluation tooling.
File Map
- Modify:
tests/test_subject_router_eval.py- Add geoeconomics fixture inventory coverage.
- Add a real fixture-pack eval-ready gate test.
- Add a runtime-enabled guard proving checked-in
eval_readyis not default activation. - Remove geoeconomics from the deferred-shell candidate loop.
- Modify:
tests/test_subject_contracts.py- Classify geoeconomics as
eval_readyinstead of a deferred candidate. - Add manifest structure checks for signal groups, method lenses, subject skill, evaluation pack, and metrics.
- Classify geoeconomics as
- Modify:
content/subjects/geoeconomics/runtime-subject.yaml- Set
activation_status: eval_ready. - Add geoeconomics
subject_skill. - Add method, data/outcome, venue, and theory/construct signal groups.
- Add method lenses and
evaluation_pack: tests/fixtures/subject_router_eval/geoeconomics.
- Set
- Create:
tests/fixtures/subject_router_eval/geoeconomics/*.json- Add clear positive, method-only borrow, confirmed-subject, mixed-adjacent, and near-miss fixtures.
- Modify:
docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md- Record geoeconomics as eval-ready.
- Leave economics-accounting as the remaining deferred candidate.
Execution Notes
- Do not promote geoeconomics to
runtime_enabledin this slice. - Do not change finance, economics, accounting, business, or political-economy routing behavior.
- Avoid triggering built-in finance/economics priority in geoeconomics fixtures unless the fixture explicitly treats that as an accepted adjacent subject.
- Do not change provider configuration, local-agent execution, packaging, or release automation.
- Group commits by content:
feat(subjects): mark geoeconomics eval readydocs(roadmap): record geoeconomics eval readiness
Task 1: Add Geoeconomics Gate Tests
Files:
Modify:
tests/test_subject_router_eval.pyModify:
tests/test_subject_contracts.py[ ] Step 1: Add fixture inventory expectations
Add this required_geoeconomics_ids block next to the existing political-economy inventory block:
required_geoeconomics_ids = {
"geoeconomics_clear_sanctions_statecraft",
"geoeconomics_method_only_statecraft_borrow",
"geoeconomics_confirmed_statecraft_audit",
"geoeconomics_mixed_finance_supply_chain_exposure",
"geoeconomics_near_miss_supply_chain_ops",
"geoeconomics_near_miss_geopolitics_brief",
}
self.assertTrue(required_geoeconomics_ids.issubset(set(ids)))
geoeconomics_tags = {
tag
for case_id in required_geoeconomics_ids
for tag in list(cases_by_id[case_id].tags or [])
}
self.assertTrue(
{
"clear_positive",
"method_only_borrow",
"mixed_subject",
"near_miss",
"confirmed_subject",
}.issubset(geoeconomics_tags)
)- [ ] Step 2: Add eval-ready gate test
Add near the political-economy gate tests:
def test_geoeconomics_eval_ready_gate_passes_real_fixture_pack(self) -> None:
cases = load_eval_cases(FIXTURE_DIR)
report = subject_gate_report("geoeconomics", cases, gate="eval-ready")
self.assertEqual(report["subject"], "geoeconomics")
self.assertEqual(report["activation_status"], "eval_ready")
self.assertTrue(report["eligible_for_eval_ready"])
self.assertFalse(report["eligible_for_runtime_enabled"])
self.assertEqual(report["blocking_failures"], [])
self.assertEqual(report["metrics"]["decision_accuracy"], 1.0)
self.assertEqual(report["metrics"]["primary_subject_accuracy"], 1.0)
self.assertEqual(report["metrics"]["suggest_subject_precision"], 1.0)
self.assertEqual(report["metrics"]["forbidden_subject_accuracy"], 1.0)
self.assertEqual(report["metrics"]["method_lens_accuracy"], 1.0)
self.assertEqual(report["metrics"]["all_case_checks_passed"], 1.0)
self.assertEqual(report["metrics"]["near_miss_false_positives"], 0)- [ ] Step 3: Add runtime-enabled guard
Add:
def test_geoeconomics_runtime_enabled_gate_blocks_eval_ready_manifest(self) -> None:
cases = load_eval_cases(FIXTURE_DIR)
report = subject_gate_report("geoeconomics", cases, gate="runtime-enabled")
self.assertEqual(report["activation_status"], "eval_ready")
self.assertFalse(report["eligible_for_eval_ready"])
self.assertFalse(report["eligible_for_runtime_enabled"])
self.assertIn("activation_status is eval_ready", report["blocking_failures"])- [ ] Step 4: Update deferred candidate loop
Change the deferred subject tuple in test_candidate_subject_eval_ready_gate_reports_deferred_shell_reasons to contain only:
deferred_subjects = (
"economics-accounting",
)- [ ] Step 5: Update contract classification
In tests/test_subject_contracts.py, classify geoeconomics as eval_ready and remove it from the deferred candidate shell set. Add a geoeconomics manifest test equivalent to the political-economy manifest test but checking:
contract.activation_status == "eval_ready"
contract.evaluation_pack == "tests/fixtures/subject_router_eval/geoeconomics"
contract.subject_skill == "content/subjects/geoeconomics/skills/geoeconomic-statecraft-auditor.md"- [ ] Step 6: Run RED
Run:
.venv/bin/python -m unittest tests.test_subject_router_eval.SubjectRouterEvalTests.test_geoeconomics_eval_ready_gate_passes_real_fixture_pack -qExpected before implementation:
FAIL: activation_status is candidateTask 2: Add Geoeconomics Runtime Manifest
Files:
Modify:
content/subjects/geoeconomics/runtime-subject.yaml[ ] Step 1: Promote only to eval-ready
Set:
activation_status: eval_ready
subject_skill: content/subjects/geoeconomics/skills/geoeconomic-statecraft-auditor.md
evaluation_pack: tests/fixtures/subject_router_eval/geoeconomics- [ ] Step 2: Add method-only signals and lenses
Use method-only signals for:
statecraft-instrument-auditsupply-chain-exposure-design
Method lenses:
geoeconomic-statecraft-audit->content/subjects/geoeconomics/skills/geoeconomic-statecraft-auditor.mdsupply-chain-exposure-design->content/subjects/geoeconomics/overlays/skills/study-designer.mdgeoeconomic-positioning->content/subjects/geoeconomics/overlays/skills/manuscript-architect.md[ ] Step 3: Add subject-level signals
Subject-level signals must include at least:
- data/outcome: sanctions/export-control response, supply-chain exposure, target response, substitution/evasion.
- theory/construct: sender-target-instrument logic, strategic competition, economic statecraft mechanism.
Venue signals should include International Security, International Organization, Review of International Political Economy, and World Politics.
Task 3: Add Geoeconomics Fixtures
Files:
Create:
tests/fixtures/subject_router_eval/geoeconomics/clear_sanctions_statecraft.jsonCreate:
tests/fixtures/subject_router_eval/geoeconomics/method_only_statecraft_borrow.jsonCreate:
tests/fixtures/subject_router_eval/geoeconomics/confirmed_statecraft_audit.jsonCreate:
tests/fixtures/subject_router_eval/geoeconomics/mixed_finance_supply_chain_exposure.jsonCreate:
tests/fixtures/subject_router_eval/geoeconomics/near_miss_supply_chain_ops.jsonCreate:
tests/fixtures/subject_router_eval/geoeconomics/near_miss_geopolitics_brief.json[ ] Step 1: Add clear positive fixture
Use sender-target-instrument, sanctions/export controls, strategic objective, target response, and an international security venue. Under eval-ready, expect:
{
"decision": "recommend",
"primary_subject": "geoeconomics",
"suggest_subjects": ["geoeconomics"],
"forbidden_subjects": [],
"method_lenses": [
"geoeconomic-statecraft-audit",
"geoeconomic-positioning"
]
}Default expected should suppress subject suggestion and only borrow method lenses until runtime activation.
- [ ] Step 2: Add method-only borrow fixture
Use economic statecraft instrument-audit wording without subject-level sanctions, target-response, or strategic-competition signals. Expect primary auto, no geoeconomics suggestion, and method lens geoeconomic-statecraft-audit.
- [ ] Step 3: Add confirmed-subject fixture
Use active_subject: "geoeconomics" and subject_mode: "confirmed". Expect primary geoeconomics and no inferred suggestion requirement.
- [ ] Step 4: Add mixed-adjacent fixture
Mention finance adjacency only as market reaction or exposure, not enough to make finance primary. Under eval-ready, expect geoeconomics primary and allow finance as an adjacent subject if it appears.
- [ ] Step 5: Add near-miss fixtures
Supply-chain operations and geopolitics briefing near misses must remain core_only, with forbidden_subjects: ["geoeconomics"].
Task 4: Verify And Update Roadmap
Files:
Modify:
docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md[ ] Step 1: Run GREEN checks
Run:
.venv/bin/python -m unittest tests.test_subject_router_eval.SubjectRouterEvalTests.test_geoeconomics_eval_ready_gate_passes_real_fixture_pack -q
.venv/bin/python tooling/scripts/evaluate_subject_router.py --subject geoeconomics --gate eval-ready --jsonExpected:
eligible_for_eval_ready: true
blocking_failures: []
near_miss_false_positives: 0- [ ] Step 2: Run regressions
Run:
.venv/bin/python -m unittest tests.test_subject_router_eval tests.test_subject_contracts -q
git diff --checkExpected: all commands exit 0.
- [ ] Step 3: Update roadmap
Record geoeconomics as eval-ready and leave economics-accounting as the only deferred candidate subject.
- [ ] Step 4: Commit by content
Run:
git add content/subjects/geoeconomics/runtime-subject.yaml tests/test_subject_router_eval.py tests/test_subject_contracts.py tests/fixtures/subject_router_eval/geoeconomics
git commit -m "feat(subjects): mark geoeconomics eval ready"
git add docs/superpowers/plans/2026-07-06-geoeconomics-eval-ready.md docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md
git commit -m "docs(roadmap): record geoeconomics eval readiness"