Business Runtime Activation 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: Promote business from eval-ready to runtime-enabled while preserving method-only borrowed-lens behavior, mixed-subject precision, and practitioner near-miss safety.
Architecture: Treat activation as a small gated manifest-status change. First update tests and fixture gate expectations that encode the new runtime-enabled behavior, then flip the business manifest, update docs, and verify business/accounting/finance/economics gates together.
Tech Stack: Python 3, unittest/pytest, JSON router fixtures, YAML runtime subject manifests, Qiongli bridge modules, subject router evaluation tooling.
File Map
- Modify:
content/subjects/business/runtime-subject.yaml- Change business from
activation_status: eval_readytoactivation_status: runtime_enabled.
- Change business from
- Modify:
tests/fixtures/subject_router_eval/business/clear_management_theory_case_study.json- Replace the old runtime-enabled suppressed expectation with the promotion-ready business-positive expectation.
- Modify:
tests/fixtures/subject_router_eval/business/clear_marketing_platform_experiment.json- Replace the old runtime-enabled suppressed expectation with the promotion-ready business-positive expectation.
- Modify:
tests/fixtures/subject_router_eval/business/clear_organization_panel_manager_survey.json- Add a runtime-enabled expectation matching the existing promotion-ready business-positive expectation.
- Modify:
tests/fixtures/subject_router_eval/business/clear_strategic_management_capabilities.json- Add a runtime-enabled expectation matching the existing promotion-ready business-positive expectation.
- Modify:
tests/fixtures/subject_router_eval/business/locked_economics_borrow_business_positioning.json- Add a runtime-enabled expectation that keeps economics locked and allows business only as an accepted neighbor when the router suggests it.
- Modify:
tests/test_subject_contracts.py- Expect business to be runtime-enabled and keep all resource/signal checks.
- Modify:
tests/test_subject_router_eval.py- Replace real business eval-ready success assertions with runtime-enabled success assertions.
- Add real-manifest assertions that eval-ready and promotion-ready gates now reject business because business is already runtime-enabled.
- Keep patched eval-ready and promotion-ready tests for future candidates.
- Modify:
tests/test_subject_refinement.py- Expect real business manifest default runtime to suggest business for clear scholarly business evidence.
- Add or update method-only real-manifest business tests so Gioia/business method wording still borrows lenses without suggesting business.
- Modify:
docs/reference/cli.md- Describe business as runtime-enabled after the activation PR and keep promotion-ready as the pre-activation gate for future subjects.
- Modify:
docs/advanced/publish-pypi.md- Move business from eval-ready/promotion-ready review to runtime-enabled release verification.
- Modify:
docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md- Mark business runtime activation completed and move the next roadmap slot to Stage 5 explainability or the next subject spec.
Execution Notes
- Execute from updated
devon a fresh branch, for examplefeature/business-runtime-enabled. - Use subagent-driven development:
- Task 1: fixture expectations and failing tests.
- Task 2: manifest activation and runtime behavior.
- Task 3: docs and roadmap.
- Task 4: final verification and PR prep.
- Commit after each task with narrow Conventional Commit messages.
- Do not activate political economy, geoeconomics, or economics-accounting.
- Do not change provider, literature search, Zotero, full-text, or local-agent behavior.
- No router code changes are expected. If the runtime-enabled gate fails after manifest and fixture expectation updates, stop and report the measured failure before changing business signal weights or router thresholds.
Task 1: Update Runtime Activation Tests And Fixtures
Files:
Modify:
tests/fixtures/subject_router_eval/business/clear_management_theory_case_study.jsonModify:
tests/fixtures/subject_router_eval/business/clear_marketing_platform_experiment.jsonModify:
tests/fixtures/subject_router_eval/business/clear_organization_panel_manager_survey.jsonModify:
tests/fixtures/subject_router_eval/business/clear_strategic_management_capabilities.jsonModify:
tests/fixtures/subject_router_eval/business/locked_economics_borrow_business_positioning.jsonModify:
tests/test_subject_contracts.pyModify:
tests/test_subject_router_eval.pyModify:
tests/test_subject_refinement.py[ ] Step 1: Update clear management runtime-enabled fixture expectation
In tests/fixtures/subject_router_eval/business/clear_management_theory_case_study.json, replace gate_expected["runtime-enabled"] with:
"runtime-enabled": {
"decision": "recommend",
"primary_subject": "business",
"suggest_subjects": [
"business"
],
"forbidden_subjects": [],
"method_lenses": [
"business-positioning",
"qualitative-transparency",
"construct-level-fit"
]
}This block should match the existing promotion-ready expectation.
- [ ] Step 2: Update clear marketing runtime-enabled fixture expectation
In tests/fixtures/subject_router_eval/business/clear_marketing_platform_experiment.json, replace gate_expected["runtime-enabled"] with:
"runtime-enabled": {
"decision": "recommend",
"primary_subject": "business",
"suggest_subjects": [
"business"
],
"forbidden_subjects": [],
"method_lenses": [
"business-positioning"
]
}This block should match the existing promotion-ready expectation.
- [ ] Step 3: Add organization-panel runtime-enabled fixture expectation
In tests/fixtures/subject_router_eval/business/clear_organization_panel_manager_survey.json, add this sibling of promotion-ready inside gate_expected:
"runtime-enabled": {
"decision": "recommend",
"primary_subject": "business",
"suggest_subjects": [
"business"
],
"forbidden_subjects": [],
"method_lenses": [
"business-positioning",
"construct-level-fit"
]
}- [ ] Step 4: Add strategic-management runtime-enabled fixture expectation
In tests/fixtures/subject_router_eval/business/clear_strategic_management_capabilities.json, add this sibling of promotion-ready inside gate_expected:
"runtime-enabled": {
"decision": "recommend",
"primary_subject": "business",
"suggest_subjects": [
"business"
],
"forbidden_subjects": [],
"method_lenses": [
"business-positioning"
]
}- [ ] Step 5: Add locked economics runtime-enabled neighbor expectation
In tests/fixtures/subject_router_eval/business/locked_economics_borrow_business_positioning.json, add this sibling of promotion-ready inside gate_expected:
"runtime-enabled": {
"decision": "keep_locked",
"primary_subject": "economics",
"suggest_subjects": [],
"allowed_neighbor_subjects": [
"business"
],
"forbidden_subjects": [],
"method_lenses": [
"business-positioning"
]
}The locked primary subject must remain economics.
- [ ] Step 6: Update business contract expectations
In tests/test_subject_contracts.py, rename:
def test_business_eval_ready_manifest_declares_signals_and_method_lenses(self) -> None:to:
def test_business_runtime_enabled_manifest_declares_signals_and_method_lenses(self) -> None:Inside that test, update:
self.assertEqual(contract.activation_status, "runtime_enabled")In test_default_repository_contracts_classify_runtime_enabled_and_candidates, update the business assertion:
self.assertEqual(subject_activation_status("business", contracts), "runtime_enabled")Run:
uv run python -m pytest tests/test_subject_contracts.py -qExpected before Task 2: FAIL because content/subjects/business/runtime-subject.yaml still says eval_ready.
- [ ] Step 7: Update real business subject gate tests
In tests/test_subject_router_eval.py, replace test_business_eval_ready_gate_passes_real_fixture_pack with:
def test_business_runtime_enabled_gate_passes_real_fixture_pack(self) -> None:
cases = load_eval_cases(FIXTURE_DIR)
report = subject_gate_report("business", cases, gate="runtime-enabled")
self.assertEqual(report["subject"], "business")
self.assertEqual(report["activation_status"], "runtime_enabled")
self.assertFalse(report["eligible_for_eval_ready"])
self.assertFalse(report["eligible_for_runtime_promotion"])
self.assertTrue(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)Replace test_business_runtime_enabled_gate_blocks_eval_ready_manifest with two real-manifest gate rejection tests:
def test_business_eval_ready_gate_blocks_runtime_enabled_manifest(self) -> None:
cases = load_eval_cases(FIXTURE_DIR)
report = subject_gate_report("business", cases, gate="eval-ready")
self.assertEqual(report["activation_status"], "runtime_enabled")
self.assertFalse(report["eligible_for_eval_ready"])
self.assertFalse(report["eligible_for_runtime_enabled"])
self.assertIn("activation_status is runtime_enabled", report["blocking_failures"])
def test_business_promotion_ready_gate_blocks_runtime_enabled_manifest(self) -> None:
cases = load_eval_cases(FIXTURE_DIR)
report = subject_gate_report("business", cases, gate="promotion-ready")
self.assertEqual(report["activation_status"], "runtime_enabled")
self.assertFalse(report["eligible_for_runtime_promotion"])
self.assertFalse(report["eligible_for_runtime_enabled"])
self.assertIn("activation_status is runtime_enabled", report["blocking_failures"])Keep the patched tests that prove eval-ready and promotion-ready gate semantics for future eval-ready subjects.
Run:
uv run python -m pytest tests/test_subject_router_eval.py -qExpected before Task 2: FAIL because the real business manifest still reports activation_status: eval_ready.
- [ ] Step 8: Update business CLI gate test
In tests/test_subject_router_eval.py, replace test_main_business_eval_ready_gate_json_has_consistent_thresholds with:
def test_main_business_runtime_enabled_gate_json_has_consistent_thresholds(self) -> None:
stdout = io.StringIO()
with contextlib.redirect_stdout(stdout):
exit_code = main(
["--subject", "business", "--gate", "runtime-enabled", "--json"]
)
report = json.loads(stdout.getvalue())
self.assertEqual(exit_code, 0)
self.assertEqual(report["threshold_failures"], [])
self.assertEqual(report["case_count"], report["subject_gate"]["case_count"])
self.assertTrue(report["subject_gate"]["eligible_for_runtime_enabled"])
self.assertFalse(report["subject_gate"]["eligible_for_runtime_promotion"])Expected before Task 2: FAIL because business has not been activated.
- [ ] Step 9: Update real business subject refinement expectations
In tests/test_subject_refinement.py, replace test_business_eval_ready_real_manifest_does_not_activate_in_default_runtime with:
def test_runtime_enabled_business_real_manifest_suggests_business(self) -> None:
packet = infer_subject_refinement(
{
"topic": "management theory case study",
"context": (
"Design a multiple case study using interviews with managers "
"to develop a management theory contribution for AMJ."
),
},
manifest_state=ProjectManifest(),
).to_packet()
self.assertEqual(packet["decision"], "suggest_subject")
self.assertEqual(packet["primary_subject"], "business")
self.assertIn(
"business",
[candidate["subject"] for candidate in packet["candidate_subjects"]],
)
self.assertIn("business-positioning", packet["method_lenses"])Add this method-only real-manifest guard near the business runtime tests:
def test_runtime_enabled_business_method_only_real_manifest_borrows_lens(self) -> None:
packet = infer_subject_refinement(
{
"topic": "qualitative coding",
"context": (
"Use the Gioia method with first-order concepts, "
"second-order themes, and aggregate dimensions to organize "
"qualitative coding."
),
},
manifest_state=ProjectManifest(),
).to_packet()
self.assertEqual(packet["decision"], "borrow_lens")
self.assertEqual(packet["primary_subject"], "auto")
self.assertNotIn(
"business",
[candidate["subject"] for candidate in packet["candidate_subjects"]],
)
self.assertIn("qualitative-transparency", packet["method_lenses"])Run:
uv run python -m pytest tests/test_subject_refinement.py -qExpected before Task 2: the clear-evidence runtime suggestion test fails because business remains eval-ready.
- [ ] Step 10: Commit Task 1
git add \
tests/fixtures/subject_router_eval/business/clear_management_theory_case_study.json \
tests/fixtures/subject_router_eval/business/clear_marketing_platform_experiment.json \
tests/fixtures/subject_router_eval/business/clear_organization_panel_manager_survey.json \
tests/fixtures/subject_router_eval/business/clear_strategic_management_capabilities.json \
tests/fixtures/subject_router_eval/business/locked_economics_borrow_business_positioning.json \
tests/test_subject_contracts.py \
tests/test_subject_router_eval.py \
tests/test_subject_refinement.py
git commit -m "test(subjects): prepare business runtime activation expectations"Task 2: Activate Business Manifest
Files:
Modify:
content/subjects/business/runtime-subject.yaml[ ] Step 1: Promote business activation status
In content/subjects/business/runtime-subject.yaml, change:
activation_status: eval_readyto:
activation_status: runtime_enabledDo not change overlay, subject_skill, signal_groups, method_lenses, or activation_gate.
- [ ] Step 2: Run focused tests
uv run python -m pytest \
tests/test_subject_contracts.py \
tests/test_subject_router_eval.py \
tests/test_subject_refinement.py \
-qExpected after the manifest change: PASS. If this command fails, inspect the first failing business case and report whether the failure is a fixture expectation mismatch or measured router over-activation. Do not change signal weights in this task.
- [ ] Step 3: Run business gate checks
uv run python tooling/scripts/evaluate_subject_router.py \
--subject business \
--gate runtime-enabled \
--jsonExpected: exit 0, eligible_for_runtime_enabled: true, and near_miss_false_positives: 0.
uv run python tooling/scripts/evaluate_subject_router.py \
--subject business \
--gate promotion-ready \
--jsonExpected: exit 1 with activation_status is runtime_enabled, because promotion-ready is only for checked-in eval-ready subjects.
- [ ] Step 4: Commit Task 2
git add content/subjects/business/runtime-subject.yaml
git commit -m "feat(subjects): activate business runtime subject"Task 3: Update Documentation For Business Runtime Activation
Files:
Modify:
docs/reference/cli.mdModify:
docs/advanced/publish-pypi.mdModify:
docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md[ ] Step 1: Update CLI subject gate docs
In docs/reference/cli.md, update the subject expansion gate section so:
For the current business runtime check, use the runtime-enabled gate:
```bash
uv run python tooling/scripts/evaluate_subject_router.py \
--subject business \
--gate runtime-enabled \
--json
```Keep the promotion-ready explanation, but describe it as the pre-activation review gate for future eval-ready subjects.
- [ ] Step 2: Update PyPI publish checklist
In docs/advanced/publish-pypi.md, ensure the subject runtime gate checks include:
uv run python tooling/scripts/evaluate_subject_router.py \
--subject business \
--gate runtime-enabled \
--jsonRemove wording that says business should remain below runtime activation after this activation PR.
- [ ] Step 3: Update roadmap state
In docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md:
- add business to the runtime-enabled subjects list,
- remove business from the eval-ready subjects list,
- mark business runtime activation completed,
- set the next immediate plan to Stage 5 feedback-aware explainability unless the reviewer chooses the next subject expansion spec.
Use this replacement shape for the immediate plan:
1. Continue Stage 5 feedback-aware explainability so router outputs separate
task-text, manifest, trace-memory, and user-action evidence more clearly.
2. Keep political economy, geoeconomics, and economics-accounting as separate
follow-up subject specs with their own fixture packs and gate criteria.
3. Keep local-agent runtime execution opt-in until maintainer smoke
environments are stable.- [ ] Step 4: Run documentation checks
rg -n "business|promotion-ready|runtime-enabled|eval-ready|eligible_for_runtime" \
docs/reference/cli.md \
docs/advanced/publish-pypi.md \
docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md
git diff --checkExpected: references distinguish runtime-enabled business from promotion-ready future-subject review, and whitespace check exits 0.
- [ ] Step 5: Commit Task 3
git add \
docs/reference/cli.md \
docs/advanced/publish-pypi.md \
docs/superpowers/roadmaps/2026-07-01-adaptive-subject-runtime-roadmap.md
git commit -m "docs(subjects): document business runtime activation"Task 4: Final Verification And PR Prep
Files:
No source edits expected.
[ ] Step 1: Run focused test suite
uv run python -m pytest \
tests/test_subject_contracts.py \
tests/test_subject_router_eval.py \
tests/test_subject_refinement.py \
-qExpected: all tests pass.
- [ ] Step 2: Run default router eval
uv run python tooling/scripts/evaluate_subject_router.py --jsonExpected: exit 0, threshold_failures: [], and near_miss_false_positives: 0.
- [ ] Step 3: Run runtime-enabled subject gates
uv run python tooling/scripts/evaluate_subject_router.py --subject business --gate runtime-enabled --json
uv run python tooling/scripts/evaluate_subject_router.py --subject accounting --gate runtime-enabled --json
uv run python tooling/scripts/evaluate_subject_router.py --subject finance --gate runtime-enabled --json
uv run python tooling/scripts/evaluate_subject_router.py --subject economics --gate runtime-enabled --jsonExpected: each command exits 0 and reports eligible_for_runtime_enabled: true.
- [ ] Step 4: Verify promotion-ready now blocks business
uv run python tooling/scripts/evaluate_subject_router.py --subject business --gate promotion-ready --jsonExpected: exit 1 with activation_status is runtime_enabled.
- [ ] Step 5: Run repository hygiene checks
git diff --check
git status --short --branchExpected: whitespace check exits 0 and status shows a clean feature branch.
- [ ] Step 6: Summarize PR readiness
Prepare a summary with:
- commits created,
- test commands and results,
- business runtime-enabled gate result,
- confirmation that promotion-ready no longer applies to business after activation,
- residual risk that business vocabulary is broader than accounting and should be monitored through Stage 5 explainability.