From 2e35b26fb5636bc3a1fd7ce1337ac8e9fa7f670e Mon Sep 17 00:00:00 2001 From: ZimingHua Date: Sat, 5 Sep 2026 12:19:52 -0400 Subject: [PATCH 1/3] Streamline encoding and strengthen review handoffs (ref #87) --- bundles/api-development.json | 3 +- bundles/app-development.json | 1 - bundles/complete.json | 3 - bundles/country-models.json | 3 - dashboard/src/data/manifest.json | 6220 ++++++++--------- docs/when-to-use.md | 2 +- scripts/build_claude_wrapper.py | 7 + skills/README.md | 10 +- skills/encode-policy-v2/SKILL.md | 41 +- .../references/claude-launcher.md | 116 +- .../encode-policy-v2/references/workflow.md | 941 +-- .../policyengine-model-development/SKILL.md | 4 + .../references/agent-loading.md | 35 + skills/review-program/SKILL.md | 10 +- .../review-program/references/automation.md | 23 +- skills/review-program/references/benchmark.md | 32 + .../references/claude-launcher.md | 14 +- skills/review-program/references/workflow.md | 124 +- .../review-program/scripts/assemble_review.py | 95 +- targets/claude/README.md | 4 + targets/claude/commands/encode-policy-v2.md | 14 - targets/claude/commands/fix-pr.md | 14 - targets/claude/commands/review-program.md | 14 - targets/claude/hooks/hooks.json | 19 +- .../claude/hooks/model-development-context.py | 49 + tests/pipeline/test_when_to_use_guide.py | 3 +- tests/test_build_claude_wrapper.py | 6 + tests/test_review_automation.py | 59 + tests/test_review_program_snapshot.py | 9 +- 29 files changed, 3646 insertions(+), 4229 deletions(-) create mode 100644 skills/policyengine-model-development/references/agent-loading.md delete mode 100644 targets/claude/commands/encode-policy-v2.md delete mode 100644 targets/claude/commands/fix-pr.md delete mode 100644 targets/claude/commands/review-program.md create mode 100644 targets/claude/hooks/model-development-context.py diff --git a/bundles/api-development.json b/bundles/api-development.json index fe7bd9b..7e388fe 100644 --- a/bundles/api-development.json +++ b/bundles/api-development.json @@ -27,8 +27,7 @@ "./skills/fix-pr" ], "commands": [ - "./commands/create-pr.md", - "./commands/fix-pr.md" + "./commands/create-pr.md" ], "agents": [ "./agents/country-models/ci-fixer.md", diff --git a/bundles/app-development.json b/bundles/app-development.json index f47f8cb..4aadd1a 100644 --- a/bundles/app-development.json +++ b/bundles/app-development.json @@ -32,7 +32,6 @@ "commands": [ "./commands/create-new-component.md", "./commands/create-pr.md", - "./commands/fix-pr.md", "./commands/new-tool.md", "./commands/audit-seo.md", "./commands/audit-multizone.md", diff --git a/bundles/complete.json b/bundles/complete.json index 73115cc..c2633d0 100644 --- a/bundles/complete.json +++ b/bundles/complete.json @@ -49,9 +49,7 @@ "./commands/create-new-component.md", "./commands/create-pr.md", "./commands/deploy-dashboard.md", - "./commands/encode-policy-v2.md", "./commands/encode-reform.md", - "./commands/fix-pr.md", "./commands/generate-content.md", "./commands/household-calc.md", "./commands/implement-structural.md", @@ -59,7 +57,6 @@ "./commands/prior-analysis.md", "./commands/prior-scores.md", "./commands/reform-pipeline.md", - "./commands/review-program.md", "./commands/setup-verbs.md", "./commands/text-to-reform.md", "./commands/write-tests.md" diff --git a/bundles/country-models.json b/bundles/country-models.json index c729f67..02f5fcc 100644 --- a/bundles/country-models.json +++ b/bundles/country-models.json @@ -32,10 +32,7 @@ ], "commands": [ "./commands/backdate-program.md", - "./commands/encode-policy-v2.md", "./commands/encode-reform.md", - "./commands/review-program.md", - "./commands/fix-pr.md", "./commands/create-pr.md", "./commands/write-tests.md" ], diff --git a/dashboard/src/data/manifest.json b/dashboard/src/data/manifest.json index 7a79b87..8c4e5bc 100644 --- a/dashboard/src/data/manifest.json +++ b/dashboard/src/data/manifest.json @@ -1,20 +1,20 @@ { - "generated_at": "2026-08-25T07:38:46.233704Z", + "generated_at": "2026-09-05T16:14:52.533393Z", "counts": { "skill": 23, "agent": 34, - "command": 23, + "command": 20, "bundle": 8, "analysis": 6 }, "analyses": [ { "file": "2026-06-19-us-arpa-ctc-restoration.md", - "policy_id": 97759, + "policy_id": "97759", "date": "2026-06-19", "title": "ARPA-style federal CTC expansion (2026-2035)", "jurisdiction": { - "country": "us", + "country": null, "state": null }, "verdict": "PASS-WITH-NOTES", @@ -29,7 +29,7 @@ "cost_billion_10yr_actual": null, "gini_pct_change": null, "top1_pp_change": null, - "child_poverty_pct_change": -34.8, + "child_poverty_pct_change": "-34.8", "model_version": null, "data_version": null, "corroboration_verdict": null, @@ -38,11 +38,11 @@ }, { "file": "2026-06-19-us-salt-cap-flat-60k.md", - "policy_id": 97763, + "policy_id": "97763", "date": "2026-06-19", "title": "Federal SALT cap raised to a flat $60,000 (2026-2035)", "jurisdiction": { - "country": "us", + "country": null, "state": null }, "verdict": "PASS-WITH-NOTES", @@ -55,11 +55,11 @@ "regressive-incidence" ], "horizon": null, - "cost_billion_year1": 18.43, + "cost_billion_year1": "18.43", "cost_billion_10yr_actual": null, - "gini_pct_change": 0.033, - "top1_pp_change": 0.018, - "child_poverty_pct_change": -0.01, + "gini_pct_change": "0.033", + "top1_pp_change": "0.018", + "child_poverty_pct_change": "-0.010", "model_version": null, "data_version": null, "corroboration_verdict": null, @@ -68,11 +68,11 @@ }, { "file": "2026-06-29-us-cdcc-double-expense-cap.md", - "policy_id": 97837, + "policy_id": "97837", "date": "2026-06-29", "title": "Federal CDCC per-dependent expense cap doubled ($3K \u2192 $6K, 2026-2035)", "jurisdiction": { - "country": "us", + "country": null, "state": null }, "verdict": "PASS-WITH-NOTES", @@ -84,24 +84,24 @@ "middle-income-targeted" ], "horizon": null, - "cost_billion_year1": 3.06, + "cost_billion_year1": "3.06", "cost_billion_10yr_actual": null, - "gini_pct_change": 0.0043, - "top1_pp_change": -0.0027, - "child_poverty_pct_change": 0.0, + "gini_pct_change": "0.0043", + "top1_pp_change": "-0.0027", + "child_poverty_pct_change": "0.0", "model_version": "1.729.0", "data_version": "populace-us-2024-f0af251-703bd81a565c-20260620T201958Z", "corroboration_verdict": null, "issues_opened": [], - "anchor_url": null + "anchor_url": "null" }, { "file": "2026-06-29-us-ctc-300-500-joint-structural.md", - "policy_id": null, + "policy_id": "null", "date": "2026-06-29", "title": "CTC filing-status-differential \u2014 +$300 per child (non-joint) / +$500 per child (joint)", "jurisdiction": { - "country": "us", + "country": null, "state": null }, "verdict": "structural", @@ -126,11 +126,11 @@ }, { "file": "2026-06-29-us-salt-cap-plus-100k.md", - "policy_id": 97833, + "policy_id": "97833", "date": "2026-06-29", "title": "Federal SALT cap raised by $100,000 per filing status, no phase-out (2026-2035)", "jurisdiction": { - "country": "us", + "country": null, "state": null }, "verdict": "PASS-WITH-NOTES", @@ -144,24 +144,24 @@ "top-tail-concentration" ], "horizon": null, - "cost_billion_year1": 26.79, + "cost_billion_year1": "26.79", "cost_billion_10yr_actual": null, - "gini_pct_change": 0.0495, - "top1_pp_change": 0.0242, - "child_poverty_pct_change": -0.0097, + "gini_pct_change": "0.0495", + "top1_pp_change": "0.0242", + "child_poverty_pct_change": "-0.0097", "model_version": null, "data_version": null, - "corroboration_verdict": "CORROBORATION-FAILED", + "corroboration_verdict": null, "issues_opened": [], "anchor_url": "https://policyengine.org/us/research/ways-and-means-salt-cap" }, { "file": "2026-07-01-us-standard-deduction-plus-1k.md", - "policy_id": 97853, + "policy_id": "97853", "date": "2026-07-01", "title": "Federal standard deduction raised by $1,000 for all filing statuses (2026-2035)", "jurisdiction": { - "country": "us", + "country": null, "state": null }, "verdict": "PASS-WITH-NOTES", @@ -171,12 +171,12 @@ "tcja-family", "progressive-incidence" ], - "horizon": 10, - "cost_billion_year1": 17.86, - "cost_billion_10yr_actual": 196.1, - "gini_pct_change": -0.0264, - "top1_pp_change": -0.121, - "child_poverty_pct_change": 0.0, + "horizon": "10", + "cost_billion_year1": "17.86", + "cost_billion_10yr_actual": "196.10", + "gini_pct_change": "-0.0264", + "top1_pp_change": "-0.121", + "child_poverty_pct_change": "0.0", "model_version": "1.745.0", "data_version": "populace-us-2024-cd-concept-budget-dbbdcec-512e-b2500-r2-20260627T022640Z", "corroboration_verdict": null, @@ -189,7 +189,7 @@ "id": "encode-policy-v2", "kind": "skill", "name": "encode-policy-v2", - "description": "Use when the user invokes $encode-policy-v2 or asks Codex or Claude Code to implement a new PolicyEngine-US state benefit program or a new structural program component from official rules. Covers existing-program routing, source collection and full PDF rendering, user-approved scope, implementation, tests, validation, draft PR preparation, and independent review-fix rounds.", + "description": "Use when the user invokes $encode-policy-v2 or asks Codex or Claude Code to implement a new PolicyEngine-US state benefit program or a new structural program component from official rules. Covers existing-program routing, source collection and selective PDF inspection, user-approved scope, implementation, tests, validation, draft PR preparation, and independent review-fix rounds.", "category": "workflows", "path": "skills/encode-policy-v2/SKILL.md", "tools": [], @@ -199,7 +199,10 @@ "complete", "country-models" ], - "target_repos": [], + "target_repos": [ + "policyengine-model", + "policyengine-us" + ], "functional_role": "workflow:encode", "functional_summary": "Codex-portable workflow: implement a new state benefit program end to end.", "functional_scope": [ @@ -214,7 +217,7 @@ "use_instead": [], "registry_notes": "Recommended for the listed scope.", "references": {}, - "body_length": 2460 + "body_length": 3192 }, { "id": "fix-pr", @@ -688,7 +691,7 @@ "id": "policyengine-model-development", "kind": "skill", "name": "policyengine-model-development", - "description": "Load when editing a PolicyEngine country model repo (policyengine-us, policyengine-uk,\npolicyengine-canada) \u2014 adding or changing variables, parameters, YAML tests, or contributed\nreforms. This is the engineering layer (how formulas, parameter YAML, and tests are written),\ndistinct from running analysis.\nTriggers: add a variable, add a parameter, write a formula, defined_for, adds/subtracts,\nvalue_type, definition_period, entity, SPMUnit, TaxUnit, vectorize, where/select, period vs\nperiod.this_year, monthly_age, YAML test, absolute_error_margin, contrib reform, in_effect,\ncreate_x_reform, neutralize_variable, modify_parameters, changelog.d, StateCode, TANF/SNAP\nencoding, bracket parameter, -.inf, single_amount.\nNOT for: household calculations, microsimulation, reform scoring, or distributional analysis\n(use the policyengine skill); calling the REST API (use policyengine-api).", + "description": "Load when editing a PolicyEngine country model repo (policyengine-us, policyengine-uk,\npolicyengine-canada) \u2014 adding or changing variables, parameters, YAML tests, or contributed\nreforms. This is the engineering layer (how formulas, parameter YAML, and tests are written),\ndistinct from running analysis.\nTriggers: add a variable, add a parameter, write a formula, defined_for, adds/subtracts,\nvalue_type, definition_period, entity, SPMUnit, TaxUnit, vectorize, where/select, period vs\nperiod.this_year, monthly_age, YAML test, absolute_error_margin, contrib reform, in_effect,\ncreate_x_reform, neutralize_variable, modify_parameters, changelog.d, StateCode, TANF/SNAP\nencoding, bracket parameter, -.inf, single_amount, right=True, band top, over X but not over Y.\nNOT for: household calculations, microsimulation, reform scoring, or distributional analysis\n(use the policyengine skill); calling the REST API (use policyengine-api).", "category": "model-development", "path": "skills/policyengine-model-development/SKILL.md", "tools": [], @@ -736,7 +739,7 @@ "use_instead": [], "registry_notes": "Recommended for the listed scope.", "references": {}, - "body_length": 4557 + "body_length": 4832 }, { "id": "policyengine-plugin-maintenance", @@ -1205,7 +1208,7 @@ "use_instead": [], "registry_notes": "Recommended for the listed scope.", "references": {}, - "body_length": 2235 + "body_length": 3273 }, { "id": "component-test-writer", @@ -1449,13 +1452,9 @@ "encode-policy-v2", "fix-pr", "policyengine-model-development" - ], - "command": [ - "encode-policy-v2", - "fix-pr" ] }, - "body_length": 10401 + "body_length": 10442 }, { "id": "document-collector", @@ -1510,7 +1509,7 @@ "policyengine-model-development" ] }, - "body_length": 28222 + "body_length": 28880 }, { "id": "edge-case-generator", @@ -1565,12 +1564,10 @@ "test-creator" ], "command": [ - "backdate-program", - "fix-pr", - "review-program" + "backdate-program" ] }, - "body_length": 5441 + "body_length": 5038 }, { "id": "implementation-validator", @@ -1626,19 +1623,12 @@ ], "agent": [ "ci-fixer", - "edge-case-generator", "program-reviewer", - "reference-validator", "rules-engineer", "test-creator" - ], - "command": [ - "encode-policy-v2", - "fix-pr", - "review-program" ] }, - "body_length": 16495 + "body_length": 16534 }, { "id": "issue-manager", @@ -1735,13 +1725,9 @@ "encode-policy-v2", "fix-pr", "policyengine-standards" - ], - "command": [ - "encode-policy-v2", - "fix-pr" ] }, - "body_length": 7702 + "body_length": 8403 }, { "id": "program-reviewer", @@ -1790,9 +1776,6 @@ "policyengine-model-development", "policyengine-us", "review-program" - ], - "command": [ - "review-program" ] }, "body_length": 10773 @@ -1844,6 +1827,7 @@ "registry_notes": "Agents are usually implementation details of commands; call directly only when maintaining or debugging the workflow.", "references": { "agent": [ + "ci-fixer", "pr-pusher" ], "skill": [ @@ -1851,7 +1835,7 @@ "policyengine-model-development" ] }, - "body_length": 11091 + "body_length": 11546 }, { "id": "structural-implementer", @@ -1959,7 +1943,7 @@ "policyengine-model-development" ] }, - "body_length": 4915 + "body_length": 3440 }, { "id": "backend-builder", @@ -2753,9 +2737,6 @@ "skill": [ "policyengine-model-development", "review-program" - ], - "command": [ - "review-program" ] }, "body_length": 11058 @@ -3075,10 +3056,8 @@ ], "command": [ "analyze-policy", - "encode-policy-v2", "implement-structural", - "prior-scores", - "review-program" + "prior-scores" ] }, "body_length": 25323 @@ -3257,11 +3236,10 @@ "review-program" ], "command": [ - "backdate-program", - "review-program" + "backdate-program" ] }, - "body_length": 52503 + "body_length": 52434 }, { "id": "create-dashboard", @@ -3411,10 +3389,7 @@ "review-program" ], "command": [ - "create-pr", - "encode-policy-v2", - "fix-pr", - "review-program" + "create-pr" ] }, "body_length": 9186 @@ -3470,46 +3445,6 @@ }, "body_length": 12507 }, - { - "id": "encode-policy-v2", - "kind": "command", - "name": "encode-policy-v2", - "description": "Implement a new government benefit program with research, approved scope, validation, and review", - "category": "command", - "path": "targets/claude/commands/encode-policy-v2.md", - "tools": [], - "model": null, - "triggers": [], - "bundles": [ - "complete", - "country-models" - ], - "target_repos": [], - "functional_role": "workflow:encode-policy", - "functional_summary": "Pure-orchestration workflow implementing a new program with requirements tracking, parallel work, review-fix loop.", - "functional_scope": [ - "policyengine-us" - ], - "functional_supersedes": [ - "encode-policy" - ], - "registry_status": "recommended", - "registry_owner": "Country model engineering", - "recommended_for": [ - "Use this command when you need to pure-orchestration workflow implementing a new program with requirements tracking, parallel work, review-fix loop." - ], - "use_instead": [], - "registry_notes": "Recommended for the listed scope.", - "references": { - "skill": [ - "encode-policy-v2" - ], - "command": [ - "encode-policy-v2" - ] - }, - "body_length": 643 - }, { "id": "encode-reform", "kind": "command", @@ -3556,53 +3491,10 @@ "test-creator" ], "command": [ - "encode-reform", - "review-program" - ] - }, - "body_length": 22239 - }, - { - "id": "fix-pr", - "kind": "command", - "name": "fix-pr", - "description": "Apply fixes to a PR based on /review-program findings or PR review comments", - "category": "command", - "path": "targets/claude/commands/fix-pr.md", - "tools": [], - "model": null, - "triggers": [], - "bundles": [ - "api-development", - "app-development", - "complete", - "country-models" - ], - "target_repos": [ - "policyengine-us" - ], - "functional_role": "workflow:fix-pr", - "functional_summary": "Coordinator workflow that gathers PR issues, presents fix plan, dispatches dependency-ordered fix agents.", - "functional_scope": [ - "policyengine-us" - ], - "functional_supersedes": [], - "registry_status": "recommended", - "registry_owner": "Country model engineering", - "recommended_for": [ - "Use this command when you need to coordinator workflow that gathers PR issues, presents fix plan, dispatches dependency-ordered fix agents." - ], - "use_instead": [], - "registry_notes": "Recommended for the listed scope.", - "references": { - "skill": [ - "fix-pr" - ], - "command": [ - "fix-pr" + "encode-reform" ] }, - "body_length": 594 + "body_length": 22548 }, { "id": "generate-content", @@ -3742,7 +3634,6 @@ "command": [ "analyze-policy", "create-pr", - "encode-policy-v2", "encode-reform" ] }, @@ -3923,46 +3814,6 @@ }, "body_length": 9852 }, - { - "id": "review-program", - "kind": "command", - "name": "review-program", - "description": "Review any PR \u2014 code validation + PDF audit in one pass (read-only, no code changes)", - "category": "command", - "path": "targets/claude/commands/review-program.md", - "tools": [], - "model": null, - "triggers": [], - "bundles": [ - "complete", - "country-models" - ], - "target_repos": [ - "policyengine-us" - ], - "functional_role": "workflow:review-program", - "functional_summary": "Orchestrator PR review with code validators and parallel PDF audit with two-stage mismatch verification.", - "functional_scope": [ - "policyengine-us" - ], - "functional_supersedes": [], - "registry_status": "recommended", - "registry_owner": "Country model engineering", - "recommended_for": [ - "Use this command when you need to orchestrator PR review with code validators and parallel PDF audit with two-stage mismatch verification." - ], - "use_instead": [], - "registry_notes": "Recommended for the listed scope.", - "references": { - "skill": [ - "review-program" - ], - "command": [ - "review-program" - ] - }, - "body_length": 629 - }, { "id": "setup-verbs", "kind": "command", @@ -4138,7 +3989,7 @@ "use_instead": [], "registry_notes": "Bundle install profile.", "references": {}, - "body_length": 1041 + "body_length": 1013 }, { "id": "app-development", @@ -4164,7 +4015,7 @@ "use_instead": [], "registry_notes": "Bundle install profile.", "references": {}, - "body_length": 1448 + "body_length": 1420 }, { "id": "complete", @@ -4190,7 +4041,7 @@ "use_instead": [], "registry_notes": "Bundle install profile.", "references": {}, - "body_length": 3696 + "body_length": 3594 }, { "id": "country-models", @@ -4216,7 +4067,7 @@ "use_instead": [], "registry_notes": "Bundle install profile.", "references": {}, - "body_length": 1701 + "body_length": 1599 }, { "id": "dashboard-builder", @@ -4302,79 +4153,79 @@ "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "parameter-locator" + "target": "reform-classifier" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "test-creator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "prior-scores-finder" + "target": "reform-comparator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "reform-classifier" + "target": "model-corroborator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "model-corroborator" + "target": "rules-engineer" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "reform-comparator" + "target": "microsim-runner" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "report-logger" + "target": "prior-scores-finder" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "reform-describer" + "target": "calibration-diagnostics" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "test-creator" + "target": "outcome-predictor" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "rules-engineer" + "target": "report-logger" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "microsim-runner" + "target": "policy-text-researcher" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "parameter-locator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "outcome-predictor" + "target": "reform-describer" }, { "source_kind": "command", @@ -4392,61 +4243,55 @@ "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-canada" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-prior-scores" + "target": "policyengine-us" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-calibration-diagnostics" + "target": "policyengine-uk" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-canada" + "target": "policyengine-writing" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-app" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-research-lookup" + "target": "policyengine-calibration-diagnostics" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-writing" + "target": "policyengine-research-lookup" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-uk" - }, - { - "source_kind": "command", - "source": "analyze-policy", - "target_kind": "command", - "target": "review-program" + "target": "policyengine-prior-scores" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "command", - "target": "encode-policy-v2" + "target": "analyze-policy" }, { "source_kind": "command", @@ -4454,12 +4299,6 @@ "target_kind": "command", "target": "implement-structural" }, - { - "source_kind": "command", - "source": "analyze-policy", - "target_kind": "command", - "target": "analyze-policy" - }, { "source_kind": "command", "source": "analyze-policy", @@ -4488,19 +4327,19 @@ "source_kind": "command", "source": "audit-multizone", "target_kind": "command", - "target": "audit-multizone" + "target": "create-dashboard" }, { "source_kind": "command", "source": "audit-multizone", "target_kind": "command", - "target": "deploy-dashboard" + "target": "audit-multizone" }, { "source_kind": "command", "source": "audit-multizone", "target_kind": "command", - "target": "create-dashboard" + "target": "deploy-dashboard" }, { "source_kind": "command", @@ -4524,7 +4363,7 @@ "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "program-reviewer" + "target": "test-creator" }, { "source_kind": "command", @@ -4536,43 +4375,43 @@ "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "ci-fixer" + "target": "pr-pusher" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "implementation-validator" + "target": "rules-engineer" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "document-collector" + "target": "ci-fixer" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "test-creator" + "target": "program-reviewer" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "pr-pusher" + "target": "edge-case-generator" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "rules-engineer" + "target": "implementation-validator" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "edge-case-generator" + "target": "document-collector" }, { "source_kind": "command", @@ -4592,12 +4431,6 @@ "target_kind": "skill", "target": "policyengine-model-development" }, - { - "source_kind": "command", - "source": "backdate-program", - "target_kind": "command", - "target": "review-program" - }, { "source_kind": "command", "source": "backdate-program", @@ -4608,37 +4441,37 @@ "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-plan-validator" + "target": "dashboard-architecture-validator" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-scaffold" + "target": "backend-builder" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-integrator" + "target": "dashboard-planner" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-architecture-validator" + "target": "dashboard-integrator" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "backend-builder" + "target": "dashboard-plan-validator" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-planner" + "target": "dashboard-scaffold" }, { "source_kind": "command", @@ -4662,37 +4495,37 @@ "source_kind": "command", "source": "create-dashboard", "target_kind": "command", - "target": "new-tool" + "target": "analyze-policy" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "command", - "target": "deploy-dashboard" + "target": "create-dashboard" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "command", - "target": "create-dashboard" + "target": "deploy-dashboard" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "command", - "target": "analyze-policy" + "target": "new-tool" }, { "source_kind": "command", "source": "create-new-component", "target_kind": "agent", - "target": "component-test-writer" + "target": "dashboard-design-validator" }, { "source_kind": "command", "source": "create-new-component", "target_kind": "agent", - "target": "dashboard-design-validator" + "target": "component-test-writer" }, { "source_kind": "command", @@ -4722,25 +4555,25 @@ "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-us" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "policyengine-uk" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-app" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "policyengine-uk" + "target": "encode-policy-v2" }, { "source_kind": "command", @@ -4748,30 +4581,12 @@ "target_kind": "skill", "target": "policyengine-api" }, - { - "source_kind": "command", - "source": "create-pr", - "target_kind": "command", - "target": "review-program" - }, - { - "source_kind": "command", - "source": "create-pr", - "target_kind": "command", - "target": "fix-pr" - }, { "source_kind": "command", "source": "create-pr", "target_kind": "command", "target": "create-pr" }, - { - "source_kind": "command", - "source": "create-pr", - "target_kind": "command", - "target": "encode-policy-v2" - }, { "source_kind": "command", "source": "deploy-dashboard", @@ -4788,13 +4603,13 @@ "source_kind": "command", "source": "deploy-dashboard", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-api" }, { "source_kind": "command", "source": "deploy-dashboard", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-tools" }, { "source_kind": "command", @@ -4802,59 +4617,47 @@ "target_kind": "command", "target": "deploy-dashboard" }, - { - "source_kind": "command", - "source": "encode-policy-v2", - "target_kind": "skill", - "target": "encode-policy-v2" - }, - { - "source_kind": "command", - "source": "encode-policy-v2", - "target_kind": "command", - "target": "encode-policy-v2" - }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "issue-manager" + "target": "test-creator" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "ci-fixer" + "target": "issue-manager" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "implementation-validator" + "target": "pr-pusher" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "document-collector" + "target": "rules-engineer" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "test-creator" + "target": "ci-fixer" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "pr-pusher" + "target": "implementation-validator" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "rules-engineer" + "target": "document-collector" }, { "source_kind": "command", @@ -4868,41 +4671,23 @@ "target_kind": "skill", "target": "policyengine-us" }, - { - "source_kind": "command", - "source": "encode-reform", - "target_kind": "command", - "target": "review-program" - }, { "source_kind": "command", "source": "encode-reform", "target_kind": "command", "target": "encode-reform" }, - { - "source_kind": "command", - "source": "fix-pr", - "target_kind": "skill", - "target": "fix-pr" - }, - { - "source_kind": "command", - "source": "fix-pr", - "target_kind": "command", - "target": "fix-pr" - }, { "source_kind": "command", "source": "generate-content", "target_kind": "agent", - "target": "neutrality-reviewer" + "target": "content-orchestrator" }, { "source_kind": "command", "source": "generate-content", "target_kind": "agent", - "target": "content-orchestrator" + "target": "neutrality-reviewer" }, { "source_kind": "command", @@ -4956,13 +4741,13 @@ "source_kind": "command", "source": "implement-structural", "target_kind": "agent", - "target": "ci-fixer" + "target": "test-creator" }, { "source_kind": "command", "source": "implement-structural", "target_kind": "agent", - "target": "test-creator" + "target": "structural-implementer" }, { "source_kind": "command", @@ -4974,7 +4759,7 @@ "source_kind": "command", "source": "implement-structural", "target_kind": "agent", - "target": "structural-implementer" + "target": "ci-fixer" }, { "source_kind": "command", @@ -4986,19 +4771,19 @@ "source_kind": "command", "source": "implement-structural", "target_kind": "skill", - "target": "policyengine-standards" + "target": "policyengine-us" }, { "source_kind": "command", "source": "implement-structural", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-standards" }, { "source_kind": "command", "source": "implement-structural", "target_kind": "command", - "target": "encode-reform" + "target": "analyze-policy" }, { "source_kind": "command", @@ -5010,13 +4795,7 @@ "source_kind": "command", "source": "implement-structural", "target_kind": "command", - "target": "encode-policy-v2" - }, - { - "source_kind": "command", - "source": "implement-structural", - "target_kind": "command", - "target": "analyze-policy" + "target": "encode-reform" }, { "source_kind": "command", @@ -5028,7 +4807,7 @@ "source_kind": "command", "source": "new-tool", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-api" }, { "source_kind": "command", @@ -5040,19 +4819,19 @@ "source_kind": "command", "source": "new-tool", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-design" }, { "source_kind": "command", "source": "new-tool", "target_kind": "command", - "target": "new-tool" + "target": "create-dashboard" }, { "source_kind": "command", "source": "new-tool", "target_kind": "command", - "target": "create-dashboard" + "target": "new-tool" }, { "source_kind": "command", @@ -5094,19 +4873,19 @@ "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "deploy-dashboard" + "target": "analyze-policy" }, { "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "reform-pipeline" + "target": "implement-structural" }, { "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "implement-structural" + "target": "reform-pipeline" }, { "source_kind": "command", @@ -5118,37 +4897,25 @@ "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "analyze-policy" - }, - { - "source_kind": "command", - "source": "review-program", - "target_kind": "skill", - "target": "review-program" - }, - { - "source_kind": "command", - "source": "review-program", - "target_kind": "command", - "target": "review-program" + "target": "deploy-dashboard" }, { "source_kind": "command", "source": "text-to-reform", "target_kind": "agent", - "target": "parameter-locator" + "target": "reform-classifier" }, { "source_kind": "command", "source": "text-to-reform", "target_kind": "agent", - "target": "reform-classifier" + "target": "policy-text-researcher" }, { "source_kind": "command", "source": "text-to-reform", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "parameter-locator" }, { "source_kind": "command", @@ -5172,25 +4939,25 @@ "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-us" }, { "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-uk" }, { "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-model-development" + "target": "policyengine-app" }, { "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-model-development" }, { "source_kind": "agent", @@ -5220,13 +4987,13 @@ "source_kind": "agent", "source": "calibration-diagnostics", "target_kind": "skill", - "target": "policyengine-calibration-diagnostics" + "target": "policyengine-us" }, { "source_kind": "agent", "source": "calibration-diagnostics", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-calibration-diagnostics" }, { "source_kind": "agent", @@ -5238,43 +5005,43 @@ "source_kind": "agent", "source": "ci-fixer", "target_kind": "skill", - "target": "fix-pr" + "target": "encode-policy-v2" }, { "source_kind": "agent", "source": "ci-fixer", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "policyengine-model-development" }, { "source_kind": "agent", "source": "ci-fixer", "target_kind": "skill", - "target": "policyengine-model-development" + "target": "fix-pr" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "ci-fixer" + "target": "test-creator" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "test-creator" + "target": "pr-pusher" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "pr-pusher" + "target": "rules-engineer" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "rules-engineer" + "target": "ci-fixer" }, { "source_kind": "agent", @@ -5298,49 +5065,37 @@ "source_kind": "agent", "source": "edge-case-generator", "target_kind": "skill", - "target": "fix-pr" + "target": "policyengine-model-development" }, { "source_kind": "agent", "source": "edge-case-generator", "target_kind": "skill", - "target": "policyengine-model-development" - }, - { - "source_kind": "agent", - "source": "implementation-validator", - "target_kind": "agent", - "target": "program-reviewer" - }, - { - "source_kind": "agent", - "source": "implementation-validator", - "target_kind": "agent", - "target": "ci-fixer" + "target": "fix-pr" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "reference-validator" + "target": "test-creator" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "test-creator" + "target": "rules-engineer" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "rules-engineer" + "target": "ci-fixer" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "edge-case-generator" + "target": "program-reviewer" }, { "source_kind": "agent", @@ -5352,19 +5107,19 @@ "source_kind": "agent", "source": "implementation-validator", "target_kind": "skill", - "target": "fix-pr" + "target": "encode-policy-v2" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "policyengine-model-development" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "skill", - "target": "policyengine-model-development" + "target": "fix-pr" }, { "source_kind": "agent", @@ -5388,7 +5143,7 @@ "source_kind": "agent", "source": "pr-pusher", "target_kind": "skill", - "target": "fix-pr" + "target": "encode-policy-v2" }, { "source_kind": "agent", @@ -5400,7 +5155,7 @@ "source_kind": "agent", "source": "pr-pusher", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "fix-pr" }, { "source_kind": "agent", @@ -5429,8 +5184,8 @@ { "source_kind": "agent", "source": "rules-engineer", - "target_kind": "skill", - "target": "policyengine-healthcare" + "target_kind": "agent", + "target": "ci-fixer" }, { "source_kind": "agent", @@ -5438,6 +5193,12 @@ "target_kind": "skill", "target": "policyengine-model-development" }, + { + "source_kind": "agent", + "source": "rules-engineer", + "target_kind": "skill", + "target": "policyengine-healthcare" + }, { "source_kind": "agent", "source": "test-creator", @@ -5460,19 +5221,19 @@ "source_kind": "agent", "source": "backend-builder", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-uk" }, { "source_kind": "agent", "source": "backend-builder", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-api" }, { "source_kind": "agent", "source": "backend-builder", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-tools" }, { "source_kind": "agent", @@ -5484,13 +5245,13 @@ "source_kind": "agent", "source": "dashboard-architecture-validator", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-api" }, { "source_kind": "agent", "source": "dashboard-architecture-validator", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-tools" }, { "source_kind": "agent", @@ -5502,13 +5263,13 @@ "source_kind": "agent", "source": "dashboard-design-validator", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-writing" }, { "source_kind": "agent", "source": "dashboard-design-validator", "target_kind": "skill", - "target": "policyengine-writing" + "target": "policyengine-design" }, { "source_kind": "agent", @@ -5526,7 +5287,7 @@ "source_kind": "agent", "source": "dashboard-integrator", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-api" }, { "source_kind": "agent", @@ -5538,19 +5299,19 @@ "source_kind": "agent", "source": "dashboard-integrator", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "dashboard-plan-validator", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "dashboard-plan-validator", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-design" }, { "source_kind": "agent", @@ -5568,43 +5329,43 @@ "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-us" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-uk" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-writing" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-app" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-writing" + "target": "policyengine-api" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-design" }, { "source_kind": "agent", @@ -5616,25 +5377,25 @@ "source_kind": "agent", "source": "dashboard-scaffold", "target_kind": "skill", - "target": "policyengine-standards" + "target": "policyengine-api" }, { "source_kind": "agent", "source": "dashboard-scaffold", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "dashboard-scaffold", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "dashboard-scaffold", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-standards" }, { "source_kind": "agent", @@ -5652,19 +5413,19 @@ "source_kind": "agent", "source": "frontend-builder", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "frontend-builder", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "microsim-runner", "target_kind": "agent", - "target": "parameter-locator" + "target": "reform-comparator" }, { "source_kind": "agent", @@ -5676,7 +5437,7 @@ "source_kind": "agent", "source": "microsim-runner", "target_kind": "agent", - "target": "reform-comparator" + "target": "parameter-locator" }, { "source_kind": "agent", @@ -5694,7 +5455,7 @@ "source_kind": "agent", "source": "model-corroborator", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "reform-comparator" }, { "source_kind": "agent", @@ -5706,7 +5467,7 @@ "source_kind": "agent", "source": "model-corroborator", "target_kind": "agent", - "target": "reform-comparator" + "target": "calibration-diagnostics" }, { "source_kind": "agent", @@ -5760,7 +5521,7 @@ "source_kind": "agent", "source": "policy-text-researcher", "target_kind": "agent", - "target": "parameter-locator" + "target": "reform-classifier" }, { "source_kind": "agent", @@ -5772,7 +5533,7 @@ "source_kind": "agent", "source": "policy-text-researcher", "target_kind": "agent", - "target": "reform-classifier" + "target": "parameter-locator" }, { "source_kind": "agent", @@ -5790,7 +5551,7 @@ "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "reform-comparator" }, { "source_kind": "agent", @@ -5802,7 +5563,7 @@ "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "agent", - "target": "reform-comparator" + "target": "calibration-diagnostics" }, { "source_kind": "agent", @@ -5814,13 +5575,13 @@ "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "skill", - "target": "policyengine-prior-scores" + "target": "policyengine-research-lookup" }, { "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "skill", - "target": "policyengine-research-lookup" + "target": "policyengine-prior-scores" }, { "source_kind": "agent", @@ -5838,19 +5599,19 @@ "source_kind": "agent", "source": "reform-classifier", "target_kind": "agent", - "target": "parameter-locator" + "target": "prior-scores-finder" }, { "source_kind": "agent", "source": "reform-classifier", "target_kind": "agent", - "target": "prior-scores-finder" + "target": "policy-text-researcher" }, { "source_kind": "agent", "source": "reform-classifier", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "parameter-locator" }, { "source_kind": "agent", @@ -5862,31 +5623,31 @@ "source_kind": "agent", "source": "reform-comparator", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "model-corroborator" }, { "source_kind": "agent", "source": "reform-comparator", "target_kind": "agent", - "target": "prior-scores-finder" + "target": "microsim-runner" }, { "source_kind": "agent", "source": "reform-comparator", "target_kind": "agent", - "target": "model-corroborator" + "target": "prior-scores-finder" }, { "source_kind": "agent", "source": "reform-comparator", "target_kind": "agent", - "target": "reform-describer" + "target": "calibration-diagnostics" }, { "source_kind": "agent", "source": "reform-comparator", "target_kind": "agent", - "target": "microsim-runner" + "target": "reform-describer" }, { "source_kind": "agent", @@ -5898,19 +5659,19 @@ "source_kind": "agent", "source": "reform-describer", "target_kind": "agent", - "target": "parameter-locator" + "target": "microsim-runner" }, { "source_kind": "agent", "source": "reform-describer", "target_kind": "agent", - "target": "microsim-runner" + "target": "policy-text-researcher" }, { "source_kind": "agent", "source": "reform-describer", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "parameter-locator" }, { "source_kind": "agent", @@ -5922,31 +5683,31 @@ "source_kind": "agent", "source": "report-logger", "target_kind": "agent", - "target": "reform-describer" + "target": "microsim-runner" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "agent", - "target": "microsim-runner" + "target": "reform-describer" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-canada" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-canada" + "target": "policyengine-us" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-uk" }, { "source_kind": "agent", @@ -5958,7 +5719,7 @@ "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-app" }, { "source_kind": "bundle", @@ -6284,12 +6045,6 @@ "target_kind": "command", "target": "create-pr" }, - { - "source_kind": "bundle", - "source": "api-development", - "target_kind": "command", - "target": "fix-pr" - }, { "source_kind": "bundle", "source": "app-development", @@ -6416,12 +6171,6 @@ "target_kind": "command", "target": "create-pr" }, - { - "source_kind": "bundle", - "source": "app-development", - "target_kind": "command", - "target": "fix-pr" - }, { "source_kind": "bundle", "source": "app-development", @@ -6830,24 +6579,12 @@ "target_kind": "command", "target": "deploy-dashboard" }, - { - "source_kind": "bundle", - "source": "complete", - "target_kind": "command", - "target": "encode-policy-v2" - }, { "source_kind": "bundle", "source": "complete", "target_kind": "command", "target": "encode-reform" }, - { - "source_kind": "bundle", - "source": "complete", - "target_kind": "command", - "target": "fix-pr" - }, { "source_kind": "bundle", "source": "complete", @@ -6890,12 +6627,6 @@ "target_kind": "command", "target": "reform-pipeline" }, - { - "source_kind": "bundle", - "source": "complete", - "target_kind": "command", - "target": "review-program" - }, { "source_kind": "bundle", "source": "complete", @@ -7058,30 +6789,12 @@ "target_kind": "command", "target": "create-pr" }, - { - "source_kind": "bundle", - "source": "country-models", - "target_kind": "command", - "target": "encode-policy-v2" - }, { "source_kind": "bundle", "source": "country-models", "target_kind": "command", "target": "encode-reform" }, - { - "source_kind": "bundle", - "source": "country-models", - "target_kind": "command", - "target": "fix-pr" - }, - { - "source_kind": "bundle", - "source": "country-models", - "target_kind": "command", - "target": "review-program" - }, { "source_kind": "bundle", "source": "country-models", @@ -7276,27 +6989,6 @@ } ], "overlaps": [ - { - "a": { - "kind": "command", - "id": "fix-pr" - }, - "b": { - "kind": "command", - "id": "review-program" - }, - "score": 0.7184, - "shared_terms": [ - "review", - "claude", - "workflow", - "program", - "code", - "arguments", - "references", - "skills" - ] - }, { "a": { "kind": "agent", @@ -7306,7 +6998,7 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.6501, + "score": 0.6502, "shared_terms": [ "structural", "backlog", @@ -7320,44 +7012,23 @@ }, { "a": { - "kind": "skill", - "id": "fix-pr" - }, - "b": { - "kind": "skill", - "id": "review-program" - }, - "score": 0.6362, - "shared_terms": [ - "review", - "canonical", - "roles", - "workflow", - "codex", - "subagent", - "claude", - "launcher" - ] - }, - { - "a": { - "kind": "command", - "id": "encode-policy-v2" + "kind": "agent", + "id": "content-orchestrator" }, "b": { "kind": "command", - "id": "review-program" + "id": "generate-content" }, - "score": 0.6335, + "score": 0.6285, "shared_terms": [ - "claude", - "review", - "workflow", - "program", - "code", - "validation", - "arguments", - "references" + "social", + "content", + "images", + "quote", + "image", + "blog", + "generate", + "copy" ] }, { @@ -7369,7 +7040,7 @@ "kind": "command", "id": "generate-content" }, - "score": 0.6285, + "score": 0.6282, "shared_terms": [ "social", "content", @@ -7381,46 +7052,25 @@ "blog" ] }, - { - "a": { - "kind": "agent", - "id": "content-orchestrator" - }, - "b": { - "kind": "command", - "id": "generate-content" - }, - "score": 0.6282, - "shared_terms": [ - "social", - "content", - "images", - "quote", - "image", - "blog", - "generate", - "copy" - ] - }, { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "fix-pr" }, "b": { "kind": "skill", - "id": "fix-pr" + "id": "review-program" }, - "score": 0.6203, + "score": 0.6147, "shared_terms": [ - "roles", - "canonical", "review", + "canonical", + "workflow", + "roles", "claude", "codex", - "fix", "subagent", - "gates" + "launcher" ] }, { @@ -7432,7 +7082,7 @@ "kind": "skill", "id": "policyengine-uk" }, - "score": 0.6155, + "score": 0.6121, "shared_terms": [ "household", "unit", @@ -7453,11 +7103,11 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.602, + "score": 0.5991, "shared_terms": [ "scorekeepers", - "tier", "scores", + "tier", "prior", "presets", "scored", @@ -7465,27 +7115,6 @@ "reform" ] }, - { - "a": { - "kind": "skill", - "id": "encode-policy-v2" - }, - "b": { - "kind": "skill", - "id": "review-program" - }, - "score": 0.5862, - "shared_terms": [ - "review", - "roles", - "canonical", - "codex", - "subagent", - "pdf", - "claude", - "program" - ] - }, { "a": { "kind": "agent", @@ -7495,7 +7124,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.5847, + "score": 0.5822, "shared_terms": [ "zone", "path", @@ -7509,23 +7138,23 @@ }, { "a": { - "kind": "command", + "kind": "skill", "id": "encode-policy-v2" }, "b": { - "kind": "command", - "id": "fix-pr" + "kind": "skill", + "id": "review-program" }, - "score": 0.5836, + "score": 0.5719, "shared_terms": [ - "claude", "review", - "workflow", - "arguments", - "references", - "skills", - "normally", - "improvise" + "canonical", + "codex", + "roles", + "program", + "claude", + "launcher", + "workflow" ] }, { @@ -7537,7 +7166,7 @@ "kind": "skill", "id": "policyengine-us" }, - "score": 0.573, + "score": 0.5701, "shared_terms": [ "unit", "tax", @@ -7549,6 +7178,27 @@ "spm" ] }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "skill", + "id": "fix-pr" + }, + "score": 0.5407, + "shared_terms": [ + "review", + "canonical", + "claude", + "codex", + "roles", + "launcher", + "fix", + "references" + ] + }, { "a": { "kind": "skill", @@ -7558,7 +7208,7 @@ "kind": "agent", "id": "content-orchestrator" }, - "score": 0.5397, + "score": 0.5389, "shared_terms": [ "social", "content", @@ -7579,7 +7229,7 @@ "kind": "skill", "id": "policyengine-us" }, - "score": 0.5277, + "score": 0.5247, "shared_terms": [ "unit", "tax", @@ -7594,55 +7244,13 @@ { "a": { "kind": "skill", - "id": "review-program" + "id": "policyengine-calibration-diagnostics" }, "b": { - "kind": "command", - "id": "review-program" + "kind": "agent", + "id": "calibration-diagnostics" }, - "score": 0.5114, - "shared_terms": [ - "review", - "pdf", - "claude", - "program", - "workflow", - "code", - "canonical", - "references" - ] - }, - { - "a": { - "kind": "skill", - "id": "fix-pr" - }, - "b": { - "kind": "command", - "id": "fix-pr" - }, - "score": 0.4881, - "shared_terms": [ - "fix", - "review", - "claude", - "workflow", - "comments", - "canonical", - "references", - "fixes" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-calibration-diagnostics" - }, - "b": { - "kind": "agent", - "id": "calibration-diagnostics" - }, - "score": 0.4825, + "score": 0.4816, "shared_terms": [ "calibration", "signature", @@ -7663,14 +7271,14 @@ "kind": "agent", "id": "prior-scores-finder" }, - "score": 0.478, + "score": 0.4738, "shared_terms": [ "prior", "tier", "scores", "scripts", - "reform", "scored", + "reform", "python3", "anchor" ] @@ -7684,14 +7292,14 @@ "kind": "skill", "id": "policyengine-tools" }, - "score": 0.4698, + "score": 0.469, "shared_terms": [ "app", "next", "bun", "vite", - "multizone", "host", + "multizone", "router", "vercel" ] @@ -7699,22 +7307,22 @@ { "a": { "kind": "agent", - "id": "dashboard-design-validator" + "id": "edge-case-generator" }, "b": { "kind": "agent", - "id": "dashboard-plan-validator" + "id": "test-creator" }, - "score": 0.4622, + "score": 0.4678, "shared_terms": [ - "grep", - "components", - "include", - "tsx", - "node", - "modules", - "app", - "component" + "test", + "tests", + "cases", + "edge", + "variable", + "month", + "boundary", + "files" ] }, { @@ -7726,7 +7334,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.4615, + "score": 0.4591, "shared_terms": [ "component", "kit", @@ -7738,6 +7346,27 @@ "tokens" ] }, + { + "a": { + "kind": "agent", + "id": "dashboard-design-validator" + }, + "b": { + "kind": "agent", + "id": "dashboard-plan-validator" + }, + "score": 0.4587, + "shared_terms": [ + "grep", + "components", + "include", + "tsx", + "node", + "modules", + "app", + "component" + ] + }, { "a": { "kind": "agent", @@ -7747,12 +7376,12 @@ "kind": "agent", "id": "reform-classifier" }, - "score": 0.4475, + "score": 0.4495, "shared_terms": [ "parameter", "gov", - "reform", "deployed", + "reform", "provision", "lag", "credits", @@ -7768,7 +7397,7 @@ "kind": "agent", "id": "dashboard-integrator" }, - "score": 0.4405, + "score": 0.44, "shared_terms": [ "api", "data", @@ -7776,8 +7405,8 @@ "client", "step", "types", - "household", - "hooks" + "hooks", + "typescript" ] }, { @@ -7789,7 +7418,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.4312, + "score": 0.431, "shared_terms": [ "plan", "dashboard", @@ -7810,7 +7439,7 @@ "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.428, + "score": 0.4268, "shared_terms": [ "app", "postcss", @@ -7825,43 +7454,22 @@ { "a": { "kind": "skill", - "id": "encode-policy-v2" - }, - "b": { - "kind": "command", - "id": "encode-policy-v2" - }, - "score": 0.4229, - "shared_terms": [ - "encode", - "claude", - "review", - "approved", - "validation", - "workflow", - "program", - "canonical" - ] - }, - { - "a": { - "kind": "agent", - "id": "edge-case-generator" + "id": "policyengine-tools" }, "b": { "kind": "agent", - "id": "test-creator" + "id": "multizone-validator" }, - "score": 0.4161, + "score": 0.4108, "shared_terms": [ - "test", - "period", - "tests", - "yyyy", - "case", - "variable", - "effective", - "date" + "zone", + "basepath", + "next", + "host", + "config", + "app", + "path", + "assetprefix" ] }, { @@ -7873,39 +7481,18 @@ "kind": "agent", "id": "dashboard-design-validator" }, - "score": 0.411, + "score": 0.4085, "shared_terms": [ "grep", "app", "kit", - "include", "tsx", + "include", "components", "css", "node" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-tools" - }, - "b": { - "kind": "agent", - "id": "multizone-validator" - }, - "score": 0.4109, - "shared_terms": [ - "zone", - "basepath", - "next", - "host", - "config", - "app", - "path", - "assetprefix" - ] - }, { "a": { "kind": "skill", @@ -7915,7 +7502,7 @@ "kind": "command", "id": "create-pr" }, - "score": 0.4011, + "score": 0.4035, "shared_terms": [ "echo", "wait", @@ -7936,7 +7523,7 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.4011, + "score": 0.3967, "shared_terms": [ "tier", "prior", @@ -7944,8 +7531,29 @@ "analyses", "external", "microsim", - "reform", - "jct" + "jct", + "cbo" + ] + }, + { + "a": { + "kind": "agent", + "id": "test-creator" + }, + "b": { + "kind": "command", + "id": "write-tests" + }, + "score": 0.3936, + "shared_terms": [ + "test", + "tests", + "files", + "step", + "cases", + "file", + "cover", + "unit" ] }, { @@ -7957,7 +7565,7 @@ "kind": "command", "id": "prior-analysis" }, - "score": 0.3906, + "score": 0.3922, "shared_terms": [ "analyses", "prior", @@ -7978,14 +7586,14 @@ "kind": "command", "id": "write-tests" }, - "score": 0.3902, + "score": 0.3844, "shared_terms": [ "test", "tests", "vitest", "conventions", - "write", "file", + "write", "render", "component" ] @@ -7999,7 +7607,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.3845, + "score": 0.384, "shared_terms": [ "kit", "chart", @@ -8020,60 +7628,18 @@ "kind": "command", "id": "write-tests" }, - "score": 0.384, + "score": 0.3747, "shared_terms": [ "test", "tests", "edge", "files", - "file", "cases", + "file", "existing", "write" ] }, - { - "a": { - "kind": "skill", - "id": "encode-policy-v2" - }, - "b": { - "kind": "command", - "id": "review-program" - }, - "score": 0.3746, - "shared_terms": [ - "review", - "claude", - "program", - "code", - "validation", - "pdf", - "workflow", - "canonical" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine" - }, - "b": { - "kind": "command", - "id": "household-calc" - }, - "score": 0.3746, - "shared_terms": [ - "household", - "income", - "microsimulation", - "tax", - "reform", - "level", - "net", - "result" - ] - }, { "a": { "kind": "agent", @@ -8083,7 +7649,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.3735, + "score": 0.3733, "shared_terms": [ "dashboard", "planner", @@ -8095,27 +7661,6 @@ "natural" ] }, - { - "a": { - "kind": "skill", - "id": "fix-pr" - }, - "b": { - "kind": "command", - "id": "review-program" - }, - "score": 0.3734, - "shared_terms": [ - "review", - "claude", - "workflow", - "code", - "canonical", - "references", - "launcher", - "program" - ] - }, { "a": { "kind": "agent", @@ -8125,7 +7670,7 @@ "kind": "agent", "id": "reference-validator" }, - "score": 0.3691, + "score": 0.3726, "shared_terms": [ "href", "page", @@ -8134,7 +7679,28 @@ "oar", "field", "parameter", - "reference" + "pdf" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine" + }, + "b": { + "kind": "command", + "id": "household-calc" + }, + "score": 0.3679, + "shared_terms": [ + "household", + "income", + "microsimulation", + "tax", + "reform", + "net", + "level", + "result" ] }, { @@ -8146,49 +7712,28 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.3685, + "score": 0.3679, "shared_terms": [ "reform", "provision", "deployed", "structural", - "possible", - "parametric", "parameter", + "parametric", + "possible", "microsim" ] }, { "a": { - "kind": "skill", - "id": "policyengine-model-development" + "kind": "agent", + "id": "dashboard-design-validator" }, "b": { "kind": "agent", - "id": "test-creator" + "id": "frontend-builder" }, - "score": 0.3588, - "shared_terms": [ - "period", - "variable", - "tests", - "yaml", - "variables", - "formula", - "year", - "test" - ] - }, - { - "a": { - "kind": "agent", - "id": "dashboard-design-validator" - }, - "b": { - "kind": "agent", - "id": "frontend-builder" - }, - "score": 0.3552, + "score": 0.355, "shared_terms": [ "kit", "components", @@ -8200,27 +7745,6 @@ "css" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine" - }, - "b": { - "kind": "skill", - "id": "policyengine-user-guide" - }, - "score": 0.3513, - "shared_terms": [ - "household", - "income", - "impact", - "tax", - "reform", - "poverty", - "people", - "employment" - ] - }, { "a": { "kind": "agent", @@ -8230,7 +7754,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.3509, + "score": 0.3503, "shared_terms": [ "components", "kit", @@ -8251,7 +7775,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.3506, + "score": 0.3496, "shared_terms": [ "bill", "reform", @@ -8263,6 +7787,48 @@ "arpa" ] }, + { + "a": { + "kind": "agent", + "id": "ci-fixer" + }, + "b": { + "kind": "agent", + "id": "implementation-validator" + }, + "score": 0.3471, + "shared_terms": [ + "root", + "fix", + "worktree", + "run", + "prefix", + "review", + "read", + "only" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine" + }, + "b": { + "kind": "skill", + "id": "policyengine-user-guide" + }, + "score": 0.347, + "shared_terms": [ + "household", + "income", + "impact", + "tax", + "reform", + "poverty", + "people", + "employment" + ] + }, { "a": { "kind": "skill", @@ -8272,7 +7838,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.3481, + "score": 0.3465, "shared_terms": [ "zone", "next", @@ -8293,7 +7859,7 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.3454, + "score": 0.3456, "shared_terms": [ "parameter", "reform", @@ -8307,67 +7873,25 @@ }, { "a": { - "kind": "agent", - "id": "ci-fixer" + "kind": "skill", + "id": "fix-pr" }, "b": { "kind": "agent", "id": "implementation-validator" }, - "score": 0.3409, + "score": 0.3367, "shared_terms": [ - "root", "fix", - "worktree", - "run", - "prefix", "review", + "mode", "read", + "role", + "code", + "verification", "only" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-user-guide" - }, - "b": { - "kind": "command", - "id": "household-calc" - }, - "score": 0.3327, - "shared_terms": [ - "household", - "reform", - "income", - "population", - "benefits", - "marginal", - "net", - "taxes" - ] - }, - { - "a": { - "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "command", - "id": "fix-pr" - }, - "score": 0.3302, - "shared_terms": [ - "review", - "claude", - "workflow", - "program", - "canonical", - "references", - "launcher", - "code" - ] - }, { "a": { "kind": "agent", @@ -8377,7 +7901,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.3295, + "score": 0.3324, "shared_terms": [ "plan", "dashboard", @@ -8391,65 +7915,44 @@ }, { "a": { - "kind": "agent", - "id": "policy-text-researcher" + "kind": "skill", + "id": "policyengine-user-guide" }, "b": { "kind": "command", - "id": "encode-reform" + "id": "household-calc" }, - "score": 0.3294, + "score": 0.3277, "shared_terms": [ - "bill", + "household", "reform", - "bills", - "gov", - "federal", - "number", - "state", - "baseline" + "income", + "population", + "benefits", + "marginal", + "net", + "taxes" ] }, { "a": { "kind": "agent", - "id": "reform-comparator" + "id": "policy-text-researcher" }, "b": { "kind": "command", - "id": "analyze-policy" - }, - "score": 0.3287, - "shared_terms": [ - "year", - "microsim", - "cost", - "single", - "anchor", - "baseline", - "prior", - "horizon" - ] - }, - { - "a": { - "kind": "skill", - "id": "fix-pr" - }, - "b": { - "kind": "agent", - "id": "implementation-validator" + "id": "encode-reform" }, - "score": 0.3286, + "score": 0.3277, "shared_terms": [ - "fix", - "review", - "mode", - "read", - "role", - "verification", - "only", - "code" + "bill", + "reform", + "gov", + "bills", + "federal", + "number", + "state", + "baseline" ] }, { @@ -8461,12 +7964,12 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.3285, + "score": 0.3276, "shared_terms": [ "modal", "host", - "app", "vercel", + "app", "dashboard", "config", "next", @@ -8482,7 +7985,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.3257, + "score": 0.3275, "shared_terms": [ "component", "tsx", @@ -8497,43 +8000,22 @@ { "a": { "kind": "agent", - "id": "edge-case-generator" - }, - "b": { - "kind": "agent", - "id": "implementation-validator" - }, - "score": 0.3253, - "shared_terms": [ - "mode", - "fix", - "review", - "only", - "read", - "edge", - "program", - "test" - ] - }, - { - "a": { - "kind": "agent", - "id": "issue-manager" + "id": "reform-comparator" }, "b": { - "kind": "agent", - "id": "pr-pusher" + "kind": "command", + "id": "analyze-policy" }, - "score": 0.324, + "score": 0.3235, "shared_terms": [ - "branch", - "repo", - "head", - "push", - "issue", - "number", - "repository", - "base" + "year", + "microsim", + "cost", + "single", + "anchor", + "baseline", + "prior", + "horizon" ] }, { @@ -8545,7 +8027,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.3195, + "score": 0.3193, "shared_terms": [ "host", "zone", @@ -8566,7 +8048,7 @@ "kind": "skill", "id": "policyengine-data" }, - "score": 0.3178, + "score": 0.3167, "shared_terms": [ "microcosm", "calibration", @@ -8587,7 +8069,7 @@ "kind": "command", "id": "reform-pipeline" }, - "score": 0.3153, + "score": 0.313, "shared_terms": [ "bill", "reform", @@ -8599,6 +8081,27 @@ "gov" ] }, + { + "a": { + "kind": "agent", + "id": "issue-manager" + }, + "b": { + "kind": "agent", + "id": "pr-pusher" + }, + "score": 0.3125, + "shared_terms": [ + "repo", + "head", + "branch", + "push", + "issue", + "number", + "repository", + "base" + ] + }, { "a": { "kind": "command", @@ -8608,7 +8111,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.3119, + "score": 0.3094, "shared_terms": [ "bill", "reform", @@ -8623,34 +8126,13 @@ { "a": { "kind": "skill", - "id": "policyengine-healthcare" + "id": "policyengine-design" }, "b": { "kind": "skill", - "id": "policyengine-us" + "id": "policyengine-tools" }, - "score": 0.3088, - "shared_terms": [ - "unit", - "tax", - "income", - "medicaid", - "household", - "aca", - "net", - "person" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-design" - }, - "b": { - "kind": "skill", - "id": "policyengine-tools" - }, - "score": 0.3076, + "score": 0.3072, "shared_terms": [ "css", "theme", @@ -8671,7 +8153,7 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.3073, + "score": 0.3069, "shared_terms": [ "provisions", "parameter", @@ -8680,7 +8162,28 @@ "refundable", "amount", "credits", - "irs" + "gov" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-healthcare" + }, + "b": { + "kind": "skill", + "id": "policyengine-us" + }, + "score": 0.3064, + "shared_terms": [ + "unit", + "tax", + "medicaid", + "income", + "household", + "aca", + "net", + "person" ] }, { @@ -8692,7 +8195,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.3071, + "score": 0.3063, "shared_terms": [ "kit", "css", @@ -8704,27 +8207,6 @@ "import" ] }, - { - "a": { - "kind": "agent", - "id": "dashboard-scaffold" - }, - "b": { - "kind": "command", - "id": "deploy-dashboard" - }, - "score": 0.3055, - "shared_terms": [ - "dashboard", - "modal", - "custom", - "plan", - "pattern", - "vercel", - "host", - "step" - ] - }, { "a": { "kind": "agent", @@ -8734,7 +8216,7 @@ "kind": "command", "id": "backdate-program" }, - "score": 0.3042, + "score": 0.306, "shared_terms": [ "program", "root", @@ -8742,50 +8224,50 @@ "review", "read", "only", - "phase", - "prefix" + "prefix", + "phase" ] }, { "a": { - "kind": "skill", - "id": "policyengine-standards" + "kind": "agent", + "id": "dashboard-scaffold" }, "b": { - "kind": "agent", - "id": "pr-pusher" + "kind": "command", + "id": "deploy-dashboard" }, - "score": 0.3038, + "score": 0.3035, "shared_terms": [ - "changelog", - "towncrier", - "repo", - "draft", - "linting", - "formatting", - "never", - "ruff" + "dashboard", + "modal", + "plan", + "custom", + "pattern", + "vercel", + "host", + "step" ] }, { "a": { "kind": "skill", - "id": "policyengine-uk" + "id": "policyengine-model-development" }, "b": { - "kind": "command", - "id": "household-calc" + "kind": "agent", + "id": "test-creator" }, - "score": 0.3025, + "score": 0.302, "shared_terms": [ - "household", - "income", - "tax", - "level", - "reform", - "net", - "benefit", - "benefits" + "tests", + "test", + "variable", + "period", + "variables", + "periods", + "formula", + "year" ] }, { @@ -8797,14 +8279,14 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.3017, + "score": 0.302, "shared_terms": [ "ctc", "provisions", - "reform", - "federal", - "ages", "gov", + "ages", + "federal", + "reform", "description", "text" ] @@ -8818,7 +8300,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.3014, + "score": 0.3016, "shared_terms": [ "tax", "income", @@ -8832,23 +8314,23 @@ }, { "a": { - "kind": "agent", - "id": "pr-pusher" + "kind": "skill", + "id": "policyengine-writing" }, "b": { - "kind": "command", - "id": "create-pr" + "kind": "agent", + "id": "neutrality-reviewer" }, - "score": 0.3013, + "score": 0.2992, "shared_terms": [ - "branch", - "git", - "draft", - "echo", - "commit", - "number", - "head", - "changelog" + "neutral", + "neutrality", + "costs", + "blog", + "benefits", + "raises", + "posts", + "analytical" ] }, { @@ -8860,7 +8342,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.3005, + "score": 0.2986, "shared_terms": [ "dashboard", "plan", @@ -8875,43 +8357,22 @@ { "a": { "kind": "skill", - "id": "policyengine-writing" - }, - "b": { - "kind": "agent", - "id": "neutrality-reviewer" - }, - "score": 0.3002, - "shared_terms": [ - "neutral", - "neutrality", - "costs", - "blog", - "benefits", - "raises", - "posts", - "analytical" - ] - }, - { - "a": { - "kind": "agent", - "id": "document-collector" + "id": "policyengine-uk" }, "b": { "kind": "command", - "id": "audit-state-tax" + "id": "household-calc" }, - "score": 0.2957, + "score": 0.2968, "shared_terms": [ - "pdf", - "state", - "tmp", - "download", - "source", - "document", + "household", "income", - "curl" + "tax", + "level", + "reform", + "net", + "benefit", + "benefits" ] }, { @@ -8923,7 +8384,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2922, + "score": 0.2926, "shared_terms": [ "reform", "dict", @@ -8935,6 +8396,27 @@ "emits" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-content" + }, + "b": { + "kind": "skill", + "id": "policyengine-design" + }, + "score": 0.2892, + "shared_terms": [ + "theme", + "teal", + "css", + "color", + "kit", + "chart", + "var", + "dark" + ] + }, { "a": { "kind": "agent", @@ -8944,37 +8426,37 @@ "kind": "command", "id": "audit-state-tax" }, - "score": 0.2915, + "score": 0.2889, "shared_terms": [ "state", "tax", "gov", "income", - "states", "parameter", + "states", "phase", "credits" ] }, { "a": { - "kind": "skill", - "id": "policyengine-content" + "kind": "agent", + "id": "edge-case-generator" }, "b": { - "kind": "skill", - "id": "policyengine-design" + "kind": "agent", + "id": "implementation-validator" }, - "score": 0.29, + "score": 0.2885, "shared_terms": [ - "theme", - "teal", - "css", - "color", - "kit", - "chart", - "var", - "dark" + "mode", + "review", + "fix", + "read", + "program", + "only", + "test", + "audit" ] }, { @@ -8986,7 +8468,7 @@ "kind": "command", "id": "audit-seo" }, - "score": 0.287, + "score": 0.2876, "shared_terms": [ "audit", "zone", @@ -8998,6 +8480,27 @@ "report" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-standards" + }, + "b": { + "kind": "agent", + "id": "pr-pusher" + }, + "score": 0.287, + "shared_terms": [ + "changelog", + "repo", + "draft", + "formatting", + "linting", + "towncrier", + "ruff", + "never" + ] + }, { "a": { "kind": "command", @@ -9007,14 +8510,14 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2853, + "score": 0.2852, "shared_terms": [ "reform", "dict", "preset", "analyze", - "description", "entry", + "description", "api", "microsim" ] @@ -9028,7 +8531,7 @@ "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.2852, + "score": 0.2832, "shared_terms": [ "app", "router", @@ -9042,107 +8545,65 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-api" + "kind": "agent", + "id": "model-corroborator" }, "b": { - "kind": "agent", - "id": "dashboard-integrator" + "kind": "command", + "id": "prior-scores" }, - "score": 0.2841, - "shared_terms": [ - "api", - "household", - "client", - "data", - "frontend", - "values", - "response", - "policyid" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-uk" - }, - "b": { - "kind": "skill", - "id": "policyengine-user-guide" - }, - "score": 0.2836, - "shared_terms": [ - "household", - "income", - "poverty", - "tax", - "reform", - "benefits", - "benefit", - "population" - ] - }, - { - "a": { - "kind": "agent", - "id": "model-corroborator" - }, - "b": { - "kind": "command", - "id": "prior-scores" - }, - "score": 0.2835, + "score": 0.2828, "shared_terms": [ "shape", "external", "reform", "benchmark", "scores", - "published", + "runs", "microsim", - "runs" + "published" ] }, { "a": { - "kind": "agent", - "id": "implementation-validator" + "kind": "skill", + "id": "review-program" }, "b": { - "kind": "command", - "id": "fix-pr" + "kind": "agent", + "id": "implementation-validator" }, - "score": 0.2827, + "score": 0.2803, "shared_terms": [ - "fix", "review", + "root", "program", - "fixes", - "findings", + "read", + "prefix", + "pdf", "code", - "run", - "references" + "only" ] }, { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "policyengine-api" }, "b": { - "kind": "command", - "id": "fix-pr" + "kind": "agent", + "id": "dashboard-integrator" }, - "score": 0.2823, + "score": 0.2802, "shared_terms": [ - "review", - "claude", - "fix", - "workflow", - "program", - "canonical", - "references", - "launcher" + "api", + "household", + "client", + "data", + "frontend", + "values", + "response", + "policyid" ] }, { @@ -9154,7 +8615,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2814, + "score": 0.2798, "shared_terms": [ "kit", "app", @@ -9166,27 +8627,6 @@ "components" ] }, - { - "a": { - "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "agent", - "id": "implementation-validator" - }, - "score": 0.2809, - "shared_terms": [ - "review", - "program", - "root", - "read", - "pdf", - "prefix", - "only", - "code" - ] - }, { "a": { "kind": "agent", @@ -9196,7 +8636,7 @@ "kind": "agent", "id": "reform-comparator" }, - "score": 0.2795, + "score": 0.2794, "shared_terms": [ "prior", "year", @@ -9208,6 +8648,27 @@ "result" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-uk" + }, + "b": { + "kind": "skill", + "id": "policyengine-user-guide" + }, + "score": 0.2792, + "shared_terms": [ + "household", + "income", + "poverty", + "tax", + "reform", + "benefits", + "benefit", + "population" + ] + }, { "a": { "kind": "skill", @@ -9217,7 +8678,7 @@ "kind": "skill", "id": "policyengine-uk" }, - "score": 0.2782, + "score": 0.2769, "shared_terms": [ "household", "canada", @@ -9229,6 +8690,48 @@ "age" ] }, + { + "a": { + "kind": "agent", + "id": "ci-fixer" + }, + "b": { + "kind": "command", + "id": "backdate-program" + }, + "score": 0.2759, + "shared_terms": [ + "root", + "worktree", + "files", + "prefix", + "program", + "git", + "run", + "read" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-app" + }, + "b": { + "kind": "command", + "id": "new-tool" + }, + "score": 0.2752, + "shared_terms": [ + "app", + "calculator", + "params", + "countryid", + "bun", + "next", + "kit", + "page" + ] + }, { "a": { "kind": "command", @@ -9238,7 +8741,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2776, + "score": 0.2752, "shared_terms": [ "bill", "reform", @@ -9250,27 +8753,6 @@ "federal" ] }, - { - "a": { - "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "command", - "id": "backdate-program" - }, - "score": 0.2765, - "shared_terms": [ - "review", - "program", - "pdf", - "root", - "prefix", - "read", - "workflow", - "files" - ] - }, { "a": { "kind": "agent", @@ -9280,12 +8762,12 @@ "kind": "agent", "id": "dashboard-plan-validator" }, - "score": 0.2764, + "score": 0.2741, "shared_terms": [ "grep", "app", - "include", "fail", + "include", "components", "tsx", "test", @@ -9294,23 +8776,23 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-app" + "kind": "agent", + "id": "policy-text-researcher" }, "b": { "kind": "command", - "id": "new-tool" + "id": "reform-pipeline" }, - "score": 0.2763, + "score": 0.2741, "shared_terms": [ - "app", - "calculator", - "params", - "countryid", - "bun", - "next", - "kit", - "page" + "bill", + "reform", + "bills", + "federal", + "gov", + "tracker", + "enacted", + "state" ] }, { @@ -9322,7 +8804,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2756, + "score": 0.274, "shared_terms": [ "kit", "app", @@ -9340,40 +8822,19 @@ "id": "ci-fixer" }, "b": { - "kind": "command", - "id": "backdate-program" - }, - "score": 0.2751, - "shared_terms": [ - "root", - "worktree", - "files", - "prefix", - "program", - "git", - "run", - "read" - ] - }, - { - "a": { "kind": "agent", - "id": "policy-text-researcher" - }, - "b": { - "kind": "command", - "id": "reform-pipeline" + "id": "test-creator" }, - "score": 0.2751, + "score": 0.2738, "shared_terms": [ - "bill", - "reform", - "bills", - "federal", - "gov", - "tracker", - "enacted", - "state" + "test", + "tests", + "files", + "variable", + "cases", + "not", + "fix", + "contract" ] }, { @@ -9385,7 +8846,7 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.273, + "score": 0.2727, "shared_terms": [ "structural", "backlog", @@ -9400,22 +8861,22 @@ { "a": { "kind": "skill", - "id": "fix-pr" + "id": "review-program" }, "b": { "kind": "command", - "id": "encode-policy-v2" + "id": "backdate-program" }, - "score": 0.2715, + "score": 0.2705, "shared_terms": [ - "claude", - "workflow", "review", - "canonical", - "references", - "launcher", - "approved", - "code" + "program", + "root", + "prefix", + "pdf", + "read", + "workflow", + "phase" ] }, { @@ -9427,7 +8888,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2715, + "score": 0.2705, "shared_terms": [ "modal", "dashboard", @@ -9441,35 +8902,14 @@ }, { "a": { - "kind": "agent", - "id": "report-logger" - }, - "b": { - "kind": "command", - "id": "analyze-policy" - }, - "score": 0.2694, - "shared_terms": [ - "log", - "archive", - "auto", - "analyst", - "country", - "default", - "prompt", - "data" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-design" + "kind": "skill", + "id": "policyengine-design" }, "b": { "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.2692, + "score": 0.2689, "shared_terms": [ "css", "postcss", @@ -9490,7 +8930,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.269, + "score": 0.2679, "shared_terms": [ "income", "tax", @@ -9511,7 +8951,7 @@ "kind": "agent", "id": "reform-comparator" }, - "score": 0.2675, + "score": 0.2679, "shared_terms": [ "version", "result", @@ -9532,7 +8972,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2668, + "score": 0.2661, "shared_terms": [ "css", "theme", @@ -9541,7 +8981,28 @@ "font", "import", "tailwind", - "app" + "colors" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-prior-scores" + }, + "b": { + "kind": "agent", + "id": "reform-comparator" + }, + "score": 0.2645, + "shared_terms": [ + "prior", + "anchor", + "scores", + "microsim", + "published", + "reform", + "baseline", + "scored" ] }, { @@ -9553,7 +9014,7 @@ "kind": "command", "id": "write-tests" }, - "score": 0.2654, + "score": 0.2645, "shared_terms": [ "test", "files", @@ -9565,27 +9026,6 @@ "write" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-prior-scores" - }, - "b": { - "kind": "agent", - "id": "reform-comparator" - }, - "score": 0.2644, - "shared_terms": [ - "prior", - "anchor", - "scores", - "microsim", - "published", - "reform", - "baseline", - "stage" - ] - }, { "a": { "kind": "agent", @@ -9595,7 +9035,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.2642, + "score": 0.2637, "shared_terms": [ "dashboard", "plan", @@ -9609,23 +9049,44 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-us" + "kind": "agent", + "id": "model-corroborator" }, "b": { "kind": "command", - "id": "household-calc" + "id": "text-to-reform" }, - "score": 0.2638, + "score": 0.2629, "shared_terms": [ - "household", - "tax", - "income", - "level", - "net", "reform", - "year", - "benefits" + "dict", + "shape", + "runs", + "analyze", + "microsim", + "parameter", + "external" + ] + }, + { + "a": { + "kind": "agent", + "id": "report-logger" + }, + "b": { + "kind": "command", + "id": "analyze-policy" + }, + "score": 0.2621, + "shared_terms": [ + "log", + "archive", + "auto", + "analyst", + "country", + "default", + "prompt", + "app" ] }, { @@ -9637,7 +9098,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2635, + "score": 0.2615, "shared_terms": [ "project", "dashboard", @@ -9652,22 +9113,43 @@ { "a": { "kind": "agent", - "id": "model-corroborator" + "id": "ci-fixer" + }, + "b": { + "kind": "agent", + "id": "pr-pusher" + }, + "score": 0.2612, + "shared_terms": [ + "caller", + "formatting", + "files", + "fix", + "run", + "git", + "sources", + "commit" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-us" }, "b": { "kind": "command", - "id": "text-to-reform" + "id": "household-calc" }, - "score": 0.2628, + "score": 0.2604, "shared_terms": [ + "household", + "tax", + "income", + "level", + "net", "reform", - "dict", - "shape", - "runs", - "analyze", - "microsim", - "parameter", - "external" + "year", + "benefits" ] }, { @@ -9679,7 +9161,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2623, + "score": 0.2599, "shared_terms": [ "app", "kit", @@ -9691,48 +9173,6 @@ "next" ] }, - { - "a": { - "kind": "skill", - "id": "encode-policy-v2" - }, - "b": { - "kind": "agent", - "id": "implementation-validator" - }, - "score": 0.2622, - "shared_terms": [ - "review", - "fix", - "program", - "worktree", - "encode", - "structural", - "root", - "only" - ] - }, - { - "a": { - "kind": "agent", - "id": "issue-manager" - }, - "b": { - "kind": "command", - "id": "create-pr" - }, - "score": 0.2606, - "shared_terms": [ - "branch", - "number", - "base", - "git", - "create", - "repo", - "head", - "title" - ] - }, { "a": { "kind": "agent", @@ -9742,7 +9182,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2597, + "score": 0.2598, "shared_terms": [ "app", "kit", @@ -9763,7 +9203,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2585, + "score": 0.2594, "shared_terms": [ "reform", "scorekeepers", @@ -9771,8 +9211,8 @@ "analyze", "presets", "bill", - "consult", - "runs" + "runs", + "consult" ] }, { @@ -9784,7 +9224,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2584, + "score": 0.2583, "shared_terms": [ "component", "plan", @@ -9796,27 +9236,6 @@ "embedding" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-prior-scores" - }, - "b": { - "kind": "agent", - "id": "model-corroborator" - }, - "score": 0.2566, - "shared_terms": [ - "reform", - "scores", - "external", - "published", - "scored", - "shape", - "benchmark", - "stage" - ] - }, { "a": { "kind": "command", @@ -9826,11 +9245,11 @@ "kind": "command", "id": "encode-reform" }, - "score": 0.2566, + "score": 0.2571, "shared_terms": [ "prefix", - "short", "arguments", + "short", "orchestrator", "page", "files", @@ -9840,23 +9259,23 @@ }, { "a": { - "kind": "skill", - "id": "encode-policy-v2" + "kind": "agent", + "id": "issue-manager" }, "b": { "kind": "command", - "id": "backdate-program" + "id": "create-pr" }, - "score": 0.2563, + "score": 0.257, "shared_terms": [ - "program", - "review", - "worktree", - "agents", - "phase", - "root", - "files", - "pdf" + "branch", + "number", + "base", + "git", + "create", + "repo", + "head", + "title" ] }, { @@ -9868,18 +9287,39 @@ "kind": "agent", "id": "policy-text-researcher" }, - "score": 0.2555, + "score": 0.2566, "shared_terms": [ "gov", "state", "ctc", "federal", "reform", - "brackets", "amount", + "brackets", "legislative" ] }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "agent", + "id": "implementation-validator" + }, + "score": 0.2555, + "shared_terms": [ + "review", + "fix", + "program", + "encode", + "read", + "structural", + "code", + "worktree" + ] + }, { "a": { "kind": "agent", @@ -9889,7 +9329,7 @@ "kind": "agent", "id": "reform-comparator" }, - "score": 0.2545, + "score": 0.2543, "shared_terms": [ "our", "microsim", @@ -9904,64 +9344,22 @@ { "a": { "kind": "skill", - "id": "policyengine-app" - }, - "b": { - "kind": "command", - "id": "create-new-component" - }, - "score": 0.2542, - "shared_terms": [ - "app", - "component", - "design", - "src", - "kit", - "tsx", - "react", - "website" - ] - }, - { - "a": { - "kind": "agent", - "id": "dashboard-scaffold" + "id": "policyengine-prior-scores" }, "b": { "kind": "agent", - "id": "frontend-builder" - }, - "score": 0.2536, - "shared_terms": [ - "plan", - "kit", - "design", - "components", - "app", - "css", - "component", - "tsx" - ] - }, - { - "a": { - "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "command", - "id": "encode-policy-v2" + "id": "model-corroborator" }, - "score": 0.2532, + "score": 0.2542, "shared_terms": [ - "review", - "claude", - "workflow", - "program", - "canonical", - "references", - "launcher", - "validation" + "reform", + "scores", + "external", + "published", + "scored", + "shape", + "benchmark", + "stage" ] }, { @@ -9973,7 +9371,7 @@ "kind": "agent", "id": "dashboard-plan-validator" }, - "score": 0.2525, + "score": 0.254, "shared_terms": [ "plan", "api", @@ -9985,6 +9383,27 @@ "test" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-app" + }, + "b": { + "kind": "command", + "id": "create-new-component" + }, + "score": 0.253, + "shared_terms": [ + "app", + "component", + "design", + "src", + "kit", + "tsx", + "react", + "website" + ] + }, { "a": { "kind": "skill", @@ -9994,7 +9413,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.252, + "score": 0.2527, "shared_terms": [ "reform", "preset", @@ -10006,6 +9425,27 @@ "microsim" ] }, + { + "a": { + "kind": "agent", + "id": "dashboard-scaffold" + }, + "b": { + "kind": "agent", + "id": "frontend-builder" + }, + "score": 0.2522, + "shared_terms": [ + "plan", + "kit", + "design", + "components", + "app", + "css", + "component", + "tsx" + ] + }, { "a": { "kind": "skill", @@ -10015,7 +9455,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.2512, + "score": 0.2493, "shared_terms": [ "dashboard", "kit", @@ -10029,23 +9469,23 @@ }, { "a": { - "kind": "agent", - "id": "test-creator" + "kind": "command", + "id": "create-dashboard" }, "b": { "kind": "command", - "id": "write-tests" + "id": "new-tool" }, - "score": 0.2504, + "score": 0.2487, "shared_terms": [ - "test", - "tests", - "files", - "step", - "file", - "format", - "only", - "unit" + "dashboard", + "create", + "page", + "calculator", + "multi", + "widget", + "purpose", + "scaffold" ] }, { @@ -10057,7 +9497,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.2502, + "score": 0.2482, "shared_terms": [ "css", "config", @@ -10071,65 +9511,86 @@ }, { "a": { - "kind": "command", - "id": "create-dashboard" + "kind": "skill", + "id": "policyengine-prior-scores" }, "b": { "kind": "command", - "id": "new-tool" + "id": "prior-analysis" }, - "score": 0.2497, + "score": 0.2462, "shared_terms": [ - "dashboard", - "create", - "page", - "calculator", - "multi", - "widget", - "purpose", - "scaffold" + "prior", + "scripts", + "did", + "analysis", + "scores", + "analyses", + "scored", + "score" ] }, { "a": { - "kind": "skill", - "id": "policyengine-prior-scores" + "kind": "agent", + "id": "report-logger" }, "b": { "kind": "command", "id": "prior-analysis" }, - "score": 0.2466, + "score": 0.243, "shared_terms": [ - "prior", - "scripts", - "analysis", - "did", - "scores", + "archive", "analyses", - "scored", - "score" + "verdict", + "analyze", + "local", + "country", + "analysis", + "jurisdiction" ] }, { "a": { "kind": "agent", - "id": "ci-fixer" + "id": "pr-pusher" + }, + "b": { + "kind": "command", + "id": "create-pr" + }, + "score": 0.2427, + "shared_terms": [ + "branch", + "git", + "draft", + "commit", + "number", + "head", + "create", + "changelog" + ] + }, + { + "a": { + "kind": "agent", + "id": "program-reviewer" }, "b": { "kind": "agent", - "id": "edge-case-generator" + "id": "test-creator" }, - "score": 0.2451, + "score": 0.2426, "shared_terms": [ "test", - "files", - "cases", "tests", - "case", - "root", - "fix", - "only" + "program", + "government", + "step", + "variables", + "benefit", + "development" ] }, { @@ -10141,7 +9602,7 @@ "kind": "agent", "id": "backend-builder" }, - "score": 0.2449, + "score": 0.2422, "shared_terms": [ "api", "client", @@ -10153,27 +9614,6 @@ "endpoint" ] }, - { - "a": { - "kind": "agent", - "id": "report-logger" - }, - "b": { - "kind": "command", - "id": "prior-analysis" - }, - "score": 0.2434, - "shared_terms": [ - "archive", - "analyses", - "verdict", - "local", - "analyze", - "country", - "analysis", - "repo" - ] - }, { "a": { "kind": "skill", @@ -10183,7 +9623,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.243, + "score": 0.2421, "shared_terms": [ "app", "host", @@ -10204,7 +9644,7 @@ "kind": "command", "id": "audit-state-tax" }, - "score": 0.2407, + "score": 0.2421, "shared_terms": [ "pdf", "reference", @@ -10216,6 +9656,27 @@ "audit" ] }, + { + "a": { + "kind": "agent", + "id": "component-test-writer" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.2398, + "shared_terms": [ + "test", + "tests", + "testing", + "expect", + "comprehensive", + "descriptive", + "names", + "cases" + ] + }, { "a": { "kind": "agent", @@ -10225,7 +9686,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.2398, + "score": 0.2389, "shared_terms": [ "zone", "path", @@ -10239,65 +9700,65 @@ }, { "a": { - "kind": "skill", - "id": "policyengine" + "kind": "agent", + "id": "ci-fixer" }, "b": { - "kind": "skill", - "id": "policyengine-api" + "kind": "agent", + "id": "edge-case-generator" }, - "score": 0.2392, + "score": 0.2381, "shared_terms": [ - "household", - "api", - "python", - "country", - "rest", - "result", - "analysis", - "bundle" - ] - }, - { - "a": { - "kind": "command", - "id": "analyze-policy" + "test", + "files", + "cases", + "case", + "tests", + "root", + "fix", + "name" + ] + }, + { + "a": { + "kind": "command", + "id": "analyze-policy" }, "b": { "kind": "command", "id": "text-to-reform" }, - "score": 0.2387, + "score": 0.2358, "shared_terms": [ "bill", "microsim", "reform", "analyze", - "log", "year", + "log", "url", "api" ] }, { "a": { - "kind": "agent", - "id": "implementation-validator" + "kind": "skill", + "id": "policyengine" }, "b": { - "kind": "command", - "id": "review-program" + "kind": "skill", + "id": "policyengine-api" }, - "score": 0.2376, + "score": 0.2348, "shared_terms": [ - "review", - "program", - "code", - "audit", - "read", - "pdf", - "only", - "run" + "household", + "api", + "python", + "country", + "rest", + "result", + "analysis", + "bundle" ] }, { @@ -10309,7 +9770,7 @@ "kind": "agent", "id": "dashboard-planner" }, - "score": 0.2356, + "score": 0.2346, "shared_terms": [ "dashboard", "data", @@ -10321,6 +9782,27 @@ "results" ] }, + { + "a": { + "kind": "agent", + "id": "dashboard-architecture-validator" + }, + "b": { + "kind": "command", + "id": "new-tool" + }, + "score": 0.2321, + "shared_terms": [ + "app", + "css", + "tailwind", + "kit", + "import", + "function", + "bash", + "globals" + ] + }, { "a": { "kind": "skill", @@ -10330,7 +9812,7 @@ "kind": "agent", "id": "dashboard-integrator" }, - "score": 0.2353, + "score": 0.2319, "shared_terms": [ "household", "api", @@ -10342,6 +9824,27 @@ "person" ] }, + { + "a": { + "kind": "agent", + "id": "document-collector" + }, + "b": { + "kind": "agent", + "id": "program-reviewer" + }, + "score": 0.2316, + "shared_terms": [ + "implementations", + "program", + "regulations", + "income", + "disregards", + "government", + "benefit", + "document" + ] + }, { "a": { "kind": "agent", @@ -10351,7 +9854,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2331, + "score": 0.2316, "shared_terms": [ "reform", "description", @@ -10363,69 +9866,6 @@ "ctc" ] }, - { - "a": { - "kind": "agent", - "id": "dashboard-architecture-validator" - }, - "b": { - "kind": "command", - "id": "new-tool" - }, - "score": 0.2327, - "shared_terms": [ - "app", - "css", - "tailwind", - "kit", - "import", - "function", - "bash", - "globals" - ] - }, - { - "a": { - "kind": "agent", - "id": "ci-fixer" - }, - "b": { - "kind": "agent", - "id": "pr-pusher" - }, - "score": 0.2314, - "shared_terms": [ - "caller", - "git", - "run", - "sources", - "formatting", - "commit", - "fix", - "contract" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine" - }, - "b": { - "kind": "skill", - "id": "policyengine-healthcare" - }, - "score": 0.2311, - "shared_terms": [ - "household", - "income", - "tax", - "unit", - "net", - "person", - "age", - "year" - ] - }, { "a": { "kind": "skill", @@ -10456,39 +9896,18 @@ "kind": "agent", "id": "prior-scores-finder" }, - "score": 0.2306, + "score": 0.2298, "shared_terms": [ "reform", "external", - "source", "comparator", + "source", "scores", "tier", "our", "scored" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-canada" - }, - "b": { - "kind": "command", - "id": "household-calc" - }, - "score": 0.2302, - "shared_terms": [ - "household", - "canada", - "benefit", - "level", - "income", - "population", - "net", - "microsimulation" - ] - }, { "a": { "kind": "skill", @@ -10498,7 +9917,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2291, + "score": 0.2283, "shared_terms": [ "app", "host", @@ -10512,44 +9931,44 @@ }, { "a": { - "kind": "agent", - "id": "edge-case-generator" + "kind": "skill", + "id": "policyengine" }, "b": { - "kind": "agent", - "id": "program-reviewer" + "kind": "skill", + "id": "policyengine-healthcare" }, - "score": 0.2284, + "score": 0.228, "shared_terms": [ + "household", "income", - "tests", - "test", - "edge", - "mode", - "program", - "review", - "cases" + "tax", + "unit", + "net", + "person", + "age", + "year" ] }, { "a": { - "kind": "command", - "id": "analyze-policy" + "kind": "skill", + "id": "policyengine-canada" }, "b": { "kind": "command", - "id": "reform-pipeline" + "id": "household-calc" }, - "score": 0.2282, + "score": 0.2279, "shared_terms": [ - "bill", - "auto", - "horizon", - "reform", - "window", - "pipeline", - "default", - "phase" + "household", + "canada", + "benefit", + "level", + "income", + "population", + "net", + "not" ] }, { @@ -10561,39 +9980,18 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.2273, + "score": 0.2265, "shared_terms": [ "api", "components", - "data", "plan", + "data", "client", - "dashboard", "structure", + "dashboard", "step" ] }, - { - "a": { - "kind": "agent", - "id": "dashboard-integrator" - }, - "b": { - "kind": "agent", - "id": "dashboard-plan-validator" - }, - "score": 0.2268, - "shared_terms": [ - "api", - "components", - "plan", - "data", - "loading", - "chart", - "component", - "lib" - ] - }, { "a": { "kind": "agent", @@ -10603,7 +10001,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.226, + "score": 0.2261, "shared_terms": [ "component", "button", @@ -10617,65 +10015,65 @@ }, { "a": { - "kind": "skill", - "id": "policyengine" + "kind": "command", + "id": "analyze-policy" }, "b": { - "kind": "skill", - "id": "policyengine-canada" + "kind": "command", + "id": "reform-pipeline" }, - "score": 0.2259, + "score": 0.2252, "shared_terms": [ - "household", - "income", - "tax", - "age", - "microsimulation", - "net", - "analysis", - "credit" + "bill", + "auto", + "horizon", + "reform", + "window", + "pipeline", + "phase", + "default" ] }, { "a": { - "kind": "skill", - "id": "policyengine-us" + "kind": "agent", + "id": "dashboard-integrator" }, "b": { - "kind": "skill", - "id": "policyengine-user-guide" + "kind": "agent", + "id": "dashboard-plan-validator" }, - "score": 0.2247, + "score": 0.2242, "shared_terms": [ - "household", - "tax", - "income", - "poverty", - "reform", - "benefits", - "spm", - "population" + "api", + "components", + "plan", + "data", + "loading", + "chart", + "component", + "lib" ] }, { "a": { - "kind": "command", - "id": "backdate-program" + "kind": "skill", + "id": "policyengine" }, "b": { - "kind": "command", - "id": "review-program" + "kind": "skill", + "id": "policyengine-canada" }, - "score": 0.2243, + "score": 0.2236, "shared_terms": [ - "program", - "review", - "arguments", - "pdf", - "read", - "audit", - "workflow", - "only" + "household", + "income", + "tax", + "age", + "microsimulation", + "net", + "analysis", + "assert" ] }, { @@ -10687,7 +10085,7 @@ "kind": "command", "id": "reform-pipeline" }, - "score": 0.2236, + "score": 0.2224, "shared_terms": [ "dashboard", "reform", @@ -10702,22 +10100,43 @@ { "a": { "kind": "skill", - "id": "policyengine-healthcare" + "id": "policyengine-us" }, "b": { "kind": "skill", - "id": "policyengine-uk" + "id": "policyengine-user-guide" }, - "score": 0.2206, + "score": 0.2221, "shared_terms": [ "household", - "income", "tax", - "unit", - "net", - "person", - "credit", - "benefits" + "income", + "poverty", + "reform", + "benefits", + "spm", + "population" + ] + }, + { + "a": { + "kind": "agent", + "id": "edge-case-generator" + }, + "b": { + "kind": "agent", + "id": "program-reviewer" + }, + "score": 0.2215, + "shared_terms": [ + "income", + "tests", + "test", + "edge", + "program", + "review", + "mode", + "cases" ] }, { @@ -10729,7 +10148,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2203, + "score": 0.2207, "shared_terms": [ "modal", "app", @@ -10741,6 +10160,27 @@ "next" ] }, + { + "a": { + "kind": "skill", + "id": "fix-pr" + }, + "b": { + "kind": "agent", + "id": "ci-fixer" + }, + "score": 0.2202, + "shared_terms": [ + "fix", + "files", + "failures", + "workflow", + "review", + "root", + "worktree", + "local" + ] + }, { "a": { "kind": "agent", @@ -10750,7 +10190,7 @@ "kind": "agent", "id": "dashboard-plan-validator" }, - "score": 0.2198, + "score": 0.2197, "shared_terms": [ "zone", "path", @@ -10759,7 +10199,49 @@ "fail", "name", "kebab", - "multi" + "pass" + ] + }, + { + "a": { + "kind": "agent", + "id": "implementation-validator" + }, + "b": { + "kind": "agent", + "id": "program-reviewer" + }, + "score": 0.2197, + "shared_terms": [ + "program", + "mode", + "review", + "code", + "findings", + "reviewer", + "read", + "pattern" + ] + }, + { + "a": { + "kind": "skill", + "id": "review-program" + }, + "b": { + "kind": "agent", + "id": "ci-fixer" + }, + "score": 0.2185, + "shared_terms": [ + "root", + "review", + "prefix", + "workflow", + "run", + "test", + "local", + "files" ] }, { @@ -10771,7 +10253,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.2189, + "score": 0.2182, "shared_terms": [ "kit", "app", @@ -10785,23 +10267,23 @@ }, { "a": { - "kind": "agent", - "id": "parameter-locator" + "kind": "skill", + "id": "policyengine-healthcare" }, "b": { - "kind": "command", - "id": "household-calc" + "kind": "skill", + "id": "policyengine-uk" }, - "score": 0.2184, + "score": 0.2176, "shared_terms": [ - "reform", + "household", "income", "tax", - "rate", - "dict", - "household", - "state", - "api" + "unit", + "net", + "person", + "credit", + "benefits" ] }, { @@ -10813,60 +10295,18 @@ "kind": "agent", "id": "microsim-runner" }, - "score": 0.2179, + "score": 0.2175, "shared_terms": [ "api", "economy", "version", - "country", "over", + "country", "python", "baseline", "org" ] }, - { - "a": { - "kind": "skill", - "id": "fix-pr" - }, - "b": { - "kind": "agent", - "id": "ci-fixer" - }, - "score": 0.2177, - "shared_terms": [ - "fix", - "files", - "failures", - "workflow", - "review", - "root", - "local", - "worktree" - ] - }, - { - "a": { - "kind": "agent", - "id": "dashboard-plan-validator" - }, - "b": { - "kind": "command", - "id": "create-new-component" - }, - "score": 0.2173, - "shared_terms": [ - "component", - "components", - "grep", - "app", - "tsx", - "design", - "dashboard", - "include" - ] - }, { "a": { "kind": "command", @@ -10876,16 +10316,37 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.2165, + "score": 0.2175, "shared_terms": [ "analyses", "prior", "analyze", "scripts", "archive", + "runs", "running", - "change", - "runs" + "change" + ] + }, + { + "a": { + "kind": "agent", + "id": "parameter-locator" + }, + "b": { + "kind": "command", + "id": "household-calc" + }, + "score": 0.2172, + "shared_terms": [ + "reform", + "income", + "tax", + "rate", + "dict", + "household", + "state", + "api" ] }, { @@ -10897,7 +10358,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2164, + "score": 0.2161, "shared_terms": [ "host", "zone", @@ -10912,232 +10373,232 @@ { "a": { "kind": "agent", - "id": "dashboard-architecture-validator" + "id": "dashboard-plan-validator" }, "b": { "kind": "command", "id": "create-new-component" }, - "score": 0.2127, + "score": 0.2155, "shared_terms": [ - "app", - "kit", - "grep", - "tailwind", + "component", "components", + "grep", + "app", "tsx", - "css", - "design" + "design", + "dashboard", + "include" ] }, { "a": { "kind": "skill", - "id": "policyengine-design" + "id": "encode-policy-v2" }, "b": { - "kind": "command", - "id": "create-new-component" + "kind": "agent", + "id": "pr-pusher" }, - "score": 0.2118, + "score": 0.2149, "shared_terms": [ - "kit", - "design", - "css", - "app", - "theme", - "component", - "colors", - "tailwind" - ] - }, - { - "a": { - "kind": "agent", - "id": "document-collector" - }, - "b": { - "kind": "agent", - "id": "reference-validator" - }, - "score": 0.2118, - "shared_terms": [ - "pdf", - "reference", - "text", - "section", - "citation", - "doc", - "document", - "authoritative" + "review", + "push", + "encode", + "contract", + "draft", + "commit", + "approved", + "fix" ] }, { "a": { - "kind": "agent", - "id": "implementation-validator" + "kind": "skill", + "id": "encode-policy-v2" }, "b": { - "kind": "agent", - "id": "program-reviewer" + "kind": "command", + "id": "backdate-program" }, - "score": 0.2114, + "score": 0.2121, "shared_terms": [ "program", - "mode", "review", - "code", - "findings", + "worktree", + "arguments", "read", - "pattern", - "reviewer" + "research", + "pdf", + "dpi" ] }, { "a": { - "kind": "command", - "id": "create-new-component" + "kind": "agent", + "id": "dashboard-architecture-validator" }, "b": { "kind": "command", - "id": "new-tool" + "id": "create-new-component" }, - "score": 0.209, + "score": 0.2112, "shared_terms": [ - "kit", "app", - "const", + "kit", + "grep", "tailwind", - "design", - "export", - "src", - "import" + "components", + "tsx", + "css", + "design" ] }, { "a": { "kind": "skill", - "id": "policyengine-us" + "id": "policyengine-design" }, "b": { "kind": "command", - "id": "audit-state-tax" + "id": "create-new-component" }, - "score": 0.2069, + "score": 0.2111, "shared_terms": [ - "tax", - "state", - "gov", - "income", - "year", - "wrong", - "states", - "parameter" + "kit", + "design", + "css", + "app", + "theme", + "component", + "colors", + "tailwind" ] }, { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "review-program" }, "b": { "kind": "agent", - "id": "ci-fixer" + "id": "program-reviewer" }, - "score": 0.2045, + "score": 0.2094, "shared_terms": [ - "worktree", - "root", "review", - "fixer", - "fix", - "files", - "encode", - "tests" + "program", + "reviews", + "code", + "regulatory", + "workflow", + "read", + "references" ] }, { "a": { - "kind": "skill", - "id": "review-program" + "kind": "command", + "id": "create-new-component" + }, + "b": { + "kind": "command", + "id": "new-tool" + }, + "score": 0.2088, + "shared_terms": [ + "kit", + "app", + "const", + "tailwind", + "design", + "export", + "src", + "import" + ] + }, + { + "a": { + "kind": "agent", + "id": "document-collector" }, "b": { "kind": "command", "id": "audit-state-tax" }, - "score": 0.2039, + "score": 0.2049, "shared_terms": [ "pdf", - "audit", + "state", "source", - "posting", - "phase", - "diff", - "only", - "local" + "tmp", + "sources", + "income", + "documents", + "document" ] }, { "a": { "kind": "skill", - "id": "policyengine-model-development" + "id": "policyengine-us" }, "b": { - "kind": "agent", - "id": "parameter-locator" + "kind": "command", + "id": "audit-state-tax" }, - "score": 0.2038, + "score": 0.2039, "shared_terms": [ + "tax", + "state", "gov", - "parameter", - "reform", - "yaml", - "parameters", - "amount", "income", - "canada" + "year", + "wrong", + "states", + "parameter" ] }, { "a": { - "kind": "agent", - "id": "ci-fixer" + "kind": "skill", + "id": "encode-policy-v2" }, "b": { "kind": "agent", - "id": "test-creator" + "id": "program-reviewer" }, - "score": 0.2037, + "score": 0.2027, "shared_terms": [ - "test", - "variable", - "period", + "program", + "review", + "code", + "implementation", "tests", - "files", - "only", - "name", - "case" + "references", + "encode", + "independent" ] }, { "a": { "kind": "agent", - "id": "document-collector" + "id": "parameter-locator" }, "b": { - "kind": "agent", - "id": "program-reviewer" + "kind": "command", + "id": "implement-structural" }, - "score": 0.2036, + "score": 0.2025, "shared_terms": [ - "program", - "implementations", - "regulations", - "income", - "state", - "disregards", - "government", - "document" + "gov", + "reform", + "states", + "rate", + "structural", + "phase", + "change", + "deployed" ] }, { @@ -11149,7 +10610,7 @@ "kind": "agent", "id": "model-corroborator" }, - "score": 0.2029, + "score": 0.2021, "shared_terms": [ "calibration", "reform", @@ -11170,7 +10631,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2024, + "score": 0.2015, "shared_terms": [ "dashboard", "repo", @@ -11185,43 +10646,43 @@ { "a": { "kind": "skill", - "id": "policyengine-plugin-maintenance" + "id": "policyengine-model-development" }, "b": { - "kind": "command", - "id": "write-tests" + "kind": "agent", + "id": "parameter-locator" }, - "score": 0.2023, + "score": 0.2007, "shared_terms": [ - "test", - "tests", - "source", - "claude", - "repo", - "run", - "pytest", - "path" + "gov", + "parameter", + "reform", + "yaml", + "amount", + "parameters", + "income", + "canada" ] }, { "a": { "kind": "agent", - "id": "parameter-locator" + "id": "structural-implementer" }, "b": { - "kind": "command", - "id": "implement-structural" + "kind": "agent", + "id": "report-logger" }, - "score": 0.2018, + "score": 0.2003, "shared_terms": [ - "gov", - "reform", - "states", - "rate", + "issue", + "country", + "draft", "structural", - "phase", - "change", - "model" + "repo", + "verdict", + "report", + "body" ] }, { @@ -11233,39 +10694,18 @@ "kind": "agent", "id": "reference-validator" }, - "score": 0.2013, + "score": 0.1987, "shared_terms": [ "requirements", "program", - "missing", "income", - "correct", "review", + "correct", + "missing", "implementations", "manual" ] }, - { - "a": { - "kind": "agent", - "id": "structural-implementer" - }, - "b": { - "kind": "agent", - "id": "report-logger" - }, - "score": 0.2008, - "shared_terms": [ - "issue", - "country", - "draft", - "structural", - "repo", - "verdict", - "report", - "body" - ] - }, { "a": { "kind": "agent", @@ -11275,7 +10715,7 @@ "kind": "agent", "id": "reform-classifier" }, - "score": 0.1993, + "score": 0.1987, "shared_terms": [ "structural", "backlog", @@ -11284,28 +10724,28 @@ "amount", "verdict", "issue", - "reform" + "deployed" ] }, { "a": { "kind": "agent", - "id": "program-reviewer" + "id": "dashboard-plan-validator" }, "b": { - "kind": "command", - "id": "review-program" + "kind": "agent", + "id": "dashboard-planner" }, - "score": 0.1989, + "score": 0.1986, "shared_terms": [ - "review", - "program", - "code", - "workflow", - "references", - "read", - "any", - "skills" + "plan", + "dashboard", + "data", + "api", + "implementation", + "embedding", + "yaml", + "components" ] }, { @@ -11315,144 +10755,165 @@ }, "b": { "kind": "command", - "id": "fix-pr" + "id": "write-tests" }, - "score": 0.1983, + "score": 0.198, "shared_terms": [ + "test", + "tests", + "source", "claude", - "skills", - "fix", - "plugin", + "repo", "run", - "shipped", - "references", - "not" + "pytest", + "path" ] }, { "a": { - "kind": "agent", - "id": "dashboard-plan-validator" + "kind": "skill", + "id": "policyengine-research-lookup" }, "b": { "kind": "agent", - "id": "dashboard-planner" + "id": "report-logger" }, - "score": 0.1983, + "score": 0.1968, "shared_terms": [ - "plan", - "dashboard", + "posts", + "articles", + "app", + "post", + "src", + "research", "data", - "api", - "implementation", - "embedding", - "yaml", - "components" + "open" ] }, { "a": { - "kind": "skill", - "id": "review-program" + "kind": "agent", + "id": "report-logger" + }, + "b": { + "kind": "command", + "id": "implement-structural" + }, + "score": 0.1962, + "shared_terms": [ + "issue", + "structural", + "country", + "draft", + "verdict", + "report", + "archive", + "analyze" + ] + }, + { + "a": { + "kind": "agent", + "id": "pr-pusher" }, "b": { "kind": "agent", - "id": "program-reviewer" + "id": "structural-implementer" }, - "score": 0.1982, + "score": 0.1944, "shared_terms": [ - "review", - "program", - "reviews", - "regulatory", - "code", - "workflow", - "read", - "references" + "changelog", + "issue", + "draft", + "commit", + "push", + "caller", + "tests", + "repo" ] }, { "a": { - "kind": "skill", - "id": "policyengine-model-development" + "kind": "agent", + "id": "component-test-writer" }, "b": { "kind": "agent", "id": "edge-case-generator" }, - "score": 0.197, + "score": 0.1943, "shared_terms": [ - "tests", - "period", - "yaml", "test", - "variable", - "parameters", - "add", - "formula" + "tests", + "edge", + "testing", + "cases", + "case", + "file", + "boundary" ] }, { "a": { "kind": "agent", - "id": "report-logger" + "id": "rules-engineer" }, "b": { "kind": "command", - "id": "implement-structural" + "id": "backdate-program" }, - "score": 0.1965, + "score": 0.1942, "shared_terms": [ - "issue", - "structural", - "country", - "draft", - "verdict", - "report", - "archive", - "analyze" + "program", + "page", + "tanf", + "files", + "href", + "parameter", + "pdf", + "under" ] }, { "a": { - "kind": "skill", - "id": "policyengine-research-lookup" + "kind": "agent", + "id": "component-test-writer" }, "b": { "kind": "agent", - "id": "report-logger" + "id": "dashboard-design-validator" }, - "score": 0.1959, + "score": 0.1941, "shared_terms": [ - "posts", - "articles", + "tsx", + "components", + "button", + "kit", "app", - "post", - "src", - "research", - "data", - "json" + "component", + "classname", + "test" ] }, { "a": { "kind": "skill", - "id": "policyengine-user-guide" + "id": "encode-policy-v2" }, "b": { - "kind": "command", - "id": "create-dashboard" + "kind": "agent", + "id": "ci-fixer" }, - "score": 0.1945, + "score": 0.1939, "shared_terms": [ - "reform", - "calculator", - "household", - "charts", - "impact", - "poverty", - "build", - "income" + "worktree", + "review", + "contract", + "test", + "fix", + "encode", + "implementation", + "program" ] }, { @@ -11464,12 +10925,12 @@ "kind": "command", "id": "audit-seo" }, - "score": 0.1943, + "score": 0.193, "shared_terms": [ "zone", "repo", - "path", "url", + "path", "legacy", "zones", "host", @@ -11479,43 +10940,22 @@ { "a": { "kind": "skill", - "id": "policyengine-tools" - }, - "b": { - "kind": "command", - "id": "audit-seo" - }, - "score": 0.194, - "shared_terms": [ - "vercel", - "seo", - "zone", - "bun", - "org", - "standalone", - "url", - "app" - ] - }, - { - "a": { - "kind": "agent", - "id": "rules-engineer" + "id": "policyengine-user-guide" }, "b": { "kind": "command", - "id": "backdate-program" + "id": "create-dashboard" }, - "score": 0.1936, + "score": 0.1929, "shared_terms": [ - "page", - "program", - "tanf", - "files", - "href", - "parameter", - "under", - "pdf" + "reform", + "calculator", + "household", + "charts", + "impact", + "poverty", + "build", + "income" ] }, { @@ -11527,121 +10967,121 @@ "kind": "command", "id": "backdate-program" }, - "score": 0.1936, + "score": 0.1929, "shared_terms": [ "pdf", "state", "audit", "phase", - "files", "arguments", + "files", "page", "only" ] }, { "a": { - "kind": "agent", - "id": "pr-pusher" + "kind": "skill", + "id": "policyengine-model-development" }, "b": { "kind": "agent", - "id": "structural-implementer" + "id": "edge-case-generator" }, - "score": 0.1934, + "score": 0.1919, "shared_terms": [ - "changelog", - "issue", - "draft", - "commit", - "branch", - "push", - "repo", - "caller" + "tests", + "test", + "yaml", + "variable", + "year", + "parameters", + "periods", + "add" ] }, { "a": { "kind": "skill", - "id": "policyengine" + "id": "fix-pr" }, "b": { - "kind": "skill", - "id": "policyengine-model-development" + "kind": "command", + "id": "backdate-program" }, - "score": 0.1931, + "score": 0.1916, "shared_terms": [ - "household", - "age", - "analysis", - "microsimulation", - "variables", - "income", - "model", - "year" - ] - }, - { - "a": { - "kind": "agent", - "id": "component-test-writer" + "review", + "files", + "program", + "workflow", + "read", + "worktree", + "only", + "fix" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-tools" }, "b": { "kind": "agent", "id": "dashboard-design-validator" }, - "score": 0.1929, + "score": 0.1916, "shared_terms": [ - "tsx", - "components", - "button", "kit", "app", - "component", - "classname", - "test" + "css", + "components", + "tsx", + "design", + "dashboard", + "config" ] }, { "a": { - "kind": "agent", - "id": "component-test-writer" + "kind": "skill", + "id": "policyengine-tools" }, "b": { - "kind": "agent", - "id": "edge-case-generator" + "kind": "command", + "id": "audit-seo" }, - "score": 0.1926, + "score": 0.1914, "shared_terms": [ - "test", - "tests", - "edge", - "cases", - "case", - "testing", - "file", - "write" + "vercel", + "seo", + "zone", + "bun", + "org", + "standalone", + "url", + "app" ] }, { "a": { - "kind": "skill", - "id": "fix-pr" + "kind": "agent", + "id": "outcome-predictor" }, "b": { - "kind": "command", - "id": "backdate-program" + "kind": "agent", + "id": "prior-scores-finder" }, - "score": 0.1922, + "score": 0.1902, "shared_terms": [ - "review", - "files", - "program", - "workflow", - "read", - "worktree", - "only", - "fix" + "analyses", + "comparator", + "prior", + "reform", + "scores", + "blind", + "magnitude", + "you" ] }, { @@ -11653,7 +11093,7 @@ "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.192, + "score": 0.1901, "shared_terms": [ "backend", "modal", @@ -11668,43 +11108,22 @@ { "a": { "kind": "skill", - "id": "policyengine-model-development" + "id": "review-program" }, "b": { "kind": "command", - "id": "implement-structural" - }, - "score": 0.1912, - "shared_terms": [ - "contrib", - "formula", - "gov", - "bracket", - "parameters", - "reform", - "run", - "model" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-tools" - }, - "b": { - "kind": "agent", - "id": "dashboard-design-validator" + "id": "audit-state-tax" }, - "score": 0.1911, + "score": 0.1899, "shared_terms": [ - "kit", - "app", - "css", - "components", - "tsx", - "design", - "dashboard", - "config" + "pdf", + "audit", + "source", + "local", + "diff", + "phase", + "posting", + "full" ] }, { @@ -11716,7 +11135,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.1901, + "score": 0.1894, "shared_terms": [ "reform", "income", @@ -11731,22 +11150,43 @@ { "a": { "kind": "agent", - "id": "outcome-predictor" + "id": "program-reviewer" }, "b": { "kind": "agent", - "id": "prior-scores-finder" + "id": "rules-engineer" }, - "score": 0.1891, + "score": 0.1885, "shared_terms": [ - "analyses", - "comparator", - "prior", - "reform", - "scores", - "you", - "blind", - "magnitude" + "program", + "tanf", + "income", + "amount", + "manual", + "government", + "gross", + "limits" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine" + }, + "b": { + "kind": "skill", + "id": "policyengine-model-development" + }, + "score": 0.1874, + "shared_terms": [ + "household", + "age", + "analysis", + "microsimulation", + "income", + "variables", + "model", + "year" ] }, { @@ -11758,7 +11198,7 @@ "kind": "agent", "id": "structural-implementer" }, - "score": 0.1872, + "score": 0.1873, "shared_terms": [ "issue", "repo", @@ -11779,37 +11219,37 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.1866, + "score": 0.1855, "shared_terms": [ "microsim", "prior", "scores", "year", "cost", - "published", "dataset", + "published", "baseline" ] }, { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "policyengine-data" }, "b": { "kind": "agent", - "id": "pr-pusher" + "id": "calibration-diagnostics" }, - "score": 0.1865, + "score": 0.1853, "shared_terms": [ - "push", - "review", - "draft", - "commit", - "program", - "contract", - "approved", - "workflow" + "microcosm", + "calibration", + "diagnostics", + "imputation", + "calibrated", + "weights", + "data", + "weighted" ] }, { @@ -11821,7 +11261,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.1865, + "score": 0.1852, "shared_terms": [ "income", "tax", @@ -11835,170 +11275,149 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-data" + "kind": "agent", + "id": "backend-builder" }, "b": { - "kind": "agent", - "id": "calibration-diagnostics" + "kind": "command", + "id": "create-dashboard" }, - "score": 0.1858, + "score": 0.1844, "shared_terms": [ - "microcosm", - "calibration", - "diagnostics", - "imputation", - "calibrated", - "weights", - "data", - "weighted" + "dashboard", + "plan", + "create", + "json", + "api", + "precomputed", + "backend", + "step" ] }, { "a": { - "kind": "agent", - "id": "program-reviewer" + "kind": "skill", + "id": "policyengine-content" }, "b": { "kind": "agent", - "id": "rules-engineer" + "id": "frontend-builder" }, - "score": 0.1858, + "score": 0.1843, "shared_terms": [ - "program", - "tanf", - "income", - "amount", - "manual", - "government", - "gross", - "limits" + "kit", + "teal", + "design", + "chart", + "system", + "css", + "app", + "import" ] }, { "a": { "kind": "agent", - "id": "model-corroborator" + "id": "dashboard-integrator" }, "b": { - "kind": "command", - "id": "household-calc" + "kind": "agent", + "id": "frontend-builder" }, - "score": 0.1857, + "score": 0.1842, "shared_terms": [ - "reform", - "dict", - "baseline", - "external", - "single", - "sources", - "household", - "cap" + "components", + "frontend", + "component", + "builder", + "api", + "design", + "chart", + "step" ] }, { "a": { - "kind": "agent", - "id": "backend-builder" + "kind": "skill", + "id": "policyengine-model-development" }, "b": { "kind": "command", - "id": "create-dashboard" + "id": "implement-structural" }, - "score": 0.1852, + "score": 0.1839, "shared_terms": [ - "dashboard", - "plan", - "create", - "json", - "api", - "precomputed", - "backend", - "step" - ] - }, - { - "a": { - "kind": "command", - "id": "audit-multizone" - }, - "b": { - "kind": "command", - "id": "create-dashboard" - }, - "score": 0.1847, - "shared_terms": [ - "repo", - "multi", - "dashboard", - "path", - "phase", - "clone", - "create", - "json" + "formula", + "contrib", + "gov", + "bracket", + "parameters", + "run", + "reform", + "model" ] }, { "a": { "kind": "agent", - "id": "dashboard-integrator" + "id": "document-collector" }, "b": { "kind": "agent", - "id": "frontend-builder" + "id": "reference-validator" }, - "score": 0.1844, + "score": 0.1837, "shared_terms": [ - "components", - "frontend", - "component", - "api", - "builder", - "design", - "chart", - "step" + "pdf", + "source", + "citation", + "text", + "page", + "doc", + "authoritative", + "references" ] }, { "a": { - "kind": "skill", - "id": "review-program" + "kind": "agent", + "id": "model-corroborator" }, "b": { - "kind": "agent", - "id": "ci-fixer" + "kind": "command", + "id": "household-calc" }, - "score": 0.1839, + "score": 0.1837, "shared_terms": [ - "review", - "root", - "prefix", - "workflow", - "files", - "run", - "worktree", - "read" + "reform", + "dict", + "baseline", + "external", + "single", + "sources", + "household", + "cap" ] }, { "a": { "kind": "skill", - "id": "policyengine-content" + "id": "encode-policy-v2" }, "b": { - "kind": "agent", - "id": "frontend-builder" + "kind": "skill", + "id": "policyengine-plugin-maintenance" }, - "score": 0.1837, + "score": 0.1834, "shared_terms": [ - "kit", - "teal", - "design", - "chart", - "css", - "system", - "app", - "import" + "claude", + "codex", + "source", + "skills", + "catalog", + "routing", + "tests", + "test" ] }, { @@ -12010,7 +11429,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.1837, + "score": 0.1834, "shared_terms": [ "app", "config", @@ -12022,6 +11441,27 @@ "validator" ] }, + { + "a": { + "kind": "command", + "id": "audit-multizone" + }, + "b": { + "kind": "command", + "id": "create-dashboard" + }, + "score": 0.1834, + "shared_terms": [ + "repo", + "multi", + "dashboard", + "path", + "phase", + "clone", + "create", + "arguments" + ] + }, { "a": { "kind": "skill", @@ -12052,7 +11492,7 @@ "kind": "command", "id": "audit-state-tax" }, - "score": 0.1821, + "score": 0.1822, "shared_terms": [ "audit", "url", @@ -12064,6 +11504,27 @@ "check" ] }, + { + "a": { + "kind": "skill", + "id": "fix-pr" + }, + "b": { + "kind": "agent", + "id": "pr-pusher" + }, + "score": 0.1814, + "shared_terms": [ + "fix", + "review", + "push", + "workflow", + "pusher", + "local", + "files", + "never" + ] + }, { "a": { "kind": "command", @@ -12073,100 +11534,100 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.1808, + "score": 0.1804, "shared_terms": [ "branch", "git", "main", "check", - "step", "bash", - "json", - "feature" + "step", + "feature", + "json" ] }, { "a": { - "kind": "skill", - "id": "policyengine-api" + "kind": "command", + "id": "encode-reform" }, "b": { "kind": "command", - "id": "household-calc" + "id": "implement-structural" }, - "score": 0.1806, + "score": 0.1803, "shared_terms": [ - "household", - "api", - "get", - "country", - "baseline", "reform", - "calc", - "simulation" + "contrib", + "implement", + "bill", + "gov", + "encode", + "arguments", + "phase" ] }, { "a": { "kind": "agent", - "id": "issue-manager" + "id": "program-reviewer" }, "b": { "kind": "command", - "id": "audit-seo" + "id": "backdate-program" }, - "score": 0.18, + "score": 0.1798, "shared_terms": [ - "url", - "repo", - "issue", - "title", - "open", - "search", - "github", - "group" + "program", + "review", + "tanf", + "research", + "read", + "state", + "you", + "findings" ] }, { "a": { "kind": "agent", - "id": "dashboard-architecture-validator" + "id": "issue-manager" }, "b": { "kind": "command", - "id": "write-tests" + "id": "audit-seo" }, - "score": 0.1797, + "score": 0.179, "shared_terms": [ - "test", - "app", - "path", - "package", - "module", - "files", - "bash", - "config" + "url", + "repo", + "issue", + "title", + "open", + "search", + "github", + "group" ] }, { "a": { - "kind": "command", - "id": "encode-reform" + "kind": "skill", + "id": "fix-pr" }, "b": { - "kind": "command", - "id": "implement-structural" + "kind": "skill", + "id": "policyengine-plugin-maintenance" }, - "score": 0.1789, + "score": 0.1784, "shared_terms": [ - "reform", - "contrib", - "implement", - "bill", - "gov", - "encode", - "arguments", - "phase" + "claude", + "codex", + "fix", + "plugin", + "skills", + "verification", + "references", + "edit" ] }, { @@ -12178,7 +11639,7 @@ "kind": "agent", "id": "calibration-diagnostics" }, - "score": 0.1777, + "score": 0.1774, "shared_terms": [ "unit", "tax", @@ -12199,12 +11660,12 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.1777, + "score": 0.1768, "shared_terms": [ "reform", "natural", - "description", "language", + "description", "provision", "bill", "api", @@ -12213,107 +11674,128 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-api" + "kind": "agent", + "id": "dashboard-architecture-validator" }, "b": { - "kind": "skill", - "id": "policyengine-app" + "kind": "command", + "id": "write-tests" }, - "score": 0.1775, + "score": 0.1767, "shared_terms": [ - "api", + "test", "app", - "org", - "economy", - "household", - "calc", - "client", - "params" + "path", + "package", + "module", + "files", + "bash", + "config" ] }, { "a": { - "kind": "command", - "id": "analyze-policy" + "kind": "agent", + "id": "implementation-validator" }, "b": { "kind": "command", - "id": "create-dashboard" + "id": "implement-structural" }, - "score": 0.1773, + "score": 0.1765, "shared_terms": [ - "auto", - "horizon", + "structural", + "mode", + "run", + "verification", "phase", - "reform", - "single", - "confirm", - "multi", - "skip" + "report", + "issue", + "read" ] }, { "a": { - "kind": "agent", - "id": "program-reviewer" + "kind": "command", + "id": "implement-structural" }, "b": { "kind": "command", - "id": "backdate-program" + "id": "text-to-reform" }, - "score": 0.1771, + "score": 0.1764, "shared_terms": [ - "program", - "review", - "tanf", - "research", - "read", - "state", - "you", - "findings" + "reform", + "structural", + "analyze", + "bill", + "formula", + "deployed", + "extension", + "pre" ] }, { "a": { - "kind": "agent", - "id": "prior-scores-finder" + "kind": "skill", + "id": "policyengine-api" }, "b": { + "kind": "skill", + "id": "policyengine-app" + }, + "score": 0.1762, + "shared_terms": [ + "api", + "app", + "org", + "economy", + "calc", + "client", + "household", + "params" + ] + }, + { + "a": { "kind": "command", - "id": "analyze-policy" + "id": "audit-state-tax" + }, + "b": { + "kind": "command", + "id": "encode-reform" }, - "score": 0.1771, + "score": 0.1762, "shared_terms": [ - "year", - "microsim", - "prior", - "archive", - "horizon", - "reform", - "scores", - "cost" + "pdf", + "state", + "gov", + "arguments", + "full", + "tax", + "phase", + "page" ] }, { "a": { "kind": "skill", - "id": "policyengine-canada" + "id": "policyengine-api" }, "b": { - "kind": "skill", - "id": "policyengine-us" + "kind": "command", + "id": "household-calc" }, - "score": 0.177, + "score": 0.1759, "shared_terms": [ "household", - "tax", - "income", - "credit", - "net", - "benefit", - "child", - "poverty" + "api", + "get", + "country", + "baseline", + "reform", + "calc", + "simulation" ] }, { @@ -12325,79 +11807,79 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.177, + "score": 0.1755, "shared_terms": [ "reform", "parameter", - "model", "family", + "model", "dict", "amount", "phase", - "brackets" + "ctc" ] }, { "a": { - "kind": "skill", - "id": "encode-policy-v2" + "kind": "agent", + "id": "prior-scores-finder" }, "b": { "kind": "command", - "id": "encode-reform" + "id": "analyze-policy" }, - "score": 0.1763, + "score": 0.1753, "shared_terms": [ - "encode", - "review", - "pdf", - "full", - "fixer", - "prefix", + "year", + "microsim", + "prior", + "archive", + "horizon", "reform", - "implement" + "scores", + "cost" ] }, { "a": { "kind": "command", - "id": "implement-structural" + "id": "analyze-policy" }, "b": { "kind": "command", - "id": "text-to-reform" + "id": "create-dashboard" }, - "score": 0.1762, + "score": 0.1752, "shared_terms": [ + "auto", + "horizon", + "phase", "reform", - "structural", - "analyze", - "bill", - "formula", - "deployed", - "extension", - "pre" + "single", + "confirm", + "multi", + "skip" ] }, { "a": { "kind": "skill", - "id": "policyengine-plugin-maintenance" + "id": "policyengine-canada" }, "b": { - "kind": "command", - "id": "encode-policy-v2" + "kind": "skill", + "id": "policyengine-us" }, - "score": 0.1754, + "score": 0.1751, "shared_terms": [ - "claude", - "skills", - "plugin", - "run", - "shipped", - "references", - "not", - "runs" + "household", + "tax", + "income", + "credit", + "net", + "benefit", + "child", + "poverty" ] }, { @@ -12409,7 +11891,7 @@ "kind": "agent", "id": "microsim-runner" }, - "score": 0.1751, + "score": 0.1738, "shared_terms": [ "result", "dataset", @@ -12423,119 +11905,77 @@ }, { "a": { - "kind": "command", - "id": "audit-state-tax" - }, - "b": { - "kind": "command", - "id": "encode-reform" - }, - "score": 0.174, - "shared_terms": [ - "pdf", - "state", - "gov", - "full", - "tax", - "arguments", - "phase", - "page" - ] - }, - { - "a": { - "kind": "agent", - "id": "implementation-validator" + "kind": "skill", + "id": "policyengine-model-development" }, "b": { "kind": "command", - "id": "implement-structural" + "id": "write-tests" }, - "score": 0.1738, + "score": 0.1732, "shared_terms": [ - "structural", - "mode", + "tests", + "test", + "write", "run", - "verification", - "phase", - "report", - "issue", - "read" + "pytest", + "repo", + "references", + "path" ] }, { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "policyengine-research-lookup" }, "b": { - "kind": "command", - "id": "audit-state-tax" + "kind": "skill", + "id": "policyengine-writing" }, - "score": 0.1735, + "score": 0.1706, "shared_terms": [ - "pdf", - "state", - "audit", - "full", - "phase", - "official", - "source", - "arguments" + "blog", + "posts", + "post", + "research", + "writing", + "tax", + "harris", + "analysis" ] }, { "a": { "kind": "skill", - "id": "policyengine-model-development" + "id": "policyengine-writing" }, "b": { "kind": "command", - "id": "write-tests" + "id": "generate-content" }, - "score": 0.1732, + "score": 0.1706, "shared_terms": [ - "tests", - "test", - "write", - "run", - "pytest", - "repo", - "path", - "references" + "social", + "blog", + "post", + "posts", + "neutrality", + "content", + "writing", + "copy" ] }, { "a": { "kind": "agent", - "id": "edge-case-generator" - }, - "b": { - "kind": "command", - "id": "backdate-program" - }, - "score": 0.1732, - "shared_terms": [ - "files", - "program", - "review", - "backdate", - "read", - "only", - "existing", - "root" - ] - }, - { - "a": { - "kind": "agent", - "id": "component-test-writer" + "id": "component-test-writer" }, "b": { "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.1729, + "score": 0.1702, "shared_terms": [ "test", "app", @@ -12547,88 +11987,67 @@ "setup" ] }, - { - "a": { - "kind": "agent", - "id": "program-reviewer" - }, - "b": { - "kind": "agent", - "id": "test-creator" - }, - "score": 0.1723, - "shared_terms": [ - "test", - "tests", - "program", - "government", - "step", - "benefit", - "format", - "variables" - ] - }, { "a": { "kind": "skill", - "id": "policyengine-us" + "id": "policyengine-writing" }, "b": { "kind": "agent", - "id": "dashboard-integrator" + "id": "reform-describer" }, - "score": 0.1715, + "score": 0.17, "shared_terms": [ - "household", - "unit", + "sentence", + "blog", + "reform", + "writing", + "neutral", + "advocacy", "tax", - "income", - "spm", - "person", - "year", - "head" + "descriptions" ] }, { "a": { "kind": "skill", - "id": "policyengine-healthcare" + "id": "policyengine-user-guide" }, "b": { "kind": "command", - "id": "household-calc" + "id": "text-to-reform" }, - "score": 0.1714, + "score": 0.1698, "shared_terms": [ - "household", - "net", - "income", "reform", - "benefits", - "tax", - "year", - "single" + "impact", + "link", + "analyze", + "org", + "reforms", + "parameter", + "into" ] }, { "a": { "kind": "agent", - "id": "calibration-diagnostics" + "id": "issue-manager" }, "b": { "kind": "agent", - "id": "parameter-locator" + "id": "report-logger" }, - "score": 0.1714, + "score": 0.1698, "shared_terms": [ - "state", - "income", - "tax", - "reform", - "ctc", - "parameter", - "states", - "federal" + "issue", + "repo", + "open", + "draft", + "github", + "url", + "explicit", + "prompt" ] }, { @@ -12640,7 +12059,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.1712, + "score": 0.1698, "shared_terms": [ "income", "state", @@ -12654,149 +12073,107 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-user-guide" + "kind": "agent", + "id": "calibration-diagnostics" }, "b": { - "kind": "command", - "id": "text-to-reform" + "kind": "agent", + "id": "parameter-locator" }, - "score": 0.1704, + "score": 0.1697, "shared_terms": [ + "state", + "income", + "tax", "reform", - "impact", - "link", - "analyze", - "org", - "reforms", + "ctc", "parameter", - "into" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-writing" - }, - "b": { - "kind": "command", - "id": "generate-content" - }, - "score": 0.1704, - "shared_terms": [ - "social", - "blog", - "post", - "posts", - "neutrality", - "content", - "writing", - "copy" + "states", + "federal" ] }, { "a": { "kind": "skill", - "id": "policyengine-writing" + "id": "policyengine-us" }, "b": { "kind": "agent", - "id": "reform-describer" + "id": "dashboard-integrator" }, - "score": 0.1703, + "score": 0.1691, "shared_terms": [ - "sentence", - "blog", - "reform", - "writing", - "neutral", - "advocacy", + "household", + "unit", "tax", - "descriptions" + "spm", + "income", + "person", + "year", + "state" ] }, { "a": { - "kind": "skill", - "id": "fix-pr" + "kind": "agent", + "id": "edge-case-generator" }, "b": { - "kind": "skill", - "id": "policyengine-plugin-maintenance" + "kind": "command", + "id": "backdate-program" }, - "score": 0.1695, + "score": 0.1687, "shared_terms": [ - "claude", - "codex", - "fix", - "plugin", - "skills", - "verification", - "edit", - "references" + "files", + "program", + "review", + "backdate", + "read", + "existing", + "only", + "root" ] }, { "a": { "kind": "skill", - "id": "policyengine-research-lookup" + "id": "policyengine-healthcare" }, "b": { - "kind": "skill", - "id": "policyengine-writing" + "kind": "command", + "id": "household-calc" }, - "score": 0.1691, + "score": 0.1679, "shared_terms": [ - "blog", - "posts", - "post", - "research", - "writing", + "household", + "net", + "income", + "reform", + "benefits", "tax", - "harris", - "analysis" + "year", + "single" ] }, { "a": { "kind": "agent", - "id": "issue-manager" - }, - "b": { - "kind": "agent", - "id": "report-logger" - }, - "score": 0.1691, - "shared_terms": [ - "issue", - "repo", - "open", - "draft", - "github", - "url", - "prompt", - "explicit" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-model-development" + "id": "dashboard-design-validator" }, "b": { "kind": "agent", - "id": "pr-pusher" + "id": "dashboard-scaffold" }, - "score": 0.1689, + "score": 0.1675, "shared_terms": [ - "changelog", - "add", - "branch", - "never", - "tests", - "run", - "repo", - "fragment" + "tsx", + "components", + "dashboard", + "kit", + "design", + "app", + "css", + "custom" ] }, { @@ -12808,7 +12185,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.1688, + "score": 0.1675, "shared_terms": [ "kit", "dashboard", @@ -12823,43 +12200,22 @@ { "a": { "kind": "agent", - "id": "policy-text-researcher" + "id": "backend-builder" }, "b": { "kind": "command", - "id": "analyze-policy" + "id": "new-tool" }, - "score": 0.1686, + "score": 0.1671, "shared_terms": [ - "bill", - "year", - "arpa", - "federal", - "reform", - "ctc", - "text", - "phase" - ] - }, - { - "a": { - "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "agent", - "id": "reference-validator" - }, - "score": 0.1684, - "shared_terms": [ - "pdf", - "review", - "reference", - "references", - "program", - "text", - "source", - "validation" + "api", + "dashboard", + "create", + "export", + "precomputed", + "function", + "step", + "data" ] }, { @@ -12871,7 +12227,7 @@ "kind": "command", "id": "encode-reform" }, - "score": 0.1682, + "score": 0.1671, "shared_terms": [ "reform", "gov", @@ -12886,43 +12242,64 @@ { "a": { "kind": "agent", - "id": "dashboard-design-validator" + "id": "policy-text-researcher" }, "b": { - "kind": "agent", - "id": "dashboard-scaffold" + "kind": "command", + "id": "analyze-policy" }, - "score": 0.1679, + "score": 0.1669, "shared_terms": [ - "tsx", - "components", - "dashboard", - "kit", - "design", - "app", - "css", - "custom" + "bill", + "year", + "arpa", + "federal", + "reform", + "ctc", + "text", + "phase" ] }, { "a": { - "kind": "agent", - "id": "backend-builder" + "kind": "command", + "id": "analyze-policy" }, "b": { "kind": "command", - "id": "new-tool" + "id": "household-calc" }, - "score": 0.1678, + "score": 0.1667, "shared_terms": [ - "api", - "dashboard", - "create", - "export", - "precomputed", - "function", - "step", - "data" + "reform", + "year", + "yyyy", + "single", + "cost", + "analyze", + "microsim", + "baseline" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-app" + }, + "b": { + "kind": "skill", + "id": "policyengine-design" + }, + "score": 0.166, + "shared_terms": [ + "app", + "tailwindcss", + "kit", + "theme", + "design", + "vite", + "tokens", + "colors" ] }, { @@ -12934,12 +12311,12 @@ "kind": "command", "id": "write-tests" }, - "score": 0.1675, + "score": 0.1656, "shared_terms": [ "test", "tests", - "step", "files", + "step", "client", "api", "json", @@ -12948,23 +12325,23 @@ }, { "a": { - "kind": "skill", - "id": "encode-policy-v2" + "kind": "agent", + "id": "implementation-validator" }, "b": { "kind": "agent", - "id": "program-reviewer" + "id": "pr-pusher" }, - "score": 0.1672, + "score": 0.1651, "shared_terms": [ - "program", + "fix", "review", - "implementation", - "tests", - "code", - "encode", - "state", - "references" + "run", + "only", + "caller", + "git", + "issues", + "program" ] }, { @@ -12973,18 +12350,18 @@ "id": "policyengine-app" }, "b": { - "kind": "skill", - "id": "policyengine-design" + "kind": "agent", + "id": "dashboard-design-validator" }, - "score": 0.1663, + "score": 0.165, "shared_terms": [ "app", - "tailwindcss", + "tsx", "kit", - "theme", "design", - "vite", - "tokens", + "components", + "component", + "typography", "colors" ] }, @@ -12997,7 +12374,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.1661, + "score": 0.1646, "shared_terms": [ "reform", "household", @@ -13009,27 +12386,6 @@ "preset" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-plugin-maintenance" - }, - "b": { - "kind": "command", - "id": "review-program" - }, - "score": 0.1657, - "shared_terms": [ - "claude", - "skills", - "plugin", - "code", - "run", - "shipped", - "references", - "not" - ] - }, { "a": { "kind": "agent", @@ -13039,7 +12395,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.1656, + "score": 0.1644, "shared_terms": [ "dashboard", "reform", @@ -13051,88 +12407,46 @@ "multi" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-app" - }, - "b": { - "kind": "agent", - "id": "dashboard-design-validator" - }, - "score": 0.1652, - "shared_terms": [ - "app", - "tsx", - "kit", - "design", - "components", - "component", - "typography", - "colors" - ] - }, - { - "a": { - "kind": "skill", - "id": "fix-pr" - }, - "b": { - "kind": "agent", - "id": "pr-pusher" - }, - "score": 0.165, - "shared_terms": [ - "fix", - "review", - "push", - "workflow", - "pusher", - "local", - "never", - "commits" - ] - }, { "a": { "kind": "agent", - "id": "reform-describer" + "id": "policy-text-researcher" }, "b": { "kind": "command", - "id": "household-calc" + "id": "implement-structural" }, - "score": 0.1647, + "score": 0.1643, "shared_terms": [ + "enacted", + "gov", + "structural", + "effective", + "bill", "reform", - "description", - "baseline", - "ctc", - "dict", - "tax", - "specific", - "values" + "date", + "draft" ] }, { "a": { - "kind": "agent", - "id": "model-corroborator" + "kind": "skill", + "id": "review-program" }, "b": { "kind": "agent", - "id": "reform-classifier" + "id": "reference-validator" }, - "score": 0.1641, + "score": 0.164, "shared_terms": [ - "reform", - "model", - "parameter", - "stage", - "microsim", - "amount", - "deployed", - "ctc" + "pdf", + "review", + "reference", + "references", + "source", + "program", + "missing", + "text" ] }, { @@ -13144,13 +12458,13 @@ "kind": "agent", "id": "microsim-runner" }, - "score": 0.1638, + "score": 0.1639, "shared_terms": [ "api", "data", "response", - "result", "request", + "result", "year", "state", "step" @@ -13158,44 +12472,44 @@ }, { "a": { - "kind": "command", - "id": "analyze-policy" + "kind": "agent", + "id": "implementation-validator" }, "b": { - "kind": "command", - "id": "household-calc" + "kind": "agent", + "id": "test-creator" }, "score": 0.1637, "shared_terms": [ - "reform", - "year", - "single", - "yyyy", - "cost", - "analyze", - "microsim", - "baseline" + "fix", + "program", + "test", + "read", + "not", + "only", + "findings", + "variable" ] }, { "a": { - "kind": "skill", - "id": "policyengine-canada" + "kind": "agent", + "id": "document-collector" }, "b": { - "kind": "skill", - "id": "policyengine-user-guide" + "kind": "agent", + "id": "test-creator" }, - "score": 0.1636, + "score": 0.1634, "shared_terms": [ - "household", - "income", - "population", + "month", + "months", + "documentation", + "government", "benefit", - "canada", - "tax", - "net", - "poverty" + "program", + "document", + "development" ] }, { @@ -13207,37 +12521,37 @@ "kind": "agent", "id": "policy-text-researcher" }, - "score": 0.1632, + "score": 0.1634, "shared_terms": [ "enacted", "effective", "draft", "bill", "structural", - "date", "gov", + "date", "enrolled" ] }, { "a": { "kind": "agent", - "id": "policy-text-researcher" + "id": "reform-describer" }, "b": { "kind": "command", - "id": "implement-structural" + "id": "household-calc" }, - "score": 0.1632, + "score": 0.1629, "shared_terms": [ - "enacted", - "gov", - "structural", - "effective", - "bill", "reform", - "date", - "draft" + "description", + "baseline", + "ctc", + "dict", + "specific", + "tax", + "values" ] }, { @@ -13249,7 +12563,7 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.1631, + "score": 0.1622, "shared_terms": [ "dashboard", "reform", @@ -13261,25 +12575,46 @@ "ctc" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-canada" + }, + "b": { + "kind": "skill", + "id": "policyengine-user-guide" + }, + "score": 0.1619, + "shared_terms": [ + "household", + "income", + "population", + "benefit", + "canada", + "tax", + "net", + "poverty" + ] + }, { "a": { "kind": "agent", - "id": "implementation-validator" + "id": "model-corroborator" }, "b": { "kind": "agent", - "id": "reference-validator" + "id": "reform-classifier" }, - "score": 0.1629, + "score": 0.1619, "shared_terms": [ - "reference", - "validator", - "pdf", - "mode", - "review", - "program", - "fix", - "issues" + "reform", + "parameter", + "model", + "stage", + "microsim", + "amount", + "deployed", + "ctc" ] }, { @@ -13291,7 +12626,7 @@ "kind": "agent", "id": "model-corroborator" }, - "score": 0.1622, + "score": 0.1613, "shared_terms": [ "calibration", "reform", @@ -13305,23 +12640,44 @@ }, { "a": { - "kind": "command", - "id": "audit-state-tax" + "kind": "agent", + "id": "rules-engineer" }, "b": { "kind": "command", - "id": "review-program" + "id": "audit-state-tax" }, - "score": 0.1618, + "score": 0.1612, "shared_terms": [ "pdf", - "audit", - "arguments", - "code", - "changes", - "only", - "read", - "references" + "oregon", + "page", + "parameter", + "full", + "income", + "gov", + "number" + ] + }, + { + "a": { + "kind": "agent", + "id": "pr-pusher" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.1607, + "shared_terms": [ + "tests", + "caller", + "commit", + "pusher", + "files", + "contract", + "fix", + "commits" ] }, { @@ -13333,39 +12689,18 @@ "kind": "command", "id": "backdate-program" }, - "score": 0.1617, + "score": 0.1604, "shared_terms": [ "page", - "reference", "pdf", "program", + "reference", "review", "href", "phase", "parameter" ] }, - { - "a": { - "kind": "command", - "id": "audit-multizone" - }, - "b": { - "kind": "command", - "id": "write-tests" - }, - "score": 0.161, - "shared_terms": [ - "path", - "target", - "repo", - "test", - "app", - "config", - "bash", - "existing" - ] - }, { "a": { "kind": "skill", @@ -13375,7 +12710,7 @@ "kind": "agent", "id": "issue-manager" }, - "score": 0.1607, + "score": 0.1602, "shared_terms": [ "repo", "number", @@ -13387,6 +12722,27 @@ "title" ] }, + { + "a": { + "kind": "command", + "id": "audit-multizone" + }, + "b": { + "kind": "command", + "id": "write-tests" + }, + "score": 0.159, + "shared_terms": [ + "path", + "target", + "repo", + "test", + "app", + "config", + "bash", + "existing" + ] + }, { "a": { "kind": "agent", @@ -13396,7 +12752,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.1604, + "score": 0.1584, "shared_terms": [ "dashboard", "zone", @@ -13411,22 +12767,43 @@ { "a": { "kind": "agent", - "id": "rules-engineer" + "id": "implementation-validator" }, "b": { - "kind": "command", - "id": "audit-state-tax" + "kind": "agent", + "id": "reference-validator" }, - "score": 0.1603, + "score": 0.1582, "shared_terms": [ "pdf", - "oregon", - "page", - "parameter", - "full", - "income", - "gov", - "number" + "reference", + "review", + "validator", + "mode", + "fix", + "program", + "issues" + ] + }, + { + "a": { + "kind": "agent", + "id": "dashboard-integrator" + }, + "b": { + "kind": "command", + "id": "new-tool" + }, + "score": 0.157, + "shared_terms": [ + "api", + "const", + "function", + "import", + "return", + "countryid", + "export", + "create" ] }, { @@ -13438,7 +12815,7 @@ "kind": "skill", "id": "policyengine-uk" }, - "score": 0.16, + "score": 0.1568, "shared_terms": [ "household", "entity", @@ -13447,28 +12824,28 @@ "benunit", "person", "income", - "reform" + "canada" ] }, { "a": { "kind": "skill", - "id": "review-program" + "id": "policyengine-design" }, "b": { - "kind": "command", - "id": "encode-reform" + "kind": "agent", + "id": "dashboard-design-validator" }, - "score": 0.1599, + "score": 0.1566, "shared_terms": [ - "review", - "prefix", - "pdf", - "workflow", - "summary", - "read", - "full", - "arguments" + "kit", + "css", + "design", + "app", + "font", + "var", + "colors", + "node" ] }, { @@ -13480,7 +12857,7 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.1579, + "score": 0.1564, "shared_terms": [ "reform", "original", @@ -13494,170 +12871,128 @@ }, { "a": { - "kind": "agent", - "id": "dashboard-integrator" + "kind": "skill", + "id": "encode-policy-v2" }, "b": { - "kind": "command", - "id": "new-tool" + "kind": "agent", + "id": "test-creator" }, - "score": 0.1572, + "score": 0.1563, "shared_terms": [ - "api", - "const", - "function", - "import", - "countryid", - "export", - "return", - "create" + "tests", + "test", + "program", + "references", + "contract", + "not", + "development", + "read" ] }, { "a": { - "kind": "agent", - "id": "component-test-writer" + "kind": "skill", + "id": "review-program" }, "b": { - "kind": "agent", - "id": "dashboard-plan-validator" + "kind": "command", + "id": "encode-reform" }, - "score": 0.1568, + "score": 0.1563, "shared_terms": [ - "component", - "tsx", - "test", - "components", - "app", - "chart", - "expect", - "render" + "review", + "prefix", + "pdf", + "workflow", + "summary", + "full", + "phase", + "read" ] }, { "a": { - "kind": "skill", - "id": "policyengine-uk" - }, - "b": { "kind": "agent", - "id": "dashboard-integrator" - }, - "score": 0.1567, - "shared_terms": [ - "household", - "income", - "person", - "unit", - "data", - "tax", - "age", - "spm" - ] - }, - { - "a": { - "kind": "command", - "id": "audit-seo" + "id": "prior-scores-finder" }, "b": { "kind": "command", - "id": "deploy-dashboard" - }, - "score": 0.1565, - "shared_terms": [ - "vercel", - "deploy", - "url", - "step", - "zone", - "host", - "app", - "check" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-design" - }, - "b": { - "kind": "agent", - "id": "dashboard-design-validator" + "id": "text-to-reform" }, "score": 0.1563, "shared_terms": [ - "kit", - "css", - "design", - "app", - "font", - "var", - "colors", - "node" + "reform", + "microsim", + "prior", + "bill", + "scores", + "reforms", + "same", + "not" ] }, { "a": { "kind": "agent", - "id": "backend-builder" + "id": "rules-engineer" }, "b": { "kind": "agent", - "id": "microsim-runner" + "id": "reform-describer" }, - "score": 0.1563, + "score": 0.1554, "shared_terms": [ - "data", - "api", - "json", - "client", - "response", - "step", - "results", - "reform" + "parameter", + "description", + "program", + "families", + "amount", + "eligibility", + "income", + "sentence" ] }, { "a": { - "kind": "skill", - "id": "encode-policy-v2" + "kind": "agent", + "id": "component-test-writer" }, "b": { - "kind": "skill", - "id": "policyengine-plugin-maintenance" + "kind": "agent", + "id": "dashboard-plan-validator" }, - "score": 0.1556, + "score": 0.1549, "shared_terms": [ - "claude", - "codex", - "routing", - "tests", - "not", - "skills", - "source", - "agents" + "component", + "tsx", + "test", + "components", + "app", + "chart", + "render", + "expect" ] }, { "a": { - "kind": "agent", - "id": "prior-scores-finder" + "kind": "command", + "id": "audit-seo" }, "b": { "kind": "command", - "id": "text-to-reform" + "id": "deploy-dashboard" }, - "score": 0.1553, + "score": 0.1549, "shared_terms": [ - "reform", - "microsim", - "prior", - "bill", - "scores", - "reforms", - "not", - "same" + "vercel", + "deploy", + "url", + "step", + "zone", + "host", + "app", + "check" ] }, { @@ -13669,7 +13004,7 @@ "kind": "command", "id": "encode-reform" }, - "score": 0.1551, + "score": 0.1548, "shared_terms": [ "reform", "page", @@ -13690,7 +13025,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.1545, + "score": 0.1543, "shared_terms": [ "single", "baseline", @@ -13704,128 +13039,44 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-standards" + "kind": "agent", + "id": "backend-builder" }, "b": { "kind": "agent", - "id": "structural-implementer" + "id": "microsim-runner" }, - "score": 0.1544, + "score": 0.1542, "shared_terms": [ - "draft", - "changelog", - "repo", - "venv", - "ready", - "issue", - "committing", - "check" + "data", + "api", + "json", + "client", + "response", + "step", + "results", + "reform" ] }, { "a": { "kind": "skill", - "id": "policyengine" - }, - "b": { - "kind": "command", - "id": "audit-state-tax" - }, - "score": 0.1543, - "shared_terms": [ - "tax", - "state", - "income", - "year", - "result", - "revenue", - "gov", - "python" - ] - }, - { - "a": { - "kind": "agent", - "id": "rules-engineer" + "id": "policyengine-standards" }, "b": { "kind": "agent", - "id": "reform-describer" + "id": "structural-implementer" }, "score": 0.1541, "shared_terms": [ - "parameter", - "description", - "program", - "families", - "amount", - "eligibility", - "income", - "title" - ] - }, - { - "a": { - "kind": "agent", - "id": "component-test-writer" - }, - "b": { - "kind": "agent", - "id": "test-creator" - }, - "score": 0.1539, - "shared_terms": [ - "test", - "tests", - "testing", - "comprehensive", - "names", - "integration", - "plain", - "case" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-user-guide" - }, - "b": { - "kind": "skill", - "id": "policyengine-writing" - }, - "score": 0.1537, - "shared_terms": [ - "reform", - "income", - "poverty", - "benefits", - "tax", - "household", - "net", - "impacts" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-model-development" - }, - "b": { - "kind": "command", - "id": "encode-reform" - }, - "score": 0.1531, - "shared_terms": [ - "reform", - "contrib", - "reforms", - "contributed", - "gov", - "variable", - "type", - "federal" + "draft", + "changelog", + "repo", + "venv", + "ready", + "issue", + "check", + "committing" ] }, { @@ -13834,61 +13085,40 @@ "id": "policyengine-uk" }, "b": { - "kind": "skill", - "id": "policyengine-writing" + "kind": "agent", + "id": "dashboard-integrator" }, - "score": 0.1531, + "score": 0.1538, "shared_terms": [ - "poverty", - "income", - "tax", - "costs", "household", - "net", - "credit", - "writing" - ] - }, - { - "a": { - "kind": "command", - "id": "household-calc" - }, - "b": { - "kind": "command", - "id": "prior-scores" - }, - "score": 0.153, - "shared_terms": [ - "reform", - "analyze", - "consult", - "scores", - "presets", - "prior", - "external", - "microsim" + "income", + "person", + "unit", + "data", + "tax", + "age", + "spm" ] }, { "a": { "kind": "skill", - "id": "policyengine-model-development" + "id": "review-program" }, "b": { "kind": "agent", - "id": "structural-implementer" + "id": "pr-pusher" }, - "score": 0.1529, + "score": 0.1537, "shared_terms": [ - "tests", - "encoding", - "parameter", - "changelog", - "formula", - "bracket", - "contrib", - "model" + "review", + "workflow", + "local", + "contract", + "run", + "head", + "program", + "repository" ] }, { @@ -13900,14 +13130,14 @@ "kind": "skill", "id": "policyengine-writing" }, - "score": 0.1524, + "score": 0.1533, "shared_terms": [ "social", "post", "blog", "copy", - "neutrality", "writing", + "neutrality", "content", "make" ] @@ -13921,7 +13151,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.1521, + "score": 0.153, "shared_terms": [ "dashboard", "plan", @@ -13935,23 +13165,23 @@ }, { "a": { - "kind": "agent", - "id": "microsim-runner" + "kind": "command", + "id": "household-calc" }, "b": { "kind": "command", - "id": "analyze-policy" + "id": "prior-scores" }, - "score": 0.152, + "score": 0.1529, "shared_terms": [ - "year", - "default", - "economy", - "data", - "microsim", - "baseline", "reform", - "api" + "analyze", + "consult", + "scores", + "presets", + "prior", + "external", + "microsim" ] }, { @@ -13963,7 +13193,7 @@ "kind": "agent", "id": "report-logger" }, - "score": 0.152, + "score": 0.1523, "shared_terms": [ "analyses", "archive", @@ -13977,44 +13207,86 @@ }, { "a": { - "kind": "agent", - "id": "microsim-runner" + "kind": "skill", + "id": "policyengine" }, "b": { "kind": "command", - "id": "household-calc" + "id": "audit-state-tax" }, - "score": 0.1511, + "score": 0.1522, "shared_terms": [ - "reform", - "version", - "baseline", - "dict", - "api", - "microsimulation", - "raw", - "result" + "tax", + "state", + "income", + "year", + "result", + "revenue", + "gov", + "python" ] }, { "a": { - "kind": "agent", - "id": "issue-manager" + "kind": "skill", + "id": "policyengine-uk" }, "b": { - "kind": "command", - "id": "audit-state-tax" + "kind": "skill", + "id": "policyengine-writing" }, - "score": 0.1509, + "score": 0.1522, "shared_terms": [ - "state", - "number", - "url", - "abbreviation", - "search", - "mode", - "discover", - "phase" + "poverty", + "income", + "tax", + "costs", + "household", + "net", + "writing", + "credit" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-content" + }, + "b": { + "kind": "skill", + "id": "policyengine-research-lookup" + }, + "score": 0.1519, + "shared_terms": [ + "post", + "blog", + "image", + "published", + "live", + "app", + "tone", + "research" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-user-guide" + }, + "b": { + "kind": "skill", + "id": "policyengine-writing" + }, + "score": 0.1517, + "shared_terms": [ + "reform", + "income", + "poverty", + "benefits", + "tax", + "household", + "net", + "impacts" ] }, { @@ -14026,7 +13298,7 @@ "kind": "agent", "id": "reform-classifier" }, - "score": 0.1507, + "score": 0.1514, "shared_terms": [ "gov", "ctc", @@ -14040,86 +13312,128 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-app" + "kind": "agent", + "id": "ci-fixer" }, "b": { + "kind": "command", + "id": "encode-reform" + }, + "score": 0.1512, + "shared_terms": [ + "prefix", + "test", + "files", + "fixer", + "orchestrator", + "spec", + "encode", + "override" + ] + }, + { + "a": { "kind": "agent", - "id": "dashboard-scaffold" + "id": "microsim-runner" + }, + "b": { + "kind": "command", + "id": "household-calc" }, - "score": 0.1505, + "score": 0.1512, "shared_terms": [ - "app", - "next", - "page", - "tsx", + "reform", + "version", + "baseline", + "dict", "api", - "design", - "router", - "kit" + "microsimulation", + "raw", + "current" ] }, { "a": { - "kind": "agent", - "id": "report-logger" + "kind": "skill", + "id": "review-program" }, "b": { "kind": "command", "id": "audit-seo" }, - "score": 0.1504, + "score": 0.151, "shared_terms": [ - "issue", - "repo", - "open", + "canonical", + "audit", "local", - "github", "report", - "app", - "step" + "read", + "url", + "github", + "findings" ] }, { "a": { - "kind": "agent", - "id": "calibration-diagnostics" + "kind": "skill", + "id": "encode-policy-v2" }, "b": { - "kind": "agent", - "id": "reform-comparator" + "kind": "command", + "id": "audit-state-tax" }, - "score": 0.1503, + "score": 0.1509, "shared_terms": [ - "prior", - "anchor", - "calibration", - "microsim", - "comparator", - "cost", - "baseline", - "diagnostics" + "pdf", + "state", + "source", + "official", + "audit", + "local", + "arguments", + "phase" ] }, { "a": { - "kind": "command", - "id": "encode-reform" + "kind": "skill", + "id": "policyengine-model-development" }, "b": { - "kind": "command", - "id": "household-calc" + "kind": "skill", + "id": "policyengine-us" }, "score": 0.1502, "shared_terms": [ - "reform", - "level", - "arguments", - "baseline", - "reforms", - "tax", - "single", - "file" + "entity", + "household", + "year", + "gov", + "period", + "person", + "variables", + "income" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-model-development" + }, + "b": { + "kind": "agent", + "id": "structural-implementer" + }, + "score": 0.15, + "shared_terms": [ + "tests", + "parameter", + "changelog", + "formula", + "encoding", + "bracket", + "contrib", + "model" ] } ], @@ -14315,8 +13629,7 @@ "./skills/fix-pr" ], "commands": [ - "./commands/create-pr.md", - "./commands/fix-pr.md" + "./commands/create-pr.md" ], "agents": [ "./agents/country-models/ci-fixer.md", @@ -14360,7 +13673,6 @@ "commands": [ "./commands/create-new-component.md", "./commands/create-pr.md", - "./commands/fix-pr.md", "./commands/new-tool.md", "./commands/audit-seo.md", "./commands/audit-multizone.md", @@ -14428,9 +13740,7 @@ "./commands/create-new-component.md", "./commands/create-pr.md", "./commands/deploy-dashboard.md", - "./commands/encode-policy-v2.md", "./commands/encode-reform.md", - "./commands/fix-pr.md", "./commands/generate-content.md", "./commands/household-calc.md", "./commands/implement-structural.md", @@ -14438,7 +13748,6 @@ "./commands/prior-analysis.md", "./commands/prior-scores.md", "./commands/reform-pipeline.md", - "./commands/review-program.md", "./commands/setup-verbs.md", "./commands/text-to-reform.md", "./commands/write-tests.md" @@ -14514,10 +13823,7 @@ ], "commands": [ "./commands/backdate-program.md", - "./commands/encode-policy-v2.md", "./commands/encode-reform.md", - "./commands/review-program.md", - "./commands/fix-pr.md", "./commands/create-pr.md", "./commands/write-tests.md" ], @@ -17405,6 +16711,7 @@ "visibility": "PUBLIC", "pushed_at": "2026-05-26T14:16:28Z", "skills": [ + "encode-policy-v2", "policyengine", "policyengine-healthcare", "policyengine-model-development", @@ -17425,7 +16732,7 @@ "commands": [ "write-tests" ], - "total": 15 + "total": 16 }, { "name": "energy-price-shock", @@ -17857,6 +17164,7 @@ "visibility": "PUBLIC", "pushed_at": "2026-05-28T13:26:48Z", "skills": [ + "encode-policy-v2", "fix-pr", "policyengine", "policyengine-api", @@ -17921,19 +17229,17 @@ "create-pr", "deploy-dashboard", "encode-reform", - "fix-pr", "generate-content", "household-calc", "implement-structural", "new-tool", "prior-analysis", "reform-pipeline", - "review-program", "setup-verbs", "text-to-reform", "write-tests" ], - "total": 71 + "total": 70 }, { "name": "policyengine.py", diff --git a/docs/when-to-use.md b/docs/when-to-use.md index a5cffa8..b027f7e 100644 --- a/docs/when-to-use.md +++ b/docs/when-to-use.md @@ -1,6 +1,6 @@ # When to use what -The PolicyEngine plugin ships ~23 slash commands, ~33 agents, and 23 skills (20 knowledge skills plus the three workflow skills, consolidated from 53 in the July 2026 rebuild). The `/encode-policy-v2`, `/review-program`, and `/fix-pr` entries are skill-backed: each name resolves to a skill whose `references/workflow.md` is the canonical definition, and the same-named commands are compatibility stubs. Most days you'll only use 3-5 entry points. This guide maps common work to the right one. +The PolicyEngine plugin ships 20 command files, 34 agents, and 23 skills (20 knowledge skills plus the three workflow skills, consolidated from 53 in the July 2026 rebuild). The `/encode-policy-v2`, `/review-program`, and `/fix-pr` entries are provided directly by skills: each name resolves to a skill whose `references/workflow.md` is the canonical definition, with no duplicate command stub. Most days you'll only use 3-5 entry points. This guide maps common work to the right one. ## Quick decision matrix diff --git a/scripts/build_claude_wrapper.py b/scripts/build_claude_wrapper.py index c96fc32..42cd28a 100755 --- a/scripts/build_claude_wrapper.py +++ b/scripts/build_claude_wrapper.py @@ -37,6 +37,13 @@ def normalize_plugin(bundle: dict) -> dict: def validate_bundle(source_root: Path, bundle_path: Path, bundle: dict) -> None: + skill_names = {Path(path).name for path in bundle.get("skills", [])} + command_names = {Path(path).stem for path in bundle.get("commands", [])} + collisions = skill_names & command_names + if collisions: + raise ValueError( + f"{bundle_path}: duplicate skill/command entrypoints: {sorted(collisions)}" + ) for key in ("skills", "commands", "agents"): for rel_path in bundle.get(key, []): source_path = resolve_source_path(source_root, rel_path) diff --git a/skills/README.md b/skills/README.md index fc4ecfa..cdb6649 100644 --- a/skills/README.md +++ b/skills/README.md @@ -70,11 +70,11 @@ lints the whole tree against the failure modes that rotted the previous catalog Each workflow has one canonical behavioral definition at `skills//references/workflow.md` — phases, roles, gates, artifact contracts. The -skill's `SKILL.md` is the cross-client launcher: Claude Code gives a skill precedence -over a same-named command, so the skill is the entry point on both surfaces. -`references/claude-launcher.md` carries the Claude-only role/agent mapping, and the -matching file in `targets/claude/commands/` is a compatibility stub for older Claude -Code versions. Edit the canonical file, never a launcher, to change behavior. +skill's `SKILL.md` is the cross-client launcher and provides the namespaced slash command +in Claude Code. These workflows have no same-named command stubs; duplicate registration +resolved to the stub in the native benchmark. `references/claude-launcher.md` carries +the Claude-only role/agent mapping. Edit the canonical file, never a launcher, to change +behavior. | Skill | What it carries | |---|---| diff --git a/skills/encode-policy-v2/SKILL.md b/skills/encode-policy-v2/SKILL.md index 2ddc1be..f3f1ef4 100644 --- a/skills/encode-policy-v2/SKILL.md +++ b/skills/encode-policy-v2/SKILL.md @@ -16,17 +16,21 @@ Treat the text after `$encode-policy-v2` as raw workflow arguments: ```text $encode-policy-v2 STATE PROGRAM [--skip-review] [--research-only] [--600dpi] - [--resume] [--from-phase N] [--full-validation] + [--resume] [--from-phase N] [--full-validation] [--local] + [--sources MANIFEST] [--source-budget MINUTES] ``` Mandatory gates that no surface may skip: +- Load model-development in each model worker's own context and verify its load evidence + under the canonical loading contract before accepting work; missing skills block it. - Route purely parametric changes to `encode-reform` unless the user chooses to continue. - Make no GitHub write before the user-approved scope decision exists. - Read all relevant rules and visually inspect tables, scans or ambiguous PDF evidence; share validated originals and extracts with the independent review. - Do not push through a red structural or quick-audit gate, or silently push failing tests. -- Keep the PR draft and complete the required follow-up review after any review-fix round. +- In local mode, make no GitHub writes or pushes; preserve the implementation worktree. +- Keep new PRs draft and complete follow-up review after any review-fix round. - Do not finish before the Phase 7 summary and canonical completion contract are satisfied. Surface adapters: @@ -38,19 +42,20 @@ Surface adapters: Codex delegation mapping, when subagent use is available and authorized: -- Use `worker` for every role that writes repository files, runtime artifacts, reports, - GitHub state, or Git state. Use `explorer` only for bounded read-only discovery or audit - questions whose result can be returned directly without writing an artifact. -- Preserve canonical dependencies. Run independent review-fixer-vars and - review-fixer-tests roles concurrently; keep implementation, validation, and push roles - in canonical order. -- Pass concrete `WORKTREE_ROOT`, `WORKTREE_ID`, `RUN_ROOT`, and `PREFIX` values, the role's - full canonical task contract, owned paths, required outputs, and named PolicyEngine - skills to every subagent. Do not assume child agents inherit parent skill context. -- Remind every implementation subagent that other agents may share the worktree, it must - not revert unrelated edits, and only the canonical pusher roles may commit or push. -- Run the nested review-program workflow in a fresh review coordinator context with - its own read permissions; pass the canonical arguments and source manifest. Receive - its summary and COMPLETE/PARTIAL status in the encoding coordinator. -- If subagents are unavailable or not authorized, execute roles directly in phase order - while preserving the same ownership, handoff files, user checkpoints, and gates. +- The coordinator handles research, requirements, coverage/validation, Git and reporting; + it may read code and full evidence directly. No summary-only read restriction. +- Use persistent workers for the two substantive roles: implementer (parameters and + variables together) and test-author. Pass exact owned paths, concrete worktree/run + values, approved scope, artifact contracts and the needed skill references. +- Each Codex worker resolves `policyengine-model-development` from its own available + skills catalog and reads that entrypoint using its catalog-specified access mechanism, + then its task references. Include the canonical loading contract in the prompt; a + repository path alone does not demonstrate runtime skill availability. Do not assume + the parent session's skill load supplies the worker's context. +- Test-source analysis can overlap implementation; final tests use the published variable + contract. Reuse owners for repairs. Workers never stage, commit, push or independently + sync/format the shared environment. +- Run review-program in a fresh review coordinator context with its canonical local or + published arguments, raw source manifest and scope. Leave capacity for its reviewers. +- Use only supported runtime capabilities. When delegation is unavailable, perform the + implementation roles directly while preserving independent review context and gates. diff --git a/skills/encode-policy-v2/references/claude-launcher.md b/skills/encode-policy-v2/references/claude-launcher.md index 28c2011..74db8a2 100644 --- a/skills/encode-policy-v2/references/claude-launcher.md +++ b/skills/encode-policy-v2/references/claude-launcher.md @@ -1,80 +1,42 @@ # Claude Code launcher: encode-policy-v2 -Read this file only when executing encode-policy-v2 in Claude Code. Read the canonical -[workflow.md](workflow.md) first. This adapter maps its semantic roles and operations to -Claude Code mechanics and adds no workflow behavior. +Read the canonical [workflow.md](workflow.md). This adapter maps capabilities without +adding stages, audits, test commands or approval prompts. -## Mechanics - -- **Raw arguments** → parse the text passed to the skill exactly as the canonical grammar - specifies. -- **Ask the user** → use `AskUserQuestion` for a missing argument, the existing-program - route, unreachable references, every scope choice, blocked CI, and the optional final - review-fix round. Batch related decisions into as few calls as possible: one - `AskUserQuestion` call carries up to 4 questions, so N simultaneous decisions take - ceil(N/4) calls — never one call per decision. In Phase 2A, gather the overall-scope - question and every program-specific decision first, then ask them together; reserve a - later call only for a question that depends on a prior answer. Keep the canonical - option order within each question. -- **Issue/PR discovery** → run `issue-manager` once with `MODE=discover` (read-only; it - stops after searching). On `DECISION_NEEDED`, ask the issue and PR choices together in - one `AskUserQuestion` call (two questions); on `NO_CANDIDATES`, use create-new for both. Then invoke a new `issue-manager` - with `MODE=execute`, both explicit decisions, and the canonical repository values - (`BASE_REPO`, `BASE_REPO_URL`, `PUSH_REPO`, `PUSH_REPO_URL`). Continue only on - `SETUP_COMPLETE`; treat `BLOCKED` or a partial result as a blocking gate. -- **Run identity** → pass `WORKTREE_ID`, `RUN_ROOT` and `PREFIX` in every role prompt. - Use the active delegation tool's schema. Do not require `TeamCreate` or pass - `team_name`/`run_in_background` unless those capabilities are actually available. -- **Delegate role X** → spawn the agent resolved from the table below. Its prompt contains - the complete role contract from the canonical workflow, concrete run/worktree values, - exact owned paths and inputs/outputs, relevant `Load skills:` entries, the PDF page rule - when parameters are touched, and the canonical DONE line. Do not recreate the phase - prose in this adapter. -- **Namespacing** → plugin agents and skills use the installed plugin's namespace. Resolve - the unprefixed names below against the session's available agents/skills by suffix; - never assume `complete:` or another fixed prefix. If a specialized agent is unavailable, - use `general-purpose` with the full role and skill contract in its prompt. -- **Concurrency** → launch independent work asynchronously when supported: initial - document collection may run in the background, and each review round spawns the vars - and tests fixers together in one message. Wait for the whole batch; never poll. All - dependency-ordered implementation, validation, CI, and Git roles run sequentially. -- **Nested review** → use a fresh `general-purpose` agent to invoke the installed - `review-program` skill with the exact canonical arguments and worktree/run values. - That coordinator may read the diff and reports under review-program's contract; - this encoding coordinator receives its summary and COMPLETE/PARTIAL status. The - source manifest must be passed through unchanged. Avoid inheriting the encoding - coordinator's summary-only read restriction into the review context. -- **Guarded push** → pass both pusher roles the resolved PR/base repository, head - repository URL, head branch and remote SHA captured before local edits. Preserve that - expected SHA through the role; its existing guarded-push contract must not recapture - a later remote head as permission to overwrite concurrent work. -- **Coordinator context** → read only artifacts the canonical Handoff table marks - `Coordinator may read? Yes`. Never read full research/spec/PDF/code/review files or - implement/fix code. - -## Role → agent type - -Agent names are unprefixed; resolve them using the namespacing rule above. - -| Canonical role | Agent | -|---|---| -| document-collector | `document-collector` | -| user-document-processor | `general-purpose` | -| requirements-consolidator | `general-purpose` | -| issue-manager | `issue-manager` | -| parameter-implementer | `rules-engineer` | -| variable-implementer | `rules-engineer` | -| test-creator | `test-creator` | -| requirements-tracker | `general-purpose` | -| gap-fixer | `rules-engineer` | -| implementation-validator | `implementation-validator` | -| validator-escalation-fixer | `rules-engineer` | -| ci-fixer | `ci-fixer` | -| quick-auditor | `general-purpose` | -| audit-fixer | `rules-engineer` or `test-creator`, by owned file | -| initial-pusher | `pr-pusher` | -| reporter | `general-purpose` | -| review-fixer-vars | `rules-engineer` | -| review-fixer-tests | `test-creator` | -| review-ci-fixer | `ci-fixer` | -| review-round-pusher | `pr-pusher` | +- Parse raw arguments, including local-only mode and source reuse/budget, as specified. +- The workflow is registered only as a skill, without a same-named command stub. Resolve + its installed base directory from the Skill result. Pass the installed review-program + directory and canonical paths to the fresh review coordinator; do not search the + filesystem or recursively invoke a compatibility stub. +- Use the runtime's user-question tool for unresolved material scope/reuse/repair + decisions. Batch related questions within its actual capacity; honor prior decisions. +- The coordinator performs research, requirements, coverage/validation, Git and reporting. + It may inspect code and evidence directly. Do not delegate those routine steps merely + to preserve a summary-only context rule. +- For the substantive `implementer` and `test-author`, use `general-purpose` agents with + the full canonical role, exact owned paths, artifact contracts, relevant skill sections, + concrete `WORKTREE_ROOT`, `WORKTREE_ID`, `RUN_ROOT`, `PREFIX` and local/publication mode. + A specialized standalone agent is not required and must not add its own audits, + dependency sync, formatting, test suites, commits or pushes to this role contract. +- Retain the same workers for repairs. Start test-source analysis while implementation + runs when independent; finalize tests only against the actual variable contract. Use + runtime-supported messaging, or coordinator handoffs when unavailable. Never assume + team, background, monitor or message parameters exist. +- Every model worker must have access to the `Skill` tool and invoke the installed + `policyengine-model-development` skill by its resolved name before work, then read its + role references. Include the canonical loading contract in dispatch and require the + successful Skill result in `SKILLS_READY`; a `Load skills:` list alone does not load + anything. If the selected agent lacks Skill access or the skill is unavailable, apply + `SKILLS_BLOCKED` instead of silently using a general-purpose agent without it. +- Wait for completion notifications with the canonical progress/recovery bounds. Routine + progress can arrive by message or artifact; a partial report is not DONE. If delegation + is unavailable, perform the roles directly, retaining independent review context. +- Invoke review-program in a fresh `general-purpose` coordinator with its exact local or + published arguments, approved scope and source manifest. It owns its reviewer topology + and artifact contracts. Leave sufficient runtime capacity for those reviewers. +- Only the encoding coordinator stages, commits, pushes and writes GitHub state. In + `--local`, it may make local implementation/review-fix commits but never creates an + issue/PR, pushes or posts comments. Otherwise use explicit verified targets and the + canonical pre-edit head check; don't map Git work to a standalone pusher routine. +- Resolve skill names by the installed suffix, not an assumed plugin namespace. Load + only the references needed for the assigned task. diff --git a/skills/encode-policy-v2/references/workflow.md b/skills/encode-policy-v2/references/workflow.md index 760f8cf..4c4de89 100644 --- a/skills/encode-policy-v2/references/workflow.md +++ b/skills/encode-policy-v2/references/workflow.md @@ -1,122 +1,85 @@ # Workflow: encode-policy-v2 (canonical) -This file is the single canonical definition of the encode-policy-v2 workflow. The -Claude Code command (`/encode-policy-v2`) and Codex skill (`$encode-policy-v2`) are thin -launchers over this document: each parses raw arguments, maps the semantic roles below -to its native delegation mechanism, and follows these phases exactly. Runtime-specific -agent names and question mechanics belong in the launchers, not here. +The command and skill share this workflow. Launchers map roles to runtime tools; they +must not add stages, audits, test suites or approval prompts. ## Purpose and routing -Implement a new PolicyEngine-US state benefit program, or a new structural component of -an existing program, from official sources. The workflow researches the law, obtains -user approval for modeled scope, tracks every requirement through parameters, variables, -and tests, validates the implementation, prepares a draft PR, and performs an independent -review-fix loop. - -Use `encode-reform` instead when the program already exists and the requested change is -purely parametric: changing a cap, rate, threshold, match, or other existing parameter. -Continue with encode-policy-v2 for a new program or a structural addition that requires -new formulas, eligibility gates, or a new deduction/credit/benefit family. - -### Existing-program pre-flight - -Before research, check the live PolicyEngine-US tree for the target program using a -read-only GitHub query against the expected state/program variable path (for example, -`gh api repos/PolicyEngine/policyengine-us/contents/{expected-path}`) and a local concept -search. If the program exists and the request appears purely parametric, explain that -`encode-reform` is the lighter workflow and ask: - -- **Use encode-reform instead** (recommended): stop without changing anything. -- **Continue with encode-policy-v2**: record the structural reason in the run ledger. - -Do not silently route or continue. - -## Orchestration contract - -The coordinator protects its context window and owns only orchestration: - -- parse arguments, derive run identity, maintain the short run ledger, and run small - structured commands; -- present user checkpoints and write the resulting scope decision; -- delegate research, implementation, testing, validation, reporting, and Git operations; -- read only handoff files the Handoff table marks `Coordinator may read? Yes`; -- never read full source research, the implementation specification, PDF text/images, or - implementation files; never implement or fix program code directly; -- continue automatically between gates, stopping only at a user checkpoint or a blocked - gate defined below. - -Research roles may write `sources/working_references.md` and worktree-scoped runtime -artifacts before scope approval. They must not create a branch, issue, PR, commit, or -implementation file. The first GitHub write occurs only after the user approves scope. - -**Completion contract.** A delegated role completes only after its required artifact or -result exists and is well formed. Its final response is one line: -`DONE — wrote {artifact} ({brief stat})`, or for identifier/Git roles, -`DONE — {identifiers or commit/push result}`. If a delegate stops without its required -output, retry once with the missing contract; then apply the phase's blocked behavior. - -**Ownership contract.** No implementation role commits. Only initial-pusher, -review-round-pusher, and issue-manager — the latter solely for the Phase 2B branch -initialization (empty commit, push, PR reuse checkout) — may commit or push. Parallel -roles never write the same file. -All roles receive concrete `WORKTREE_ROOT`, `WORKTREE_ID`, `RUN_ROOT`, and `PREFIX` values -and stay inside the current worktree and their owned paths. - -## Roles - -| Role | Responsibility | Owned writes / output | Skills to load | -|---|---|---|---| -| document-collector | Discover official sources; download/extract and inspect relevant PDF pages; record failed fetches and reusable source manifest | `sources/working_references.md`, source artifacts, `{RUN_ROOT}/{PREFIX}-sources.json`, `{RUN_ROOT}/{PREFIX}-research-summary.md` | policyengine-us | -| user-document-processor | Process user-supplied files after an unreachable-source checkpoint | user source artifacts, append-only research notes | — | -| requirements-consolidator | Verify citations, find reference implementations/reusable variables, extract every requirement | impl spec, requirements checklist, scope summary | policyengine-us; policyengine-model-development (references/parameters.md, references/variables.md) | -| issue-manager | Find/create the issue, create/use the worktree-safe branch, push it, and open a draft PR | issue/PR/branch identifiers; GitHub state | policyengine-standards | -| parameter-implementer | Implement approved parameter and reference requirements | target program parameter YAML only | policyengine-us; policyengine-model-development (references/parameters.md, references/style.md) | -| variable-implementer | Implement approved formulas and publish the exact variable contract | target program variable Python; implementation manifest | policyengine-us; policyengine-model-development (references/variables.md, references/parameters.md, references/vectorization.md, references/periods-and-aggregation.md, references/style.md) | -| test-creator | Create unit, integration, and edge-case YAML tests from the final variable contract | target program tests; test manifest | policyengine-model-development (references/tests.md, references/periods-and-aggregation.md, references/variables.md) | -| requirements-tracker | Map every approved requirement to parameter, variable, and test coverage | `{RUN_ROOT}/{PREFIX}-coverage-report.md` | policyengine-model-development (references/parameters.md, references/variables.md, references/tests.md) | -| gap-fixer | Implement only requirements reported missing by the tracker | target program parameters, variables, or tests | policyengine-us; policyengine-model-development (all relevant references) | -| implementation-validator | Run cross-file structural validation; fix mechanical issues and escalate judgment calls | target program mechanical fixes; validator report | policyengine-model-development (references/parameters.md, references/variables.md, references/style.md) | -| validator-escalation-fixer | Fix only judgmental items in the validator's escalation section | target program parameters/variables; validator post-fix note | policyengine-us; policyengine-model-development (relevant references) | -| ci-fixer | Run the targeted test funnel, classify failures, and make evidence-backed repairs | target program files/tests; CI status | policyengine-model-development (references/tests.md, references/variables.md, references/parameters.md, references/periods-and-aggregation.md, references/vectorization.md, references/style.md) | -| quick-auditor | Audit the final diff for shortcuts, policy changes, and missing coverage | `{RUN_ROOT}/{PREFIX}-checkpoint.md` | policyengine-model-development (relevant references) | -| audit-fixer | Fix only findings assigned from the quick audit, by original ownership | target program files/tests | policyengine-model-development (relevant references) | -| initial-pusher | Create the changelog, format once, stage approved paths, commit once, and push while keeping the PR draft | changelog and Git state | policyengine-standards | -| reporter | Build the PR body and short final report from verified artifacts | PR description, final report | policyengine-writing; policyengine-standards | -| review-fixer-vars | Fix critical review findings in parameter and variable files only | target parameter/variable files; per-round vars checklist | policyengine-us; policyengine-model-development (parameters, variables, vectorization, periods/aggregation, style) | -| review-fixer-tests | Fix critical review findings in test files only | target test files; per-round tests checklist | policyengine-model-development (tests, periods/aggregation, variables) | -| review-ci-fixer | Run the bounded post-review test funnel and report status | target files/tests; CI status | policyengine-model-development (relevant references) | -| review-round-pusher | Merge per-fixer checklists, stage only reviewed paths, commit, and push one review-fix round | shared checklist and Git state | policyengine-standards | - -Every role that writes or reviews parameter references must enforce this rule: a PDF href -ends in `#page=XX` using the PDF file page number, not the printed page number. A -single-page PDF is the only exception. +Implement a new PolicyEngine-US state benefit program or a structural component from +primary sources, with an explicit modeled scope, source-grounded tests and independent +review. Check the target code and related concepts before researching a new program. +For a purely parametric change to existing behavior, recommend `encode-reform`; follow +an existing routing decision, or ask if the user's intended structural change is unclear. + +## Orchestration and ownership + +The coordinator owns research, requirements, scope, coverage/structural checks, test +execution, Git operations and reporting. It may read code, source extracts, manifests +and full findings when needed. Read relevant sections and keep bulky command output in +logs; do not impose a summary-only restriction that requires another agent for each read. + +Use two substantive implementation roles when delegation is available and authorized: + +| Role | Responsibility and owned writes | Skills/references | +|---|---|---| +| implementer | Parameters and variables together; exact implementation manifest; fixes in those paths | policyengine-us; policyengine-model-development parameters, variables, vectorization, periods/aggregation | +| test-author | Source-derived unit, integration and boundary tests; exact test manifest; test fixes | policyengine-model-development tests, periods/aggregation; relevant primary evidence | + +Before substantive model work, the coordinator and every model worker must satisfy the +[model-development loading contract](../../policyengine-model-development/references/agent-loading.md). +Include it in each dispatch. Require `SKILLS_READY` evidence from each worker, record it +in existing run state/manifests, and check the actual changes against the loaded rules +in the existing coverage/structural gates. A `SKILLS_BLOCKED` worker does not write model +code or tests. Fresh review contexts must load their skills independently too. + +Keep each role's context across its implementation and repair work. The test-author can +read the approved rules and plan cases while the implementer works; it finalizes tests +against the published variable contract. Exchange contract changes directly where the +runtime permits, otherwise through the coordinator. Parallel writers never own the same +file. Do not split parameter and variable implementation into successive agents, or +create default tracker, structural-validator, CI-fixer, quick-auditor, reporter or pusher +agents. A specific difficult problem may justify a bounded specialist; state what it +will resolve and avoid a duplicate audit. Role count follows independent work and runtime +capacity, not numbers of files, sources or PDF pages. + +When delegation is unavailable, the coordinator implements these roles directly. The +independent review still needs a fresh review context. Only the coordinator commits, +pushes or writes GitHub state. Workers never stage files, format the whole repository, +sync/install dependencies, or edit unowned files. The coordinator formats owned paths +once before validation and again only after subsequent edits require it. + +Each worker writes its required artifact and returns +`DONE — wrote {artifact} ({status}; {elapsed})`. Send progress at stage changes and at +least every two minutes. Use bounded waits and actual tool capabilities; do not require +particular team/message/monitor tools. Yield for completion notifications; never use +five-minute shell sleeps. If polling is necessary, use interruptible waits of at most +60 seconds and resume on completion. After five minutes without observable progress, +request a bounded recovery/final report and stop a still-silent worker within two more +minutes. Recover its files, retry the missing task once, then report the remaining gap. +Do not equate a file's existence with role completion. The coordinator handles routine +bookkeeping itself instead of restarting a worker merely to copy text or compute totals. ## Arguments -- `STATE`: state name, for example `Rhode Island` or `Oregon` -- `PROGRAM`: program name/type, for example `CCAP`, `TANF`, or `LIHEAP` -- `--skip-review`: skip Phase 6 only -- `--research-only`: stop after the Phase 2 scope decision; make no GitHub writes -- `--600dpi`: render selected PDF pages at 600 DPI instead of 300 -- `--resume`: reuse artifacts only after validating their recorded inputs -- `--from-phase N`: resume at phase N after validating all prerequisites; implies resume -- `--full-validation`: run one broader state/package suite after program tests pass +- `STATE PROGRAM`: state and program name; ask only for missing/ambiguous identity. +- `--research-only`: stop after requirements and the scope decision; no GitHub writes. +- `--local`: keep implementation, tests, commits and review local; create no issue/PR, + push or online comment. Leave the implementation worktree for inspection. +- `--skip-review`: skip independent review explicitly, not validation. +- `--sources MANIFEST`: reuse same-worktree source evidence after integrity checks. +- `--source-budget MINUTES`: total new external source-acquisition window for research, + default 10; nonnegative, 0 uses only supplied/cache evidence. Not an analysis deadline. +- `--600dpi`: render only necessary PDF pages at 600 DPI instead of 300. +- `--resume`, `--from-phase N`: reuse only matching inputs; the latter implies resume. +- `--full-validation`: add one broader state/package suite after affected tests pass. -If `STATE` or `PROGRAM` is missing, ask for the missing value before continuing. Derive: +Derive `ST` and `PROG` as lowercase abbreviations, `PREFIX={ST}-{PROG}`, and a worktree-safe +branch name. Honor user-supplied paths/branches. Keep research and runtime evidence out of +commits. Existing scope and publication decisions persist; do not ask for them again. -- `ST`: lowercase state abbreviation -- `PROG`: lowercase program abbreviation -- `BRANCH` and `PREFIX`: `{ST}-{PROG}` -- `DPI`: 600 when requested, otherwise 300 -- `RESUME`: true for `--resume` or `--from-phase` -- `FROM_PHASE`: requested phase, otherwise the first incomplete valid phase +## Phase 0: Capture identity and collect evidence -## Phase 0: Setup and source acquisition - -### 0A. Worktree identity and guard - -Derive the worktree namespace before any runtime-artifact operation: +### 0A. Worktree and run state ```bash WORKTREE_ROOT=$(git rev-parse --show-toplevel) @@ -125,455 +88,313 @@ RUN_ROOT="/tmp/policyengine-command-runs/$WORKTREE_ID" mkdir -p "$RUN_ROOT" ``` -The absolute worktree root—not the Git common directory, repository name, or branch—is -the isolation boundary. Inspect `git worktree list --porcelain` before any branch -operation. If `BRANCH` belongs to another worktree, stop and report its path; never force -checkout it, use `--ignore-other-worktrees`, edit through that path, or share its -artifacts. - -### 0B. Fresh/resume ledger - -Use `{RUN_ROOT}/{PREFIX}-encode-run-state.md` as a short phase ledger. Record: - -- worktree root/ID, arguments, derived values, branch, current HEAD, issue/PR identifiers; -- source URL/checksum/DPI, spec/scope hashes, completed phases, artifacts, test manifest; -- elapsed time per phase, repair/review rounds, explicit user decisions, blocked items. - -Read the existing run state and identify reusable evidence before resetting it. On a fresh -run, remove only this workflow's `PREFIX`-owned encode artifacts from -`RUN_ROOT`; do not delete matching downloaded sources/renderings that the ledger proves -reusable. Exclude review artifacts and `*-pr-snapshot.*` directories; snapshot cleanup -belongs to review-program and uses `git worktree remove` without force. On resume, -require matching worktree, state, program, branch, and dependency -hashes. `--from-phase N` also requires every prerequisite artifact. When any input -changed, invalidate that phase and all dependents. Never reuse an artifact merely because -its path exists. - -### 0C. Collect official documentation - -Delegate document-collector. It must: - -1. Discover the official program name and sufficient official authority for every known - eligibility rule, income test, deduction/exemption, benefit formula, demographic or - immigration rule, resource rule, payment standard, copayment, provider rate, and work - requirement. -2. Download up to the relevant complete source set to - `{RUN_ROOT}/{PREFIX}-source-{N}.pdf`; record URL and checksum. -3. Extract searchable text to `{RUN_ROOT}/{PREFIX}-source-{N}.txt` when possible. -4. Read all relevant rules using extracted text with physical page boundaries. Inspect - relevant tables, scans, footnotes and ambiguous layouts visually, rendering selected - pages with `pdftoppm -f N -l N -png -r {DPI} ...`. Follow headings/cross-references - to cover exceptions and definitions; a keyword hit alone is not complete research. - Do not render unrelated pages by default. Record originals and actual derivatives - with their hashes in `{RUN_ROOT}/{PREFIX}-sources.json`, using the shared - [source-cache contract](../../review-program/references/source-cache.md). -5. Save full research to `sources/working_references.md` and write the short research - summary (maximum 20 lines): program name, source URLs, counts of eligibility and - deduction/exemption rules, benefit calculation type, complexity, and every failed - fetch with reason and likely contents. - -The coordinator reads only the short research summary. If collection fails entirely, -stop; requirements cannot be extracted without documentation. - -### 0D. Unreachable-reference checkpoint - -If an official reference failed with a block, redirect, timeout, or connection error, -show each source and ask the user to choose: - -- **I will provide downloaded files**: wait for paths, then delegate - user-document-processor to copy each file into `RUN_ROOT`, extract text, inspect - relevant pages at `DPI`, and update the source manifest and research notes. -- **Proceed with available sources**: record the evidence limitation and continue. -- **Let me investigate first**: pause without invalidating artifacts. - -Skip this checkpoint only when no relevant source failed. - -## Phase 1: Consolidation and requirements extraction - -Delegate requirements-consolidator to read the full research and repository reference -implementations. It must: - -1. Search broadly by program concepts, not only the target acronym; identify all matching - state implementations and study the three to five most relevant variable and parameter - examples. -2. Search the live codebase for reusable variables and parameters for income, household - composition, age, hours, provider/care concepts, and other inputs. Do not recreate - generic concepts as bare inputs. -3. Verify every statute/manual section, definition and PDF page citation against the - acquired source before downstream roles copy it. Reuse the collector's evidence; - inspect/render additional pages only where a citation or its meaning is uncertain. -4. Write: - - `{RUN_ROOT}/{PREFIX}-impl-spec.md` (**Full**): every requirement numbered - `REQ-001...`, tagged `ELIGIBILITY`, `INCOME`, `BENEFIT`, `EXEMPTION`, - `DEMOGRAPHIC`, `IMMIGRATION`, `RESOURCE`, or `NOT-MODELED`; verified citations; - reusable variables; all reference implementations, noting for each requirement - whether the selected reference implementation covers it; suggested - parameter/variable structure; income-source list for `sources.yaml`; and TANF - approach recommendation when relevant. - - `{RUN_ROOT}/{PREFIX}-requirements-checklist.md` (**Short**, maximum 40 lines): total - and one cited line per requirement. - - `{RUN_ROOT}/{PREFIX}-scope-summary.md` (**Short**, maximum 15 lines): program/type, - requirement count, complexity, best reference implementation, suggested approach, - and each modeling decision the user must make. - -The coordinator reads only the checklist and scope summary. A missing or unverified -requirements artifact blocks Phase 2. - -## Phase 2: Scope checkpoint and draft setup - -### 2A. Present and decide scope - -Show the short overview and requirements grouped by tag. Gather every scope decision -first, then present them together as one batch — never one prompt per decision (the -launcher defines the batching mechanics). Ask a follow-up only when a prior answer -requires it: - -1. **Overall scope**: implement every simulatable requirement (recommended), or review - groups/items to exclude. `NOT-MODELED` requirements remain tracked but excluded. -2. Only if the user chooses to review exclusions, follow up per questionable group: - include all (recommended unless the evidence suggests otherwise), skip all, or decide - individually. -3. Include each program-specific decision as its own question in the initial batch, such - as provider-rate tables now versus follow-up, simplified versus full TANF, or mapping - versus creating/skipping income concepts without an exact existing variable. - -Do not make these modeling decisions for the user. Write the answers to -`{RUN_ROOT}/{PREFIX}-scope-decision.md` (**Short**) with: - -- every in-scope requirement; -- every excluded requirement and reason; -- key decisions and any user notes. - -If `--research-only`, stop here and report the research, specification, checklist, and -scope-decision paths. Do not create an issue, branch, PR, commit, or push. - -### 2B. Create implementation issue, branch, and draft PR - -After scope approval, resolve the repository targets first and record them in the -ledger: `BASE_REPO` is the intended upstream (`PolicyEngine/policyengine-us`) with its -Git `BASE_REPO_URL`; `PUSH_REPO` and `PUSH_REPO_URL` are the user's writable repository -or fork, derived from the checkout's push remote (for example -`git remote get-url --push origin`). Verify that the base target is -`PolicyEngine/policyengine-us` and the push target is that repository or the user's -corresponding fork. Pass these values, with the concrete worktree/run values and the -proposed `BRANCH`, to issue-manager in every delegation. - -Delegate issue-manager in discovery mode (`MODE=discover`), which makes no GitHub or Git -writes. It searches for **both** an existing issue and PR before either is created. If -it returns `DECISION_NEEDED`, show all candidate numbers, titles, status, activity, and -short scope; ask the issue and PR reuse/create decisions together in one batched -prompt. Do not select -among competing existing work automatically. If it returns `NO_CANDIDATES`, treat both -decisions as create-new without asking. Then re-delegate issue-manager in execution mode -(`MODE=execute`) with both explicit decisions. - -The execution delegation applies both decisions as one plan: reuse or create the issue, then -reuse or create the PR. Reusing an issue must not suppress creation of a requested new PR; -reusing a PR must not create a duplicate. For a new PR, create the issue first when -needed; in this worktree only, create `BRANCH`, make the empty initialization commit -required to establish a remote branch without staging research or implementation files, -push explicitly to the user's verified fork/repository URL, and create a draft PR -targeting the resolved upstream default branch. For a reused PR, check out its exact head -repository/branch only after verifying push access and the worktree guard. Record -`ISSUE_NUMBER`, `PR_NUMBER`, `PR_URL`, branch, head/base repositories and SHAs, and whether -each resource was reused or created in the ledger. Failure is blocking. - -## Phase 3: Implementation and requirement coverage - -Execute roles in dependency order. Each role reads the full impl spec and approved scope -directly from disk; the coordinator does not paraphrase implementation guidance. - -### 3A. Parameters - -Delegate parameter-implementer. It must study the selected reference implementation, -reuse existing generic parameters/variables, put values in the correct jurisdiction -hierarchy, place income-source lists in `sources.yaml` rather than inline additions, -store a rate when law defines a percentage, and implement every approved value-based -requirement with verified subsection and PDF-page references. - -### 3B. Variables and implementation manifest - -After parameters exist, delegate variable-implementer. It must use the Phase 3A parameter -tree, reuse existing generic variables, keep legal values in parameters, choose entities -and periods from the law, use vectorized formulas, use `adds` for pure sums and `add()` -inside formulas that combine sums with other operations, and implement every approved -logic requirement. - -It writes `{RUN_ROOT}/{PREFIX}-implementation-manifest.md` (maximum 60 lines) listing for -every formula variable: exact name/path, entity, definition period, inputs, parameters, -requirements covered, and intended test file. It must verify every listed variable exists. - -### 3C. Tests - -After the implementation manifest exists, delegate one test-creator so ordinary, -integration, and edge cases have a single owner. It must use only verified existing -inputs and the exact variable contract, read `sources/working_references.md` for the -documented calculation examples that ground its scenarios, and create: - -- unit cases for every formula variable; -- five to seven integration scenarios with inline calculation explanations; -- relevant threshold-minus-one/threshold/threshold-plus-one, zero/maximum income, - family-size, rounding/capping, and missing/negative input cases; -- realistic periods and source-grounded values; follow the model-development tests - reference for annual inputs in monthly cases and actual effective-date boundaries. - -Write `{RUN_ROOT}/{PREFIX}-test-manifest.md` with exact changed test files and case names. -All later test commands derive from this manifest; no guessed directory or placeholder is -allowed. - -Automatic integration into `household_state_benefits.yaml` remains disabled. Do not edit -it unless the user separately approves enabling that integration. - -### 3D. Requirements coverage gate - -Delegate requirements-tracker to cross-reference every in-scope requirement against the -actual target parameters, variables, and tests. Write the coverage report (maximum 40 -lines) with `Covered`, `MISSING`, and totals. - -If requirements are missing, delegate one gap-fixer round limited to the `MISSING` list, -then rerun the tracker. Do not create duplicate components to avoid editing an existing -one. If gaps remain after the single repair round, show them to the user and record the -incomplete coverage in the ledger; do not describe coverage as complete. - -## Phase 4: Validation and bounded repair - -### 4A. Structural validator - -Delegate implementation-validator in structural mode only: - -- YAML integrity: misplaced metadata/value blocks, breakdown/enum mismatch, duplicate - keys, and effective-date placement; -- cross-reference linkage: orphan parameters/files/directories and missing references; -- federal/state jurisdiction placement and required `defined_for` declarations. - -It may fix mechanical issues. It records per-file style/formula observations as nonblocking -notes for the later independent review, and places judgmental issues in `ESCALATED`. -Write `{RUN_ROOT}/{PREFIX}-validator-report.md` with `FIXED`, `ESCALATED`, and -`Notes for review` sections. - -If escalations exist, delegate validator-escalation-fixer for those items only, append a -post-fix section, then rerun a cheap targeted structural check on the changed files. Do not -continue until escalations are `NONE`; otherwise stop at a blocked gate. - -### 4B. Targeted CI funnel - -Delegate ci-fixer. It reads the implementation spec, approved scope, and exact test -manifest; it opens full research only when policy evidence is needed to adjudicate a -failure. It must: - -1. Run every changed test file together without verbose output. -2. Classify all failures before editing: mechanical, implementation defect, test defect, - or policy ambiguity; batch independent mechanical fixes. -3. Rerun only failed files/cases. Use a named-case filter when supported. -4. Add diagnostic verbosity and depth 2 only for a still-unresolved numeric/formula - failure; increase depth only when necessary. -5. After targeted tests pass, run the exact program test directory once without verbose - output. -6. With `--full-validation`, run the broader state/package suite once after the program - directory passes; never repeat it inside the repair loop. - -Use at most four targeted repair cycles. If the same failure survives two consecutive -cycles, mark it blocked instead of rerunning the same command. Resolve calculation -disagreements against the approved spec and cited source; never change an expected result -merely to make tests green. Do not format in this phase. - -Write `{RUN_ROOT}/{PREFIX}-ci-fixer-status.md` (**Short**) with `STATUS: PASS` or -`STATUS: BLOCKED`, commands, counts, reruns, elapsed time, and remaining root causes. - -On `BLOCKED`, show the failures and ask: - -- **Pause for manual guidance**: wait, then rerun affected cases after guidance. -- **Proceed anyway**: record explicit consent and require a `Known failing tests` section - in the PR body. -- **Abort**: stop with resumable artifacts. - -Never push a known failure without the explicit proceed decision. - -### 4C. Quick diff audit - -Delegate quick-auditor to inspect the final diff for hard-coded values added to satisfy -tests, year-check conditionals, altered parameter values, and gaps from the coverage -report. It writes `{RUN_ROOT}/{PREFIX}-checkpoint.md` (**Short**, maximum 15 lines) with -`PASS` or `FAIL` and exact findings. - -On failure, route each item once to the appropriate audit-fixer by original ownership and -rerun affected tests and structural checks before rerunning the audit. Apply the Phase 4B -failure gate to any new test failure; do not reuse pre-fix PASS results. A second audit -failure is a blocked gate; do not push. - -## Phase 5: Finalize the draft PR - -### 5A. Changelog, format, initial commit, and push - -Delegate initial-pusher only after the coverage status, structural gate, CI decision, and -quick audit are recorded. It must: - -- create the repository's towncrier changelog fragment; -- run formatting once, then rerun only exact affected tests if formatting changes - executable files; -- stage only approved program parameters, variables, tests, and the changelog; -- confirm local research under `sources/` is not staged; -- commit once as `Implement {STATE} {PROGRAM} (ref #{ISSUE_NUMBER})` and push once. - -The PR remains draft. Never mark it ready in this workflow. - -### 5B. PR description and short report - -Delegate reporter to read the scope, coverage, research summary, impl spec, CI status, and -working references. It writes: - -- `{RUN_ROOT}/{PREFIX}-pr-description.md` (**Full**) with Summary/issue link, - Regulatory Authority, Income Eligibility Tests, Income Deductions and Exemptions, - Income Standards, Benefit Calculation, Requirements Coverage, Not Modeled, Historical - Notes, and Files Added. Include `Known failing tests` only after an explicitly accepted - blocked CI result. -- `{RUN_ROOT}/{PREFIX}-final-report.md` (**Short**, maximum 25 lines) with requirement and - file counts, coverage, test status, issue, and PR. - -Update the draft PR body from the file without loading it into coordinator context. The -coordinator reads only the final report. - -## Phase 6: Independent review-fix loop - -Skip only with `--skip-review`. Use the canonical `review-program` workflow; do not embed -or improvise a second review methodology here. - -### Round 1: independent review of implemented behavior - -Run `review-program` with arguments -`PR_NUMBER --local --prefix {PREFIX} --sources {RUN_ROOT}/{PREFIX}-sources.json [--600dpi when DPI is 600]`. Pass -`--prefix {PREFIX}` on every review invocation so reports use the encoding Handoff table's -paths rather than review-program's default `pr-{PR_NUMBER}` prefix. -Read only `{RUN_ROOT}/{PREFIX}-review-summary.md`. - -Review changed behavior and affected dependencies, including newly activated existing -formulas/values. For a new program this includes the whole new implementation. Do not -automatically request a full audit of unrelated existing behavior. The source manifest -shares raw evidence, not conclusions; the reviewer independently checks the law and code. - -- If the count of still-open critical findings is zero and `Review status: COMPLETE`, - Phase 6 completes. If status is PARTIAL or missing, report the unresolved checks and - retain a resumable review; do not declare the workflow complete. Supplied sources, - an explicitly expanded source budget, or an explicit skip decision can resolve this. -- When confirmed critical findings remain, delegate review-fixer-vars and - review-fixer-tests concurrently. Each reads the full report but edits only its owned - file class and writes its own - `{PREFIX}-checklist-{vars|tests}-r1.md`; neither appends to the shared checklist. - -Every review fixer first checks the approved scope. It skips and records findings that -conflict with an intentional scope choice, reads the impl spec only for policy values or -formula changes, searches for reusable variables before adding anything generic, does not -format, and writes one line per action in this form: -`- [ROUND N] [SCOPE] [{CATEGORY}] {file}:{line} — {problem} → {change}`. Use `VARS` or -`TESTS` scope. Parameter/variable categories are `HARD-CODED`, `WRONG-PERIOD`, -`MISSING-REF`, `BAD-REF`, `DEDUCTION-ORDER`, `UNUSED-PARAM`, `WRONG-ENTITY`, `NAMING`, -`FORMULA-LOGIC`, or `OTHER`; test categories are `TEST-GAP`, `WRONG-PERIOD`, -`WRONG-EXPECTATION`, `NON-FUNCTIONAL-TEST`, or `OTHER`. A role with nothing in scope writes -one `NO-ISSUES` line. - -After both finish, delegate review-ci-fixer to run at most three targeted repair cycles, -one program-directory confirmation, and one format pass. `PARTIAL` is permitted because -remaining review findings are adjudicated in follow-up, but it never authorizes pushing -failing tests: require PASS or the explicit Phase 4B known-failure decision before the -pusher runs, and retest executable changes after formatting. Then delegate -review-round-pusher to merge both round files into the shared checklist, stage only the -program paths, commit `Review-fix round 1: address critical issues from review-program`, -and push. - -A follow-up review after a fix is mandatory. - -### Round 2: verification review - -Run with -`PR_NUMBER --local --incremental {RUN_ROOT}/{PREFIX}-review-full-report.md --prefix {PREFIX} --sources {RUN_ROOT}/{PREFIX}-review-sources.json [--600dpi]`. -Review the fixes, their affected dependencies and unresolved prior findings. Changes to -policy semantics, values, references or sources invalidate the affected evidence, not -the entire program review. The reviewer expands scope when it cannot bound impact. -Read only the new short summary, including its COMPLETE/PARTIAL status. - -- If still-open critical findings are zero and status is COMPLETE, Phase 6 completes. - If status is PARTIAL or missing, report pending checks as in Round 1. -- If confirmed critical findings remain, ask whether to attempt one final fix round or stop and show the remaining - issues. Do not choose automatically. - -If approved, repeat the parallel ownership split into round-2 per-fixer files. Review -fixers read the shared checklist to avoid reintroducing prior patterns. Run the bounded -review CI funnel, then merge, commit as review-fix round 2, and push through -review-round-pusher. A final review is mandatory. - -### Round 3: final review - -Use the same incremental invocation and impact-based scope rule. Do not perform another -fix round: - -- zero still-open critical findings and COMPLETE review status: report success; -- PARTIAL or missing review status: report pending evidence/checks, not success; -- remaining critical findings: report them for manual resolution and keep the PR draft. - -There are at most three reviews and two review-fix commits. - -## Phase 7: Final summary - -Run even when Phase 6 was skipped. Show the user: - -- implemented versus excluded requirement totals and coverage status; -- parameter, variable, and test files created; -- validation/test status and any explicitly accepted known failures; -- review rounds and remaining findings, when applicable; -- issue and draft PR links; -- that the user—not the workflow—decides when to mark the PR ready; -- `WORKFLOW COMPLETE` only when all applicable completion requirements below are met. - -## Handoff table - -| Artifact | Writer | Coordinator may read? | Size | -|---|---|---|---| -| `sources/working_references.md` | document-collector/user-document-processor | No | Full | -| `{RUN_ROOT}/{PREFIX}-sources.json` | document-collector/user-document-processor | No | Original evidence and derivative checksums | -| `{RUN_ROOT}/{PREFIX}-research-summary.md` | document-collector | Yes | Short, 20 lines | -| `{RUN_ROOT}/{PREFIX}-impl-spec.md` | requirements-consolidator | No | Full | -| `{RUN_ROOT}/{PREFIX}-requirements-checklist.md` | requirements-consolidator | Yes | Short, 40 lines | -| `{RUN_ROOT}/{PREFIX}-scope-summary.md` | requirements-consolidator | Yes | Short, 15 lines | -| `{RUN_ROOT}/{PREFIX}-scope-decision.md` | coordinator | Yes | Short | -| `{RUN_ROOT}/{PREFIX}-implementation-manifest.md` | variable-implementer | No | Full, maximum 60 lines | -| `{RUN_ROOT}/{PREFIX}-test-manifest.md` | test-creator | No | Exact manifest | -| `{RUN_ROOT}/{PREFIX}-coverage-report.md` | requirements-tracker | Yes | Short, 40 lines | -| `{RUN_ROOT}/{PREFIX}-validator-report.md` | implementation-validator | Yes | Bounded report | -| `{RUN_ROOT}/{PREFIX}-ci-fixer-status.md` | CI roles | Yes | Short | -| `{RUN_ROOT}/{PREFIX}-checkpoint.md` | quick-auditor | Yes | Short, 15 lines | -| `{RUN_ROOT}/{PREFIX}-pr-description.md` | reporter | No | Full | -| `{RUN_ROOT}/{PREFIX}-final-report.md` | reporter | Yes | Short, 25 lines | -| `{RUN_ROOT}/{PREFIX}-review-full-report.md` | review-program | No | Full | -| `{RUN_ROOT}/{PREFIX}-review-summary.md` | review-program | Yes | Short, 20 lines | -| `{RUN_ROOT}/{PREFIX}-review-sources.json` | review-program | No | Reusable review evidence | -| `{RUN_ROOT}/{PREFIX}-checklist-{vars,tests}-r{N}.md` | review fixers | No | Per-fixer | -| `{RUN_ROOT}/{PREFIX}-checklist.md` | review-round-pusher | No | Growing | -| `{RUN_ROOT}/{PREFIX}-encode-run-state.md` | coordinator | Yes | Short ledger | - -## Completion and error rules - -The workflow is complete only when: - -- the user-approved scope decision exists; -- every in-scope requirement has a recorded coverage result; -- structural escalation is empty; -- CI passed, or the user explicitly accepted documented known failures; -- the quick audit passed; -- the initial implementation is committed and pushed to a draft PR; -- the PR body and final report exist; -- Phase 6 completed or was explicitly skipped; -- the Phase 7 summary was shown. - -Error handling: - -- source collection or requirements extraction failure: stop; -- branch owned by another worktree, wrong target repository, GitHub write failure: stop; -- implementation role failure: retry its output contract once, then report and wait; -- missing coverage: one targeted gap-fix/recheck, then report remaining gaps accurately; -- structural escalation: one targeted fix/recheck, then block; -- CI: bounded repair followed by the explicit user checkpoint above; -- quick audit: one targeted fix/recheck, then block; -- review loop: never exceed the stated round budgets. - -Never proceed past a red blocking gate, fabricate a passed artifact, silently broaden -scope, stage local research, operate in another worktree, or mark the PR ready. +Record `BASE_REPO=PolicyEngine/policyengine-us`, its URL and default branch, current HEAD, +worktree root/ID, args, workflow revision/diff, branch and publication mode in +`{RUN_ROOT}/{PREFIX}-encode-run-state.md`. Inspect status and worktree ownership before +branch operations. Never force-checkout another worktree's branch, move its files, or +stage unrelated changes. Use a new worktree when requested or needed for isolation. + +Record source/spec/scope hashes, owned files, validation inputs/environment, completed +phases, decisions and remaining gaps. Read the old state before starting fresh; preserve +valid evidence and prior reports instead of deleting every matching artifact. Resume +requires matching identity and dependencies. Invalidate changed steps and dependents, +not unaffected research. A workflow-contract change requires reassessing old completion +markers; legacy role names alone do not establish that the new gates passed. + +Use the review-program skill's `scripts/run_bounded.py` for networked Git/GitHub commands +with a 60-second deadline. Resolve that installed skill directory as `REVIEW_SKILL_ROOT`. +A failed fetch/read is not an empty result; retry a transient setup failure once, then +report the blocker. Scope GitHub reads/writes explicitly to `BASE_REPO`. + +### 0B. Research and requirements in one context + +The coordinator gathers the primary rules and builds the implementation specification +in the same context. For a genuinely large independent research component, a bounded +research worker may return requirements and evidence together; do not follow it with a +second mandatory citation/requirements agent reading the same documents again. + +Reuse valid supplied/cache documents before acquisition. Record originals, checksums, +extracts and actual renders in `{PREFIX}-sources.json` under RUN_ROOT using the +[shared evidence contract](../../review-program/references/source-cache.md). Write useful +research notes to `sources/working_references.md` or a program-specific local note and +record its exact path; never overwrite another program's notes. No branch/issue/PR or +implementation is needed for research-only work. + +Acquire missing relevant sources in bounded parallel batches. Start one acquisition +clock at the first external search/fetch; every call gets at most 60 seconds or the +remaining budget. Allow at most two targeted search batches per material gap and two +fetch attempts per URL. Switch a blocked route to a primary publication of record when +available; a bot-check response is not evidence. Stop optional acquisition at the budget +and report unresolved claims. Do not invent rules or infer correctness from failed URLs. + +Read text first with headings, definitions, exceptions and cross-references. Inspect +relevant tables, scans, footnotes and ambiguous layouts visually, rendering selected +pages with `pdftoppm -f N -l N -png -r DPI`. No whole-PDF screenshot requirement. Verify +physical page locators before citing PDFs; PDF hrefs use `#page=XX`, except single-page +files. Seek further sources only for unsupported requirements or genuine conflicts. + +A failed URL is not itself a user checkpoint when another authoritative document +establishes the rule. If material rules remain unsupported, present the specific gaps +and options together: user-provided evidence, an expanded acquisition budget, a clearly +limited scope, or pause. Proceed only with supported requirements and an approved scope; +complete research failure blocks implementation. + +## Phase 1: Requirements and proposed scope + +Search the model by concepts, not only the target acronym. Inspect the closest relevant +implementation and additional examples only where it leaves a design question unresolved; +there is no quota of three to five complete programs to read. Identify reusable income, +household, age, work, immigration and other inputs before proposing new ones. + +Write these artifacts once from the research: + +- `{PREFIX}-impl-spec.md`: numbered `REQ-001...` requirements, source/page evidence and + effective dates, reusable variables/parameters, proposed entities/periods and file + structure, and unresolved modeling decisions. Tag requirements by eligibility, income, + benefit, exemption, demographic, immigration, resource or not-modeled as appropriate. +- `{PREFIX}-requirements-checklist.md`: requirement IDs and concise descriptions; do not + truncate requirements to satisfy a line-count target. +- `{PREFIX}-scope-summary.md`: brief proposed coverage, limitations and decisions needed. +- `{PREFIX}-research-summary.md`: primary sources, supported rule groups and material gaps. + +These are different views of the same requirements, not separate investigations. The +coordinator may consult the original evidence rather than spawning a verifier to read it. + +## Phase 2: Scope and branch setup + +### 2A. Scope decision + +Apply explicit choices already provided. Present remaining material modeling decisions +as one batch with a concrete proposed scope: which requirements can be simulated, which +are excluded and why. Ask follow-ups only when an answer introduces a new decision. +Do not silently choose simplified policy or omit a requested component. Record approved +requirements, exclusions, conditions and reasons in `{PREFIX}-scope-decision.md`. + +Approval is a decision, not a required extra conversation turn. A user who says to run +the proposed local benchmark, or says "continue" after its scope is stated, has authorized +that work. Record that instruction and proceed. Ask only when a material choice remains; +routine entity/file design and the existence of a scope artifact do not require another +confirmation. State the modeled year, components and limitations early so the user can +correct them while independent research continues. An unanswered material question is +still unanswered; elapsed time never supplies approval. + +With `--research-only`, stop with those artifacts and no implementation/GitHub writes. +Without approved scope, do not implement or publish. Local exploratory research may +continue while an unanswered scope decision is pending. + +### 2B. Branch and existing work + +For local mode, create/use the approved local branch and record no issue/PR. Otherwise, +search for both existing issues and PRs, with structured bounded reads, before creating +anything. Ask about competing candidates together; honor a previously specified issue +or PR. No candidates means no reuse decision is needed. + +Record the upstream base and verified writable head repository/branch. For an existing +PR, capture its head SHA before local edits and check push access and worktree ownership. +For new work, branch locally from the resolved base; do not create an empty initialization +commit or push an empty draft PR. Save issue/PR creation decisions for Phase 5, when an +actual implementation and reviewable PR body exist. No GitHub writes before approved +scope, or at all in `--local` mode. + +## Phase 3: Implement and author tests + +### 3A. Implementation owner + +Pass the implementer the approved spec, sources, concrete worktree/run values and exact +owned paths. It implements parameters and variables together: jurisdiction hierarchy, +existing generic concepts, `sources.yaml` income lists, legal values in parameters, +source-correct dates/entities/periods, vectorized formulas, `adds` for pure sums and +`add()` when sums participate in other formula operations. + +Publish `{PREFIX}-implementation-manifest.md`: exact variable names/paths, entities, +periods, inputs/parameters and requirement IDs. Verify names exist. Tell the test-author +when the contract is stable and explicitly identify later changes. Do not make it infer +names from an informal coordinator summary. + +### 3B. Test owner + +The test-author reads the approved evidence and contract, and owns unit, boundary and +integration tests together. Derive expected amounts from source rules, not observed +implementation output. Cover distinct formulas and policy branches, especially excluded +populations, effective dates, assessment units and final benefits. Use as many scenarios +as these require; do not impose a fixed five-to-seven integration-test quota or every +possible household composition. A shared end-to-end case can cover several requirements. + +Use plausible demographics/incomes and actual entity memberships. Do not force an +eligibility flag when the test is meant to establish its derivation. Follow the model's +period conventions. For exploratory Python cases use the +[period-aware diagnostic helper](../../review-program/references/automation.md#model-diagnostics) +when helpful; a calculated result is not proof of correct policy or plausible inputs. + +Write `{PREFIX}-test-manifest.md` with exact test paths/case names and requirement IDs, +including directly affected existing regression tests. Do not change partner contract +expectations just to make tests pass. Integration into `household_state_benefits.yaml` +requires an explicit scope decision; do not silently enable it. + +### 3C. Coverage gate + +The coordinator reconciles requirements against actual implementation/test paths and +writes `{PREFIX}-coverage-report.md` with covered/missing IDs. Reuse the manifests and +inspect discrepancies; no separate tracker agent. Send missing items to their existing +owner in one bounded repair batch, then recheck those items. Missing in-scope coverage +blocks completion until implemented or explicitly excluded by the user. Never label it +complete just because every planned file exists. + +## Phase 4: Validate and repair changed behavior + +The coordinator owns validation. Create the changelog and format owned files before +checks. Use the existing model environment; confirm imports target this worktree. Set up +missing dependencies once only when required and authorized; workers do not each sync. + +### 4A. Structural checks + +Check YAML integrity, breakdowns, references, effective dates, parameter/variable linkage, +entities, jurisdiction and required `defined_for` against the changed implementation. +Reuse import/test failures as evidence rather than starting a second identical audit. +Write `{PREFIX}-validator-report.md` with PASS or unresolved items. The coordinator may +fix mechanical mistakes in coordination with owners; substantive policy decisions go to +the appropriate owner with source evidence. Do not stage cross-jurisdiction renames or +fix unrelated code. Recheck affected items after repair; unresolved structural errors block. + +### 4B. One test owner and bounded repair + +Run the exact changed and directly affected regression tests in one invocation, with +full output under RUN_ROOT; inspect summaries and failures. Prefer the program test +directory when it contains precisely the required set. Do not run all changed files and +then the same directory again solely to satisfy two stage names. Add an extra directory +pass only when it covers additional relevant tests. `--full-validation` adds one broader +state/package suite, not one per repair cycle. + +Classify failures before editing: mechanical, implementation defect, test defect, policy +ambiguity or environment. Send the affected items to their existing owner; never change +expected values only to match output. Use at most two repair batches per validation phase; +a recurring failure without a new diagnosis is blocked. After a fix, run failed cases +and any affected previously passing regressions together. Add verbosity only for an +unresolved failure. A later discovery can justify another test invocation; batching is +not a reason to omit a necessary check. + +Record `{PREFIX}-ci-fixer-status.md`: PASS/BLOCKED, exact commands/paths, counts, tested +HEAD plus working-file hashes, environment, elapsed time and unresolved causes. Reuse a +passing result only while its code, parameter dependencies, tests and environment match. +Formatting, conflict resolution and later fixes invalidate affected checks. Do not repeat +unchanged successful tests in the pusher or reporting step. + +For unresolved test failures, present causes and options together: guidance, stop, or an +explicitly accepted known failure. Preserve such consent and describe accepted failures +in the PR body; never silently push red tests. Unavailable tests are NOT RUN, not PASS. + +### 4C. Final diff check + +The coordinator checks the final diff for test-specific hard-coding, arbitrary year +conditions, altered legal values, missing approved requirements and unrelated edits. +Reuse evidence already established; this is not another regulatory review. Record +`{PREFIX}-checkpoint.md` with PASS or exact issues. Route one repair batch to the existing +owners and recheck affected tests/structure. A repeated unresolved audit issue blocks. + +## Phase 5: Save the reviewable implementation + +The coordinator writes `{PREFIX}-pr-description.md` and `{PREFIX}-final-report.md` from +the verified scope, evidence, coverage and validation. Scale the description to the +implementation: behavior, authority, scope/limitations, validation and issue linkage. +Do not copy every artifact into another long report or launch a reporting agent. + +Stage exact approved implementation/test/changelog paths; exclude research, runtime +artifacts and unrelated user files. Verify the staged diff. In publication mode, +create/reuse the approved issue now and add its reference to the prepared body and +commit message. Then commit one implementation commit. Formatting/checks already +completed in Phase 4 need not run again unless inputs changed. + +In `--local` mode, keep the commit in this worktree and skip every GitHub write and push. +The commit supplies a stable snapshot for the local independent review in Phase 6. Keep +files/artifacts accessible for the user; no cleanup of the implementation worktree. + +Otherwise, push the verified head branch explicitly. For existing remote work, +compare the live head with the pre-edit captured SHA; if it advanced, preserve that work +and reconcile before revalidating. Use normal fast-forward pushes for this workflow; +never overwrite another writer's commits. Create the draft PR only after the first real +implementation commit is pushed, or update the agreed existing PR. Record identifiers +and SHAs. GitHub failure is a blocked publication step, not a reason to repeat encoding. +Never mark the PR ready; a reused non-draft PR keeps its existing state. + +## Phase 6: Independent review and targeted fixes + +Skip only with `--skip-review`. Use the canonical `review-program` workflow in a fresh +review coordinator context; it dispatches its substantive reviewers under its own rules. +Supply raw source bytes/manifest and approved scope, not an instruction to accept the +implementer's policy conclusions. Pass concrete worktree/run values and enough free +worker capacity; don't inherit a summary-only restriction. Pass the resolved installed +`REVIEW_SKILL_ROOT` and workflow/adapter paths; the fresh coordinator loads the installed +skill and checks its returned body, rather than searching for the plugin or reinvoking a +same-named compatibility command. + +- Published work: `PR_NUMBER --local --prefix PREFIX --sources MANIFEST`. +- Local-only work: `--local-diff --prefix PREFIX --sources MANIFEST` (no PR required). + +Use `{PREFIX}-sources.json` initially and validated `{PREFIX}-review-sources.json` on +follow-ups. Pass `--600dpi` only when requested. The review has its own bounded acquisition +budget; source reuse should avoid reacquiring unchanged material. A PARTIAL review does +not automatically restart either research budget or become a successful encoding run. + +Read the summary, result JSON and relevant full findings. Use `confirmed_critical_ids` +from `{PREFIX}-review-result.json` for repair dispatch, not `counts.critical` or the +total still-open count, which can include UNVERIFIED claims. For an older report without +that field, inspect finding states explicitly; missing metadata is not zero criticals. +Zero still-open critical findings plus +COMPLETE status completes this phase. PARTIAL/missing status leaves explicit pending +checks; do not fix UNVERIFIED claims as if they were established defects. Obtain evidence +or a specific skip decision before declaring completion. An invalid hypothetical scenario, +optional coverage or an untested suggested remedy is not a confirmed defect. If a required +question remains unresolved, report it without starting a speculative model repair or +repeating a full review. Do not widen the approved year/program scope to clear incidental +historical observations. + +Assign confirmed criticals to the existing implementer and/or test-author, only when that +owner has actual work. Keep writes disjoint and share changed contracts; don't spawn an +empty fixer merely to write NO-ISSUES. Track finding IDs and actions in +`{PREFIX}-checklist-{vars,tests}-rN.md`, only for participating owners; the coordinator merges +these into `{PREFIX}-checklist.md`. Scope conflicts require an explicit decision, not a +silent policy expansion. + +After the first repair batch, format changed owned paths, run the affected test set and +structural checks once, update coverage/status/body, and commit a review-fix round. Apply +the Phase 4 failure gate; push only in publication mode. Follow-up review is mandatory: +use the same local/published identity with `--incremental {PREFIX}-review-full-report.md`, +which review-program preserves before replacing outputs. Recheck fixes, dependencies +and unresolved findings, not every already-reviewed rule. + +If confirmed criticals remain after follow-up, ask whether to attempt one final fix +round or stop with the remaining issues. Respect an existing decision. A final fix must +receive a final incremental review. Maximum: three reviews, two review-fix rounds. No +new default CI-fixer, pusher or reporting workers during these rounds. + +## Phase 7: Final status and benchmark + +Always report implemented/excluded requirements, coverage, changed files, actual tests, +review status/findings, limitations, and artifact/worktree paths. Published mode includes +issue/draft PR links; local mode explicitly reports that nothing was posted or pushed. +Refresh the final report/PR body after repairs so it describes the final state. + +`WORKFLOW COMPLETE` requires approved scope; complete in-scope coverage; clear structural +and diff gates; passed tests or explicitly accepted known failures; saved implementation; +final report; and completed or explicitly skipped independent review. Publication mode +also requires the intended issue/PR and successful push. A blocked step stays resumable +without reporting success. Never infer completion from artifact existence alone. + +For benchmarks, record acquisition, requirements/scope, implementation, test authoring, +validation/repair, review, reporting/Git and total wall time. Separate user waits and +workflow development from active encoding, and don't add overlapping role durations. +Record interpreter startup, actual test time, repeated calls, blocked fetches, fixes, +misses and withdrawn findings where observed. Report code/source hashes and environment +so comparisons use equivalent inputs. Real implementations establish workflow behavior; +helper tests and saved-report replays do not establish policy accuracy or speed gains. + +## Artifact ownership + +All `{PREFIX}-*` paths are under RUN_ROOT. The coordinator maintains the run state, +research/spec/scope, source manifest, coverage/validator/checkpoint/CI status, PR body, +final report and merged fix checklist. The implementer owns the implementation manifest; +the test-author owns the test manifest. Fixers own only their per-round checklist. +Review-program owns its `review-*` artifacts and temporary review snapshot cleanup. +These artifact names preserve caller compatibility; legacy per-stage agent names are not +requirements to spawn separate workers. Never commit local research or remove another +run's evidence or worktree. diff --git a/skills/policyengine-model-development/SKILL.md b/skills/policyengine-model-development/SKILL.md index 063b72d..647b6e8 100644 --- a/skills/policyengine-model-development/SKILL.md +++ b/skills/policyengine-model-development/SKILL.md @@ -27,6 +27,10 @@ This skill is the *how-to-write-it* layer. To run calculations or score reforms, `policyengine` skill instead. Verified against policyengine-us 1.764.x / policyengine-core 3.30.x (2026-07). +For delegated implementation, test authoring or review, follow +[agent-loading.md](references/agent-loading.md): every worker loads this entrypoint in +its own context, reads its task references and reports evidence of the load before work. + ## Mental model - **Parameters** are a YAML tree under `parameters/gov/...`. Each leaf is a dated value (or a diff --git a/skills/policyengine-model-development/references/agent-loading.md b/skills/policyengine-model-development/references/agent-loading.md new file mode 100644 index 0000000..0d8283e --- /dev/null +++ b/skills/policyengine-model-development/references/agent-loading.md @@ -0,0 +1,35 @@ +# Loading model-development in delegated work + +Each agent doing country-model implementation, test authoring or review must load +`policyengine-model-development` in its own context before substantive work. A parent's +load, a skill name in a dispatch prompt, and instructions to read references are not +evidence that the worker loaded the skill. + +Resolve the skill from the worker's available runtime catalog. Load its full `SKILL.md` +through the runtime's supported mechanism, then read the references for the assigned +work: implementers need parameters, variables, periods/aggregation, vectorization and +style; test authors need tests and periods/aggregation; reviewers select the sections +relevant to the changed model code. Do not substitute isolated reference excerpts for +the entrypoint's mandatory rules. Load other skills explicitly required by the role too. + +Before writing model code/tests or reviewing them, send a brief `SKILLS_READY` message +with the resolved skill name, load mechanism, entrypoint path/resource, references read +and the successful tool result or runtime trace identifying the load. Record this once +in the existing role manifest/progress log; no separate worker or audit stage is needed. +The coordinator checks that evidence before accepting the role's work. An agent's bare +claim of compliance is insufficient. Do not report a load as verified when its evidence +is unavailable. + +If the skill is absent from the runtime catalog, loading fails, or the worker lacks the +required loading capability, return `SKILLS_BLOCKED` with the exact missing item before +writing implementation/tests. The coordinator resolves the runtime setup or reports the +blocker; it must not silently replace this with manual repository-file reading and call +it a run with an installed skill. A deliberately requested source-file experiment must be +labelled as such and cannot establish installed-command behavior. + +Loading is separate from applying the rules. The coordinator's existing structural and +coverage checks inspect the actual changes against the loaded guidance, including reuse +of existing concepts, source-defined parameters, entities/periods, aggregation and +meaningful tests. Record concrete deviations and fixes in those existing checks. A load +receipt, formatting pass or test count is not evidence that these modeling decisions +are correct. diff --git a/skills/review-program/SKILL.md b/skills/review-program/SKILL.md index 6ea8be2..048b7e5 100644 --- a/skills/review-program/SKILL.md +++ b/skills/review-program/SKILL.md @@ -25,11 +25,15 @@ $review-program [PR_NUMBER_OR_SEARCH] [PDF_URL] [--local] [--local-diff] [--full [--sources MANIFEST] [--source-budget MINUTES] ``` +With `--local-diff`, the PR argument may be omitted for unpublished local work; the +canonical workflow resolves the base repository and reviews local HEAD without a PR. + Mandatory completion gate: - Default to policy/source and code/test reviewers; consolidate their findings directly. - The review is incomplete until `{RUN_ROOT}/{PREFIX}-review-full-report.md` and - `{RUN_ROOT}/{PREFIX}-review-summary.md` both exist. + `{RUN_ROOT}/{PREFIX}-review-summary.md` exist, with + `{RUN_ROOT}/{PREFIX}-review-result.json` for confirmed-critical repair dispatch. - Phase 6 consolidation is required before displaying or posting findings. - Report COMPLETE or PARTIAL separately from the critical count; missing material evidence cannot be reported as a clean review. @@ -50,6 +54,10 @@ Delegation mapping (when subagent use is available and authorized): values and the role's task spec from the canonical workflow to every subagent; name the role's skills explicitly in the subagent prompt — do not assume a worker infers them from parent context. +- For country-model work, each worker resolves model-development in its own runtime + catalog, reads the full entrypoint with its catalog-specified access mechanism and + supplies the canonical `SKILLS_READY` evidence. Missing skill availability/load is a + blocker, not a reason to silently substitute repository excerpts. - Every subagent appends progress lines to its canonical progress log while working and finishes by writing its assigned file and returning the one-line DONE message from the canonical completion contract. Dispatch reviewers before writing the scope brief when diff --git a/skills/review-program/references/automation.md b/skills/review-program/references/automation.md index 9c8d186..a7fcf9e 100644 --- a/skills/review-program/references/automation.md +++ b/skills/review-program/references/automation.md @@ -8,7 +8,8 @@ helpers are local-only: neither changes source nor posts a review. After role completion and deduplication, write `{PREFIX}-review-assembly.json` under `RUN_ROOT`. Select exact Markdown headings from the completed role reports; the helper copies their bodies, including nested headings and code, without rewriting findings. -Update a role's finding in place to include complementary evidence before selecting it. +Use a selector's optional `addendum` for complementary evidence or an adjudication note; +leave the original role report intact. Role-local labels avoid concurrent ID collisions. ```json { @@ -30,11 +31,10 @@ Update a role's finding in place to include complementary evidence before select "source_manifest": "pr-9379-review-sources.json", "findings": [ { - "id": "C1", "severity": "critical", "status": "OPEN", "path": "pr-9379-review-code.md", - "heading": "C1 — Exact existing finding title" + "heading": "code-1 — Exact existing finding title" } ], "gaps": [], @@ -51,17 +51,32 @@ present, `timing` uses the canonical keys from workflow Phase 6 (`setup_seconds` include `elapsed_seconds`. `notes` is optional, renders under a Notes heading, and never affects status or severity. The summary begins with `Review status`, `Review severity` and `Still-open critical count` lines for calling workflows. Keep -`validation` concise so the summary remains short. Paths are absolute or relative to +`validation` concise. The helper limits the summary to five finding titles and two gaps, +with counts and links to the full report; complete evidence and notes remain in the full +report. Paths are absolute or relative to `RUN_ROOT`, including local links inside the selected Markdown. Both canonical reports remain in that directory. Role status is `DONE` or `PARTIAL`; a failed role must have its recovered report and missing checks recorded before assembly, not fabricated completion. Finding severities: `critical`, `should_address`, `suggestion`. States: `OPEN`, `STILL OPEN`, `RESOLVED`, `UNVERIFIED`, `WITHDRAWN`. Keep established IDs after severity changes. +For new findings, omit `id`: the helper assigns C/A/S IDs above every explicit and +`reserved_ids` value. On incremental runs, set `reserved_ids` to all IDs in the preserved +baseline, including resolved/withdrawn ones. Set `prior_reports` to the preserved baseline +paths and select unaffected findings directly from them with their existing `id` and +explicit current `status`; no copied carry-forward section is needed in a new role report. +The coordinator verifies baseline identity/ancestry and whether the diff affects each +carried finding before using these selectors. The helper does not infer that validity. Resolved/withdrawn findings remain visible in the full report but leave the open counts. Gaps, partial roles, or unverified findings force PARTIAL. Confirmed open criticals require REQUEST_CHANGES; an unverified claim alone does not. Never infer source completeness from an empty gap list or a successful assembly operation. +Use `gaps` only for unresolved required material checks. Use `notes` for optional coverage, +reused tests and other limitations; notes do not force PARTIAL. The result JSON preserves +total open `counts` for compatibility, but `confirmed_critical_ids` and +`confirmed_critical_count` exclude UNVERIFIED, RESOLVED and WITHDRAWN findings. Encoding +repair dispatch consumes those confirmed IDs. This classification reflects the reviewers' +evidence assessment; the helper cannot certify scenario premises or legal correctness. ```bash python3 "$REVIEW_SKILL_ROOT/scripts/assemble_review.py" \ diff --git a/skills/review-program/references/benchmark.md b/skills/review-program/references/benchmark.md index f80c80b..c443c8e 100644 --- a/skills/review-program/references/benchmark.md +++ b/skills/review-program/references/benchmark.md @@ -51,3 +51,35 @@ them; do not supply this evaluator table to a reviewer as an answer key. Reassembling #9379's saved report in approximately 0.05s validated the assembler's mechanics. It did not measure the time to choose findings or establish their correctness. The current local orchestration edits need their own real-run evidence. + +## MO LIHEAP workflow correction, September 2026 + +The local encoding benchmark at `8a084efa3d948585786a4e13b368ac594942548c` +used the PR #88 workflow plus local-diff and skill-loading changes. Its two reviews +took approximately 30m21s and 26m06s after subtracting long event gaps correlated with +machine sleep (actual wall times 78m09s and 42m39s). Individual reviewers took 9–14 +minutes; setup, staggered dispatch and roughly nine minutes of post-reviewer work +accounted for the rest. These adjusted times are estimates, not active-compute measurements. + +The run exposed duplicate skill/command entrypoints, verbose report reconciliation, +unverified applicant premises counted as critical, and ordinary limitations classified +as missing required checks. The subsequent workflow correction has this bounded evidence: + +- A fresh native Claude entrypoint smoke test loaded both real skills and their canonical + paths in 23.8s, with no compatibility stub or recursive invocation. +- Replaying the existing MO reports through the assembler took 0.05–0.08s and produced + a 20-line summary while preserving full evidence. Marking C3 UNVERIFIED excluded it + from `confirmed_critical_ids` without dropping it from total open findings. +- A fresh context loaded review-program and model-development and evaluated C3 from + the existing claim, primary-source excerpt and recorded diagnostic inputs/outputs. + In 76.1s it rejected automatic repair because the applicant premise was unestablished. + It also volunteered unsupported side remarks about the senior branch and proposed + fallback. Those remarks were rejected, and the adjudication instruction was narrowed + afterwards. An earlier packet accidentally omitted relevant evidence and is excluded + from acceptance evidence. + +These checks validate entrypoint resolution, assembly mechanics and one bounded +scenario decision. They do **not** establish full-review accuracy, successful parallel +dispatch under load, or a new end-to-end runtime. The final narrowed adjudication wording +and overall latency still need the next real-PR benchmark. Do not report replay time as +review time or this scenario check as a third MO review. diff --git a/skills/review-program/references/claude-launcher.md b/skills/review-program/references/claude-launcher.md index 42ed54e..dcd1386 100644 --- a/skills/review-program/references/claude-launcher.md +++ b/skills/review-program/references/claude-launcher.md @@ -5,10 +5,14 @@ to Claude Code; it adds no review stages or completion gates. - **Arguments**: preserve positional arguments and flags, including `--sources` and `--source-budget`, according to the canonical grammar. +- **Entrypoint**: this workflow is registered as a skill, without a same-named command + stub. Check that Skill returns this entrypoint and resolve `REVIEW_SKILL_ROOT` from its + reported base directory. Pass that path to workers; never use a filesystem-wide search + or recursive Skill invocation to recover a compatibility stub. - **Questions**: use `AskUserQuestion` for missing/ambiguous PR identity or a posting decision. Honor decisions already provided; review can finish before asking to post. - **Delegation**: launch `general-purpose` agents for the canonical `policy-reviewer` - and `code-reviewer` together as soon as the snapshot exists, before writing the scope + and `code-reviewer` in one parallel tool batch as soon as the snapshot exists, before writing the scope brief; send the brief's questions afterwards with `SendMessage`. Use the active `Agent`/delegation tool's actual schema; do not pass `run_in_background` or `team_name` unless it supports them. Each prompt includes its full canonical task, exact @@ -17,6 +21,11 @@ to Claude Code; it adds no review stages or completion gates. (grep extracts, one test invocation, summary-only test output) and `Load skills:` entries. Resolve installed skill names by suffix, never by assuming the `complete:` namespace. +- **Model-development loading**: country-model reviewers invoke the resolved installed + skill with the `Skill` tool in their own context, then read the relevant references. + Require canonical `SKILLS_READY` evidence before accepting their work. A worker without + Skill access or the required installed skill returns `SKILLS_BLOCKED`; the skill list + in its prompt is not proof of loading. - **Agent contracts**: use these general-purpose agents rather than specialized document-collector/program-reviewer/validator agents whose standalone routines add overlapping work. Reviewers do not create nested teams or delegate verification. @@ -27,7 +36,8 @@ to Claude Code; it adds no review stages or completion gates. bounded wait. Silence over five minutes: `SendMessage` the role "finalize now with what you have"; two more minutes: `TaskStop` it and apply the canonical recovery. Never treat a partial report as finished. The coordinator reads the reports and writes both final - outputs. + outputs. Use completion notifications; do not implement waits with multi-minute shell + sleeps. The liveness threshold is not the polling interval. - **Adjudication**: only for the specific material uncertainty allowed in Phase 5, launch a general-purpose agent with the remaining source budget and the disputed question. No automatic verifier per finding, source, page or parameter. diff --git a/skills/review-program/references/workflow.md b/skills/review-program/references/workflow.md index 9ec059d..8961d26 100644 --- a/skills/review-program/references/workflow.md +++ b/skills/review-program/references/workflow.md @@ -21,6 +21,9 @@ existing authorization or an explicit posting decision after the report is ready A reviewer writes its assigned report and returns `DONE — wrote {path} ({confirmed findings}; {material evidence gaps}; {elapsed})`. Wait for completion notifications; do not infer completion merely from a file's existence. +Yield to runtime notifications instead of sleeping in a shell. If polling is the only +available mechanism, use interruptible waits of at most 60 seconds and resume immediately +on completion; a five-minute liveness threshold is not a polling interval. Each reviewer appends ` ` to `{RUN_ROOT}/{PREFIX}-review-progress-{role}.log` at every stage change and at least every two minutes of work; that log is the only file the coordinator watches. The coordinator checks the other roles' logs whenever a sibling @@ -41,11 +44,14 @@ not an implementer's conclusions as proof of correctness. Parse flags and their values before identifying positional arguments. -- `PR_ARG`: PR number or search text. Ask if omitted; ask which PR if search is ambiguous. +- `PR_ARG`: PR number or search text. Ask if omitted, except with `--local-diff`; + ask which PR if search is ambiguous. - `PDF_URL`: optional official source URL; discover relevant sources if omitted. - `--local`: display locally only; no GitHub posting. - `--local-diff`: review committed changes through local `HEAD` without pushing; - excludes staged, unstaged and untracked changes; implies `--local`. + excludes staged, unstaged and untracked changes; implies `--local`. Without a PR, + compare against the explicitly resolved base repository's default branch and record + `PR number: local` and remote CI as not applicable. Never create a PR just to review. - `--full`: explicitly audit the whole identified program, including unchanged behavior. For a multi-program PR, record the exact program paths. It does not mandate more agents or rendering all pages. Default scope is changed behavior and affected dependencies. @@ -79,8 +85,15 @@ not overwrite each other's artifacts. Validate an explicit prefix before using i Set `REVIEW_SKILL_ROOT` to the absolute installed review-program skill directory so the helper paths below work from any checkout. +For `--local-diff` without a PR, set `PR_NUMBER=local`, resolve `BASE_REPO` explicitly, +and default to `PREFIX=local-` unless the caller supplies its own prefix. +An incremental local review keeps the caller's prefix and verifies the prior head's +ancestry as usual. Do not query PR metadata/CI for this identity or pass it to posting. + Pass concrete `WORKTREE_ROOT`, `WORKTREE_ID`, `RUN_ROOT`, `PREFIX` and, after Phase 1, -`SNAPSHOT` to reviewers. Never share another worktree's uncommitted files or run state. +`SNAPSHOT` and `REVIEW_SKILL_ROOT` to reviewers. Resolve skill paths from the runtime's +loaded entrypoint or plugin root once; never search the whole filesystem for them. +Never share another worktree's uncommitted files or run state. Do not run concurrent reviews with the same worktree/prefix; choose a distinct prefix. Use `{RUN_ROOT}/{PREFIX}-review-run-state.md` to record repository/PR identity, args, @@ -112,6 +125,9 @@ unavailable checks are distinct states; do not confuse an unsuccessful `gh pr ch exit with failure to resolve the PR. Associate CI with its checked head SHA; if the remote head changes during review, state which commit the results describe. +For local work with no PR, read repository/default-branch metadata only. No remote check +can certify the unpublished local commit; report the actual local validation separately. + Fetch from the base repository URL, not `origin` (which may be a fork). The resolved PR URL identifies the base repository authoritatively: @@ -122,9 +138,15 @@ set -euo pipefail bounded() { python3 "$REVIEW_SKILL_ROOT/scripts/run_bounded.py" --seconds 60 "$@" } -PR_URL=$(bounded gh pr view "$PR_NUMBER" --repo "$BASE_REPO" --json url --jq '.url') -BASE_REPO_URL=${PR_URL%/pull/*} -BASE_BRANCH=$(bounded gh pr view "$PR_NUMBER" --repo "$BASE_REPO" --json baseRefName --jq '.baseRefName') +if [ "$PR_NUMBER" = "local" ]; then + [ "${LOCAL_DIFF:-false}" = "true" ] || { echo "Local identity requires --local-diff" >&2; exit 1; } + BASE_REPO_URL=$(bounded gh repo view "$BASE_REPO" --json url --jq '.url') + BASE_BRANCH=$(bounded gh repo view "$BASE_REPO" --json defaultBranchRef --jq '.defaultBranchRef.name') +else + PR_URL=$(bounded gh pr view "$PR_NUMBER" --repo "$BASE_REPO" --json url --jq '.url') + BASE_REPO_URL=${PR_URL%/pull/*} + BASE_BRANCH=$(bounded gh pr view "$PR_NUMBER" --repo "$BASE_REPO" --json baseRefName --jq '.baseRefName') +fi bounded git -C "$WORKTREE_ROOT" fetch "$BASE_REPO_URL" "$BASE_BRANCH" BASE_SHA=$(git -C "$WORKTREE_ROOT" rev-parse FETCH_HEAD) if [ "${LOCAL_DIFF:-false}" = "true" ]; then @@ -171,10 +193,16 @@ reviewed head, and that head is an ancestor of `PR_HEAD`. Otherwise use the full diff and explain why. With a valid baseline, use `PRIOR_HEAD..PR_HEAD`, plus unresolved prior findings and dependencies affected by those changes. Value, formula or citation changes invalidate evidence for the affected behavior; they do not require a whole-program -restart. If the impact cannot be bounded, expand scope explicitly. Preserve prior IDs. +restart. Carry unaffected prior findings forward by selecting their preserved report +sections at assembly; do not ask reviewers to rewrite or re-investigate them. Recheck an +open finding when the diff affects it or new evidence can resolve its specific gap. +If the impact cannot be bounded, expand scope explicitly. Preserve prior IDs. If `--full` expands beyond the prior verified scope, review that additional scope too. -Dispatch the reviewers as soon as the snapshot exists; do not hold them for a scope +Dispatch both reviewers in one parallel tool batch as soon as the snapshot exists; +when the runtime cannot batch, issue the second dispatch immediately. Do not interleave +code reads, source verification or bespoke prompt drafting between dispatches. Use the +shared handoff plus each role's scope and owned outputs. Do not hold them for a scope brief. Each reviewer derives scope from the diff, PR body and snapshot itself. The coordinator then reads the diff and records a concise scope brief in the run state: changed paths, program/year, affected behavior, needed sources, selected roles and at @@ -264,14 +292,21 @@ never wait through minute-long backoff sleeps or keep a reviewer alive for an op | code-reviewer | Implementation correctness, relevant patterns, tests and regressions | `{RUN_ROOT}/{PREFIX}-review-code.md` | policyengine-model-development tests/periods/vectorization for country models; applicable repo skills for API/frontend/infrastructure | For policy changes, run these two roles concurrently. For pure infrastructure/API/frontend, -run code-reviewer only. Mixed PRs get both with their respective scopes. Split further -when the diff has independent large components, or when a role's inputs would exceed -its context: as a working threshold, more than about 800 diff lines or more than ten -sources for one role. Split the policy reviewer by source group and the code reviewer +run code-reviewer only. Mixed PRs get both with their respective scopes. Two roles are +the default even for a large total diff. Split only for independent substantial components +or a demonstrated context limit in a specific role. Count that role's relevant formulas, +parameters, tests or source sections, not the whole diff or PDF count; repetitive test +fixtures alone do not justify extra policy reviewers. Record the actual partition and +reason. Split the policy reviewer by source group and the code reviewer by variable group; state why, partition ownership and avoid reading the same whole program in every role. Do not spawn nested reviewers. Load only references needed for the actual task, not every model-development document; read a reference's relevant section, not the whole reference set. +For country-model review, each reviewer first loads the model-development entrypoint +and follows its [loading contract](../../policyengine-model-development/references/agent-loading.md). +Pass that contract with the task and record `SKILLS_READY` evidence in the existing +progress log. Missing/failed skill loads block that role's substantive review and remain +an explicit gap if unresolved; a dispatch instruction alone is not a verified load. When policy review is inapplicable, the coordinator writes an empty version-1 source manifest and records why source checking was not requested. @@ -337,7 +372,12 @@ just because an intermediate report contains a flag. Distinguish defects, option improvements, and evidence gaps. Missing coverage is not proof of incorrect behavior. A reproduction must describe a plausible, internally consistent case and a source-backed -expected result. Restoring an old formula or forcing a flag can isolate a code change; +expected result. Establish material relationships and qualifying statuses from explicit +inputs or justified model semantics; names such as "non-applicant grandparent" do not +establish an applicant designation. If the model cannot represent a required condition, +state the assumption and what remains unproved. A proxy's sensitivity is a modeling +concern until evidence establishes which outcome is wrong; an alternative proxy needs +the same justification. Restoring an old formula or forcing a flag can isolate a code change; an output difference alone does not establish which outcome is correct. State material unmodeled conditions explicitly; a change in benefit receipt does not by itself establish a change in the underlying status that qualified the person (for example, an SSI payment @@ -346,10 +386,16 @@ scenarios before counting findings; do not add a default validation agent for th Keep role reports ready for direct consolidation: status; findings with location, trigger, expected/observed outcome, impact and source/reproduction links; material gaps; -and a short validation/timing block. A role's status is PARTIAL whenever its gap list is -non-empty: an uncorroborated value-bearing entry (a parameter value whose cited source -could not be fetched or read), a required check not executed, or a scenario it could not -validate. Never write COMPLETE above a non-empty gap list. Record commands, test counts, start/end times and +and a short validation/timing block. Target one concise paragraph or a few bullets per +finding; link full traces and tables. Use role-local labels for new findings (for example +`policy-1`, `code-1`); only the assembler assigns new global IDs. Preserve IDs for prior +findings being rechecked. A role is PARTIAL only for an unresolved material check in its +assigned scope. Each gap names the required question and missing evidence. Put optional +coverage, untested proposed remedies, reused passing tests at the reviewed head, checks +owned by another role and general recall limitations in notes, not gaps. Lack of a +population estimate limits population claims, not an otherwise demonstrated household +defect. Do not claim the review is COMPLETE while a required material gap remains. +Record commands, test counts, start/end times and actual source/render counts once, with raw output in linked logs. Avoid full PR metadata, source inventories, investigation narratives and repeated scenario tables in each report. When both reviewers establish the same defect, share the finding text and add only the @@ -362,12 +408,18 @@ more findings, not repeated boilerplate or invented statistics. The coordinator reads both reports and deduplicates before requesting any more work. Before consolidation it opens the evidence artifact of every CRITICAL once (the reproduction output or the quoted source lines) and confirms the trigger, the expected -result and its source are all present; a CRITICAL whose evidence is missing, inconsistent -or an output difference alone is marked UNVERIFIED, which keeps its severity and forces -PARTIAL. Return a specific unresolved question to its original reviewer when that +result and its source are all present and support the material scenario premises. Opening +an artifact is not validation of its expected result. A refuted/invalid example is corrected +or withdrawn, not escalated because it changes dollars. A remaining material uncertainty +is recorded as a specific gap; an existing finding awaiting that check is UNVERIFIED and +excluded from confirmed-critical repair counts. Do not mint a new critical from an +unsupported hypothesis. Return a specific unresolved question to its original reviewer when that reviewer can answer from existing evidence. Use at most one additional independent adjudication batch for materially conflicting findings or uncertain high-impact claims; batch related items by topic, not one agent per value. It uses the remaining acquisition budget, not a reset. +Keep that response to the disputed claim's disposition, decisive evidence and missing +premise. Do not turn adjudication into a replacement design or add incidental findings; +those require their own complete evidence and are outside this bounded question. Do not reconfirm findings with adequate source and code-path evidence, or investigate incidental pre-existing issues to complete a review of changed behavior. @@ -381,11 +433,13 @@ limit: substantial implementation analysis may take longer than source acquisiti The coordinator writes both canonical outputs (required for existing callers): `{RUN_ROOT}/{PREFIX}-review-full-report.md` and -`{RUN_ROOT}/{PREFIX}-review-summary.md`. No separate consolidation agent. +`{RUN_ROOT}/{PREFIX}-review-summary.md`, plus the assembler's +`{RUN_ROOT}/{PREFIX}-review-result.json` with `confirmed_critical_ids` and +`confirmed_critical_count` for calling workflows. No separate consolidation agent. Select the strongest existing finding sections, deduplicate and reconcile severity/status. -Attach complementary evidence to the selected section once where needed; the coordinator -can merge that text without restarting a reviewer. Use the bundled +Attach a short complementary evidence or adjudication note in the assembly selector; +do not edit role reports to renumber headings or copy prior findings into them. Use the bundled [report assembler](automation.md#report-assembly) to copy the selected sections into both canonical reports and derive counts/severity from one list; do not hand-write a new consolidation script per PR. Its small input records shared metadata, role completion, @@ -400,15 +454,18 @@ should not trigger new research unless Phase 5 identified a material uncertainty Preserve stable finding IDs C1/C2, A1/A2 and S1/S2. Incremental reviews mark prior findings RESOLVED, STILL OPEN or UNVERIFIED (retain their previous severity until adjudicated), -retain IDs even if severity changes, and give new IDs above prior maxima. Do not count +retain IDs even if severity changes. Pass prior IDs as reserved IDs and omit IDs for new +findings so the assembler allocates above prior maxima. Do not count resolved findings as open. Missing evidence never silently resolves a prior defect. Classify confirmed findings: -- **CRITICAL (Must Fix)**: wrong policy/formulas or values affecting modeled results, - incorrect entities/periods, hard-coded legal values, missing/non-corroborating required - references, incorrect citations, failing relevant checks, formula variables with no - meaningful coverage, or non-functional tests. Require concrete support for the claim. +- **CRITICAL (Must Fix)**: a confirmed policy/formula/value, entity or period defect with + material modeled impact; a failing required check; or a demonstrated failure to satisfy + an explicit repository completion requirement (such as source corroboration or functional + tests). Identify that requirement and the concrete failure. A plausible output difference, + missing optional test, unknown source or preferred implementation pattern alone is not + a confirmed critical. - **SHOULD ADDRESS**: missing boundary coverage on tested behavior, maintainability or repo-standard issues. Missing rounding/flooring/capping is normally here unless a demonstrated case changes eligibility/category or materially changes results. @@ -448,7 +505,10 @@ Severity: REQUEST_CHANGES for confirmed criticals; COMMENT for nonblocking issue PARTIAL reviews without confirmed criticals; APPROVE only for COMPLETE reviews with no criticals and at most minor suggestions. The summary stays concise (target 20 lines) and starts with three labeled lines that callers parse: `Review status: COMPLETE | PARTIAL`, -`Review severity: ...` and `Still-open critical count: N`; then other counts, material +`Review severity: ...` and `Still-open critical count: N`; also report +`Confirmed critical count: N` separately, excluding UNVERIFIED findings. Calling fix +workflows use confirmed critical IDs from the result JSON, never the total open count. +Then include other counts, material gaps, actual validation, metrics and full report path. Report gaps even if the critical count is zero. Output-file existence alone is not a clean-review gate for a calling encoding workflow. @@ -461,8 +521,10 @@ do not add concurrent role durations. Record CLI wall time separately from test- time, and source acquisition window separately from time inside network calls. These differences are not pure import or network-latency measurements. A few diagnosed cases do not establish review recall; record confirmed misses or false positives without -claiming all defects were found. After cleanup, finalize timings and rerun the assembler -with the same selectors if needed; this is bookkeeping, not a new review pass. +claiming all defects were found. Use runtime event timestamps or clock-generated markers, +never estimated timestamps typed into logs. Record interruption gaps separately from wall +time. After cleanup, finalize timings and rerun the assembler at most once if needed; +do not repeatedly edit reports to chase a continuously changing elapsed time. When maintaining this workflow, use [real PR benchmarks](benchmark.md) to assess review quality and runtime. Helper tests protect mechanical contracts only; their pass count diff --git a/skills/review-program/scripts/assemble_review.py b/skills/review-program/scripts/assemble_review.py index 834f2e2..b09f563 100644 --- a/skills/review-program/scripts/assemble_review.py +++ b/skills/review-program/scripts/assemble_review.py @@ -18,6 +18,12 @@ "suggestion": "Suggestions", } STATES = {"OPEN", "STILL OPEN", "RESOLVED", "UNVERIFIED", "WITHDRAWN"} +ID_PREFIX = {"critical": "C", "should_address": "A", "suggestion": "S"} + + +def compact(text: str, limit: int = 240) -> str: + text = " ".join(text.split()) + return text if len(text) <= limit else text[: limit - 1] + "…" def local_path(value: str, root: Path) -> Path: @@ -84,7 +90,8 @@ def assemble(data: dict, root: Path, prefix: str) -> dict: "Wait for role completion; recover or mark missing work PARTIAL" ) role_paths = {local_path(role["path"], root) for role in roles} - for path in role_paths: + prior_paths = {local_path(path, root) for path in data.get("prior_reports", [])} + for path in role_paths | prior_paths: if not path.is_file(): raise ValueError(f"Missing role report: {path}") gaps = list(data["gaps"]) @@ -99,10 +106,27 @@ def assemble(data: dict, root: Path, prefix: str) -> dict: raise ValueError( "Source integrity check rejected evidence; repair the manifest and re-evaluate dependent findings before assembly" ) + reserved = set(data.get("reserved_ids", [])) + reserved.update(item["id"] for item in data["findings"] if "id" in item) + if any(not re.fullmatch(r"[CAS][1-9][0-9]*", key) for key in reserved): + raise ValueError( + "Reserved and explicit finding IDs must be C/A/S plus a positive integer" + ) + maxima = { + key: max((int(value[1:]) for value in reserved if value[0] == key), default=0) + for key in ID_PREFIX.values() + } seen = set() findings = [] for item in data["findings"]: - finding_id, severity = item["id"], item["severity"] + severity = item["severity"] + if severity not in SECTIONS: + raise ValueError(f"Invalid severity: {severity}") + finding_id = item.get("id") + if finding_id is None: + key = ID_PREFIX[severity] + maxima[key] += 1 + finding_id = f"{key}{maxima[key]}" state = item.get("status", "OPEN") if not re.fullmatch(r"[CAS][1-9][0-9]*", finding_id) or finding_id in seen: raise ValueError(f"Invalid or duplicate finding ID: {finding_id}") @@ -110,11 +134,27 @@ def assemble(data: dict, root: Path, prefix: str) -> dict: raise ValueError(f"Invalid severity/status: {finding_id}") seen.add(finding_id) path = local_path(item["path"], root) - if path not in role_paths: - raise ValueError(f"Finding must come from a completed role report: {path}") + if path not in role_paths | prior_paths: + raise ValueError( + f"Finding must come from a completed role or preserved prior report: {path}" + ) + if path in prior_paths and ("id" not in item or "status" not in item): + raise ValueError( + "Carried findings require their existing ID and explicit current status" + ) title, body = markdown_section(path, item["heading"]) # IDs are coordinator-owned: retain them even after severity changes or deduplication. - title = re.sub(r"^[CAS][0-9]+\s*(?:—|–|-|:)\s*", "", title) + title = re.sub( + r"^(?:[CAS][0-9]+|(?:policy|code)-[0-9]+)\s*(?:—|–|-|:)\s*", "", title + ) + title = re.sub( + r"\s+\((?:OPEN|STILL OPEN|RESOLVED|UNVERIFIED|WITHDRAWN)\)$", "", title + ) + addendum = item.get("addendum", "") + if not isinstance(addendum, str): + raise ValueError(f"Finding addendum must be text: {finding_id}") + if addendum.strip(): + body += "\n\nCoordinator assessment: " + addendum.strip() findings.append( { "id": finding_id, @@ -122,6 +162,8 @@ def assemble(data: dict, root: Path, prefix: str) -> dict: "status": state, "title": title, "body": body, + "path": str(path), + "heading": item["heading"], } ) open_findings = [ @@ -147,13 +189,14 @@ def assemble(data: dict, root: Path, prefix: str) -> dict: or any(f["status"] == "UNVERIFIED" for f in findings) ) status = "PARTIAL" if partial else "COMPLETE" - confirmed_criticals = any( - f["severity"] == "critical" and f["status"] != "UNVERIFIED" + confirmed_critical_ids = [ + f["id"] for f in open_findings - ) + if f["severity"] == "critical" and f["status"] != "UNVERIFIED" + ] severity = ( "REQUEST_CHANGES" - if confirmed_criticals + if confirmed_critical_ids else ("COMMENT" if partial or counts["should_address"] else "APPROVE") ) validation = data["validation"].strip() @@ -222,22 +265,44 @@ def assemble(data: dict, root: Path, prefix: str) -> dict: ] full = root / f"{prefix}-review-full-report.md" summary = [ - "# Review summary", - "", f"Review status: {status}", f"Review severity: {severity}", f"Still-open critical count: {counts['critical']}", + f"Confirmed critical count: {len(confirmed_critical_ids)}", f"PR: {metadata['repository']}#{metadata['pr_number']}; reviewed head: {metadata['head']}.", f"Open findings: {counts['critical']} critical, {counts['should_address']} should address, {counts['suggestion']} suggestions.", ] - summary += [f"- {f['id']} ({f['status']}): {f['title']}" for f in open_findings] - summary += [f"- Evidence gap: {gap}" for gap in gaps] - summary += [f"- Note: {note}" for note in notes] - summary += ["", validation, "", metrics, "", f"[Full report](<{full}>)"] + ranked = sorted( + open_findings, + key=lambda f: ( + list(SECTIONS).index(f["severity"]), + f["status"] == "UNVERIFIED", + ), + ) + summary += [""] + [ + f"- {f['id']} ({f['status']}): {compact(f['title'])}" for f in ranked[:5] + ] + if len(ranked) > 5: + summary.append(f"- {len(ranked) - 5} more open findings in the full report.") + summary += [f"- Evidence gap: {compact(gap)}" for gap in gaps[:2]] + if len(gaps) > 2: + summary.append(f"- {len(gaps) - 2} more material gaps in the full report.") + summary += [ + "", + f"Validation: {compact(validation)}", + f"Timing: {compact(metrics)}", + f"[Full report](<{full}>)", + ] result = { "status": status, "severity": severity, "counts": counts, + "confirmed_critical_ids": confirmed_critical_ids, + "confirmed_critical_count": len(confirmed_critical_ids), + "findings": [ + {key: value for key, value in finding.items() if key != "body"} + for finding in findings + ], "gaps": gaps, "notes": notes, "finding_states": dict(Counter(f["status"] for f in findings)), diff --git a/targets/claude/README.md b/targets/claude/README.md index fd289ef..a0ad0df 100644 --- a/targets/claude/README.md +++ b/targets/claude/README.md @@ -4,6 +4,10 @@ Generated Claude Code wrapper for PolicyEngine. This repository is built from `PolicyEngine/policyengine-skills`. Do not edit it directly unless you are fixing a sync emergency. +`encode-policy-v2`, `review-program` and `fix-pr` are skill entrypoints and retain their +namespaced [slash commands](https://code.claude.com/docs/en/plugins). They have no same-named command stubs: duplicate registration +can resolve to the stub instead of the skill. The wrapper builder rejects such collisions. + ## Install ```bash diff --git a/targets/claude/commands/encode-policy-v2.md b/targets/claude/commands/encode-policy-v2.md deleted file mode 100644 index 17aff0b..0000000 --- a/targets/claude/commands/encode-policy-v2.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -description: Implement a new government benefit program with research, approved scope, validation, and review ---- - -# Implementing $ARGUMENTS in PolicyEngine (v2) - -Compatibility stub. The `encode-policy-v2` skill shipped in this plugin is the real entry -point—current Claude Code gives a skill precedence over a same-named command, so this file -normally never runs. If it does run on an older Claude Code version, do exactly one thing: -invoke the `encode-policy-v2` skill through the Skill tool, pass `$ARGUMENTS` unchanged, -and follow it. The skill loads the canonical workflow -(`skills/encode-policy-v2/references/workflow.md`) and Claude adapter -(`skills/encode-policy-v2/references/claude-launcher.md`); do not define or improvise -workflow behavior here. diff --git a/targets/claude/commands/fix-pr.md b/targets/claude/commands/fix-pr.md deleted file mode 100644 index bcb4834..0000000 --- a/targets/claude/commands/fix-pr.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -description: Apply fixes to a PR based on /review-program findings or PR review comments ---- - -# Fixing PR: $ARGUMENTS - -Compatibility stub. The `fix-pr` skill shipped in this plugin is the real entry point — -current Claude Code gives a skill precedence over a same-named command, so this file -normally never runs. If it does run (older Claude Code versions), do exactly one thing: -invoke the `fix-pr` skill via the Skill tool, passing `$ARGUMENTS` through unchanged, -and follow it. The skill loads the canonical workflow -(`skills/fix-pr/references/workflow.md`) and the Claude adapter -(`skills/fix-pr/references/claude-launcher.md`); do not define or improvise any -workflow behavior here. diff --git a/targets/claude/commands/review-program.md b/targets/claude/commands/review-program.md deleted file mode 100644 index 2c8bee2..0000000 --- a/targets/claude/commands/review-program.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -description: Review any PR — code validation + PDF audit in one pass (read-only, no code changes) ---- - -# Reviewing PR: $ARGUMENTS - -Compatibility stub. The `review-program` skill shipped in this plugin is the real entry -point — current Claude Code gives a skill precedence over a same-named command, so this -file normally never runs. If it does run (older Claude Code versions), do exactly one -thing: invoke the `review-program` skill via the Skill tool, passing `$ARGUMENTS` -through unchanged, and follow it. The skill loads the canonical workflow -(`skills/review-program/references/workflow.md`) and the Claude adapter -(`skills/review-program/references/claude-launcher.md`); do not define or improvise any -workflow behavior here. diff --git a/targets/claude/hooks/hooks.json b/targets/claude/hooks/hooks.json index 9feae4a..2e6abf3 100644 --- a/targets/claude/hooks/hooks.json +++ b/targets/claude/hooks/hooks.json @@ -1,12 +1,12 @@ { - "description": "PolicyEngine plugin hooks - agent auto-selection and multi-zone basePath advisory", + "description": "PolicyEngine plugin hooks - model skill loading and multi-zone basePath advisory", "hooks": { "SessionStart": [ { "hooks": [ { - "type": "prompt", - "prompt": "POLICYENGINE AGENT AUTO-SELECTION: Detect if the current working directory contains a PolicyEngine repository.\n\nCheck for these repo patterns:\n- policyengine-us (or contains policyengine_us/)\n- policyengine-uk (or contains policyengine_uk/)\n- policyengine-core\n- policyengine-api\n- policyengine-app-v2\n\nIf in a PolicyEngine country model repo (policyengine-us or policyengine-uk):\nINJECT THIS INSTRUCTION: 'IMPORTANT: When spawning subagents for implementation work in this repo, use the specialized PolicyEngine plugin agents instead of general-purpose agents:\n\n| Task | Use Agent |\n|------|----------|\n| Implement variables/parameters | complete:country-models:rules-engineer |\n| Create tests | complete:country-models:test-creator |\n| Fix CI failures | complete:country-models:ci-fixer |\n| Push PR with formatting | complete:country-models:pr-pusher |\n| Review implementation | complete:country-models:implementation-validator |\n\nThese agents automatically load PolicyEngine skills, run make format before commits, and follow PE coding standards. Do NOT use general-purpose agents for policyengine-us/uk work.'\n\nIf not in a PolicyEngine country model repo: return empty/no injection.", + "type": "command", + "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/hooks/model-development-context.py\"", "timeout": 5 } ] @@ -18,7 +18,18 @@ "hooks": [ { "type": "prompt", - "prompt": "MULTI-ZONE ADVISORY: If this Write|Edit targets a Next.js zone-app config file (next.config.ts, next.config.mjs, next.config.js) AND the containing repo is NOT policyengine-app-v2 (the host), check whether the written content includes `basePath`.\n\nIf the file matches and `basePath` is absent from the content, emit an ADVISORY (do NOT block):\n\n 'ADVISORY: This next.config change does not set `basePath`. That is valid only for an intentional root-served multi-zone, where host rewrites map each public path to the zone root and `assetPrefix: \"/_zones/\"` namespaces _next assets. Single-path PolicyEngine zones should normally be path-mounted with a literal `basePath`. See the policyengine-tools skill → \"Multizone integration\". If this app is not a zone (standalone Vercel project, legacy iframe tool, non-zone utility), disregard.'\n\nOther cases (non-next.config files, next.config in policyengine-app-v2 itself, basePath present): return 'approve' with no message.\n\nThis is a reminder, not a gate — always approve, never block.", + "prompt": "MULTI-ZONE ADVISORY: If this Write|Edit targets a Next.js zone-app config file (next.config.ts, next.config.mjs, next.config.js) AND the containing repo is NOT policyengine-app-v2 (the host), check whether the written content includes `basePath`.\n\nIf the file matches and `basePath` is absent from the content, emit an ADVISORY (do NOT block):\n\n 'ADVISORY: This next.config change does not set `basePath`. That is valid only for an intentional root-served multi-zone, where host rewrites map each public path to the zone root and `assetPrefix: \"/_zones/\"` namespaces _next assets. Single-path PolicyEngine zones should normally be path-mounted with a literal `basePath`. See the policyengine-tools skill \u2192 \"Multizone integration\". If this app is not a zone (standalone Vercel project, legacy iframe tool, non-zone utility), disregard.'\n\nOther cases (non-next.config files, next.config in policyengine-app-v2 itself, basePath present): return 'approve' with no message.\n\nThis is a reminder, not a gate \u2014 always approve, never block.", + "timeout": 5 + } + ] + } + ], + "SubagentStart": [ + { + "hooks": [ + { + "type": "command", + "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/hooks/model-development-context.py\"", "timeout": 5 } ] diff --git a/targets/claude/hooks/model-development-context.py b/targets/claude/hooks/model-development-context.py new file mode 100644 index 0000000..c74fe8b --- /dev/null +++ b/targets/claude/hooks/model-development-context.py @@ -0,0 +1,49 @@ +"""Add country-model skill-loading context without an extra model call. + +Claude hook contract: https://code.claude.com/docs/en/hooks#sessionstart +This reminder does not itself load a skill or certify that a worker did so. +""" + +import json +from pathlib import Path +import sys + + +def main(): + event = json.load(sys.stdin) + name = event.get("hook_event_name") + if name not in {"SessionStart", "SubagentStart"}: + return + cwd = Path(event["cwd"]).resolve() + packages = ("policyengine_us", "policyengine_uk", "policyengine_canada") + if not any( + (root / package).is_dir() + for root in (cwd, *cwd.parents) + for package in packages + ): + return + context = ( + "This is a PolicyEngine country-model repository. Model implementation, " + "test-authoring and review roles require policyengine-model-development " + "loaded with the Skill tool in each worker's own context, followed by its " + "relevant references. Resolve the available installed skill name and follow " + "references/agent-loading.md: SKILLS_READY includes successful load evidence; " + "SKILLS_BLOCKED identifies an unavailable skill/tool before substantive work. " + "A parent load, dispatch instruction or agent type is not proof of a worker " + "load. The active workflow owns agent selection and stages; this reminder " + "does not add validators, fixers or pushers, or itself load any skills." + ) + print( + json.dumps( + { + "hookSpecificOutput": { + "hookEventName": name, + "additionalContext": context, + } + } + ) + ) + + +if __name__ == "__main__": + main() diff --git a/tests/pipeline/test_when_to_use_guide.py b/tests/pipeline/test_when_to_use_guide.py index f5da6b1..b5c96d1 100644 --- a/tests/pipeline/test_when_to_use_guide.py +++ b/tests/pipeline/test_when_to_use_guide.py @@ -93,7 +93,8 @@ def test_every_recommended_command_is_mentioned() -> None: def test_no_broken_command_references() -> None: """Every /command reference in the guide must resolve to a real command.""" guide_cmds = _slash_commands_in_guide() - catalog_cmds = _all_command_ids() + # Claude skills also expose slash commands; workflows need no duplicate command file. + catalog_cmds = _all_command_ids() | _all_skill_ids() # Filter for slash-command-looking tokens we intended as commands. Some # /... references in the guide are paths (e.g., `/tmp/...`) or URL paths. KNOWN_NON_COMMAND_PREFIXES = { diff --git a/tests/test_build_claude_wrapper.py b/tests/test_build_claude_wrapper.py index 5b0e77a..af64025 100644 --- a/tests/test_build_claude_wrapper.py +++ b/tests/test_build_claude_wrapper.py @@ -35,6 +35,9 @@ def test_build_claude_wrapper(tmp_path: Path) -> None: assert len(manifest["plugins"]) == expected_plugins == 8 for plugin in manifest["plugins"]: + skills = {Path(path).name for path in plugin.get("skills", [])} + commands = {Path(path).stem for path in plugin.get("commands", [])} + assert not skills & commands, "A compatibility command must not shadow a skill" assert plugin.get("source") == "./", f"{plugin['name']} missing source=./" assert "hooks" not in plugin, ( f"{plugin['name']} has a hooks entry; Claude Code rejects both hooks: null " @@ -45,6 +48,9 @@ def test_build_claude_wrapper(tmp_path: Path) -> None: assert (output_dir / "skills" / "policyengine" / "SKILL.md").exists() assert (output_dir / "skills" / "policyengine-us" / "SKILL.md").exists() assert (output_dir / "commands" / "create-pr.md").exists() + for name in ("encode-policy-v2", "review-program", "fix-pr"): + assert (output_dir / "skills" / name / "SKILL.md").is_file() + assert not (output_dir / "commands" / f"{name}.md").exists() assert (output_dir / "agents" / "country-models" / "rules-engineer.md").exists() assert (output_dir / "hooks" / "hooks.json").exists() assert (output_dir / "GENERATED_FROM").read_text().strip() == "test-sha" diff --git a/tests/test_review_automation.py b/tests/test_review_automation.py index 0c0398f..44b936f 100644 --- a/tests/test_review_automation.py +++ b/tests/test_review_automation.py @@ -143,6 +143,8 @@ def test_missing_checks_cannot_become_clean_approval(review, cause): assert result["status"] == "PARTIAL" assert result["severity"] == "COMMENT" assert result["gaps"] + assert result["confirmed_critical_ids"] == [] + assert result["confirmed_critical_count"] == 0 def test_unfinished_role_cannot_replace_previous_review(review): @@ -153,3 +155,60 @@ def test_unfinished_role_cannot_replace_previous_review(review): data["roles"][0]["status"] = "RUNNING" assert assemble(review).returncode != 0 assert all(path.read_text() == "Prior completed review" for path in outputs) + + +def test_carries_prior_ids_without_rewriting_and_allocates_new_ids(review): + root, data = review + prior = root / "prior.md" + prior.write_text("## C9 — Prior finding (OPEN)\n\nOriginal evidence.\n") + original_role = (root / "code.md").read_bytes() + data["prior_reports"] = ["prior.md"] + data["reserved_ids"] = ["C9", "C12"] # C12 was withdrawn in the baseline. + data["findings"][0].pop("id") + data["findings"].append( + { + "id": "C9", + "severity": "critical", + "status": "UNVERIFIED", + "path": "prior.md", + "heading": "C9 — Prior finding (OPEN)", + "addendum": "Required scenario premise remains unresolved.", + } + ) + assert assemble(review).returncode == 0 + result = json.loads((root / "pr-7-review-result.json").read_text()) + assert result["confirmed_critical_ids"] == ["C13"] + assert result["counts"]["critical"] == 2 + assert result["status"] == "PARTIAL" + assert (root / "code.md").read_bytes() == original_role + assert prior.read_text() == "## C9 — Prior finding (OPEN)\n\nOriginal evidence.\n" + full = (root / "pr-7-review-full-report.md").read_text() + assert "C9 — Prior finding (UNVERIFIED)" in full + assert "Required scenario premise remains unresolved." in full + + +def test_summary_stays_short_without_losing_full_report_evidence(review): + root, data = review + data["findings"] = [] + data["notes"] = ["Reused passing tests at reviewed head."] + assert assemble(review).returncode == 0 + assert ( + json.loads((root / "pr-7-review-result.json").read_text())["status"] + == "COMPLETE" + ) + data["findings"] = [ + { + "severity": "suggestion", + "path": "code.md", + "heading": "C1 — Selected report section", + } + for _ in range(30) + ] + data["gaps"] = [f"Required unresolved check {i}" for i in range(10)] + data["validation"] = "Long validation log\n" * 100 + assert assemble(review).returncode == 0 + summary = (root / "pr-7-review-summary.md").read_text() + full = (root / "pr-7-review-full-report.md").read_text() + assert len(summary.splitlines()) <= 20 + assert "S30" in full and "Required unresolved check 9" in full + assert data["validation"].strip() in full diff --git a/tests/test_review_program_snapshot.py b/tests/test_review_program_snapshot.py index 3d04b57..4043c22 100644 --- a/tests/test_review_program_snapshot.py +++ b/tests/test_review_program_snapshot.py @@ -72,6 +72,9 @@ def checkout(tmp_path: Path) -> dict[str, str]: gh.write_text( "#!/bin/sh\n" 'case "$*" in\n' + ' "repo view "*"--json url"*) printf "%s\\n" "$TEST_REMOTE_URL" ;;\n' + ' "repo view "*"--json defaultBranchRef"*) printf "main\\n" ;;\n' + ' *"pr view local"*) exit 1 ;;\n' ' *"--json url"*) printf "%s/pull/7\\n" "$TEST_REMOTE_URL" ;;\n' ' *"--json baseRefName"*) printf "main\\n" ;;\n' " *) exit 1 ;;\n" @@ -121,8 +124,9 @@ def snapshot_path(result: subprocess.CompletedProcess[str]) -> Path: return Path(result.stdout.splitlines()[-1]) -@pytest.mark.parametrize("local_diff", [False, True]) -def test_diff_and_snapshot_use_same_selected_commit(checkout, local_diff) -> None: +@pytest.mark.parametrize("mode", ["remote-pr", "local-with-pr", "local-without-pr"]) +def test_diff_and_snapshot_use_same_selected_commit(checkout, mode) -> None: + local_diff = mode != "remote-pr" repo = Path(checkout["WORKTREE_ROOT"]) (repo / "reviewed.txt").write_text("staged\n") git(repo, "add", "reviewed.txt") @@ -138,6 +142,7 @@ def test_diff_and_snapshot_use_same_selected_commit(checkout, local_diff) -> Non { **checkout, "LOCAL_DIFF": str(local_diff).lower(), + "PR_NUMBER": "local" if mode == "local-without-pr" else "7", } ) ) From c5bbac8e04b4033fe402c88f9837969f8391cd7b Mon Sep 17 00:00:00 2001 From: ZimingHua Date: Sat, 5 Sep 2026 22:17:50 -0400 Subject: [PATCH 2/3] Harden worker and reviewer contracts from the KS LIEAP and MO v6 runs Two benchmark runs under this branch's workflow exposed one failure class: delegated contexts doing model work outside the contract. Encode workers now use a no-delegation `model-worker` profile mirroring `review-worker`; both coordinators brief owners from one shared contract block and treat the coordinator's bounded test invocation as the run of record (a worker may self-check its owned files once). Launchers gain the compatibility-stub fallback, the nested-dispatch `name` rule and Bash timeout guidance. Review adjudication forbids post-report source probing and defines the adjudication/consolidation timing overlap. Encode gains canonical progress logs and timing keys. Benchmark notes record the MO v6 interruption and the Kansas LIEAP end-to-end run. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01A6rihVz3MtZQKCzzkCib35 --- bundles/complete.json | 4 +- bundles/country-models.json | 2 + skills/encode-policy-v2/SKILL.md | 12 +- .../references/claude-launcher.md | 43 +++++-- .../encode-policy-v2/references/workflow.md | 115 +++++++++++++++--- skills/review-program/SKILL.md | 11 +- skills/review-program/references/benchmark.md | 92 ++++++++++++++ .../references/claude-launcher.md | 55 ++++++--- skills/review-program/references/workflow.md | 102 +++++++++++----- skills/review-program/scripts/run_bounded.py | 7 +- .../agents/country-models/model-worker.md | 26 ++++ .../agents/country-models/review-worker.md | 23 ++++ .../claude/hooks/model-development-context.py | 5 +- tests/test_build_claude_wrapper.py | 16 +++ tests/test_review_bounded_command.py | 2 + 15 files changed, 429 insertions(+), 86 deletions(-) create mode 100644 targets/claude/agents/country-models/model-worker.md create mode 100644 targets/claude/agents/country-models/review-worker.md diff --git a/bundles/complete.json b/bundles/complete.json index c2633d0..b7a9ada 100644 --- a/bundles/complete.json +++ b/bundles/complete.json @@ -71,8 +71,10 @@ "./agents/country-models/edge-case-generator.md", "./agents/country-models/implementation-validator.md", "./agents/country-models/issue-manager.md", + "./agents/country-models/model-worker.md", "./agents/country-models/pr-pusher.md", "./agents/country-models/program-reviewer.md", + "./agents/country-models/review-worker.md", "./agents/country-models/rules-engineer.md", "./agents/country-models/structural-implementer.md", "./agents/country-models/test-creator.md", @@ -97,4 +99,4 @@ "./agents/report-logger.md", "./agents/shared/neutrality-reviewer.md" ] -} \ No newline at end of file +} diff --git a/bundles/country-models.json b/bundles/country-models.json index 02f5fcc..26ad899 100644 --- a/bundles/country-models.json +++ b/bundles/country-models.json @@ -42,8 +42,10 @@ "./agents/country-models/edge-case-generator.md", "./agents/country-models/implementation-validator.md", "./agents/country-models/issue-manager.md", + "./agents/country-models/model-worker.md", "./agents/country-models/pr-pusher.md", "./agents/country-models/program-reviewer.md", + "./agents/country-models/review-worker.md", "./agents/country-models/rules-engineer.md", "./agents/country-models/structural-implementer.md", "./agents/country-models/test-creator.md", diff --git a/skills/encode-policy-v2/SKILL.md b/skills/encode-policy-v2/SKILL.md index f3f1ef4..d73c206 100644 --- a/skills/encode-policy-v2/SKILL.md +++ b/skills/encode-policy-v2/SKILL.md @@ -29,8 +29,12 @@ Mandatory gates that no surface may skip: - Read all relevant rules and visually inspect tables, scans or ambiguous PDF evidence; share validated originals and extracts with the independent review. - Do not push through a red structural or quick-audit gate, or silently push failing tests. +- Workers never delegate; brief both owners from one shared contract block, and treat the + coordinator's single bounded test invocation as the run of record. - In local mode, make no GitHub writes or pushes; preserve the implementation worktree. - Keep new PRs draft and complete follow-up review after any review-fix round. +- Maximum two reviews: a second, incremental review follows repairs to confirmed + criticals from the first. Stop after round 2 with any remaining blockers reported. - Do not finish before the Phase 7 summary and canonical completion contract are satisfied. Surface adapters: @@ -54,8 +58,12 @@ Codex delegation mapping, when subagent use is available and authorized: the parent session's skill load supplies the worker's context. - Test-source analysis can overlap implementation; final tests use the published variable contract. Reuse owners for repairs. Workers never stage, commit, push or independently - sync/format the shared environment. + sync/format the shared environment. They do their own work without helper or nested + agents, run at most one bounded self-check of their owned tests, and report a + `CONTRACT MISMATCH` instead of relocating cases; the coordinator runs the tests of record. - Run review-program in a fresh review coordinator context with its canonical local or - published arguments, raw source manifest and scope. Leave capacity for its reviewers. + published arguments, raw source manifest, captured head and scope. Require that + coordinator's own model-development load. Leave capacity for its reviewers and consume + its completed decision directly for repair routing, without a second review by the encoder. - Use only supported runtime capabilities. When delegation is unavailable, perform the implementation roles directly while preserving independent review context and gates. diff --git a/skills/encode-policy-v2/references/claude-launcher.md b/skills/encode-policy-v2/references/claude-launcher.md index 74db8a2..2251c87 100644 --- a/skills/encode-policy-v2/references/claude-launcher.md +++ b/skills/encode-policy-v2/references/claude-launcher.md @@ -7,17 +7,25 @@ adding stages, audits, test commands or approval prompts. - The workflow is registered only as a skill, without a same-named command stub. Resolve its installed base directory from the Skill result. Pass the installed review-program directory and canonical paths to the fresh review coordinator; do not search the - filesystem or recursively invoke a compatibility stub. + filesystem or recursively invoke a compatibility stub. If the Skill result is an old + compatibility stub (a session registry that predates the stub removal), do not invoke + it again: take the plugin root from a sibling skill's reported base directory (for + example model-development's), read `skills/encode-policy-v2/SKILL.md` and its + references from there, and record `stub-resolved` in the run state. - Use the runtime's user-question tool for unresolved material scope/reuse/repair decisions. Batch related questions within its actual capacity; honor prior decisions. - The coordinator performs research, requirements, coverage/validation, Git and reporting. It may inspect code and evidence directly. Do not delegate those routine steps merely to preserve a summary-only context rule. -- For the substantive `implementer` and `test-author`, use `general-purpose` agents with - the full canonical role, exact owned paths, artifact contracts, relevant skill sections, - concrete `WORKTREE_ROOT`, `WORKTREE_ID`, `RUN_ROOT`, `PREFIX` and local/publication mode. - A specialized standalone agent is not required and must not add its own audits, - dependency sync, formatting, test suites, commits or pushes to this role contract. +- For the substantive `implementer` and `test-author`, launch the installed `model-worker` + profile (Skill access, no delegation or web tools) with the full canonical role, exact + owned paths, artifact contracts, relevant skill sections, concrete `WORKTREE_ROOT`, + `WORKTREE_ID`, `RUN_ROOT`, `PREFIX` and local/publication mode. If that profile is not + installed, use `general-purpose` with an explicit no-delegation instruction and record + the substitution. A specialized standalone agent is not required and must not add its + own audits, dependency sync, formatting, test suites, commits or pushes to this role + contract. Give both workers the same shared contract block; do not paraphrase it per + worker. - Retain the same workers for repairs. Start test-source analysis while implementation runs when independent; finalize tests only against the actual variable contract. Use runtime-supported messaging, or coordinator handoffs when unavailable. Never assume @@ -28,12 +36,25 @@ adding stages, audits, test commands or approval prompts. successful Skill result in `SKILLS_READY`; a `Load skills:` list alone does not load anything. If the selected agent lacks Skill access or the skill is unavailable, apply `SKILLS_BLOCKED` instead of silently using a general-purpose agent without it. -- Wait for completion notifications with the canonical progress/recovery bounds. Routine - progress can arrive by message or artifact; a partial report is not DONE. If delegation - is unavailable, perform the roles directly, retaining independent review context. +- Wait for completion notifications with the canonical progress/recovery bounds. Watch + each worker's `{PREFIX}-encode-progress-{role}.log`; routine progress can also arrive + by message or artifact; a partial report is not DONE. If delegation is unavailable, + perform the roles directly, retaining independent review context. +- Run the test runner through `run_bounded.py --seconds 600` with the Bash tool's + `timeout` set above that deadline (milliseconds, up to 600000) and output redirected + to the log; the default two-minute Bash limit kills a program suite mid-run and + discards its status. Pass the same instruction to workers for their single self-check. - Invoke review-program in a fresh `general-purpose` coordinator with its exact local or - published arguments, approved scope and source manifest. It owns its reviewer topology - and artifact contracts. Leave sufficient runtime capacity for those reviewers. + published arguments, approved scope, captured head, source manifest and runtime + constraints. Require that coordinator to load both review-program and model-development + before substantive model work. The canonical review workflow supplies its reviewer + tasks; do not append a bespoke audit checklist. Leave sufficient capacity for its two + reviewers. Consume its completed decision directly for repair routing, without another + encoder verification pass. Time dispatch through acceptance of the returned result. + Tell it that nested dispatches must omit the Agent `name` parameter: a delegated + context cannot create named teammates, the call is rejected, and each retry costs + about a minute. Nested reviewers are therefore unnamed; their role identity comes from + the progress-log path they are given. - Only the encoding coordinator stages, commits, pushes and writes GitHub state. In `--local`, it may make local implementation/review-fix commits but never creates an issue/PR, pushes or posts comments. Otherwise use explicit verified targets and the diff --git a/skills/encode-policy-v2/references/workflow.md b/skills/encode-policy-v2/references/workflow.md index 4c4de89..3de9142 100644 --- a/skills/encode-policy-v2/references/workflow.md +++ b/skills/encode-policy-v2/references/workflow.md @@ -49,8 +49,13 @@ sync/install dependencies, or edit unowned files. The coordinator formats owned once before validation and again only after subsequent edits require it. Each worker writes its required artifact and returns -`DONE — wrote {artifact} ({status}; {elapsed})`. Send progress at stage changes and at -least every two minutes. Use bounded waits and actual tool capabilities; do not require +`DONE — wrote {artifact} ({status}; {elapsed})`. Each worker appends ` ` +to `{RUN_ROOT}/{PREFIX}-encode-progress-{role}.log` at stage changes and at least every +two minutes, and logs before starting a long generation step (for example a large +parameter table) so a silent write is not mistaken for a stall; that log is the only +file the coordinator watches. Workers do the assigned work themselves: no helper, +explorer, verifier or nested worker agents, whose contexts would lack the loaded skills. +Use bounded waits and actual tool capabilities; do not require particular team/message/monitor tools. Yield for completion notifications; never use five-minute shell sleeps. If polling is necessary, use interruptible waits of at most 60 seconds and resume on completion. After five minutes without observable progress, @@ -88,7 +93,8 @@ RUN_ROOT="/tmp/policyengine-command-runs/$WORKTREE_ID" mkdir -p "$RUN_ROOT" ``` -Record `BASE_REPO=PolicyEngine/policyengine-us`, its URL and default branch, current HEAD, +Record `BASE_REPO=PolicyEngine/policyengine-us`, its URL and default branch (from the base +repository's metadata, not the local clone's branch name), current HEAD, worktree root/ID, args, workflow revision/diff, branch and publication mode in `{RUN_ROOT}/{PREFIX}-encode-run-state.md`. Inspect status and worktree ownership before branch operations. Never force-checkout another worktree's branch, move its files, or @@ -102,7 +108,8 @@ not unaffected research. A workflow-contract change requires reassessing old com markers; legacy role names alone do not establish that the new gates passed. Use the review-program skill's `scripts/run_bounded.py` for networked Git/GitHub commands -with a 60-second deadline. Resolve that installed skill directory as `REVIEW_SKILL_ROOT`. +with a 60-second deadline and for test-runner invocations with a 600-second deadline. +Resolve that installed skill directory as `REVIEW_SKILL_ROOT`. A failed fetch/read is not an empty result; retry a transient setup failure once, then report the blocker. Scope GitHub reads/writes explicitly to `BASE_REPO`. @@ -211,6 +218,13 @@ periods, inputs/parameters and requirement IDs. Verify names exist. Tell the tes when the contract is stable and explicitly identify later changes. Do not make it infer names from an informal coordinator summary. +Whenever the coordinator briefs both owners on the same behavior, for initial work or a +repair, it states each behavioral contract once in one shared contract block copied +verbatim into both briefs: which variable owns which computation, where a deduction, +cap or gate applies, and which public variables stay unchanged. Check that block against +the existing helper contracts before sending it; two briefs written separately are how +the owners end up building and testing different placements. + ### 3B. Test owner The test-author reads the approved evidence and contract, and owns unit, boundary and @@ -231,6 +245,12 @@ including directly affected existing regression tests. Do not change partner con expectations just to make tests pass. Integration into `household_state_benefits.yaml` requires an explicit scope decision; do not silently enable it. +Pin expectations only on the public variables named in the shared contract block, at +the level where that block places each rule. If a case fails because the rule sits in a +different variable than the brief said, report `CONTRACT MISMATCH` with the case names +to the coordinator and stop; do not rerun the set, relocate cases or change values +unprompted. The coordinator rules once and the affected owner applies the ruling. + ### 3C. Coverage gate The coordinator reconciles requirements against actual implementation/test paths and @@ -265,6 +285,16 @@ then the same directory again solely to satisfy two stage names. Add an extra di pass only when it covers additional relevant tests. `--full-validation` adds one broader state/package suite, not one per repair cycle. +The coordinator's invocation is the run of record. A worker may run its owned test files +at most once per task as a self-check before reporting DONE, in one bounded invocation; +it never loops over files one at a time, repeats an unchanged set to recover lost +output, or runs another owner's files. Every invocation uses the bounded helper with a +600-second deadline and a tool timeout above it, writes combined output to a log under +RUN_ROOT, and reads back the summary line and failures. Do not pipe the runner through +`tail`, detach it, or rely on a default two-minute tool limit; each loses the exit status +and forces a repeat. Record the number of runner invocations and their total time in the +CI status so repeated runs stay visible. + Classify failures before editing: mechanical, implementation defect, test defect, policy ambiguity or environment. Send the affected items to their existing owner; never change expected values only to match output. Use at most two repair batches per validation phase; @@ -275,9 +305,11 @@ not a reason to omit a necessary check. Record `{PREFIX}-ci-fixer-status.md`: PASS/BLOCKED, exact commands/paths, counts, tested HEAD plus working-file hashes, environment, elapsed time and unresolved causes. Reuse a -passing result only while its code, parameter dependencies, tests and environment match. -Formatting, conflict resolution and later fixes invalidate affected checks. Do not repeat -unchanged successful tests in the pusher or reporting step. +passing result while tested behavior, parameter dependencies, tests and environment match. +Formatting-only changes do not invalidate a passing test result, even when file hashes +change: record the formatter and updated hashes without rerunning tests. Behavior-changing +edits or conflict resolutions invalidate affected checks. Do not repeat unchanged successful +tests in the pusher or reporting step. For unresolved test failures, present causes and options together: guidance, stop, or an explicitly accepted known failure. Preserve such consent and describe accepted failures @@ -327,6 +359,13 @@ worker capacity; don't inherit a summary-only restriction. Pass the resolved ins skill and checks its returned body, rather than searching for the plugin or reinvoking a same-named compatibility command. +Keep this handoff mechanical: installed skill paths, arguments, captured head, approved +scope, raw source manifest and runtime constraints. The review workflow supplies the +roles' tasks. Do not compose another audit checklist or turn every encoder assumption +into a mandatory review question. Pass a specific unresolved scope/source question when +one actually exists. The fresh review coordinator loads model-development before any +substantive country-model work, as do its reviewers. + - Published work: `PR_NUMBER --local --prefix PREFIX --sources MANIFEST`. - Local-only work: `--local-diff --prefix PREFIX --sources MANIFEST` (no PR required). @@ -335,7 +374,11 @@ follow-ups. Pass `--600dpi` only when requested. The review has its own bounded budget; source reuse should avoid reacquiring unchanged material. A PARTIAL review does not automatically restart either research budget or become a successful encoding run. -Read the summary, result JSON and relevant full findings. Use `confirmed_critical_ids` +Review-program owns the review decision. The encode coordinator checks that the returned +artifacts identify the intended head, include role completion/skill-load evidence, and +state COMPLETE or PARTIAL. Read the summary, result JSON and the selected findings to +route repairs; do not re-adjudicate them, fetch their sources again, rerun their +diagnostics, or add a verification pass before dispatch. Use `confirmed_critical_ids` from `{PREFIX}-review-result.json` for repair dispatch, not `counts.critical` or the total still-open count, which can include UNVERIFIED claims. For an older report without that field, inspect finding states explicitly; missing metadata is not zero criticals. @@ -348,13 +391,28 @@ question remains unresolved, report it without starting a speculative model repa repeating a full review. Do not widen the approved year/program scope to clear incidental historical observations. +Do not start another fix/review round solely for noncritical findings. With zero confirmed +criticals, return the completed review result and any PARTIAL gaps; additional work needs +an explicit user request. The maximum round count is a ceiling, not a quota. Keep optional +improvements visible rather than automatically extending the encoding run to clear them. + Assign confirmed criticals to the existing implementer and/or test-author, only when that -owner has actual work. Keep writes disjoint and share changed contracts; don't spawn an -empty fixer merely to write NO-ISSUES. Track finding IDs and actions in +owner has actual work. Keep writes disjoint and share changed contracts through the +Phase 3A shared contract block, copied verbatim into both repair briefs; when the +implementer's inspection changes a placement, it updates the implementation manifest and +the test-author finalizes placement-sensitive cases only after that update. Don't spawn +an empty fixer merely to write NO-ISSUES. Track finding IDs and actions in `{PREFIX}-checklist-{vars,tests}-rN.md`, only for participating owners; the coordinator merges these into `{PREFIX}-checklist.md`. Scope conflicts require an explicit decision, not a silent policy expansion. +Pass each finding ID and its existing evidence to its fix owner without rewriting the +review into another proof or a speculative replacement design. The owner inspects the +affected code to implement the repair. If that reveals a concrete contradiction in the +finding, return that ID and evidence to the review owner for one targeted resolution; +neither the encoder nor fixer starts another general review. Test planning can overlap +the repair when the changed contract is already specified. + After the first repair batch, format changed owned paths, run the affected test set and structural checks once, update coverage/status/body, and commit a review-fix round. Apply the Phase 4 failure gate; push only in publication mode. Follow-up review is mandatory: @@ -362,10 +420,12 @@ use the same local/published identity with `--incremental {PREFIX}-review-full-r which review-program preserves before replacing outputs. Recheck fixes, dependencies and unresolved findings, not every already-reviewed rule. -If confirmed criticals remain after follow-up, ask whether to attempt one final fix -round or stop with the remaining issues. Respect an existing decision. A final fix must -receive a final incremental review. Maximum: three reviews, two review-fix rounds. No -new default CI-fixer, pusher or reporting workers during these rounds. +Maximum: two reviews and one intervening review-fix batch. Round 2 runs only after +round 1 has confirmed criticals and those findings receive repairs; it checks the repaired +head incrementally. If confirmed criticals or required evidence gaps remain after round 2, +stop and report them explicitly. Do not start a second fix batch or a third review, and do +not claim completion with unresolved blockers. Further work requires a new user request. +No new default CI-fixer, pusher or reporting workers during these rounds. ## Phase 7: Final status and benchmark @@ -380,20 +440,37 @@ final report; and completed or explicitly skipped independent review. Publicatio also requires the intended issue/PR and successful push. A blocked step stays resumable without reporting success. Never infer completion from artifact existence alone. -For benchmarks, record acquisition, requirements/scope, implementation, test authoring, -validation/repair, review, reporting/Git and total wall time. Separate user waits and -workflow development from active encoding, and don't add overlapping role durations. +For benchmarks, append clock-generated ` start|end` markers to +`{RUN_ROOT}/{PREFIX}-encode-timing.log` at every phase boundary, review dispatch and +accepted result, and around user waits; summarize them in +`{RUN_ROOT}/{PREFIX}-encode-timing.json` with these keys so runs stay comparable: +`setup_seconds`, `research_seconds` (with `acquisition_window_seconds`), +`spec_scope_seconds`, `user_wait_seconds`, `implementation_seconds`, +`test_authoring_seconds` (concurrent with implementation, never summed with it), +`validation_repair_seconds` (with `test_invocations` and `test_runner_seconds`), +`commit_seconds`, `review_round_N_seconds` (dispatch through accepted result), +`repair_round_N_seconds`, `total_wall_seconds` and `active_seconds` (wall minus user +waits and interruptions). Separate user waits and workflow development from active +encoding, and don't add overlapping role durations. Record interpreter startup, actual test time, repeated calls, blocked fetches, fixes, misses and withdrawn findings where observed. Report code/source hashes and environment so comparisons use equivalent inputs. Real implementations establish workflow behavior; helper tests and saved-report replays do not establish policy accuracy or speed gains. +For every review round, the caller records a clock timestamp immediately before dispatch +and another when it has checked the returned artifact identity/status and can route fixes. +Report this whole interval as review time, including dispatch, skill loading, reviewers, +consolidation, cleanup and return handoff. Reviewer-only time is a breakdown, never the +headline review duration. Preserve interruption/recovery intervals within that wall time +and identify them separately. Do not claim the integrated workflow is faster until an +actual encode-to-review invocation completes under the changed workflow. ## Artifact ownership All `{PREFIX}-*` paths are under RUN_ROOT. The coordinator maintains the run state, research/spec/scope, source manifest, coverage/validator/checkpoint/CI status, PR body, -final report and merged fix checklist. The implementer owns the implementation manifest; -the test-author owns the test manifest. Fixers own only their per-round checklist. +final report, merged fix checklist and timing log/summary. The implementer owns the +implementation manifest; the test-author owns the test manifest; each worker owns its +own progress log. Fixers own only their per-round checklist. Review-program owns its `review-*` artifacts and temporary review snapshot cleanup. These artifact names preserve caller compatibility; legacy per-stage agent names are not requirements to spawn separate workers. Never commit local research or remove another diff --git a/skills/review-program/SKILL.md b/skills/review-program/SKILL.md index 048b7e5..13de25a 100644 --- a/skills/review-program/SKILL.md +++ b/skills/review-program/SKILL.md @@ -31,6 +31,12 @@ canonical workflow resolves the base repository and reviews local HEAD without a Mandatory completion gate: - Default to policy/source and code/test reviewers; consolidate their findings directly. +- Reviewers do their own investigation and never delegate helper or verification tasks. + Use the surface adapter's reviewer profile; read-only model work still requires skills. +- Reviewers own finding validation. The coordinator resolves specific conflicts and + assembles the result; calling workflows route repairs without reviewing it again. +- For country-model work, the coordinator and each reviewer load model-development in + their own contexts before substantive work and supply the canonical loading evidence. - The review is incomplete until `{RUN_ROOT}/{PREFIX}-review-full-report.md` and `{RUN_ROOT}/{PREFIX}-review-summary.md` exist, with `{RUN_ROOT}/{PREFIX}-review-result.json` for confirmed-critical repair dispatch. @@ -48,8 +54,9 @@ Surface adapters: Delegation mapping (when subagent use is available and authorized): -- Map every role in the canonical Roles table to a `worker` when it writes report or - artifact files, or an `explorer` for read-only codebase questions. +- Map the two substantive reviewer roles to workers with skill access. Where supported, + remove delegation tools from those workers. They perform read-only dependency tracing + themselves rather than creating additional explorers or reviewers. - Pass concrete `RUN_ROOT`, `WORKTREE_ID`, `PREFIX`, and (from Phase 1) `SNAPSHOT` values and the role's task spec from the canonical workflow to every subagent; name the role's skills explicitly in the subagent prompt — do not assume a worker infers diff --git a/skills/review-program/references/benchmark.md b/skills/review-program/references/benchmark.md index c443c8e..6252386 100644 --- a/skills/review-program/references/benchmark.md +++ b/skills/review-program/references/benchmark.md @@ -83,3 +83,95 @@ scenario decision. They do **not** establish full-review accuracy, successful pa dispatch under load, or a new end-to-end runtime. The final narrowed adjudication wording and overall latency still need the next real-PR benchmark. Do not report replay time as review time or this scenario check as a third MO review. + +## MO LIHEAP v3 integrated run + +The next local run used workflow `2e35b26` and implementation head +`71731ce7625ebff39aad0982900b57745712de3c`. Its first encode-to-review interval was +**30m50s** from caller phase markers. Policy and code roles took 10m05s and 13m30s +concurrently; the review coordinator's post-role adjudication span was 11m13s, including +an operator pause/resume to correct its missing model-development load. The coordinator +also investigated historical sources; the encoder then verified findings again before +dispatching fixes. The report's earlier ~28-minute figure omitted part of the caller +handoff and was recorded before cleanup finished. Use final runtime markers instead. + +This was an interrupted benchmark, with two earlier CLI lifecycle failures outside that +review interval. It does not demonstrate unattended completion or a speed improvement. +The resulting simplification removes routine coordinator revalidation and encoder +re-adjudication, retaining targeted resolution of concrete conflicts. Its end-to-end +runtime was subsequently measured below; packaging tests cannot establish that it meets +the 10–15 minute target. + +## MO LIHEAP v4 bounded handoff + +The same initial implementation head and ten original sources, without prior findings, +were reviewed using `2e35b26` plus the local ownership/formatting changes (patch SHA256 +`82abf245d7051b8c15d6135b1089cdf883adae426697c2aa9adbbaeb50a66b07`). The actual +encode Phase 6 invocation stopped after accepting the first review, before repairs. +Caller review time was **28m29s**; the entire CLI invocation took **31m25s**. Policy and +code Agent lifetimes were 9m38s and 15m43s concurrently. Marked adjudication took 4m13s, +assembly/cleanup 2m10s, and subsequent reporting/return/acceptance another 2m05s. + +All four model-working contexts returned their own model-development Skill bodies. +The run was uninterrupted, but still missed the timing target. The code reviewer lost +the first 107-case suite's exit status through shell backgrounding, then repeated the +unchanged suite solely to capture it. The coordinator sent two concrete conflicts to the +original policy reviewer, but subsequently reopened code and a source page beyond those +questions. The no-routine-revalidation instruction was therefore not fully followed. + +The result was PARTIAL with three confirmed critical IDs; these dispositions have no +independent correctness score. V3 required operator recovery, V4 used a fresh native +session, and machine load was uncontrolled. The elapsed difference is not a controlled +speed gain. This run establishes remaining overhead, not a solved performance problem. + +## MO LIHEAP v5 two-review gate + +The next frozen candidate removed the adapter's contradictory requirement to reopen +every critical's evidence, shortened reviewer prompts, replaced diagnostic quotas with +coverage-driven checks, and retained subprocess exit status. On the same initial head, +the first caller review interval was **18m39s**; complete CLI wall time was **21m31s**. +Policy/code Agent lifetimes were 8m33s/10m57s concurrently. One named clarification took +1m26s overall and assembly/cleanup took 2m17s. The 107-case suite ran once successfully; +an unsupported command separator was corrected before that execution. + +The workflow stopped after zero returned confirmed criticals, exercising the early-stop +condition rather than forcing two reviews. However, a finding described wrong eligibility +and payment while assigning noncritical severity because of the small population. That +is inconsistent with the severity rubric and undermines the repair gate. The subsequent +severity clarification was not in this candidate. First-round timing is established; +review quality and the conditional second-round runtime still require validation. + +## MO LIHEAP v6 interrupted two-round benchmark + +Workflow `2e35b26` plus the frozen local patch (SHA256 +`607240a5fd1dbd0b4d0250e7aa2a121f2e4337a00c7e364dd187968c9caa3114`) ran the actual +Phase 6 with conditional repair on the same initial head `71731ce7`. Round 1 took +**21m30s** from caller dispatch to accepted result (reviewers 13m47s concurrently; one +two-question clarification 1m56s) and returned PARTIAL with two confirmed criticals. The +repair batch took **23m42s**: the implementer finished in 4m14s, but the two repair briefs +placed the child-support deduction in different variables, so three test cases failed, the +coordinator ruled, the test author relocated them and re-ran every file, and the program +suite executed about three times over. Roughly 13 of those 24 minutes were runner time, +including one per-file loop killed by the default two-minute tool limit. The incremental +round 2 was interrupted after 11m54s when its code reviewer spawned an Explore agent for +dependency tracing without a model-development load. The two-round timing objective is +therefore not established. The `review-worker` and `model-worker` profiles, the shared +contract block and the single-self-check test rule were added afterwards and have no +native run yet. + +## Kansas LIEAP local encode run + +The same workflow revision ran end to end in `--local` mode on a new program (Kansas +LIEAP: 15 variables, 11 parameters including two 320-cell benefit matrices, 131 tests). +Total wall time was **66m00s**, active time 59m00s after excluding a 7m00s user wait on +four batched scope questions: setup 1.7 min, research 6.8 (network window 4.6), spec and +scope 1.8, implementation 16.1 concurrent with test authoring 19.0, validation with two +repair batches 8.7 (three runner invocations, 2.6 min), commit 0.1, and review 22.1 from +dispatch to accepted result (reviewers 15.2 concurrently). The review returned COMPLETE +with zero confirmed criticals, so no second round ran. All five model-working contexts had +transcript-verified Skill loads. Both coordinators received a compatibility stub from an +older session registry and read the canonical files instead, and the nested review +coordinator lost about two minutes to two rejected named dispatches before omitting the +`name` parameter. Neither reviewer delegated. This establishes a complete local encode +under the workflow, not a controlled comparison with the MO runs, which used a different +program, model and machine state. diff --git a/skills/review-program/references/claude-launcher.md b/skills/review-program/references/claude-launcher.md index dcd1386..452504e 100644 --- a/skills/review-program/references/claude-launcher.md +++ b/skills/review-program/references/claude-launcher.md @@ -8,27 +8,47 @@ to Claude Code; it adds no review stages or completion gates. - **Entrypoint**: this workflow is registered as a skill, without a same-named command stub. Check that Skill returns this entrypoint and resolve `REVIEW_SKILL_ROOT` from its reported base directory. Pass that path to workers; never use a filesystem-wide search - or recursive Skill invocation to recover a compatibility stub. + or recursive Skill invocation to recover a compatibility stub. If an older session + registry returns the stub instead, read SKILL.md and the references from the + `REVIEW_SKILL_ROOT` the caller passed (or the sibling `skills/review-program` of a + successfully loaded skill's base directory) and record `stub-resolved` in the run state. - **Questions**: use `AskUserQuestion` for missing/ambiguous PR identity or a posting decision. Honor decisions already provided; review can finish before asking to post. -- **Delegation**: launch `general-purpose` agents for the canonical `policy-reviewer` +- **Delegation**: launch the installed `review-worker` profile for the canonical `policy-reviewer` and `code-reviewer` in one parallel tool batch as soon as the snapshot exists, before writing the scope brief; send the brief's questions afterwards with `SendMessage`. Use the active `Agent`/delegation tool's actual schema; do not pass `run_in_background` or `team_name` - unless it supports them. Each prompt includes its full canonical task, exact - snapshot/diff/PR-body/report paths, its progress-log path, concrete `WORKTREE_ROOT`, - `WORKTREE_ID`, `RUN_ROOT`, `PREFIX`, `SNAPSHOT`, source budget, the context rules - (grep extracts, one test invocation, summary-only test output) and `Load skills:` - entries. Resolve installed skill names by suffix, never by assuming the `complete:` - namespace. -- **Model-development loading**: country-model reviewers invoke the resolved installed + unless it supports them. Write shared paths, scope, runtime, source budget and measured + review start once in the run state. Use short role prompts pointing to that file and + the canonical role/finding sections, with each role's output/progress paths and resolved + skill names. Workers read those sections before work; do not transcribe the workflow + into separate multi-page prompts. Resolve installed skill names by suffix, never by + assuming the `complete:` namespace. + This thin profile retains Skill access and excludes Agent/Task delegation tools. Use + it for both initial and incremental reviewers. Do not substitute Explore or a generic + agent with delegation access. If unavailable, report the missing installed profile; + the coordinator may perform that role directly after its own required skill load. + Never pass the Agent `name` parameter from a delegated context (for example when this + coordinator was itself spawned by encode-policy-v2): named teammates cannot be nested, + the call is rejected and each retry costs about a minute. Unnamed reviewers are + identified by their progress-log path. +- **Test runs**: the code reviewer invokes the runner once through + `run_bounded.py --seconds 600` with the Bash tool's `timeout` set above that deadline + (milliseconds, up to 600000) and output redirected to its log; the default two-minute + Bash limit kills a program suite mid-run and discards its status. +- **Model-development loading**: the country-model review coordinator and reviewers invoke the resolved installed skill with the `Skill` tool in their own context, then read the relevant references. Require canonical `SKILLS_READY` evidence before accepting their work. A worker without Skill access or the required installed skill returns `SKILLS_BLOCKED`; the skill list in its prompt is not proof of loading. -- **Agent contracts**: use these general-purpose agents rather than specialized - document-collector/program-reviewer/validator agents whose standalone routines add - overlapping work. Reviewers do not create nested teams or delegate verification. +- **Decision ownership**: reviewers validate their findings; the coordinator consolidates + their completed evidence directly. Only a named missing premise or material conflict + triggers targeted adjudication. Do not add coordinator source checks or diagnostic + reruns for every critical, or pass the result back for an encode-level verification. +- **Agent contracts**: `review-worker` supplies only tool restrictions and the canonical + role reference. Do not substitute document-collector/program-reviewer/validator agents + whose standalone routines add overlapping work. Reviewers do not create nested teams + or delegate verification, including read-only dependency tracing. Do not require `TeamCreate`; use it only if available and required by that runtime. - **Completion**: wait for background completion notifications. The only file the coordinator watches is each role's `{PREFIX}-review-progress-{role}.log`: check it when a @@ -38,9 +58,10 @@ to Claude Code; it adds no review stages or completion gates. a partial report as finished. The coordinator reads the reports and writes both final outputs. Use completion notifications; do not implement waits with multi-minute shell sleeps. The liveness threshold is not the polling interval. -- **Adjudication**: only for the specific material uncertainty allowed in Phase 5, - launch a general-purpose agent with the remaining source budget and the disputed - question. No automatic verifier per finding, source, page or parameter. +- **Adjudication**: send the specific material uncertainty allowed in Phase 5 to the + original reviewer first. Use one additional reader only if that targeted resolution + still needs independence; that reader also uses `review-worker`. No automatic verifier + per finding, source, page or parameter. - **Coordinator reads**: the diff, code, source evidence and findings are available - to the coordinator as needed. There is no summary-only context restriction here. Before - assembly, open each CRITICAL's evidence artifact once, per the canonical Phase 5 check. + to the coordinator for a named missing premise or material conflict. Completed, + evidenced findings go directly to assembly without reopening each critical's evidence. diff --git a/skills/review-program/references/workflow.md b/skills/review-program/references/workflow.md index 8961d26..00fde64 100644 --- a/skills/review-program/references/workflow.md +++ b/skills/review-program/references/workflow.md @@ -9,9 +9,16 @@ editing code. Default to two substantive reviewers: policy/sources and code/test The coordinator may read the diff, source index, code and findings. It resolves scope, provides inputs, consolidates results and handles the user; no separate agents are needed for context analysis, file listing, verification planning or report assembly. Reviewers -own investigation and validation of their findings. Use another reader only for a specific +own investigation and validation of their findings. Their completed, evidenced findings +go directly to consolidation; neither the review coordinator nor a calling encode/fix +workflow performs a second routine verification. Use another reader only for a specific material disagreement or uncertainty, not automatically for every flag or citation. +In country-model reviews, the coordinator loads model-development in its own context +before substantive work and records the same loading evidence required of its reviewers. +Coordinator status is not an exemption from the loading contract. Read only the references +needed for the assigned work; loading does not add a coordinator audit stage. + Do not edit tracked source, switch existing branches, commit, push or apply fixes. Use a disposable detached snapshot and write reports, downloads, renders and diagnostic scripts under `RUN_ROOT`. Run tools in read-only modes; put test caches outside the snapshot and @@ -36,6 +43,14 @@ unbounded external call. If the work cannot be finished, consolidate a PARTIAL r with the missing checks identified. Never keep waiting indefinitely for an optional source search. +Budget each complete review for under 20 minutes, with 25 minutes as the outer target, +including setup, reviewers, adjudication, cleanup and caller acceptance. Record the start +once and pass it to both reviewers. At 17 elapsed minutes, finish current checks and write +the role reports; start no optional diagnostics or source searches. Reserve the remaining +time for named disputes and assembly. Unfinished required checks remain explicit PARTIAL +gaps; neither drop them nor call a time-limited review complete. A target overrun is a +measured workflow failure to report, not time to subtract from the headline. + If delegation is unavailable, execute the roles directly with the same scope and outputs. An encoding implementation still needs an independent review context; reuse raw sources, not an implementer's conclusions as proof of correctness. @@ -299,7 +314,9 @@ parameters, tests or source sections, not the whole diff or PDF count; repetitiv fixtures alone do not justify extra policy reviewers. Record the actual partition and reason. Split the policy reviewer by source group and the code reviewer by variable group; state why, partition ownership and avoid reading the same whole -program in every role. Do not spawn nested reviewers. +program in every role. Do not spawn nested reviewers or helper/explorer agents for +dependency tracing; a reviewer traces dependencies itself, since any spawned context +would do model work without the loaded skills. Load only references needed for the actual task, not every model-development document; read a reference's relevant section, not the whole reference set. For country-model review, each reviewer first loads the model-development entrypoint @@ -328,11 +345,16 @@ Code reviewer: inspect behavior, entity/period/vectorization correctness and mea coverage. Trace suspicious cases through dependencies. Run the changed tests and the directly relevant regression tests in one runner invocation (pass every path to the same command; each invocation pays the model's import cost), writing full output to a log -under `RUN_ROOT` and reading back only the summary line and failures. Add a small +under `RUN_ROOT` and reading back only the summary line and failures. Use +`scripts/run_bounded.py --seconds 600 COMMAND ...` with combined stdout/stderr captured +in that log and a tool timeout longer than the subprocess deadline. The wrapper records +exit status and elapsed time on the first execution. Do not detach with `nohup` or shell +`&`, or pipe through `tail` and lose the runner's status. Add a small reproduction when useful. If the environment is unavailable, report tests NOT RUN; do not install dependencies or repeat a broad suite just to produce a review. Existing CI -and local tests are separate evidence. Reuse a test result only for unchanged tested -inputs/dependencies/environment; retest after changes. Check the repository's actual +and local tests are separate evidence. Formatting alone does not require a test rerun; +retain the passing result with its formatter/hash provenance. Reuse results for unchanged +tested behavior, dependencies and environment; retest after substantive changes. Check the repository's actual changelog/format conventions, not a universal country-model template in every repo. An existing interpreter with the snapshot on `PYTHONPATH` is acceptable when `uv run` would install/sync dependencies. Confirm imports resolve to the snapshot. Set @@ -340,12 +362,13 @@ would install/sync dependencies. Confirm imports resolve to the snapshot. Set (for example, `-o cache_dir="$RUN_ROOT/$PREFIX-review-pytest-cache"`). When the diff changes who is eligible or how much they receive, the code reviewer checks -affected cases through to the final benefit, subtraction or tax result: at least one case -per household shape the changed tests use, plus one composition those tests do not cover -(for example a second tax unit in the same SPM unit, a non-parent adult, or a swapped -member order). Use actual demographic/income inputs rather than forcing the eligibility -flag or intermediate amount. An existing test can satisfy this when it exercises that complete path; otherwise -run a focused diagnostic in the available environment. Trace remaining age, entity and +affected cases through to the final benefit, subtraction or tax result. First reuse +existing passing tests that exercise the complete path. Add focused diagnostics only +for an uncovered changed behavior or a specific suspected defect, including composition +risks where the code suggests them (such as multiple tax units or member ordering). +There is no new-case quota per household shape and no duplicate diagnostic for a path +already covered. Use actual demographic/income inputs rather than forcing eligibility +or intermediate amounts. Trace remaining age, entity and aggregation gates, including a risk of double-counting an existing benefit. The policy reviewer establishes that the scenario qualifies under the source; share one reproduction and its evidence rather than running it twice. If execution is unavailable, record the @@ -405,23 +428,28 @@ more findings, not repeated boilerplate or invented statistics. ## Phase 5: Resolve material uncertainty -The coordinator reads both reports and deduplicates before requesting any more work. -Before consolidation it opens the evidence artifact of every CRITICAL once (the -reproduction output or the quoted source lines) and confirms the trigger, the expected -result and its source are all present and support the material scenario premises. Opening -an artifact is not validation of its expected result. A refuted/invalid example is corrected -or withdrawn, not escalated because it changes dollars. A remaining material uncertainty -is recorded as a specific gap; an existing finding awaiting that check is UNVERIFIED and -excluded from confirmed-critical repair counts. Do not mint a new critical from an -unsupported hypothesis. Return a specific unresolved question to its original reviewer when that -reviewer can answer from existing evidence. Use at most one additional independent adjudication batch -for materially conflicting findings or uncertain high-impact claims; batch related items -by topic, not one agent per value. It uses the remaining acquisition budget, not a reset. -Keep that response to the disputed claim's disposition, decisive evidence and missing -premise. Do not turn adjudication into a replacement design or add incidental findings; -those require their own complete evidence and are outside this bounded question. -Do not reconfirm findings with adequate source and code-path evidence, or investigate -incidental pre-existing issues to complete a review of changed behavior. +The coordinator deduplicates completed, evidenced findings and proceeds to Phase 6. +Reviewers own source validation, plausible scenario premises and reproduction correctness; +the coordinator does not reopen each critical's source, rerun its case or reconstruct its +proof. Target at most two minutes from last reviewer completion to assembled result/cleanup +when there is no material dispute. + +Only a specific missing premise or conflict triggers adjudication: an absent source-backed +expectation, invalid scenario, contradictory evidence or incompatible reviewer conclusions. +Send that question and existing evidence to the original reviewer, not a general second-look +request. Correct or withdraw refuted examples. Mark claims awaiting material evidence +UNVERIFIED and exclude them from confirmed-critical repair counts. + +If the original reviewers cannot resolve a material conflict, use at most one independent +adjudication batch within the remaining acquisition budget. Return only the disputed claim's +disposition, decisive evidence and missing premise. Investigation stays with that owner: +the coordinator adds no research pass, incidental findings or replacement implementation. +Once the reviewers' reports are complete, that adjudication batch is the coordinator's +only permitted external call; probing further URLs or reopening pages outside the named +questions is a recorded deviation, not a check, and unresolved items become gaps. +Keep historical investigation within the approved review scope. Record extra time against +the named dispute, not generic consolidation; return PARTIAL when required evidence remains +unavailable within budget. The timing target never turns missing evidence into approval. If material evidence or a required review check remains unavailable, record PARTIAL. Produce the reports promptly with those gaps; a later explicitly expanded source budget @@ -471,6 +499,14 @@ Classify confirmed findings: demonstrated case changes eligibility/category or materially changes results. - **SUGGESTION**: optional readability, documentation or performance improvements. +Each reviewer applies this rubric before returning its findings. Materiality includes +the effect on an affected household: confirmed wrong eligibility or a lost/full benefit +is critical even for a small population or a one-line repair. Do not downgrade it merely +because the case is uncommon. Distinguish an executed result from a code trace and an +unestablished scenario premise; unresolved premises remain UNVERIFIED. The coordinator +may reconcile a severity label against the finding's stated evidence without rerunning +that evidence or starting another policy review. + For population-sensitive input defaults, quantify the direction/impact where supported; do not prescribe a default merely to suppress a discrepancy. Consider data population, documented limitations or justified defaults. Critical only with material demonstrated @@ -516,8 +552,14 @@ For timed runs, record the canonical keys in the assembler's `timing` block so r comparable: `setup_seconds` (capture through snapshot), `scope_seconds`, `parallel_review_seconds` (dispatch to last role completion), `policy_role_seconds`, `code_role_seconds`, `adjudication_seconds`, `consolidation_cleanup_seconds` and -`elapsed_seconds`; distinguish setup, overlapping role wall time and consolidation/cleanup; -do not add concurrent role durations. Record CLI wall time separately from test-reported +`elapsed_seconds`; measure elapsed time from invocation through completed artifacts and +snapshot cleanup, including coordinator work. When called by encode-policy-v2, also retain +its dispatch-to-accepted-result interval as the end-to-end review time. The under-20-minute +target and 25-minute outer target apply to that entire interval, not each role. Distinguish +setup, overlapping role wall time and consolidation/cleanup; +do not add concurrent role durations. `consolidation_cleanup_seconds` runs from the last +role completion to cleanup and contains `adjudication_seconds`; report adjudication as a +sub-span and never sum the two. Record CLI wall time separately from test-reported time, and source acquisition window separately from time inside network calls. These differences are not pure import or network-latency measurements. A few diagnosed cases do not establish review recall; record confirmed misses or false positives without diff --git a/skills/review-program/scripts/run_bounded.py b/skills/review-program/scripts/run_bounded.py index 74c61c4..8dd72d0 100644 --- a/skills/review-program/scripts/run_bounded.py +++ b/skills/review-program/scripts/run_bounded.py @@ -24,6 +24,7 @@ def main() -> int: process = subprocess.Popen(args.command, start_new_session=True) except OSError as error: print(f"Cannot start {label}: {error}", file=sys.stderr) + print(f"{label}: exit status 127", file=sys.stderr) return 127 try: status = process.wait(timeout=args.seconds) @@ -35,10 +36,12 @@ def main() -> int: pass process.wait() print(f"{label}: timed out after {args.seconds:g}s", file=sys.stderr) - return 124 + status = 124 finally: print(f"{label}: elapsed {time.monotonic() - started:.2f}s", file=sys.stderr) - return status if status >= 0 else 128 - status + exit_status = status if status >= 0 else 128 - status + print(f"{label}: exit status {exit_status}", file=sys.stderr) + return exit_status if __name__ == "__main__": diff --git a/targets/claude/agents/country-models/model-worker.md b/targets/claude/agents/country-models/model-worker.md new file mode 100644 index 0000000..4235093 --- /dev/null +++ b/targets/claude/agents/country-models/model-worker.md @@ -0,0 +1,26 @@ +--- +name: model-worker +description: Executes one assigned implementer or test-author role from encode-policy-v2, with skill access and no delegation or web tools +tools: Bash, Read, Write, Edit, MultiEdit, Grep, Glob, Skill, ToolSearch, SendMessage +disallowedTools: Agent, Task, WebFetch, WebSearch +model: inherit +--- + +You execute exactly one implementation role (implementer or test-author) assigned by +the encode-policy-v2 coordinator. Read that role, its owned paths and the artifact and +completion contracts in the installed canonical encode-policy-v2 workflow at the path +supplied in your task. This profile adds no stages, audits, formatting passes, test +suites, commits or pushes. + +Before substantive country-model work, invoke the installed Skill whose name ends in +`policyengine-model-development` in your own context and read the references named for +your role. Supply its actual load evidence under the canonical `SKILLS_READY` contract; +if unavailable, return `SKILLS_BLOCKED` before writing model code or tests. + +Do the work yourself. Do not spawn helpers, explorers, verifiers, another CLI or nested +workers; you have no delegation or web tools. Use the evidence in the source manifest +and run root rather than acquiring sources. Write only your owned paths and your own +manifest, checklist and progress log under RUN_ROOT. Run your owned tests at most once +per task as a bounded self-check; the coordinator's invocation is the run of record. +Build against the shared contract block in your brief; report `CONTRACT MISMATCH` to the +coordinator instead of relocating cases or re-running work on your own. diff --git a/targets/claude/agents/country-models/review-worker.md b/targets/claude/agents/country-models/review-worker.md new file mode 100644 index 0000000..c245c60 --- /dev/null +++ b/targets/claude/agents/country-models/review-worker.md @@ -0,0 +1,23 @@ +--- +name: review-worker +description: Executes one assigned policy/source or code/test role from review-program, with skill access and no delegation tools +tools: Bash, Read, Write, Edit, Grep, Glob, WebFetch, WebSearch, Skill, ToolSearch, SendMessage +disallowedTools: Agent, Task +model: inherit +--- + +You execute exactly one reviewer role assigned by the review-program coordinator. +Read that role and the finding/completion contracts in the installed canonical +review-program workflow at the path supplied in your task. This profile adds no review +steps, audits or reporting requirements. + +Before substantive country-model work, invoke the installed Skill whose name ends in +`policyengine-model-development` in your own context and read the references needed for +your task. Supply its actual load evidence under the canonical `SKILLS_READY` contract; +if unavailable, return `SKILLS_BLOCKED` before working on model code. + +Do the investigation yourself. Do not spawn helpers, another CLI, nested reviewers or +independent verification tasks. You have no Agent/Task delegation tools. Return a named +unresolved question to your coordinator when needed. Use the assigned snapshot read-only; +write only the assigned report, progress log and evidence under RUN_ROOT. The canonical +workflow owns severity, source budgets, test reuse, timing and completion. diff --git a/targets/claude/hooks/model-development-context.py b/targets/claude/hooks/model-development-context.py index c74fe8b..1dab186 100644 --- a/targets/claude/hooks/model-development-context.py +++ b/targets/claude/hooks/model-development-context.py @@ -24,8 +24,9 @@ def main(): return context = ( "This is a PolicyEngine country-model repository. Model implementation, " - "test-authoring and review roles require policyengine-model-development " - "loaded with the Skill tool in each worker's own context, followed by its " + "test-authoring and review roles, including encoding/review coordinators, " + "require policyengine-model-development loaded with the Skill tool in each " + "agent's own context before substantive work, followed by its " "relevant references. Resolve the available installed skill name and follow " "references/agent-loading.md: SKILLS_READY includes successful load evidence; " "SKILLS_BLOCKED identifies an unavailable skill/tool before substantive work. " diff --git a/tests/test_build_claude_wrapper.py b/tests/test_build_claude_wrapper.py index af64025..55bb51d 100644 --- a/tests/test_build_claude_wrapper.py +++ b/tests/test_build_claude_wrapper.py @@ -5,6 +5,8 @@ import sys from pathlib import Path +import yaml + def test_build_claude_wrapper(tmp_path: Path) -> None: repo_root = Path(__file__).resolve().parent.parent @@ -44,6 +46,10 @@ def test_build_claude_wrapper(tmp_path: Path) -> None: "and file-path strings in marketplace entries - hooks/hooks.json at the " "plugin root is auto-loaded instead" ) + if "review-program" in skills: + assert "./agents/country-models/review-worker.md" in plugin["agents"] + if "encode-policy-v2" in skills: + assert "./agents/country-models/model-worker.md" in plugin["agents"] assert (output_dir / "skills" / "policyengine" / "SKILL.md").exists() assert (output_dir / "skills" / "policyengine-us" / "SKILL.md").exists() @@ -52,6 +58,16 @@ def test_build_claude_wrapper(tmp_path: Path) -> None: assert (output_dir / "skills" / name / "SKILL.md").is_file() assert not (output_dir / "commands" / f"{name}.md").exists() assert (output_dir / "agents" / "country-models" / "rules-engineer.md").exists() + for profile in ("review-worker", "model-worker"): + worker = output_dir / "agents" / "country-models" / f"{profile}.md" + worker_config = yaml.safe_load(worker.read_text().split("---", 2)[1]) + allowed_tools = {name.strip() for name in worker_config["tools"].split(",")} + denied_tools = { + name.strip() for name in worker_config["disallowedTools"].split(",") + } + assert "Skill" in allowed_tools, profile + assert not {"Agent", "Task"} & allowed_tools, profile + assert {"Agent", "Task"} <= denied_tools, profile assert (output_dir / "hooks" / "hooks.json").exists() assert (output_dir / "GENERATED_FROM").read_text().strip() == "test-sha" diff --git a/tests/test_review_bounded_command.py b/tests/test_review_bounded_command.py index 325a390..ceeeb7d 100644 --- a/tests/test_review_bounded_command.py +++ b/tests/test_review_bounded_command.py @@ -28,6 +28,7 @@ def test_preserves_captured_stdout_and_failure_status(): ) assert result.returncode == 7 assert result.stdout == "captured-sha\n" + assert "exit status 7" in result.stderr def test_timeout_kills_descendants_and_closes_inherited_pipes(): @@ -50,4 +51,5 @@ def test_timeout_kills_descendants_and_closes_inherited_pipes(): ) assert result.returncode == 124 assert "timed out" in result.stderr + assert "exit status 124" in result.stderr assert time.monotonic() - started < 5 From b98805261aca7ab4502aa52662e0b09753add920 Mon Sep 17 00:00:00 2001 From: ZimingHua Date: Sat, 5 Sep 2026 22:54:37 -0400 Subject: [PATCH 3/3] Fix review findings: manifest data, test deadlines, hook hardening Regenerate the dashboard manifest with a PyYAML interpreter: the previous regeneration fell back to the subset parser, turning analysis numbers into strings and dropping the nested corroboration verdict; it also lacked the two worker profiles. Set the bounded test deadline to 540 seconds so it fires under the tool's 600-second maximum and the wrapper's exit status survives. Harden the model-development hook against missing cwd or malformed input and add a behavioral test. State the fallback when model-worker cannot be a retained named worker, drop Edit from review-worker, and correct the agent count in the guide. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01A6rihVz3MtZQKCzzkCib35 --- dashboard/src/data/manifest.json | 4834 +++++++++-------- docs/when-to-use.md | 2 +- .../references/claude-launcher.md | 14 +- .../encode-policy-v2/references/workflow.md | 7 +- .../references/claude-launcher.md | 7 +- skills/review-program/references/workflow.md | 4 +- .../agents/country-models/review-worker.md | 2 +- .../claude/hooks/model-development-context.py | 69 +- tests/test_model_development_hook.py | 63 + 9 files changed, 2782 insertions(+), 2220 deletions(-) create mode 100644 tests/test_model_development_hook.py diff --git a/dashboard/src/data/manifest.json b/dashboard/src/data/manifest.json index 8c4e5bc..275fac2 100644 --- a/dashboard/src/data/manifest.json +++ b/dashboard/src/data/manifest.json @@ -1,8 +1,8 @@ { - "generated_at": "2026-09-05T16:14:52.533393Z", + "generated_at": "2026-09-06T02:53:31.082643Z", "counts": { "skill": 23, - "agent": 34, + "agent": 36, "command": 20, "bundle": 8, "analysis": 6 @@ -10,11 +10,11 @@ "analyses": [ { "file": "2026-06-19-us-arpa-ctc-restoration.md", - "policy_id": "97759", + "policy_id": 97759, "date": "2026-06-19", "title": "ARPA-style federal CTC expansion (2026-2035)", "jurisdiction": { - "country": null, + "country": "us", "state": null }, "verdict": "PASS-WITH-NOTES", @@ -29,7 +29,7 @@ "cost_billion_10yr_actual": null, "gini_pct_change": null, "top1_pp_change": null, - "child_poverty_pct_change": "-34.8", + "child_poverty_pct_change": -34.8, "model_version": null, "data_version": null, "corroboration_verdict": null, @@ -38,11 +38,11 @@ }, { "file": "2026-06-19-us-salt-cap-flat-60k.md", - "policy_id": "97763", + "policy_id": 97763, "date": "2026-06-19", "title": "Federal SALT cap raised to a flat $60,000 (2026-2035)", "jurisdiction": { - "country": null, + "country": "us", "state": null }, "verdict": "PASS-WITH-NOTES", @@ -55,11 +55,11 @@ "regressive-incidence" ], "horizon": null, - "cost_billion_year1": "18.43", + "cost_billion_year1": 18.43, "cost_billion_10yr_actual": null, - "gini_pct_change": "0.033", - "top1_pp_change": "0.018", - "child_poverty_pct_change": "-0.010", + "gini_pct_change": 0.033, + "top1_pp_change": 0.018, + "child_poverty_pct_change": -0.01, "model_version": null, "data_version": null, "corroboration_verdict": null, @@ -68,11 +68,11 @@ }, { "file": "2026-06-29-us-cdcc-double-expense-cap.md", - "policy_id": "97837", + "policy_id": 97837, "date": "2026-06-29", "title": "Federal CDCC per-dependent expense cap doubled ($3K \u2192 $6K, 2026-2035)", "jurisdiction": { - "country": null, + "country": "us", "state": null }, "verdict": "PASS-WITH-NOTES", @@ -84,24 +84,24 @@ "middle-income-targeted" ], "horizon": null, - "cost_billion_year1": "3.06", + "cost_billion_year1": 3.06, "cost_billion_10yr_actual": null, - "gini_pct_change": "0.0043", - "top1_pp_change": "-0.0027", - "child_poverty_pct_change": "0.0", + "gini_pct_change": 0.0043, + "top1_pp_change": -0.0027, + "child_poverty_pct_change": 0.0, "model_version": "1.729.0", "data_version": "populace-us-2024-f0af251-703bd81a565c-20260620T201958Z", "corroboration_verdict": null, "issues_opened": [], - "anchor_url": "null" + "anchor_url": null }, { "file": "2026-06-29-us-ctc-300-500-joint-structural.md", - "policy_id": "null", + "policy_id": null, "date": "2026-06-29", "title": "CTC filing-status-differential \u2014 +$300 per child (non-joint) / +$500 per child (joint)", "jurisdiction": { - "country": null, + "country": "us", "state": null }, "verdict": "structural", @@ -126,11 +126,11 @@ }, { "file": "2026-06-29-us-salt-cap-plus-100k.md", - "policy_id": "97833", + "policy_id": 97833, "date": "2026-06-29", "title": "Federal SALT cap raised by $100,000 per filing status, no phase-out (2026-2035)", "jurisdiction": { - "country": null, + "country": "us", "state": null }, "verdict": "PASS-WITH-NOTES", @@ -144,24 +144,24 @@ "top-tail-concentration" ], "horizon": null, - "cost_billion_year1": "26.79", + "cost_billion_year1": 26.79, "cost_billion_10yr_actual": null, - "gini_pct_change": "0.0495", - "top1_pp_change": "0.0242", - "child_poverty_pct_change": "-0.0097", + "gini_pct_change": 0.0495, + "top1_pp_change": 0.0242, + "child_poverty_pct_change": -0.0097, "model_version": null, "data_version": null, - "corroboration_verdict": null, + "corroboration_verdict": "CORROBORATION-FAILED", "issues_opened": [], "anchor_url": "https://policyengine.org/us/research/ways-and-means-salt-cap" }, { "file": "2026-07-01-us-standard-deduction-plus-1k.md", - "policy_id": "97853", + "policy_id": 97853, "date": "2026-07-01", "title": "Federal standard deduction raised by $1,000 for all filing statuses (2026-2035)", "jurisdiction": { - "country": null, + "country": "us", "state": null }, "verdict": "PASS-WITH-NOTES", @@ -171,12 +171,12 @@ "tcja-family", "progressive-incidence" ], - "horizon": "10", - "cost_billion_year1": "17.86", - "cost_billion_10yr_actual": "196.10", - "gini_pct_change": "-0.0264", - "top1_pp_change": "-0.121", - "child_poverty_pct_change": "0.0", + "horizon": 10, + "cost_billion_year1": 17.86, + "cost_billion_10yr_actual": 196.1, + "gini_pct_change": -0.0264, + "top1_pp_change": -0.121, + "child_poverty_pct_change": 0.0, "model_version": "1.745.0", "data_version": "populace-us-2024-cd-concept-budget-dbbdcec-512e-b2500-r2-20260627T022640Z", "corroboration_verdict": null, @@ -217,7 +217,7 @@ "use_instead": [], "registry_notes": "Recommended for the listed scope.", "references": {}, - "body_length": 3192 + "body_length": 3915 }, { "id": "fix-pr", @@ -1208,7 +1208,7 @@ "use_instead": [], "registry_notes": "Recommended for the listed scope.", "references": {}, - "body_length": 3273 + "body_length": 3884 }, { "id": "component-test-writer", @@ -1673,6 +1673,54 @@ }, "body_length": 5964 }, + { + "id": "model-worker", + "kind": "agent", + "name": "model-worker", + "description": "Executes one assigned implementer or test-author role from encode-policy-v2, with skill access and no delegation or web tools", + "category": "country-models", + "path": "targets/claude/agents/country-models/model-worker.md", + "tools": [ + "Bash", + "Read", + "Write", + "Edit", + "MultiEdit", + "Grep", + "Glob", + "Skill", + "ToolSearch", + "SendMessage" + ], + "model": "inherit", + "triggers": [], + "bundles": [ + "complete", + "country-models" + ], + "target_repos": [ + "policyengine-model", + "policyengine-us" + ], + "functional_role": null, + "functional_summary": null, + "functional_scope": [], + "functional_supersedes": [], + "registry_status": "use-with-care", + "registry_owner": "Country model engineering", + "recommended_for": [ + "Use indirectly through its workflow unless you are maintaining agent orchestration: Executes one assigned implementer or test-author role from encode-policy-v2, with skill access and no delegation or web tools" + ], + "use_instead": [], + "registry_notes": "This agent is not currently invoked by any command or agent. Confirm it is still intended before relying on it.", + "references": { + "skill": [ + "encode-policy-v2", + "policyengine-model-development" + ] + }, + "body_length": 1299 + }, { "id": "pr-pusher", "kind": "agent", @@ -1780,6 +1828,54 @@ }, "body_length": 10773 }, + { + "id": "review-worker", + "kind": "agent", + "name": "review-worker", + "description": "Executes one assigned policy/source or code/test role from review-program, with skill access and no delegation tools", + "category": "country-models", + "path": "targets/claude/agents/country-models/review-worker.md", + "tools": [ + "Bash", + "Read", + "Write", + "Grep", + "Glob", + "WebFetch", + "WebSearch", + "Skill", + "ToolSearch", + "SendMessage" + ], + "model": "inherit", + "triggers": [], + "bundles": [ + "complete", + "country-models" + ], + "target_repos": [ + "policyengine-model", + "policyengine-us" + ], + "functional_role": null, + "functional_summary": null, + "functional_scope": [], + "functional_supersedes": [], + "registry_status": "use-with-care", + "registry_owner": "Country model engineering", + "recommended_for": [ + "Use indirectly through its workflow unless you are maintaining agent orchestration: Executes one assigned policy/source or code/test role from review-program, with skill access and no delegation tools" + ], + "use_instead": [], + "registry_notes": "This agent is not currently invoked by any command or agent. Confirm it is still intended before relying on it.", + "references": { + "skill": [ + "policyengine-model-development", + "review-program" + ] + }, + "body_length": 1049 + }, { "id": "rules-engineer", "kind": "agent", @@ -4041,7 +4137,7 @@ "use_instead": [], "registry_notes": "Bundle install profile.", "references": {}, - "body_length": 3594 + "body_length": 3689 }, { "id": "country-models", @@ -4067,7 +4163,7 @@ "use_instead": [], "registry_notes": "Bundle install profile.", "references": {}, - "body_length": 1599 + "body_length": 1694 }, { "id": "dashboard-builder", @@ -4153,73 +4249,73 @@ "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "reform-classifier" + "target": "report-logger" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "test-creator" + "target": "policy-text-researcher" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "reform-comparator" + "target": "reform-classifier" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "model-corroborator" + "target": "rules-engineer" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "rules-engineer" + "target": "parameter-locator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "microsim-runner" + "target": "prior-scores-finder" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "prior-scores-finder" + "target": "outcome-predictor" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "microsim-runner" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "outcome-predictor" + "target": "reform-comparator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "report-logger" + "target": "model-corroborator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "test-creator" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "agent", - "target": "parameter-locator" + "target": "calibration-diagnostics" }, { "source_kind": "command", @@ -4243,49 +4339,49 @@ "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-canada" + "target": "policyengine-prior-scores" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-app" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-research-lookup" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-writing" + "target": "policyengine-canada" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-calibration-diagnostics" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-calibration-diagnostics" + "target": "policyengine-writing" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-research-lookup" + "target": "policyengine-us" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "skill", - "target": "policyengine-prior-scores" + "target": "policyengine-uk" }, { "source_kind": "command", @@ -4297,13 +4393,13 @@ "source_kind": "command", "source": "analyze-policy", "target_kind": "command", - "target": "implement-structural" + "target": "prior-scores" }, { "source_kind": "command", "source": "analyze-policy", "target_kind": "command", - "target": "prior-scores" + "target": "implement-structural" }, { "source_kind": "command", @@ -4327,7 +4423,7 @@ "source_kind": "command", "source": "audit-multizone", "target_kind": "command", - "target": "create-dashboard" + "target": "deploy-dashboard" }, { "source_kind": "command", @@ -4339,7 +4435,7 @@ "source_kind": "command", "source": "audit-multizone", "target_kind": "command", - "target": "deploy-dashboard" + "target": "create-dashboard" }, { "source_kind": "command", @@ -4363,55 +4459,55 @@ "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "test-creator" + "target": "implementation-validator" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "issue-manager" + "target": "rules-engineer" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "pr-pusher" + "target": "issue-manager" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "rules-engineer" + "target": "ci-fixer" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "ci-fixer" + "target": "document-collector" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "program-reviewer" + "target": "edge-case-generator" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "edge-case-generator" + "target": "program-reviewer" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "implementation-validator" + "target": "test-creator" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "agent", - "target": "document-collector" + "target": "pr-pusher" }, { "source_kind": "command", @@ -4423,13 +4519,13 @@ "source_kind": "command", "source": "backdate-program", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-model-development" }, { "source_kind": "command", "source": "backdate-program", "target_kind": "skill", - "target": "policyengine-model-development" + "target": "policyengine-us" }, { "source_kind": "command", @@ -4447,43 +4543,43 @@ "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "backend-builder" + "target": "frontend-builder" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-planner" + "target": "dashboard-scaffold" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-integrator" + "target": "backend-builder" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-plan-validator" + "target": "dashboard-planner" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-scaffold" + "target": "dashboard-design-validator" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "frontend-builder" + "target": "dashboard-integrator" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "agent", - "target": "dashboard-design-validator" + "target": "dashboard-plan-validator" }, { "source_kind": "command", @@ -4495,13 +4591,13 @@ "source_kind": "command", "source": "create-dashboard", "target_kind": "command", - "target": "analyze-policy" + "target": "new-tool" }, { "source_kind": "command", "source": "create-dashboard", "target_kind": "command", - "target": "create-dashboard" + "target": "analyze-policy" }, { "source_kind": "command", @@ -4513,19 +4609,19 @@ "source_kind": "command", "source": "create-dashboard", "target_kind": "command", - "target": "new-tool" + "target": "create-dashboard" }, { "source_kind": "command", "source": "create-new-component", "target_kind": "agent", - "target": "dashboard-design-validator" + "target": "component-test-writer" }, { "source_kind": "command", "source": "create-new-component", "target_kind": "agent", - "target": "component-test-writer" + "target": "dashboard-design-validator" }, { "source_kind": "command", @@ -4549,37 +4645,37 @@ "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "review-program" + "target": "policyengine-app" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "policyengine-us" + "target": "review-program" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-api" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "policyengine-app" + "target": "encode-policy-v2" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "policyengine-us" }, { "source_kind": "command", "source": "create-pr", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-uk" }, { "source_kind": "command", @@ -4621,43 +4717,43 @@ "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "test-creator" + "target": "implementation-validator" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "issue-manager" + "target": "rules-engineer" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "pr-pusher" + "target": "issue-manager" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "rules-engineer" + "target": "ci-fixer" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "ci-fixer" + "target": "document-collector" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "implementation-validator" + "target": "test-creator" }, { "source_kind": "command", "source": "encode-reform", "target_kind": "agent", - "target": "document-collector" + "target": "pr-pusher" }, { "source_kind": "command", @@ -4741,25 +4837,25 @@ "source_kind": "command", "source": "implement-structural", "target_kind": "agent", - "target": "test-creator" + "target": "rules-engineer" }, { "source_kind": "command", "source": "implement-structural", "target_kind": "agent", - "target": "structural-implementer" + "target": "ci-fixer" }, { "source_kind": "command", "source": "implement-structural", "target_kind": "agent", - "target": "rules-engineer" + "target": "structural-implementer" }, { "source_kind": "command", "source": "implement-structural", "target_kind": "agent", - "target": "ci-fixer" + "target": "test-creator" }, { "source_kind": "command", @@ -4771,13 +4867,13 @@ "source_kind": "command", "source": "implement-structural", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-standards" }, { "source_kind": "command", "source": "implement-structural", "target_kind": "skill", - "target": "policyengine-standards" + "target": "policyengine-us" }, { "source_kind": "command", @@ -4813,25 +4909,25 @@ "source_kind": "command", "source": "new-tool", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-design" }, { "source_kind": "command", "source": "new-tool", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-tools" }, { "source_kind": "command", "source": "new-tool", "target_kind": "command", - "target": "create-dashboard" + "target": "new-tool" }, { "source_kind": "command", "source": "new-tool", "target_kind": "command", - "target": "new-tool" + "target": "create-dashboard" }, { "source_kind": "command", @@ -4873,43 +4969,43 @@ "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "analyze-policy" + "target": "reform-pipeline" }, { "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "implement-structural" + "target": "analyze-policy" }, { "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "reform-pipeline" + "target": "deploy-dashboard" }, { "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "create-dashboard" + "target": "implement-structural" }, { "source_kind": "command", "source": "reform-pipeline", "target_kind": "command", - "target": "deploy-dashboard" + "target": "create-dashboard" }, { "source_kind": "command", "source": "text-to-reform", "target_kind": "agent", - "target": "reform-classifier" + "target": "policy-text-researcher" }, { "source_kind": "command", "source": "text-to-reform", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "reform-classifier" }, { "source_kind": "command", @@ -4939,25 +5035,25 @@ "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-app" }, { "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-model-development" }, { "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-us" }, { "source_kind": "command", "source": "write-tests", "target_kind": "skill", - "target": "policyengine-model-development" + "target": "policyengine-uk" }, { "source_kind": "agent", @@ -4987,13 +5083,13 @@ "source_kind": "agent", "source": "calibration-diagnostics", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-calibration-diagnostics" }, { "source_kind": "agent", "source": "calibration-diagnostics", "target_kind": "skill", - "target": "policyengine-calibration-diagnostics" + "target": "policyengine-us" }, { "source_kind": "agent", @@ -5005,7 +5101,7 @@ "source_kind": "agent", "source": "ci-fixer", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "fix-pr" }, { "source_kind": "agent", @@ -5017,31 +5113,31 @@ "source_kind": "agent", "source": "ci-fixer", "target_kind": "skill", - "target": "fix-pr" + "target": "encode-policy-v2" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "test-creator" + "target": "rules-engineer" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "pr-pusher" + "target": "ci-fixer" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "rules-engineer" + "target": "test-creator" }, { "source_kind": "agent", "source": "document-collector", "target_kind": "agent", - "target": "ci-fixer" + "target": "pr-pusher" }, { "source_kind": "agent", @@ -5065,37 +5161,37 @@ "source_kind": "agent", "source": "edge-case-generator", "target_kind": "skill", - "target": "policyengine-model-development" + "target": "fix-pr" }, { "source_kind": "agent", "source": "edge-case-generator", "target_kind": "skill", - "target": "fix-pr" + "target": "policyengine-model-development" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "test-creator" + "target": "rules-engineer" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "rules-engineer" + "target": "ci-fixer" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "ci-fixer" + "target": "program-reviewer" }, { "source_kind": "agent", "source": "implementation-validator", "target_kind": "agent", - "target": "program-reviewer" + "target": "test-creator" }, { "source_kind": "agent", @@ -5107,7 +5203,7 @@ "source_kind": "agent", "source": "implementation-validator", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "fix-pr" }, { "source_kind": "agent", @@ -5119,7 +5215,7 @@ "source_kind": "agent", "source": "implementation-validator", "target_kind": "skill", - "target": "fix-pr" + "target": "encode-policy-v2" }, { "source_kind": "agent", @@ -5127,6 +5223,18 @@ "target_kind": "skill", "target": "policyengine-standards" }, + { + "source_kind": "agent", + "source": "model-worker", + "target_kind": "skill", + "target": "policyengine-model-development" + }, + { + "source_kind": "agent", + "source": "model-worker", + "target_kind": "skill", + "target": "encode-policy-v2" + }, { "source_kind": "agent", "source": "pr-pusher", @@ -5143,19 +5251,19 @@ "source_kind": "agent", "source": "pr-pusher", "target_kind": "skill", - "target": "encode-policy-v2" + "target": "policyengine-standards" }, { "source_kind": "agent", "source": "pr-pusher", "target_kind": "skill", - "target": "policyengine-standards" + "target": "fix-pr" }, { "source_kind": "agent", "source": "pr-pusher", "target_kind": "skill", - "target": "fix-pr" + "target": "encode-policy-v2" }, { "source_kind": "agent", @@ -5167,37 +5275,49 @@ "source_kind": "agent", "source": "program-reviewer", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-model-development" }, { "source_kind": "agent", "source": "program-reviewer", "target_kind": "skill", + "target": "policyengine-us" + }, + { + "source_kind": "agent", + "source": "review-worker", + "target_kind": "skill", + "target": "review-program" + }, + { + "source_kind": "agent", + "source": "review-worker", + "target_kind": "skill", "target": "policyengine-model-development" }, { "source_kind": "agent", "source": "rules-engineer", "target_kind": "agent", - "target": "pr-pusher" + "target": "ci-fixer" }, { "source_kind": "agent", "source": "rules-engineer", "target_kind": "agent", - "target": "ci-fixer" + "target": "pr-pusher" }, { "source_kind": "agent", "source": "rules-engineer", "target_kind": "skill", - "target": "policyengine-model-development" + "target": "policyengine-healthcare" }, { "source_kind": "agent", "source": "rules-engineer", "target_kind": "skill", - "target": "policyengine-healthcare" + "target": "policyengine-model-development" }, { "source_kind": "agent", @@ -5215,43 +5335,43 @@ "source_kind": "agent", "source": "backend-builder", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-api" }, { "source_kind": "agent", "source": "backend-builder", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "backend-builder", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-us" }, { "source_kind": "agent", "source": "backend-builder", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-uk" }, { "source_kind": "agent", "source": "dashboard-architecture-validator", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-api" }, { "source_kind": "agent", "source": "dashboard-architecture-validator", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "dashboard-architecture-validator", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-us" }, { "source_kind": "agent", @@ -5263,25 +5383,25 @@ "source_kind": "agent", "source": "dashboard-design-validator", "target_kind": "skill", - "target": "policyengine-writing" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "dashboard-design-validator", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-writing" }, { "source_kind": "agent", "source": "dashboard-integrator", "target_kind": "agent", - "target": "backend-builder" + "target": "frontend-builder" }, { "source_kind": "agent", "source": "dashboard-integrator", "target_kind": "agent", - "target": "frontend-builder" + "target": "backend-builder" }, { "source_kind": "agent", @@ -5293,79 +5413,79 @@ "source_kind": "agent", "source": "dashboard-integrator", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "dashboard-integrator", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "dashboard-plan-validator", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "dashboard-plan-validator", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "frontend-builder" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "agent", - "target": "frontend-builder" + "target": "calibration-diagnostics" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-app" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-api" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-writing" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-writing" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-us" }, { "source_kind": "agent", "source": "dashboard-planner", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-uk" }, { "source_kind": "agent", @@ -5377,13 +5497,13 @@ "source_kind": "agent", "source": "dashboard-scaffold", "target_kind": "skill", - "target": "policyengine-api" + "target": "policyengine-standards" }, { "source_kind": "agent", "source": "dashboard-scaffold", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-api" }, { "source_kind": "agent", @@ -5395,7 +5515,7 @@ "source_kind": "agent", "source": "dashboard-scaffold", "target_kind": "skill", - "target": "policyengine-standards" + "target": "policyengine-tools" }, { "source_kind": "agent", @@ -5413,19 +5533,19 @@ "source_kind": "agent", "source": "frontend-builder", "target_kind": "skill", - "target": "policyengine-tools" + "target": "policyengine-design" }, { "source_kind": "agent", "source": "frontend-builder", "target_kind": "skill", - "target": "policyengine-design" + "target": "policyengine-tools" }, { "source_kind": "agent", "source": "microsim-runner", "target_kind": "agent", - "target": "reform-comparator" + "target": "parameter-locator" }, { "source_kind": "agent", @@ -5437,7 +5557,7 @@ "source_kind": "agent", "source": "microsim-runner", "target_kind": "agent", - "target": "parameter-locator" + "target": "reform-comparator" }, { "source_kind": "agent", @@ -5455,7 +5575,7 @@ "source_kind": "agent", "source": "model-corroborator", "target_kind": "agent", - "target": "reform-comparator" + "target": "report-logger" }, { "source_kind": "agent", @@ -5467,13 +5587,13 @@ "source_kind": "agent", "source": "model-corroborator", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "reform-comparator" }, { "source_kind": "agent", "source": "model-corroborator", "target_kind": "agent", - "target": "report-logger" + "target": "calibration-diagnostics" }, { "source_kind": "agent", @@ -5485,19 +5605,19 @@ "source_kind": "agent", "source": "parameter-locator", "target_kind": "agent", - "target": "reform-classifier" + "target": "policy-text-researcher" }, { "source_kind": "agent", "source": "parameter-locator", "target_kind": "agent", - "target": "microsim-runner" + "target": "reform-classifier" }, { "source_kind": "agent", "source": "parameter-locator", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "microsim-runner" }, { "source_kind": "agent", @@ -5527,13 +5647,13 @@ "source_kind": "agent", "source": "policy-text-researcher", "target_kind": "agent", - "target": "prior-scores-finder" + "target": "parameter-locator" }, { "source_kind": "agent", "source": "policy-text-researcher", "target_kind": "agent", - "target": "parameter-locator" + "target": "prior-scores-finder" }, { "source_kind": "agent", @@ -5551,37 +5671,37 @@ "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "agent", - "target": "reform-comparator" + "target": "policy-text-researcher" }, { "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "agent", - "target": "model-corroborator" + "target": "reform-comparator" }, { "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "agent", - "target": "calibration-diagnostics" + "target": "model-corroborator" }, { "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "calibration-diagnostics" }, { "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "skill", - "target": "policyengine-research-lookup" + "target": "policyengine-prior-scores" }, { "source_kind": "agent", "source": "prior-scores-finder", "target_kind": "skill", - "target": "policyengine-prior-scores" + "target": "policyengine-research-lookup" }, { "source_kind": "agent", @@ -5599,19 +5719,19 @@ "source_kind": "agent", "source": "reform-classifier", "target_kind": "agent", - "target": "prior-scores-finder" + "target": "policy-text-researcher" }, { "source_kind": "agent", "source": "reform-classifier", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "parameter-locator" }, { "source_kind": "agent", "source": "reform-classifier", "target_kind": "agent", - "target": "parameter-locator" + "target": "prior-scores-finder" }, { "source_kind": "agent", @@ -5623,7 +5743,7 @@ "source_kind": "agent", "source": "reform-comparator", "target_kind": "agent", - "target": "model-corroborator" + "target": "prior-scores-finder" }, { "source_kind": "agent", @@ -5635,7 +5755,7 @@ "source_kind": "agent", "source": "reform-comparator", "target_kind": "agent", - "target": "prior-scores-finder" + "target": "model-corroborator" }, { "source_kind": "agent", @@ -5659,19 +5779,19 @@ "source_kind": "agent", "source": "reform-describer", "target_kind": "agent", - "target": "microsim-runner" + "target": "policy-text-researcher" }, { "source_kind": "agent", "source": "reform-describer", "target_kind": "agent", - "target": "policy-text-researcher" + "target": "parameter-locator" }, { "source_kind": "agent", "source": "reform-describer", "target_kind": "agent", - "target": "parameter-locator" + "target": "microsim-runner" }, { "source_kind": "agent", @@ -5695,31 +5815,31 @@ "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-canada" + "target": "policyengine-app" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-us" + "target": "policyengine-canada" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-uk" + "target": "policyengine-writing" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-writing" + "target": "policyengine-us" }, { "source_kind": "agent", "source": "report-logger", "target_kind": "skill", - "target": "policyengine-app" + "target": "policyengine-uk" }, { "source_kind": "bundle", @@ -6375,6 +6495,12 @@ "target_kind": "agent", "target": "issue-manager" }, + { + "source_kind": "bundle", + "source": "complete", + "target_kind": "agent", + "target": "model-worker" + }, { "source_kind": "bundle", "source": "complete", @@ -6387,6 +6513,12 @@ "target_kind": "agent", "target": "program-reviewer" }, + { + "source_kind": "bundle", + "source": "complete", + "target_kind": "agent", + "target": "review-worker" + }, { "source_kind": "bundle", "source": "complete", @@ -6741,6 +6873,12 @@ "target_kind": "agent", "target": "issue-manager" }, + { + "source_kind": "bundle", + "source": "country-models", + "target_kind": "agent", + "target": "model-worker" + }, { "source_kind": "bundle", "source": "country-models", @@ -6753,6 +6891,12 @@ "target_kind": "agent", "target": "program-reviewer" }, + { + "source_kind": "bundle", + "source": "country-models", + "target_kind": "agent", + "target": "review-worker" + }, { "source_kind": "bundle", "source": "country-models", @@ -6998,7 +7142,7 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.6502, + "score": 0.6507, "shared_terms": [ "structural", "backlog", @@ -7019,7 +7163,7 @@ "kind": "command", "id": "generate-content" }, - "score": 0.6285, + "score": 0.63, "shared_terms": [ "social", "content", @@ -7040,7 +7184,7 @@ "kind": "command", "id": "generate-content" }, - "score": 0.6282, + "score": 0.6286, "shared_terms": [ "social", "content", @@ -7054,23 +7198,23 @@ }, { "a": { - "kind": "skill", - "id": "fix-pr" + "kind": "agent", + "id": "model-worker" }, "b": { - "kind": "skill", - "id": "review-program" + "kind": "agent", + "id": "review-worker" }, - "score": 0.6147, + "score": 0.6236, "shared_terms": [ - "review", - "canonical", - "workflow", - "roles", - "claude", - "codex", - "subagent", - "launcher" + "your", + "assigned", + "role", + "delegation", + "coordinator", + "executes", + "task", + "test" ] }, { @@ -7082,7 +7226,7 @@ "kind": "skill", "id": "policyengine-uk" }, - "score": 0.6121, + "score": 0.6135, "shared_terms": [ "household", "unit", @@ -7103,7 +7247,7 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.5991, + "score": 0.6, "shared_terms": [ "scorekeepers", "scores", @@ -7111,8 +7255,29 @@ "prior", "presets", "scored", - "published", - "reform" + "reform", + "published" + ] + }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "skill", + "id": "review-program" + }, + "score": 0.5889, + "shared_terms": [ + "review", + "canonical", + "codex", + "roles", + "claude", + "program", + "launcher", + "pdf" ] }, { @@ -7124,7 +7289,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.5822, + "score": 0.5819, "shared_terms": [ "zone", "path", @@ -7136,27 +7301,6 @@ "basepath" ] }, - { - "a": { - "kind": "skill", - "id": "encode-policy-v2" - }, - "b": { - "kind": "skill", - "id": "review-program" - }, - "score": 0.5719, - "shared_terms": [ - "review", - "canonical", - "codex", - "roles", - "program", - "claude", - "launcher", - "workflow" - ] - }, { "a": { "kind": "skill", @@ -7166,7 +7310,7 @@ "kind": "skill", "id": "policyengine-us" }, - "score": 0.5701, + "score": 0.5715, "shared_terms": [ "unit", "tax", @@ -7181,22 +7325,22 @@ { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "fix-pr" }, "b": { "kind": "skill", - "id": "fix-pr" + "id": "review-program" }, - "score": 0.5407, + "score": 0.5647, "shared_terms": [ "review", "canonical", + "workflow", + "roles", "claude", "codex", - "roles", - "launcher", - "fix", - "references" + "subagent", + "launcher" ] }, { @@ -7208,7 +7352,7 @@ "kind": "agent", "id": "content-orchestrator" }, - "score": 0.5389, + "score": 0.5395, "shared_terms": [ "social", "content", @@ -7229,7 +7373,7 @@ "kind": "skill", "id": "policyengine-us" }, - "score": 0.5247, + "score": 0.5264, "shared_terms": [ "unit", "tax", @@ -7241,6 +7385,48 @@ "credit" ] }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "skill", + "id": "fix-pr" + }, + "score": 0.501, + "shared_terms": [ + "review", + "claude", + "canonical", + "codex", + "roles", + "launcher", + "fix", + "gates" + ] + }, + { + "a": { + "kind": "skill", + "id": "review-program" + }, + "b": { + "kind": "agent", + "id": "review-worker" + }, + "score": 0.4838, + "shared_terms": [ + "review", + "canonical", + "delegation", + "program", + "completion", + "reviewers", + "workflow", + "source" + ] + }, { "a": { "kind": "skill", @@ -7250,7 +7436,7 @@ "kind": "agent", "id": "calibration-diagnostics" }, - "score": 0.4816, + "score": 0.482, "shared_terms": [ "calibration", "signature", @@ -7271,7 +7457,7 @@ "kind": "agent", "id": "prior-scores-finder" }, - "score": 0.4738, + "score": 0.4747, "shared_terms": [ "prior", "tier", @@ -7292,7 +7478,7 @@ "kind": "skill", "id": "policyengine-tools" }, - "score": 0.469, + "score": 0.4698, "shared_terms": [ "app", "next", @@ -7313,7 +7499,7 @@ "kind": "agent", "id": "test-creator" }, - "score": 0.4678, + "score": 0.4618, "shared_terms": [ "test", "tests", @@ -7334,7 +7520,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.4591, + "score": 0.46, "shared_terms": [ "component", "kit", @@ -7355,7 +7541,7 @@ "kind": "agent", "id": "dashboard-plan-validator" }, - "score": 0.4587, + "score": 0.4599, "shared_terms": [ "grep", "components", @@ -7376,12 +7562,12 @@ "kind": "agent", "id": "reform-classifier" }, - "score": 0.4495, + "score": 0.45, "shared_terms": [ "parameter", "gov", - "deployed", "reform", + "deployed", "provision", "lag", "credits", @@ -7397,7 +7583,7 @@ "kind": "agent", "id": "dashboard-integrator" }, - "score": 0.44, + "score": 0.4415, "shared_terms": [ "api", "data", @@ -7418,7 +7604,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.431, + "score": 0.4322, "shared_terms": [ "plan", "dashboard", @@ -7439,7 +7625,7 @@ "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.4268, + "score": 0.4278, "shared_terms": [ "app", "postcss", @@ -7460,7 +7646,7 @@ "kind": "agent", "id": "multizone-validator" }, - "score": 0.4108, + "score": 0.4111, "shared_terms": [ "zone", "basepath", @@ -7481,7 +7667,7 @@ "kind": "agent", "id": "dashboard-design-validator" }, - "score": 0.4085, + "score": 0.4095, "shared_terms": [ "grep", "app", @@ -7502,7 +7688,7 @@ "kind": "command", "id": "create-pr" }, - "score": 0.4035, + "score": 0.403, "shared_terms": [ "echo", "wait", @@ -7523,7 +7709,7 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.3967, + "score": 0.398, "shared_terms": [ "tier", "prior", @@ -7535,27 +7721,6 @@ "cbo" ] }, - { - "a": { - "kind": "agent", - "id": "test-creator" - }, - "b": { - "kind": "command", - "id": "write-tests" - }, - "score": 0.3936, - "shared_terms": [ - "test", - "tests", - "files", - "step", - "cases", - "file", - "cover", - "unit" - ] - }, { "a": { "kind": "agent", @@ -7565,7 +7730,7 @@ "kind": "command", "id": "prior-analysis" }, - "score": 0.3922, + "score": 0.3933, "shared_terms": [ "analyses", "prior", @@ -7580,22 +7745,22 @@ { "a": { "kind": "agent", - "id": "component-test-writer" + "id": "test-creator" }, "b": { "kind": "command", "id": "write-tests" }, - "score": 0.3844, + "score": 0.3866, "shared_terms": [ "test", "tests", - "vitest", - "conventions", + "files", + "step", + "cases", "file", - "write", - "render", - "component" + "cover", + "unit" ] }, { @@ -7607,7 +7772,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.384, + "score": 0.3846, "shared_terms": [ "kit", "chart", @@ -7622,22 +7787,22 @@ { "a": { "kind": "agent", - "id": "edge-case-generator" + "id": "component-test-writer" }, "b": { "kind": "command", "id": "write-tests" }, - "score": 0.3747, + "score": 0.3776, "shared_terms": [ "test", "tests", - "edge", - "files", - "cases", + "vitest", + "conventions", "file", - "existing", - "write" + "write", + "render", + "component" ] }, { @@ -7649,7 +7814,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.3733, + "score": 0.3748, "shared_terms": [ "dashboard", "planner", @@ -7670,7 +7835,7 @@ "kind": "agent", "id": "reference-validator" }, - "score": 0.3726, + "score": 0.3738, "shared_terms": [ "href", "page", @@ -7682,6 +7847,27 @@ "pdf" ] }, + { + "a": { + "kind": "agent", + "id": "edge-case-generator" + }, + "b": { + "kind": "command", + "id": "write-tests" + }, + "score": 0.3694, + "shared_terms": [ + "test", + "tests", + "edge", + "files", + "cases", + "file", + "existing", + "write" + ] + }, { "a": { "kind": "skill", @@ -7691,15 +7877,15 @@ "kind": "command", "id": "household-calc" }, - "score": 0.3679, + "score": 0.369, "shared_terms": [ "household", "income", "microsimulation", "tax", "reform", - "net", "level", + "net", "result" ] }, @@ -7712,18 +7898,39 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.3679, + "score": 0.3689, "shared_terms": [ "reform", "provision", "deployed", "structural", "parameter", - "parametric", "possible", + "parametric", "microsim" ] }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "agent", + "id": "review-worker" + }, + "score": 0.3634, + "shared_terms": [ + "review", + "canonical", + "program", + "delegation", + "coordinator", + "source", + "completion", + "evidence" + ] + }, { "a": { "kind": "agent", @@ -7733,7 +7940,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.355, + "score": 0.3555, "shared_terms": [ "kit", "components", @@ -7754,7 +7961,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.3503, + "score": 0.3511, "shared_terms": [ "components", "kit", @@ -7775,7 +7982,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.3496, + "score": 0.3508, "shared_terms": [ "bill", "reform", @@ -7789,23 +7996,23 @@ }, { "a": { - "kind": "agent", - "id": "ci-fixer" + "kind": "skill", + "id": "encode-policy-v2" }, "b": { "kind": "agent", - "id": "implementation-validator" + "id": "model-worker" }, - "score": 0.3471, + "score": 0.349, "shared_terms": [ - "root", - "fix", - "worktree", - "run", - "prefix", - "review", - "read", - "only" + "encode", + "coordinator", + "contract", + "delegation", + "canonical", + "owned", + "own", + "tests" ] }, { @@ -7817,7 +8024,7 @@ "kind": "skill", "id": "policyengine-user-guide" }, - "score": 0.347, + "score": 0.349, "shared_terms": [ "household", "income", @@ -7829,6 +8036,27 @@ "employment" ] }, + { + "a": { + "kind": "agent", + "id": "parameter-locator" + }, + "b": { + "kind": "agent", + "id": "reform-describer" + }, + "score": 0.3472, + "shared_terms": [ + "parameter", + "reform", + "ctc", + "gov", + "state", + "tax", + "credits", + "mechanical" + ] + }, { "a": { "kind": "skill", @@ -7838,7 +8066,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.3465, + "score": 0.347, "shared_terms": [ "zone", "next", @@ -7853,22 +8081,22 @@ { "a": { "kind": "agent", - "id": "parameter-locator" + "id": "ci-fixer" }, "b": { "kind": "agent", - "id": "reform-describer" + "id": "implementation-validator" }, - "score": 0.3456, + "score": 0.3454, "shared_terms": [ - "parameter", - "reform", - "ctc", - "gov", - "state", - "tax", - "credits", - "mechanical" + "root", + "fix", + "worktree", + "run", + "prefix", + "review", + "read", + "fixes" ] }, { @@ -7880,7 +8108,7 @@ "kind": "agent", "id": "implementation-validator" }, - "score": 0.3367, + "score": 0.3361, "shared_terms": [ "fix", "review", @@ -7888,8 +8116,8 @@ "read", "role", "code", - "verification", - "only" + "only", + "verification" ] }, { @@ -7901,7 +8129,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.3324, + "score": 0.3337, "shared_terms": [ "plan", "dashboard", @@ -7922,7 +8150,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.3277, + "score": 0.3299, "shared_terms": [ "household", "reform", @@ -7934,27 +8162,6 @@ "taxes" ] }, - { - "a": { - "kind": "agent", - "id": "policy-text-researcher" - }, - "b": { - "kind": "command", - "id": "encode-reform" - }, - "score": 0.3277, - "shared_terms": [ - "bill", - "reform", - "gov", - "bills", - "federal", - "number", - "state", - "baseline" - ] - }, { "a": { "kind": "skill", @@ -7964,12 +8171,12 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.3276, + "score": 0.3295, "shared_terms": [ "modal", "host", - "vercel", "app", + "vercel", "dashboard", "config", "next", @@ -7985,7 +8192,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.3275, + "score": 0.3293, "shared_terms": [ "component", "tsx", @@ -7997,6 +8204,27 @@ "kit" ] }, + { + "a": { + "kind": "agent", + "id": "policy-text-researcher" + }, + "b": { + "kind": "command", + "id": "encode-reform" + }, + "score": 0.3291, + "shared_terms": [ + "bill", + "reform", + "gov", + "bills", + "federal", + "number", + "state", + "baseline" + ] + }, { "a": { "kind": "agent", @@ -8006,7 +8234,7 @@ "kind": "command", "id": "analyze-policy" }, - "score": 0.3235, + "score": 0.3258, "shared_terms": [ "year", "microsim", @@ -8027,7 +8255,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.3193, + "score": 0.3215, "shared_terms": [ "host", "zone", @@ -8048,7 +8276,7 @@ "kind": "skill", "id": "policyengine-data" }, - "score": 0.3167, + "score": 0.3172, "shared_terms": [ "microcosm", "calibration", @@ -8069,7 +8297,7 @@ "kind": "command", "id": "reform-pipeline" }, - "score": 0.313, + "score": 0.3147, "shared_terms": [ "bill", "reform", @@ -8090,11 +8318,11 @@ "kind": "agent", "id": "pr-pusher" }, - "score": 0.3125, + "score": 0.3146, "shared_terms": [ "repo", - "head", "branch", + "head", "push", "issue", "number", @@ -8111,7 +8339,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.3094, + "score": 0.3113, "shared_terms": [ "bill", "reform", @@ -8123,27 +8351,6 @@ "description" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-design" - }, - "b": { - "kind": "skill", - "id": "policyengine-tools" - }, - "score": 0.3072, - "shared_terms": [ - "css", - "theme", - "postcss", - "kit", - "tailwindcss", - "app", - "tailwind", - "chart" - ] - }, { "a": { "kind": "agent", @@ -8153,7 +8360,7 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.3069, + "score": 0.3082, "shared_terms": [ "provisions", "parameter", @@ -8168,18 +8375,39 @@ { "a": { "kind": "skill", - "id": "policyengine-healthcare" + "id": "policyengine-design" }, "b": { "kind": "skill", - "id": "policyengine-us" + "id": "policyengine-tools" }, - "score": 0.3064, + "score": 0.3076, "shared_terms": [ - "unit", - "tax", - "medicaid", - "income", + "css", + "theme", + "postcss", + "kit", + "tailwindcss", + "app", + "tailwind", + "chart" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-healthcare" + }, + "b": { + "kind": "skill", + "id": "policyengine-us" + }, + "score": 0.3074, + "shared_terms": [ + "unit", + "tax", + "medicaid", + "income", "household", "aca", "net", @@ -8195,7 +8423,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.3063, + "score": 0.3074, "shared_terms": [ "kit", "css", @@ -8207,27 +8435,6 @@ "import" ] }, - { - "a": { - "kind": "agent", - "id": "implementation-validator" - }, - "b": { - "kind": "command", - "id": "backdate-program" - }, - "score": 0.306, - "shared_terms": [ - "program", - "root", - "worktree", - "review", - "read", - "only", - "prefix", - "phase" - ] - }, { "a": { "kind": "agent", @@ -8237,7 +8444,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.3035, + "score": 0.3058, "shared_terms": [ "dashboard", "modal", @@ -8249,27 +8456,6 @@ "step" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-model-development" - }, - "b": { - "kind": "agent", - "id": "test-creator" - }, - "score": 0.302, - "shared_terms": [ - "tests", - "test", - "variable", - "period", - "variables", - "periods", - "formula", - "year" - ] - }, { "a": { "kind": "agent", @@ -8279,18 +8465,39 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.302, + "score": 0.303, "shared_terms": [ "ctc", "provisions", "gov", + "reform", "ages", "federal", - "reform", "description", "text" ] }, + { + "a": { + "kind": "agent", + "id": "implementation-validator" + }, + "b": { + "kind": "command", + "id": "backdate-program" + }, + "score": 0.3028, + "shared_terms": [ + "program", + "worktree", + "root", + "review", + "read", + "only", + "prefix", + "phase" + ] + }, { "a": { "kind": "skill", @@ -8300,7 +8507,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.3016, + "score": 0.3026, "shared_terms": [ "tax", "income", @@ -8312,6 +8519,27 @@ "states" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-model-development" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.302, + "shared_terms": [ + "tests", + "variable", + "test", + "period", + "variables", + "periods", + "formula", + "year" + ] + }, { "a": { "kind": "skill", @@ -8321,7 +8549,7 @@ "kind": "agent", "id": "neutrality-reviewer" }, - "score": 0.2992, + "score": 0.2996, "shared_terms": [ "neutral", "neutrality", @@ -8342,7 +8570,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.2986, + "score": 0.2991, "shared_terms": [ "dashboard", "plan", @@ -8363,7 +8591,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.2968, + "score": 0.298, "shared_terms": [ "household", "income", @@ -8375,6 +8603,27 @@ "benefits" ] }, + { + "a": { + "kind": "skill", + "id": "fix-pr" + }, + "b": { + "kind": "agent", + "id": "review-worker" + }, + "score": 0.2956, + "shared_terms": [ + "review", + "canonical", + "role", + "delegation", + "workflow", + "assigned", + "code", + "program" + ] + }, { "a": { "kind": "agent", @@ -8384,7 +8633,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2926, + "score": 0.2928, "shared_terms": [ "reform", "dict", @@ -8396,27 +8645,6 @@ "emits" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-content" - }, - "b": { - "kind": "skill", - "id": "policyengine-design" - }, - "score": 0.2892, - "shared_terms": [ - "theme", - "teal", - "css", - "color", - "kit", - "chart", - "var", - "dark" - ] - }, { "a": { "kind": "agent", @@ -8426,7 +8654,7 @@ "kind": "command", "id": "audit-state-tax" }, - "score": 0.2889, + "score": 0.2912, "shared_terms": [ "state", "tax", @@ -8438,6 +8666,27 @@ "credits" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-content" + }, + "b": { + "kind": "skill", + "id": "policyengine-design" + }, + "score": 0.2894, + "shared_terms": [ + "theme", + "teal", + "css", + "color", + "kit", + "chart", + "var", + "dark" + ] + }, { "a": { "kind": "agent", @@ -8447,7 +8696,7 @@ "kind": "agent", "id": "implementation-validator" }, - "score": 0.2885, + "score": 0.2893, "shared_terms": [ "mode", "review", @@ -8468,7 +8717,7 @@ "kind": "command", "id": "audit-seo" }, - "score": 0.2876, + "score": 0.2893, "shared_terms": [ "audit", "zone", @@ -8477,7 +8726,7 @@ "path", "multi", "vercel", - "report" + "host" ] }, { @@ -8489,7 +8738,7 @@ "kind": "agent", "id": "pr-pusher" }, - "score": 0.287, + "score": 0.2875, "shared_terms": [ "changelog", "repo", @@ -8510,7 +8759,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2852, + "score": 0.2859, "shared_terms": [ "reform", "dict", @@ -8531,7 +8780,7 @@ "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.2832, + "score": 0.2846, "shared_terms": [ "app", "router", @@ -8552,7 +8801,7 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.2828, + "score": 0.2833, "shared_terms": [ "shape", "external", @@ -8564,27 +8813,6 @@ "published" ] }, - { - "a": { - "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "agent", - "id": "implementation-validator" - }, - "score": 0.2803, - "shared_terms": [ - "review", - "root", - "program", - "read", - "prefix", - "pdf", - "code", - "only" - ] - }, { "a": { "kind": "skill", @@ -8594,7 +8822,7 @@ "kind": "agent", "id": "dashboard-integrator" }, - "score": 0.2802, + "score": 0.2828, "shared_terms": [ "api", "household", @@ -8606,6 +8834,27 @@ "policyid" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-uk" + }, + "b": { + "kind": "skill", + "id": "policyengine-user-guide" + }, + "score": 0.281, + "shared_terms": [ + "household", + "income", + "poverty", + "tax", + "reform", + "benefits", + "benefit", + "population" + ] + }, { "a": { "kind": "skill", @@ -8615,7 +8864,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2798, + "score": 0.2806, "shared_terms": [ "kit", "app", @@ -8636,7 +8885,7 @@ "kind": "agent", "id": "reform-comparator" }, - "score": 0.2794, + "score": 0.2803, "shared_terms": [ "prior", "year", @@ -8648,27 +8897,6 @@ "result" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-uk" - }, - "b": { - "kind": "skill", - "id": "policyengine-user-guide" - }, - "score": 0.2792, - "shared_terms": [ - "household", - "income", - "poverty", - "tax", - "reform", - "benefits", - "benefit", - "population" - ] - }, { "a": { "kind": "skill", @@ -8678,7 +8906,7 @@ "kind": "skill", "id": "policyengine-uk" }, - "score": 0.2769, + "score": 0.2784, "shared_terms": [ "household", "canada", @@ -8692,23 +8920,23 @@ }, { "a": { - "kind": "agent", - "id": "ci-fixer" + "kind": "command", + "id": "reform-pipeline" }, "b": { "kind": "command", - "id": "backdate-program" + "id": "text-to-reform" }, - "score": 0.2759, + "score": 0.2768, "shared_terms": [ - "root", - "worktree", - "files", - "prefix", - "program", - "git", - "run", - "read" + "bill", + "reform", + "coverage", + "api", + "pipeline", + "end", + "analyze", + "federal" ] }, { @@ -8720,7 +8948,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2752, + "score": 0.276, "shared_terms": [ "app", "calculator", @@ -8734,44 +8962,23 @@ }, { "a": { - "kind": "command", - "id": "reform-pipeline" + "kind": "agent", + "id": "ci-fixer" }, "b": { "kind": "command", - "id": "text-to-reform" - }, - "score": 0.2752, - "shared_terms": [ - "bill", - "reform", - "coverage", - "api", - "pipeline", - "end", - "analyze", - "federal" - ] - }, - { - "a": { - "kind": "agent", - "id": "dashboard-architecture-validator" - }, - "b": { - "kind": "agent", - "id": "dashboard-plan-validator" + "id": "backdate-program" }, - "score": 0.2741, + "score": 0.2753, "shared_terms": [ - "grep", - "app", - "fail", - "include", - "components", - "tsx", - "test", - "node" + "worktree", + "root", + "files", + "prefix", + "program", + "git", + "run", + "read" ] }, { @@ -8783,7 +8990,7 @@ "kind": "command", "id": "reform-pipeline" }, - "score": 0.2741, + "score": 0.2751, "shared_terms": [ "bill", "reform", @@ -8804,7 +9011,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.274, + "score": 0.2748, "shared_terms": [ "kit", "app", @@ -8818,23 +9025,44 @@ }, { "a": { + "kind": "skill", + "id": "review-program" + }, + "b": { "kind": "agent", - "id": "ci-fixer" + "id": "implementation-validator" + }, + "score": 0.2744, + "shared_terms": [ + "review", + "root", + "program", + "read", + "prefix", + "pdf", + "only", + "code" + ] + }, + { + "a": { + "kind": "agent", + "id": "dashboard-architecture-validator" }, "b": { "kind": "agent", - "id": "test-creator" + "id": "dashboard-plan-validator" }, - "score": 0.2738, + "score": 0.274, "shared_terms": [ + "grep", + "app", + "fail", + "include", + "components", + "tsx", "test", - "tests", - "files", - "variable", - "cases", - "not", - "fix", - "contract" + "node" ] }, { @@ -8846,7 +9074,7 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.2727, + "score": 0.2731, "shared_terms": [ "structural", "backlog", @@ -8858,27 +9086,6 @@ "stop" ] }, - { - "a": { - "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "command", - "id": "backdate-program" - }, - "score": 0.2705, - "shared_terms": [ - "review", - "program", - "root", - "prefix", - "pdf", - "read", - "workflow", - "phase" - ] - }, { "a": { "kind": "agent", @@ -8888,7 +9095,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2705, + "score": 0.2725, "shared_terms": [ "modal", "dashboard", @@ -8900,6 +9107,27 @@ "data" ] }, + { + "a": { + "kind": "agent", + "id": "ci-fixer" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.2711, + "shared_terms": [ + "test", + "tests", + "files", + "variable", + "cases", + "not", + "fix", + "aggregation" + ] + }, { "a": { "kind": "skill", @@ -8909,7 +9137,7 @@ "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.2689, + "score": 0.2696, "shared_terms": [ "css", "postcss", @@ -8930,7 +9158,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.2679, + "score": 0.2687, "shared_terms": [ "income", "tax", @@ -8951,7 +9179,7 @@ "kind": "agent", "id": "reform-comparator" }, - "score": 0.2679, + "score": 0.2685, "shared_terms": [ "version", "result", @@ -8972,7 +9200,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2661, + "score": 0.2668, "shared_terms": [ "css", "theme", @@ -8981,7 +9209,7 @@ "font", "import", "tailwind", - "colors" + "app" ] }, { @@ -8993,7 +9221,7 @@ "kind": "agent", "id": "reform-comparator" }, - "score": 0.2645, + "score": 0.265, "shared_terms": [ "prior", "anchor", @@ -9005,27 +9233,6 @@ "scored" ] }, - { - "a": { - "kind": "agent", - "id": "ci-fixer" - }, - "b": { - "kind": "command", - "id": "write-tests" - }, - "score": 0.2645, - "shared_terms": [ - "test", - "files", - "tests", - "run", - "file", - "fix", - "failures", - "write" - ] - }, { "a": { "kind": "agent", @@ -9035,7 +9242,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.2637, + "score": 0.265, "shared_terms": [ "dashboard", "plan", @@ -9056,7 +9263,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2629, + "score": 0.264, "shared_terms": [ "reform", "dict", @@ -9071,22 +9278,22 @@ { "a": { "kind": "agent", - "id": "report-logger" + "id": "ci-fixer" }, "b": { "kind": "command", - "id": "analyze-policy" + "id": "write-tests" }, - "score": 0.2621, + "score": 0.2629, "shared_terms": [ - "log", - "archive", - "auto", - "analyst", - "country", - "default", - "prompt", - "app" + "test", + "files", + "tests", + "run", + "file", + "fix", + "failures", + "write" ] }, { @@ -9098,7 +9305,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2615, + "score": 0.262, "shared_terms": [ "project", "dashboard", @@ -9110,27 +9317,6 @@ "import" ] }, - { - "a": { - "kind": "agent", - "id": "ci-fixer" - }, - "b": { - "kind": "agent", - "id": "pr-pusher" - }, - "score": 0.2612, - "shared_terms": [ - "caller", - "formatting", - "files", - "fix", - "run", - "git", - "sources", - "commit" - ] - }, { "a": { "kind": "skill", @@ -9140,7 +9326,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.2604, + "score": 0.2612, "shared_terms": [ "household", "tax", @@ -9152,6 +9338,27 @@ "benefits" ] }, + { + "a": { + "kind": "agent", + "id": "ci-fixer" + }, + "b": { + "kind": "agent", + "id": "pr-pusher" + }, + "score": 0.2611, + "shared_terms": [ + "caller", + "files", + "formatting", + "fix", + "git", + "run", + "sources", + "commit" + ] + }, { "a": { "kind": "skill", @@ -9161,7 +9368,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2599, + "score": 0.261, "shared_terms": [ "app", "kit", @@ -9182,7 +9389,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2598, + "score": 0.2607, "shared_terms": [ "app", "kit", @@ -9194,6 +9401,27 @@ "design" ] }, + { + "a": { + "kind": "agent", + "id": "issue-manager" + }, + "b": { + "kind": "command", + "id": "create-pr" + }, + "score": 0.2592, + "shared_terms": [ + "branch", + "number", + "base", + "git", + "create", + "repo", + "title", + "head" + ] + }, { "a": { "kind": "command", @@ -9203,7 +9431,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2594, + "score": 0.2592, "shared_terms": [ "reform", "scorekeepers", @@ -9224,7 +9452,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2583, + "score": 0.2591, "shared_terms": [ "component", "plan", @@ -9236,6 +9464,27 @@ "embedding" ] }, + { + "a": { + "kind": "agent", + "id": "parameter-locator" + }, + "b": { + "kind": "agent", + "id": "policy-text-researcher" + }, + "score": 0.2575, + "shared_terms": [ + "gov", + "state", + "ctc", + "federal", + "reform", + "amount", + "brackets", + "legislative" + ] + }, { "a": { "kind": "command", @@ -9245,7 +9494,7 @@ "kind": "command", "id": "encode-reform" }, - "score": 0.2571, + "score": 0.257, "shared_terms": [ "prefix", "arguments", @@ -9260,43 +9509,22 @@ { "a": { "kind": "agent", - "id": "issue-manager" + "id": "report-logger" }, "b": { "kind": "command", - "id": "create-pr" + "id": "analyze-policy" }, - "score": 0.257, + "score": 0.2564, "shared_terms": [ - "branch", - "number", - "base", - "git", - "create", - "repo", - "head", - "title" - ] - }, - { - "a": { - "kind": "agent", - "id": "parameter-locator" - }, - "b": { - "kind": "agent", - "id": "policy-text-researcher" - }, - "score": 0.2566, - "shared_terms": [ - "gov", - "state", - "ctc", - "federal", - "reform", - "amount", - "brackets", - "legislative" + "log", + "archive", + "auto", + "analyst", + "country", + "default", + "prompt", + "data" ] }, { @@ -9308,58 +9536,58 @@ "kind": "agent", "id": "implementation-validator" }, - "score": 0.2555, + "score": 0.2551, "shared_terms": [ "review", "fix", "program", "encode", - "read", "structural", + "read", "code", - "worktree" + "mode" ] }, { "a": { - "kind": "agent", - "id": "model-corroborator" + "kind": "skill", + "id": "policyengine-prior-scores" }, "b": { "kind": "agent", - "id": "reform-comparator" + "id": "model-corroborator" }, - "score": 0.2543, + "score": 0.2551, "shared_terms": [ - "our", - "microsim", - "baseline", - "comparator", - "result", "reform", "scores", - "anchor" + "external", + "published", + "scored", + "shape", + "benchmark", + "stage" ] }, { "a": { - "kind": "skill", - "id": "policyengine-prior-scores" + "kind": "agent", + "id": "model-corroborator" }, "b": { "kind": "agent", - "id": "model-corroborator" + "id": "reform-comparator" }, - "score": 0.2542, + "score": 0.2548, "shared_terms": [ + "our", + "microsim", + "baseline", + "comparator", + "result", "reform", "scores", - "external", - "published", - "scored", - "shape", - "benchmark", - "stage" + "anchor" ] }, { @@ -9371,7 +9599,7 @@ "kind": "agent", "id": "dashboard-plan-validator" }, - "score": 0.254, + "score": 0.2546, "shared_terms": [ "plan", "api", @@ -9392,7 +9620,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.253, + "score": 0.2538, "shared_terms": [ "app", "component", @@ -9413,7 +9641,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2527, + "score": 0.2533, "shared_terms": [ "reform", "preset", @@ -9425,6 +9653,27 @@ "microsim" ] }, + { + "a": { + "kind": "skill", + "id": "review-program" + }, + "b": { + "kind": "command", + "id": "backdate-program" + }, + "score": 0.2526, + "shared_terms": [ + "review", + "program", + "root", + "prefix", + "pdf", + "read", + "workflow", + "phase" + ] + }, { "a": { "kind": "agent", @@ -9434,7 +9683,7 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.2522, + "score": 0.2523, "shared_terms": [ "plan", "kit", @@ -9446,6 +9695,27 @@ "tsx" ] }, + { + "a": { + "kind": "skill", + "id": "review-program" + }, + "b": { + "kind": "agent", + "id": "model-worker" + }, + "score": 0.2518, + "shared_terms": [ + "canonical", + "delegation", + "coordinator", + "work", + "role", + "own", + "model", + "evidence" + ] + }, { "a": { "kind": "skill", @@ -9455,7 +9725,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.2493, + "score": 0.2499, "shared_terms": [ "dashboard", "kit", @@ -9476,7 +9746,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2487, + "score": 0.2494, "shared_terms": [ "dashboard", "create", @@ -9497,7 +9767,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.2482, + "score": 0.2488, "shared_terms": [ "css", "config", @@ -9518,7 +9788,7 @@ "kind": "command", "id": "prior-analysis" }, - "score": 0.2462, + "score": 0.2468, "shared_terms": [ "prior", "scripts", @@ -9539,7 +9809,7 @@ "kind": "command", "id": "prior-analysis" }, - "score": 0.243, + "score": 0.2451, "shared_terms": [ "archive", "analyses", @@ -9548,49 +9818,7 @@ "local", "country", "analysis", - "jurisdiction" - ] - }, - { - "a": { - "kind": "agent", - "id": "pr-pusher" - }, - "b": { - "kind": "command", - "id": "create-pr" - }, - "score": 0.2427, - "shared_terms": [ - "branch", - "git", - "draft", - "commit", - "number", - "head", - "create", - "changelog" - ] - }, - { - "a": { - "kind": "agent", - "id": "program-reviewer" - }, - "b": { - "kind": "agent", - "id": "test-creator" - }, - "score": 0.2426, - "shared_terms": [ - "test", - "tests", - "program", - "government", - "step", - "variables", - "benefit", - "development" + "repo" ] }, { @@ -9602,7 +9830,7 @@ "kind": "agent", "id": "backend-builder" }, - "score": 0.2422, + "score": 0.2439, "shared_terms": [ "api", "client", @@ -9614,6 +9842,27 @@ "endpoint" ] }, + { + "a": { + "kind": "agent", + "id": "pr-pusher" + }, + "b": { + "kind": "command", + "id": "create-pr" + }, + "score": 0.2437, + "shared_terms": [ + "branch", + "git", + "draft", + "commit", + "number", + "head", + "create", + "changelog" + ] + }, { "a": { "kind": "skill", @@ -9623,7 +9872,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.2421, + "score": 0.2435, "shared_terms": [ "app", "host", @@ -9644,7 +9893,7 @@ "kind": "command", "id": "audit-state-tax" }, - "score": 0.2421, + "score": 0.242, "shared_terms": [ "pdf", "reference", @@ -9659,22 +9908,22 @@ { "a": { "kind": "agent", - "id": "component-test-writer" + "id": "program-reviewer" }, "b": { "kind": "agent", "id": "test-creator" }, - "score": 0.2398, + "score": 0.2412, "shared_terms": [ - "test", "tests", - "testing", - "expect", - "comprehensive", - "descriptive", - "names", - "cases" + "test", + "program", + "government", + "step", + "variables", + "benefit", + "development" ] }, { @@ -9686,7 +9935,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.2389, + "score": 0.2382, "shared_terms": [ "zone", "path", @@ -9695,28 +9944,28 @@ "multi", "fail", "validator", - "report" + "dashboard" ] }, { "a": { "kind": "agent", - "id": "ci-fixer" + "id": "backend-builder" }, "b": { "kind": "agent", - "id": "edge-case-generator" + "id": "dashboard-planner" }, - "score": 0.2381, + "score": 0.2361, "shared_terms": [ - "test", - "files", - "cases", - "case", - "tests", - "root", - "fix", - "name" + "dashboard", + "data", + "plan", + "api", + "step", + "json", + "pattern", + "results" ] }, { @@ -9728,15 +9977,15 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.2358, + "score": 0.2357, "shared_terms": [ "bill", "microsim", "reform", "analyze", "year", - "log", "url", + "log", "api" ] }, @@ -9749,7 +9998,7 @@ "kind": "skill", "id": "policyengine-api" }, - "score": 0.2348, + "score": 0.2353, "shared_terms": [ "household", "api", @@ -9764,22 +10013,43 @@ { "a": { "kind": "agent", - "id": "backend-builder" + "id": "ci-fixer" }, "b": { "kind": "agent", - "id": "dashboard-planner" + "id": "edge-case-generator" }, - "score": 0.2346, + "score": 0.2351, "shared_terms": [ - "dashboard", - "data", - "plan", - "api", - "step", - "json", - "pattern", - "results" + "test", + "files", + "case", + "cases", + "tests", + "root", + "fix", + "name" + ] + }, + { + "a": { + "kind": "agent", + "id": "component-test-writer" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.2335, + "shared_terms": [ + "test", + "tests", + "testing", + "expect", + "comprehensive", + "descriptive", + "names", + "integration" ] }, { @@ -9791,15 +10061,15 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2321, + "score": 0.2332, "shared_terms": [ "app", "css", "tailwind", "kit", "import", - "function", "bash", + "function", "globals" ] }, @@ -9812,7 +10082,7 @@ "kind": "agent", "id": "dashboard-integrator" }, - "score": 0.2319, + "score": 0.233, "shared_terms": [ "household", "api", @@ -9827,34 +10097,13 @@ { "a": { "kind": "agent", - "id": "document-collector" + "id": "reform-describer" }, "b": { - "kind": "agent", - "id": "program-reviewer" + "kind": "command", + "id": "text-to-reform" }, - "score": 0.2316, - "shared_terms": [ - "implementations", - "program", - "regulations", - "income", - "disregards", - "government", - "benefit", - "document" - ] - }, - { - "a": { - "kind": "agent", - "id": "reform-describer" - }, - "b": { - "kind": "command", - "id": "text-to-reform" - }, - "score": 0.2316, + "score": 0.233, "shared_terms": [ "reform", "description", @@ -9866,6 +10115,27 @@ "ctc" ] }, + { + "a": { + "kind": "agent", + "id": "document-collector" + }, + "b": { + "kind": "agent", + "id": "program-reviewer" + }, + "score": 0.2312, + "shared_terms": [ + "implementations", + "program", + "regulations", + "income", + "disregards", + "government", + "benefit", + "document" + ] + }, { "a": { "kind": "skill", @@ -9875,7 +10145,7 @@ "kind": "agent", "id": "multizone-validator" }, - "score": 0.2306, + "score": 0.231, "shared_terms": [ "app", "host", @@ -9887,27 +10157,6 @@ "server" ] }, - { - "a": { - "kind": "agent", - "id": "model-corroborator" - }, - "b": { - "kind": "agent", - "id": "prior-scores-finder" - }, - "score": 0.2298, - "shared_terms": [ - "reform", - "external", - "comparator", - "source", - "scores", - "tier", - "our", - "scored" - ] - }, { "a": { "kind": "skill", @@ -9917,7 +10166,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2283, + "score": 0.23, "shared_terms": [ "app", "host", @@ -9929,6 +10178,27 @@ "modal" ] }, + { + "a": { + "kind": "agent", + "id": "model-corroborator" + }, + "b": { + "kind": "agent", + "id": "prior-scores-finder" + }, + "score": 0.2297, + "shared_terms": [ + "reform", + "external", + "comparator", + "source", + "scores", + "tier", + "our", + "scored" + ] + }, { "a": { "kind": "skill", @@ -9938,7 +10208,7 @@ "kind": "skill", "id": "policyengine-healthcare" }, - "score": 0.228, + "score": 0.2293, "shared_terms": [ "household", "income", @@ -9959,7 +10229,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.2279, + "score": 0.2288, "shared_terms": [ "household", "canada", @@ -9968,49 +10238,49 @@ "income", "population", "net", - "not" + "microsimulation" ] }, { "a": { "kind": "agent", - "id": "dashboard-integrator" + "id": "component-test-writer" }, "b": { "kind": "agent", - "id": "dashboard-scaffold" + "id": "frontend-builder" }, - "score": 0.2265, + "score": 0.2276, "shared_terms": [ - "api", + "component", + "button", + "kit", + "app", "components", - "plan", - "data", - "client", - "structure", - "dashboard", - "step" + "tsx", + "react", + "import" ] }, { "a": { "kind": "agent", - "id": "component-test-writer" + "id": "dashboard-integrator" }, "b": { "kind": "agent", - "id": "frontend-builder" + "id": "dashboard-scaffold" }, - "score": 0.2261, + "score": 0.2275, "shared_terms": [ - "component", - "button", - "kit", - "app", + "api", "components", - "tsx", - "react", - "import" + "plan", + "data", + "client", + "structure", + "dashboard", + "step" ] }, { @@ -10022,7 +10292,7 @@ "kind": "command", "id": "reform-pipeline" }, - "score": 0.2252, + "score": 0.2261, "shared_terms": [ "bill", "auto", @@ -10034,6 +10304,48 @@ "default" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine" + }, + "b": { + "kind": "skill", + "id": "policyengine-canada" + }, + "score": 0.2247, + "shared_terms": [ + "household", + "income", + "tax", + "age", + "microsimulation", + "net", + "analysis", + "assert" + ] + }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "agent", + "id": "pr-pusher" + }, + "score": 0.2246, + "shared_terms": [ + "review", + "push", + "contract", + "encode", + "tests", + "draft", + "commit", + "approved" + ] + }, { "a": { "kind": "agent", @@ -10043,7 +10355,7 @@ "kind": "agent", "id": "dashboard-plan-validator" }, - "score": 0.2242, + "score": 0.2246, "shared_terms": [ "api", "components", @@ -10058,22 +10370,22 @@ { "a": { "kind": "skill", - "id": "policyengine" + "id": "policyengine-us" }, "b": { "kind": "skill", - "id": "policyengine-canada" + "id": "policyengine-user-guide" }, - "score": 0.2236, + "score": 0.2233, "shared_terms": [ "household", - "income", "tax", - "age", - "microsimulation", - "net", - "analysis", - "assert" + "income", + "poverty", + "reform", + "benefits", + "spm", + "population" ] }, { @@ -10085,7 +10397,7 @@ "kind": "command", "id": "reform-pipeline" }, - "score": 0.2224, + "score": 0.2231, "shared_terms": [ "dashboard", "reform", @@ -10097,46 +10409,25 @@ "dry" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-us" - }, - "b": { - "kind": "skill", - "id": "policyengine-user-guide" - }, - "score": 0.2221, - "shared_terms": [ - "household", - "tax", - "income", - "poverty", - "reform", - "benefits", - "spm", - "population" - ] - }, { "a": { "kind": "agent", - "id": "edge-case-generator" + "id": "program-reviewer" }, "b": { "kind": "agent", - "id": "program-reviewer" + "id": "review-worker" }, - "score": 0.2215, + "score": 0.2227, "shared_terms": [ - "income", - "tests", - "test", - "edge", - "program", "review", - "mode", - "cases" + "program", + "your", + "code", + "assigned", + "requirements", + "test", + "role" ] }, { @@ -10148,7 +10439,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2207, + "score": 0.2223, "shared_terms": [ "modal", "app", @@ -10169,16 +10460,37 @@ "kind": "agent", "id": "ci-fixer" }, - "score": 0.2202, + "score": 0.2219, "shared_terms": [ "fix", "files", "failures", "workflow", "review", - "root", "worktree", - "local" + "local", + "root" + ] + }, + { + "a": { + "kind": "agent", + "id": "edge-case-generator" + }, + "b": { + "kind": "agent", + "id": "program-reviewer" + }, + "score": 0.2196, + "shared_terms": [ + "income", + "tests", + "test", + "edge", + "program", + "review", + "mode", + "cases" ] }, { @@ -10190,7 +10502,7 @@ "kind": "agent", "id": "dashboard-plan-validator" }, - "score": 0.2197, + "score": 0.2193, "shared_terms": [ "zone", "path", @@ -10204,56 +10516,35 @@ }, { "a": { - "kind": "agent", - "id": "implementation-validator" + "kind": "skill", + "id": "policyengine-healthcare" }, "b": { - "kind": "agent", - "id": "program-reviewer" + "kind": "skill", + "id": "policyengine-uk" }, - "score": 0.2197, + "score": 0.219, "shared_terms": [ - "program", - "mode", - "review", - "code", - "findings", - "reviewer", - "read", - "pattern" + "household", + "income", + "tax", + "unit", + "net", + "person", + "credit", + "benefits" ] }, { "a": { "kind": "skill", - "id": "review-program" + "id": "policyengine-tools" }, "b": { - "kind": "agent", - "id": "ci-fixer" + "kind": "command", + "id": "create-new-component" }, - "score": 0.2185, - "shared_terms": [ - "root", - "review", - "prefix", - "workflow", - "run", - "test", - "local", - "files" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-tools" - }, - "b": { - "kind": "command", - "id": "create-new-component" - }, - "score": 0.2182, + "score": 0.2186, "shared_terms": [ "kit", "app", @@ -10265,27 +10556,6 @@ "components" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-healthcare" - }, - "b": { - "kind": "skill", - "id": "policyengine-uk" - }, - "score": 0.2176, - "shared_terms": [ - "household", - "income", - "tax", - "unit", - "net", - "person", - "credit", - "benefits" - ] - }, { "a": { "kind": "skill", @@ -10295,7 +10565,7 @@ "kind": "agent", "id": "microsim-runner" }, - "score": 0.2175, + "score": 0.2179, "shared_terms": [ "api", "economy", @@ -10307,27 +10577,6 @@ "org" ] }, - { - "a": { - "kind": "command", - "id": "prior-analysis" - }, - "b": { - "kind": "command", - "id": "prior-scores" - }, - "score": 0.2175, - "shared_terms": [ - "analyses", - "prior", - "analyze", - "scripts", - "archive", - "runs", - "running", - "change" - ] - }, { "a": { "kind": "agent", @@ -10337,7 +10586,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.2172, + "score": 0.2178, "shared_terms": [ "reform", "income", @@ -10358,7 +10607,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.2161, + "score": 0.2174, "shared_terms": [ "host", "zone", @@ -10370,6 +10619,48 @@ "rewrites" ] }, + { + "a": { + "kind": "command", + "id": "prior-analysis" + }, + "b": { + "kind": "command", + "id": "prior-scores" + }, + "score": 0.2171, + "shared_terms": [ + "analyses", + "prior", + "analyze", + "scripts", + "archive", + "runs", + "change", + "running" + ] + }, + { + "a": { + "kind": "agent", + "id": "implementation-validator" + }, + "b": { + "kind": "agent", + "id": "program-reviewer" + }, + "score": 0.2167, + "shared_terms": [ + "program", + "mode", + "review", + "code", + "findings", + "read", + "reviewer", + "pattern" + ] + }, { "a": { "kind": "agent", @@ -10379,7 +10670,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.2155, + "score": 0.2162, "shared_terms": [ "component", "components", @@ -10398,18 +10689,18 @@ }, "b": { "kind": "agent", - "id": "pr-pusher" + "id": "ci-fixer" }, - "score": 0.2149, + "score": 0.2135, "shared_terms": [ "review", - "push", - "encode", "contract", - "draft", - "commit", - "approved", - "fix" + "worktree", + "test", + "tests", + "run", + "fix", + "scope" ] }, { @@ -10418,19 +10709,19 @@ "id": "encode-policy-v2" }, "b": { - "kind": "command", - "id": "backdate-program" + "kind": "agent", + "id": "program-reviewer" }, - "score": 0.2121, + "score": 0.2129, "shared_terms": [ - "program", "review", - "worktree", - "arguments", - "read", - "research", - "pdf", - "dpi" + "program", + "tests", + "code", + "implementation", + "references", + "encode", + "coordinator" ] }, { @@ -10442,7 +10733,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.2112, + "score": 0.2121, "shared_terms": [ "app", "kit", @@ -10454,6 +10745,27 @@ "design" ] }, + { + "a": { + "kind": "skill", + "id": "review-program" + }, + "b": { + "kind": "agent", + "id": "program-reviewer" + }, + "score": 0.212, + "shared_terms": [ + "review", + "program", + "reviews", + "code", + "regulatory", + "workflow", + "reviewer", + "read" + ] + }, { "a": { "kind": "skill", @@ -10463,7 +10775,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.2111, + "score": 0.2116, "shared_terms": [ "kit", "design", @@ -10478,22 +10790,22 @@ { "a": { "kind": "skill", - "id": "review-program" + "id": "encode-policy-v2" }, "b": { - "kind": "agent", - "id": "program-reviewer" + "kind": "command", + "id": "backdate-program" }, - "score": 0.2094, + "score": 0.2103, "shared_terms": [ - "review", "program", - "reviews", - "code", - "regulatory", - "workflow", + "review", + "worktree", + "arguments", "read", - "references" + "research", + "pdf", + "dpi" ] }, { @@ -10505,7 +10817,7 @@ "kind": "command", "id": "new-tool" }, - "score": 0.2088, + "score": 0.2097, "shared_terms": [ "kit", "app", @@ -10517,25 +10829,46 @@ "import" ] }, + { + "a": { + "kind": "skill", + "id": "review-program" + }, + "b": { + "kind": "agent", + "id": "ci-fixer" + }, + "score": 0.2087, + "shared_terms": [ + "review", + "root", + "prefix", + "workflow", + "run", + "test", + "local", + "read" + ] + }, { "a": { "kind": "agent", - "id": "document-collector" + "id": "implementation-validator" }, "b": { - "kind": "command", - "id": "audit-state-tax" + "kind": "agent", + "id": "review-worker" }, - "score": 0.2049, + "score": 0.2058, "shared_terms": [ - "pdf", - "state", - "source", - "tmp", - "sources", - "income", - "documents", - "document" + "review", + "program", + "role", + "read", + "code", + "root", + "only", + "verification" ] }, { @@ -10547,7 +10880,7 @@ "kind": "command", "id": "audit-state-tax" }, - "score": 0.2039, + "score": 0.2055, "shared_terms": [ "tax", "state", @@ -10561,44 +10894,44 @@ }, { "a": { - "kind": "skill", - "id": "encode-policy-v2" + "kind": "agent", + "id": "document-collector" }, "b": { - "kind": "agent", - "id": "program-reviewer" + "kind": "command", + "id": "audit-state-tax" }, - "score": 0.2027, + "score": 0.2048, "shared_terms": [ - "program", - "review", - "code", - "implementation", - "tests", - "references", - "encode", - "independent" + "pdf", + "state", + "source", + "tmp", + "sources", + "income", + "documents", + "document" ] }, { "a": { - "kind": "agent", - "id": "parameter-locator" + "kind": "command", + "id": "create-dashboard" }, "b": { "kind": "command", - "id": "implement-structural" + "id": "deploy-dashboard" }, - "score": 0.2025, + "score": 0.2031, "shared_terms": [ - "gov", - "reform", - "states", - "rate", - "structural", - "phase", - "change", - "deployed" + "dashboard", + "repo", + "multi", + "step", + "plan", + "clone", + "confirm", + "path" ] }, { @@ -10610,7 +10943,7 @@ "kind": "agent", "id": "model-corroborator" }, - "score": 0.2021, + "score": 0.2028, "shared_terms": [ "calibration", "reform", @@ -10624,23 +10957,44 @@ }, { "a": { - "kind": "command", - "id": "create-dashboard" + "kind": "agent", + "id": "ci-fixer" }, "b": { - "kind": "command", - "id": "deploy-dashboard" + "kind": "agent", + "id": "model-worker" }, - "score": 0.2015, + "score": 0.2028, "shared_terms": [ - "dashboard", - "repo", - "multi", - "step", - "plan", - "clone", - "confirm", - "path" + "test", + "root", + "run", + "blocked", + "role", + "contract", + "manifest", + "encode" + ] + }, + { + "a": { + "kind": "agent", + "id": "parameter-locator" + }, + "b": { + "kind": "command", + "id": "implement-structural" + }, + "score": 0.2026, + "shared_terms": [ + "gov", + "reform", + "states", + "rate", + "structural", + "phase", + "change", + "deployed" ] }, { @@ -10652,7 +11006,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.2007, + "score": 0.2019, "shared_terms": [ "gov", "parameter", @@ -10673,7 +11027,7 @@ "kind": "agent", "id": "report-logger" }, - "score": 0.2003, + "score": 0.2007, "shared_terms": [ "issue", "country", @@ -10685,48 +11039,6 @@ "body" ] }, - { - "a": { - "kind": "agent", - "id": "program-reviewer" - }, - "b": { - "kind": "agent", - "id": "reference-validator" - }, - "score": 0.1987, - "shared_terms": [ - "requirements", - "program", - "income", - "review", - "correct", - "missing", - "implementations", - "manual" - ] - }, - { - "a": { - "kind": "agent", - "id": "structural-implementer" - }, - "b": { - "kind": "agent", - "id": "reform-classifier" - }, - "score": 0.1987, - "shared_terms": [ - "structural", - "backlog", - "parameter", - "model", - "amount", - "verdict", - "issue", - "deployed" - ] - }, { "a": { "kind": "agent", @@ -10736,7 +11048,7 @@ "kind": "agent", "id": "dashboard-planner" }, - "score": 0.1986, + "score": 0.1995, "shared_terms": [ "plan", "dashboard", @@ -10750,23 +11062,23 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-plugin-maintenance" + "kind": "agent", + "id": "structural-implementer" }, "b": { - "kind": "command", - "id": "write-tests" + "kind": "agent", + "id": "reform-classifier" }, - "score": 0.198, + "score": 0.1991, "shared_terms": [ - "test", - "tests", - "source", - "claude", - "repo", - "run", - "pytest", - "path" + "structural", + "parameter", + "backlog", + "model", + "amount", + "verdict", + "issue", + "reform" ] }, { @@ -10778,7 +11090,7 @@ "kind": "agent", "id": "report-logger" }, - "score": 0.1968, + "score": 0.1987, "shared_terms": [ "posts", "articles", @@ -10790,6 +11102,27 @@ "open" ] }, + { + "a": { + "kind": "agent", + "id": "program-reviewer" + }, + "b": { + "kind": "agent", + "id": "reference-validator" + }, + "score": 0.1975, + "shared_terms": [ + "requirements", + "program", + "income", + "correct", + "missing", + "review", + "implementations", + "manual" + ] + }, { "a": { "kind": "agent", @@ -10799,7 +11132,7 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.1962, + "score": 0.1965, "shared_terms": [ "issue", "structural", @@ -10811,6 +11144,48 @@ "analyze" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-plugin-maintenance" + }, + "b": { + "kind": "command", + "id": "write-tests" + }, + "score": 0.1953, + "shared_terms": [ + "test", + "tests", + "claude", + "source", + "repo", + "run", + "pytest", + "path" + ] + }, + { + "a": { + "kind": "agent", + "id": "component-test-writer" + }, + "b": { + "kind": "agent", + "id": "dashboard-design-validator" + }, + "score": 0.1951, + "shared_terms": [ + "tsx", + "components", + "button", + "kit", + "app", + "component", + "classname", + "test" + ] + }, { "a": { "kind": "agent", @@ -10820,7 +11195,7 @@ "kind": "agent", "id": "structural-implementer" }, - "score": 0.1944, + "score": 0.1948, "shared_terms": [ "changelog", "issue", @@ -10834,23 +11209,23 @@ }, { "a": { - "kind": "agent", - "id": "component-test-writer" + "kind": "command", + "id": "audit-state-tax" }, "b": { - "kind": "agent", - "id": "edge-case-generator" + "kind": "command", + "id": "backdate-program" }, - "score": 0.1943, + "score": 0.1944, "shared_terms": [ - "test", - "tests", - "edge", - "testing", - "cases", - "case", - "file", - "boundary" + "pdf", + "state", + "audit", + "phase", + "arguments", + "files", + "page", + "only" ] }, { @@ -10862,7 +11237,7 @@ "kind": "command", "id": "backdate-program" }, - "score": 0.1942, + "score": 0.1943, "shared_terms": [ "program", "page", @@ -10871,49 +11246,28 @@ "href", "parameter", "pdf", - "under" - ] - }, - { - "a": { - "kind": "agent", - "id": "component-test-writer" - }, - "b": { - "kind": "agent", - "id": "dashboard-design-validator" - }, - "score": 0.1941, - "shared_terms": [ - "tsx", - "components", - "button", - "kit", - "app", - "component", - "classname", - "test" + "yaml" ] }, { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "policyengine-user-guide" }, "b": { - "kind": "agent", - "id": "ci-fixer" + "kind": "command", + "id": "create-dashboard" }, "score": 0.1939, "shared_terms": [ - "worktree", - "review", - "contract", - "test", - "fix", - "encode", - "implementation", - "program" + "reform", + "calculator", + "household", + "charts", + "impact", + "poverty", + "build", + "income" ] }, { @@ -10925,13 +11279,13 @@ "kind": "command", "id": "audit-seo" }, - "score": 0.193, + "score": 0.1937, "shared_terms": [ "zone", "repo", "url", - "path", "legacy", + "path", "zones", "host", "mounted" @@ -10940,43 +11294,43 @@ { "a": { "kind": "skill", - "id": "policyengine-user-guide" + "id": "policyengine-tools" }, "b": { - "kind": "command", - "id": "create-dashboard" + "kind": "agent", + "id": "dashboard-design-validator" }, - "score": 0.1929, + "score": 0.1921, "shared_terms": [ - "reform", - "calculator", - "household", - "charts", - "impact", - "poverty", - "build", - "income" + "kit", + "app", + "css", + "components", + "tsx", + "design", + "dashboard", + "required" ] }, { "a": { - "kind": "command", - "id": "audit-state-tax" + "kind": "skill", + "id": "policyengine-tools" }, "b": { "kind": "command", - "id": "backdate-program" + "id": "audit-seo" }, - "score": 0.1929, + "score": 0.1921, "shared_terms": [ - "pdf", - "state", - "audit", - "phase", - "arguments", - "files", - "page", - "only" + "vercel", + "seo", + "zone", + "bun", + "org", + "standalone", + "url", + "app" ] }, { @@ -10988,7 +11342,7 @@ "kind": "agent", "id": "edge-case-generator" }, - "score": 0.1919, + "score": 0.1918, "shared_terms": [ "tests", "test", @@ -11000,6 +11354,27 @@ "add" ] }, + { + "a": { + "kind": "agent", + "id": "outcome-predictor" + }, + "b": { + "kind": "agent", + "id": "prior-scores-finder" + }, + "score": 0.1911, + "shared_terms": [ + "analyses", + "comparator", + "prior", + "reform", + "scores", + "blind", + "magnitude", + "you" + ] + }, { "a": { "kind": "skill", @@ -11009,7 +11384,7 @@ "kind": "command", "id": "backdate-program" }, - "score": 0.1916, + "score": 0.1909, "shared_terms": [ "review", "files", @@ -11024,64 +11399,22 @@ { "a": { "kind": "skill", - "id": "policyengine-tools" - }, - "b": { - "kind": "agent", - "id": "dashboard-design-validator" - }, - "score": 0.1916, - "shared_terms": [ - "kit", - "app", - "css", - "components", - "tsx", - "design", - "dashboard", - "config" - ] - }, - { - "a": { - "kind": "skill", - "id": "policyengine-tools" - }, - "b": { - "kind": "command", - "id": "audit-seo" - }, - "score": 0.1914, - "shared_terms": [ - "vercel", - "seo", - "zone", - "bun", - "org", - "standalone", - "url", - "app" - ] - }, - { - "a": { - "kind": "agent", - "id": "outcome-predictor" + "id": "policyengine-user-guide" }, "b": { "kind": "agent", - "id": "prior-scores-finder" + "id": "parameter-locator" }, - "score": 0.1902, + "score": 0.1908, "shared_terms": [ - "analyses", - "comparator", - "prior", "reform", - "scores", - "blind", - "magnitude", - "you" + "income", + "tax", + "states", + "parameter", + "state", + "rate", + "org" ] }, { @@ -11093,7 +11426,7 @@ "kind": "agent", "id": "dashboard-architecture-validator" }, - "score": 0.1901, + "score": 0.1898, "shared_terms": [ "backend", "modal", @@ -11107,44 +11440,44 @@ }, { "a": { - "kind": "skill", - "id": "review-program" + "kind": "agent", + "id": "issue-manager" }, "b": { - "kind": "command", - "id": "audit-state-tax" + "kind": "agent", + "id": "structural-implementer" }, - "score": 0.1899, + "score": 0.1893, "shared_terms": [ - "pdf", - "audit", - "source", - "local", - "diff", - "phase", - "posting", - "full" + "issue", + "repo", + "branch", + "base", + "draft", + "push", + "url", + "open" ] }, { "a": { - "kind": "skill", - "id": "policyengine-user-guide" + "kind": "agent", + "id": "component-test-writer" }, "b": { "kind": "agent", - "id": "parameter-locator" + "id": "edge-case-generator" }, - "score": 0.1894, + "score": 0.1891, "shared_terms": [ - "reform", - "income", - "tax", - "states", - "parameter", - "state", - "rate", - "org" + "test", + "tests", + "edge", + "testing", + "case", + "cases", + "file", + "boundary" ] }, { @@ -11156,7 +11489,7 @@ "kind": "agent", "id": "rules-engineer" }, - "score": 0.1885, + "score": 0.1887, "shared_terms": [ "program", "tanf", @@ -11177,7 +11510,7 @@ "kind": "skill", "id": "policyengine-model-development" }, - "score": 0.1874, + "score": 0.188, "shared_terms": [ "household", "age", @@ -11185,29 +11518,8 @@ "microsimulation", "income", "variables", - "model", - "year" - ] - }, - { - "a": { - "kind": "agent", - "id": "issue-manager" - }, - "b": { - "kind": "agent", - "id": "structural-implementer" - }, - "score": 0.1873, - "shared_terms": [ - "issue", - "repo", - "branch", - "base", - "draft", - "push", - "url", - "open" + "year", + "model" ] }, { @@ -11219,7 +11531,7 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.1855, + "score": 0.1865, "shared_terms": [ "microsim", "prior", @@ -11231,27 +11543,6 @@ "baseline" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-data" - }, - "b": { - "kind": "agent", - "id": "calibration-diagnostics" - }, - "score": 0.1853, - "shared_terms": [ - "microcosm", - "calibration", - "diagnostics", - "imputation", - "calibrated", - "weights", - "data", - "weighted" - ] - }, { "a": { "kind": "skill", @@ -11261,7 +11552,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.1852, + "score": 0.1857, "shared_terms": [ "income", "tax", @@ -11273,6 +11564,27 @@ "gov" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-data" + }, + "b": { + "kind": "agent", + "id": "calibration-diagnostics" + }, + "score": 0.1856, + "shared_terms": [ + "microcosm", + "calibration", + "diagnostics", + "imputation", + "calibrated", + "weights", + "data", + "weighted" + ] + }, { "a": { "kind": "agent", @@ -11282,7 +11594,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.1844, + "score": 0.1851, "shared_terms": [ "dashboard", "plan", @@ -11297,22 +11609,22 @@ { "a": { "kind": "skill", - "id": "policyengine-content" + "id": "encode-policy-v2" }, "b": { - "kind": "agent", - "id": "frontend-builder" + "kind": "skill", + "id": "policyengine-plugin-maintenance" }, - "score": 0.1843, + "score": 0.1849, "shared_terms": [ - "kit", - "teal", - "design", - "chart", - "system", - "css", - "app", - "import" + "claude", + "codex", + "routing", + "catalog", + "source", + "skills", + "tests", + "test" ] }, { @@ -11324,13 +11636,13 @@ "kind": "agent", "id": "frontend-builder" }, - "score": 0.1842, + "score": 0.1847, "shared_terms": [ "components", "frontend", "component", - "builder", "api", + "builder", "design", "chart", "step" @@ -11339,85 +11651,64 @@ { "a": { "kind": "skill", - "id": "policyengine-model-development" + "id": "policyengine-content" }, "b": { - "kind": "command", - "id": "implement-structural" + "kind": "agent", + "id": "frontend-builder" }, - "score": 0.1839, + "score": 0.1845, "shared_terms": [ - "formula", - "contrib", - "gov", - "bracket", - "parameters", - "run", - "reform", - "model" + "kit", + "teal", + "design", + "chart", + "system", + "css", + "app", + "import" ] }, { "a": { "kind": "agent", - "id": "document-collector" - }, - "b": { - "kind": "agent", - "id": "reference-validator" - }, - "score": 0.1837, - "shared_terms": [ - "pdf", - "source", - "citation", - "text", - "page", - "doc", - "authoritative", - "references" - ] - }, - { - "a": { - "kind": "agent", - "id": "model-corroborator" + "id": "model-corroborator" }, "b": { "kind": "command", "id": "household-calc" }, - "score": 0.1837, + "score": 0.1845, "shared_terms": [ "reform", "dict", "baseline", "external", "single", - "sources", "household", - "cap" + "cap", + "sources" ] }, { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "policyengine-model-development" }, "b": { - "kind": "skill", - "id": "policyengine-plugin-maintenance" + "kind": "command", + "id": "implement-structural" }, - "score": 0.1834, + "score": 0.1839, "shared_terms": [ - "claude", - "codex", - "source", - "skills", - "catalog", - "routing", - "tests", - "test" + "formula", + "contrib", + "gov", + "bracket", + "parameters", + "reform", + "run", + "model" ] }, { @@ -11429,7 +11720,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.1834, + "score": 0.1837, "shared_terms": [ "app", "config", @@ -11450,7 +11741,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.1834, + "score": 0.1835, "shared_terms": [ "repo", "multi", @@ -11462,6 +11753,27 @@ "arguments" ] }, + { + "a": { + "kind": "command", + "id": "audit-seo" + }, + "b": { + "kind": "command", + "id": "audit-state-tax" + }, + "score": 0.1833, + "shared_terms": [ + "audit", + "url", + "github", + "local", + "body", + "step", + "state", + "check" + ] + }, { "a": { "kind": "skill", @@ -11471,7 +11783,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.1826, + "score": 0.1828, "shared_terms": [ "reform", "preset", @@ -11485,23 +11797,65 @@ }, { "a": { - "kind": "command", - "id": "audit-seo" + "kind": "agent", + "id": "document-collector" + }, + "b": { + "kind": "agent", + "id": "reference-validator" + }, + "score": 0.1827, + "shared_terms": [ + "pdf", + "citation", + "text", + "source", + "page", + "doc", + "authoritative", + "document" + ] + }, + { + "a": { + "kind": "skill", + "id": "review-program" }, "b": { "kind": "command", "id": "audit-state-tax" }, - "score": 0.1822, + "score": 0.1816, "shared_terms": [ + "pdf", "audit", + "source", + "local", + "diff", + "phase", + "posting", + "full" + ] + }, + { + "a": { + "kind": "agent", + "id": "issue-manager" + }, + "b": { + "kind": "command", + "id": "audit-seo" + }, + "score": 0.1816, + "shared_terms": [ "url", + "repo", + "issue", + "title", + "open", + "search", "github", - "local", - "body", - "step", - "state", - "check" + "group" ] }, { @@ -11513,15 +11867,15 @@ "kind": "agent", "id": "pr-pusher" }, - "score": 0.1814, + "score": 0.1813, "shared_terms": [ "fix", "review", "push", "workflow", "pusher", - "local", "files", + "local", "never" ] }, @@ -11534,7 +11888,7 @@ "kind": "command", "id": "deploy-dashboard" }, - "score": 0.1804, + "score": 0.1811, "shared_terms": [ "branch", "git", @@ -11555,60 +11909,18 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.1803, + "score": 0.1802, "shared_terms": [ "reform", "contrib", "implement", "bill", "gov", - "encode", "arguments", + "encode", "phase" ] }, - { - "a": { - "kind": "agent", - "id": "program-reviewer" - }, - "b": { - "kind": "command", - "id": "backdate-program" - }, - "score": 0.1798, - "shared_terms": [ - "program", - "review", - "tanf", - "research", - "read", - "state", - "you", - "findings" - ] - }, - { - "a": { - "kind": "agent", - "id": "issue-manager" - }, - "b": { - "kind": "command", - "id": "audit-seo" - }, - "score": 0.179, - "shared_terms": [ - "url", - "repo", - "issue", - "title", - "open", - "search", - "github", - "group" - ] - }, { "a": { "kind": "skill", @@ -11618,7 +11930,7 @@ "kind": "skill", "id": "policyengine-plugin-maintenance" }, - "score": 0.1784, + "score": 0.1798, "shared_terms": [ "claude", "codex", @@ -11626,8 +11938,8 @@ "plugin", "skills", "verification", - "references", - "edit" + "edit", + "references" ] }, { @@ -11639,7 +11951,7 @@ "kind": "agent", "id": "calibration-diagnostics" }, - "score": 0.1774, + "score": 0.1782, "shared_terms": [ "unit", "tax", @@ -11654,64 +11966,64 @@ { "a": { "kind": "agent", - "id": "dashboard-planner" + "id": "program-reviewer" }, "b": { "kind": "command", - "id": "text-to-reform" + "id": "backdate-program" }, - "score": 0.1768, + "score": 0.1781, "shared_terms": [ - "reform", - "natural", - "language", - "description", - "provision", - "bill", - "api", - "analyze" + "program", + "review", + "tanf", + "research", + "state", + "read", + "you", + "findings" ] }, { "a": { "kind": "agent", - "id": "dashboard-architecture-validator" + "id": "dashboard-planner" }, "b": { "kind": "command", - "id": "write-tests" + "id": "text-to-reform" }, - "score": 0.1767, + "score": 0.1778, "shared_terms": [ - "test", - "app", - "path", - "package", - "module", - "files", - "bash", - "config" + "reform", + "natural", + "description", + "language", + "provision", + "bill", + "api", + "analyze" ] }, { "a": { - "kind": "agent", - "id": "implementation-validator" + "kind": "skill", + "id": "policyengine-api" }, "b": { - "kind": "command", - "id": "implement-structural" + "kind": "skill", + "id": "policyengine-app" }, - "score": 0.1765, + "score": 0.1769, "shared_terms": [ - "structural", - "mode", - "run", - "verification", - "phase", - "report", - "issue", - "read" + "api", + "app", + "org", + "economy", + "calc", + "household", + "client", + "params" ] }, { @@ -11723,7 +12035,7 @@ "kind": "command", "id": "text-to-reform" }, - "score": 0.1764, + "score": 0.1769, "shared_terms": [ "reform", "structural", @@ -11735,27 +12047,6 @@ "pre" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-api" - }, - "b": { - "kind": "skill", - "id": "policyengine-app" - }, - "score": 0.1762, - "shared_terms": [ - "api", - "app", - "org", - "economy", - "calc", - "client", - "household", - "params" - ] - }, { "a": { "kind": "command", @@ -11765,7 +12056,7 @@ "kind": "command", "id": "encode-reform" }, - "score": 0.1762, + "score": 0.1766, "shared_terms": [ "pdf", "state", @@ -11779,14 +12070,56 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-api" + "kind": "agent", + "id": "prior-scores-finder" + }, + "b": { + "kind": "command", + "id": "analyze-policy" + }, + "score": 0.1764, + "shared_terms": [ + "year", + "microsim", + "prior", + "archive", + "horizon", + "reform", + "scores", + "cost" + ] + }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.1763, + "shared_terms": [ + "tests", + "test", + "program", + "contract", + "development", + "references", + "not", + "model" + ] + }, + { + "a": { + "kind": "skill", + "id": "policyengine-api" }, "b": { "kind": "command", "id": "household-calc" }, - "score": 0.1759, + "score": 0.1763, "shared_terms": [ "household", "api", @@ -11807,7 +12140,7 @@ "kind": "agent", "id": "parameter-locator" }, - "score": 0.1755, + "score": 0.1761, "shared_terms": [ "reform", "parameter", @@ -11821,23 +12154,23 @@ }, { "a": { - "kind": "agent", - "id": "prior-scores-finder" + "kind": "skill", + "id": "policyengine-canada" }, "b": { - "kind": "command", - "id": "analyze-policy" + "kind": "skill", + "id": "policyengine-us" }, - "score": 0.1753, + "score": 0.1759, "shared_terms": [ - "year", - "microsim", - "prior", - "archive", - "horizon", - "reform", - "scores", - "cost" + "household", + "tax", + "income", + "credit", + "net", + "benefit", + "child", + "poverty" ] }, { @@ -11849,7 +12182,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.1752, + "score": 0.1758, "shared_terms": [ "auto", "horizon", @@ -11863,23 +12196,44 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-canada" + "kind": "agent", + "id": "model-worker" }, "b": { - "kind": "skill", - "id": "policyengine-us" + "kind": "agent", + "id": "test-creator" }, - "score": 0.1751, + "score": 0.1756, "shared_terms": [ - "household", - "tax", - "income", - "credit", - "net", - "benefit", - "child", - "poverty" + "test", + "tests", + "assigned", + "model", + "contract", + "cases", + "owned", + "manifest" + ] + }, + { + "a": { + "kind": "agent", + "id": "implementation-validator" + }, + "b": { + "kind": "command", + "id": "implement-structural" + }, + "score": 0.1753, + "shared_terms": [ + "structural", + "mode", + "run", + "phase", + "verification", + "report", + "issue", + "read" ] }, { @@ -11891,7 +12245,7 @@ "kind": "agent", "id": "microsim-runner" }, - "score": 0.1738, + "score": 0.1739, "shared_terms": [ "result", "dataset", @@ -11905,86 +12259,86 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-model-development" + "kind": "agent", + "id": "dashboard-architecture-validator" }, "b": { "kind": "command", "id": "write-tests" }, - "score": 0.1732, + "score": 0.1738, "shared_terms": [ - "tests", "test", - "write", - "run", - "pytest", - "repo", - "references", - "path" + "app", + "path", + "package", + "module", + "files", + "bash", + "config" ] }, { "a": { - "kind": "skill", - "id": "policyengine-research-lookup" + "kind": "agent", + "id": "issue-manager" }, "b": { - "kind": "skill", - "id": "policyengine-writing" + "kind": "agent", + "id": "report-logger" }, - "score": 0.1706, + "score": 0.1728, "shared_terms": [ - "blog", - "posts", - "post", - "research", - "writing", - "tax", - "harris", - "analysis" + "issue", + "repo", + "open", + "draft", + "github", + "url", + "explicit", + "prompt" ] }, { "a": { "kind": "skill", - "id": "policyengine-writing" + "id": "policyengine-user-guide" }, "b": { "kind": "command", - "id": "generate-content" + "id": "text-to-reform" }, - "score": 0.1706, + "score": 0.1714, "shared_terms": [ - "social", - "blog", - "post", - "posts", - "neutrality", - "content", - "writing", - "copy" + "reform", + "impact", + "link", + "analyze", + "org", + "reforms", + "parameter", + "into" ] }, { "a": { "kind": "agent", - "id": "component-test-writer" + "id": "program-reviewer" }, "b": { "kind": "agent", - "id": "dashboard-architecture-validator" + "id": "parameter-locator" }, - "score": 0.1702, + "score": 0.1711, "shared_terms": [ - "test", - "app", - "tsx", - "kit", - "import", - "components", - "classname", - "setup" + "income", + "state", + "amount", + "deductions", + "step", + "program", + "credits", + "tax" ] }, { @@ -11993,103 +12347,103 @@ "id": "policyengine-writing" }, "b": { - "kind": "agent", - "id": "reform-describer" + "kind": "command", + "id": "generate-content" }, - "score": 0.17, + "score": 0.171, "shared_terms": [ - "sentence", + "social", "blog", - "reform", + "post", + "posts", + "neutrality", + "content", "writing", - "neutral", - "advocacy", - "tax", - "descriptions" + "copy" ] }, { "a": { - "kind": "skill", - "id": "policyengine-user-guide" + "kind": "agent", + "id": "calibration-diagnostics" }, "b": { - "kind": "command", - "id": "text-to-reform" + "kind": "agent", + "id": "parameter-locator" }, - "score": 0.1698, + "score": 0.171, "shared_terms": [ + "state", + "income", + "tax", "reform", - "impact", - "link", - "analyze", - "org", - "reforms", + "ctc", "parameter", - "into" + "states", + "federal" ] }, { "a": { - "kind": "agent", - "id": "issue-manager" + "kind": "skill", + "id": "policyengine-model-development" }, "b": { - "kind": "agent", - "id": "report-logger" + "kind": "command", + "id": "write-tests" }, - "score": 0.1698, + "score": 0.1709, "shared_terms": [ - "issue", + "tests", + "test", + "write", + "run", + "pytest", "repo", - "open", - "draft", - "github", - "url", - "explicit", - "prompt" + "path", + "conventions" ] }, { "a": { - "kind": "agent", - "id": "program-reviewer" + "kind": "skill", + "id": "policyengine-research-lookup" }, "b": { - "kind": "agent", - "id": "parameter-locator" + "kind": "skill", + "id": "policyengine-writing" }, - "score": 0.1698, + "score": 0.1709, "shared_terms": [ - "income", - "state", - "amount", - "deductions", - "step", - "program", - "credits", - "tax" + "blog", + "posts", + "post", + "research", + "writing", + "tax", + "harris", + "analysis" ] }, { "a": { - "kind": "agent", - "id": "calibration-diagnostics" + "kind": "skill", + "id": "policyengine-writing" }, "b": { "kind": "agent", - "id": "parameter-locator" + "id": "reform-describer" }, - "score": 0.1697, + "score": 0.1701, "shared_terms": [ - "state", - "income", - "tax", + "sentence", + "blog", "reform", - "ctc", - "parameter", - "states", - "federal" + "writing", + "neutral", + "advocacy", + "tax", + "descriptions" ] }, { @@ -12101,18 +12455,60 @@ "kind": "agent", "id": "dashboard-integrator" }, - "score": 0.1691, + "score": 0.1695, "shared_terms": [ "household", "unit", "tax", - "spm", "income", + "spm", "person", "year", "state" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-healthcare" + }, + "b": { + "kind": "command", + "id": "household-calc" + }, + "score": 0.1689, + "shared_terms": [ + "household", + "net", + "income", + "reform", + "benefits", + "tax", + "year", + "single" + ] + }, + { + "a": { + "kind": "agent", + "id": "parameter-locator" + }, + "b": { + "kind": "command", + "id": "encode-reform" + }, + "score": 0.1683, + "shared_terms": [ + "reform", + "gov", + "states", + "state", + "federal", + "tax", + "phase", + "proposed" + ] + }, { "a": { "kind": "agent", @@ -12122,7 +12518,7 @@ "kind": "command", "id": "backdate-program" }, - "score": 0.1687, + "score": 0.1682, "shared_terms": [ "files", "program", @@ -12136,23 +12532,23 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-healthcare" + "kind": "agent", + "id": "policy-text-researcher" }, "b": { "kind": "command", - "id": "household-calc" + "id": "analyze-policy" }, - "score": 0.1679, + "score": 0.168, "shared_terms": [ - "household", - "net", - "income", - "reform", - "benefits", - "tax", + "bill", "year", - "single" + "arpa", + "federal", + "reform", + "ctc", + "text", + "phase" ] }, { @@ -12164,7 +12560,7 @@ "kind": "agent", "id": "dashboard-scaffold" }, - "score": 0.1675, + "score": 0.1679, "shared_terms": [ "tsx", "components", @@ -12185,7 +12581,7 @@ "kind": "command", "id": "create-new-component" }, - "score": 0.1675, + "score": 0.1679, "shared_terms": [ "kit", "dashboard", @@ -12199,65 +12595,86 @@ }, { "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { "kind": "agent", - "id": "backend-builder" + "id": "edge-case-generator" + }, + "score": 0.1678, + "shared_terms": [ + "review", + "tests", + "test", + "program", + "cases", + "read", + "existing", + "mode" + ] + }, + { + "a": { + "kind": "agent", + "id": "component-test-writer" }, "b": { - "kind": "command", - "id": "new-tool" + "kind": "agent", + "id": "dashboard-architecture-validator" }, - "score": 0.1671, + "score": 0.1678, "shared_terms": [ - "api", - "dashboard", - "create", - "export", - "precomputed", - "function", - "step", - "data" + "test", + "app", + "tsx", + "kit", + "import", + "components", + "classname", + "setup" ] }, { "a": { "kind": "agent", - "id": "parameter-locator" + "id": "review-worker" }, "b": { "kind": "command", - "id": "encode-reform" + "id": "backdate-program" }, - "score": 0.1671, + "score": 0.1676, "shared_terms": [ - "reform", - "gov", - "states", - "state", - "federal", - "tax", - "phase", - "proposed" + "program", + "review", + "read", + "root", + "only", + "you", + "role", + "workflow" ] }, { "a": { "kind": "agent", - "id": "policy-text-researcher" + "id": "backend-builder" }, "b": { "kind": "command", - "id": "analyze-policy" + "id": "new-tool" }, - "score": 0.1669, + "score": 0.1673, "shared_terms": [ - "bill", - "year", - "arpa", - "federal", - "reform", - "ctc", - "text", - "phase" + "api", + "dashboard", + "create", + "export", + "precomputed", + "function", + "step", + "data" ] }, { @@ -12269,7 +12686,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.1667, + "score": 0.167, "shared_terms": [ "reform", "year", @@ -12281,67 +12698,46 @@ "baseline" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-app" - }, - "b": { - "kind": "skill", - "id": "policyengine-design" - }, - "score": 0.166, - "shared_terms": [ - "app", - "tailwindcss", - "kit", - "theme", - "design", - "vite", - "tokens", - "colors" - ] - }, { "a": { "kind": "agent", - "id": "backend-builder" + "id": "model-worker" }, "b": { "kind": "command", "id": "write-tests" }, - "score": 0.1656, + "score": 0.1663, "shared_terms": [ "test", "tests", - "files", - "step", - "client", - "api", - "json", - "typescript" + "run", + "your", + "path", + "write", + "model", + "source" ] }, { "a": { - "kind": "agent", - "id": "implementation-validator" + "kind": "skill", + "id": "policyengine-app" }, "b": { - "kind": "agent", - "id": "pr-pusher" + "kind": "skill", + "id": "policyengine-design" }, - "score": 0.1651, + "score": 0.1661, "shared_terms": [ - "fix", - "review", - "run", - "only", - "caller", - "git", - "issues", - "program" + "app", + "tailwindcss", + "kit", + "theme", + "design", + "vite", + "tokens", + "colors" ] }, { @@ -12353,7 +12749,7 @@ "kind": "agent", "id": "dashboard-design-validator" }, - "score": 0.165, + "score": 0.1656, "shared_terms": [ "app", "tsx", @@ -12365,27 +12761,6 @@ "colors" ] }, - { - "a": { - "kind": "command", - "id": "create-dashboard" - }, - "b": { - "kind": "command", - "id": "household-calc" - }, - "score": 0.1646, - "shared_terms": [ - "reform", - "household", - "single", - "questions", - "income", - "arguments", - "under", - "preset" - ] - }, { "a": { "kind": "agent", @@ -12395,7 +12770,7 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.1644, + "score": 0.1653, "shared_terms": [ "dashboard", "reform", @@ -12409,44 +12784,44 @@ }, { "a": { - "kind": "agent", - "id": "policy-text-researcher" + "kind": "command", + "id": "create-dashboard" }, "b": { "kind": "command", - "id": "implement-structural" + "id": "household-calc" }, - "score": 0.1643, + "score": 0.1653, "shared_terms": [ - "enacted", - "gov", - "structural", - "effective", - "bill", "reform", - "date", - "draft" + "household", + "single", + "questions", + "income", + "arguments", + "preset", + "under" ] }, { "a": { - "kind": "skill", - "id": "review-program" + "kind": "agent", + "id": "implementation-validator" }, "b": { "kind": "agent", - "id": "reference-validator" + "id": "pr-pusher" }, - "score": 0.164, + "score": 0.1648, "shared_terms": [ - "pdf", + "fix", "review", - "reference", - "references", - "source", - "program", - "missing", - "text" + "run", + "only", + "caller", + "git", + "issues", + "program" ] }, { @@ -12458,13 +12833,13 @@ "kind": "agent", "id": "microsim-runner" }, - "score": 0.1639, + "score": 0.1648, "shared_terms": [ "api", "data", "response", - "request", "result", + "request", "year", "state", "step" @@ -12473,43 +12848,43 @@ { "a": { "kind": "agent", - "id": "implementation-validator" + "id": "policy-text-researcher" }, "b": { - "kind": "agent", - "id": "test-creator" + "kind": "command", + "id": "implement-structural" }, - "score": 0.1637, + "score": 0.1647, "shared_terms": [ - "fix", - "program", - "test", - "read", - "not", - "only", - "findings", - "variable" + "enacted", + "gov", + "structural", + "effective", + "bill", + "reform", + "date", + "draft" ] }, { "a": { "kind": "agent", - "id": "document-collector" + "id": "backend-builder" }, "b": { - "kind": "agent", - "id": "test-creator" + "kind": "command", + "id": "write-tests" }, - "score": 0.1634, + "score": 0.1646, "shared_terms": [ - "month", - "months", - "documentation", - "government", - "benefit", - "program", - "document", - "development" + "test", + "tests", + "files", + "step", + "client", + "api", + "json", + "typescript" ] }, { @@ -12521,7 +12896,7 @@ "kind": "agent", "id": "policy-text-researcher" }, - "score": 0.1634, + "score": 0.1639, "shared_terms": [ "enacted", "effective", @@ -12542,7 +12917,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.1629, + "score": 0.1639, "shared_terms": [ "reform", "description", @@ -12554,6 +12929,27 @@ "values" ] }, + { + "a": { + "kind": "agent", + "id": "implementation-validator" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.1636, + "shared_terms": [ + "fix", + "program", + "test", + "read", + "not", + "only", + "findings", + "variable" + ] + }, { "a": { "kind": "agent", @@ -12563,7 +12959,7 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.1622, + "score": 0.163, "shared_terms": [ "dashboard", "reform", @@ -12584,7 +12980,7 @@ "kind": "skill", "id": "policyengine-user-guide" }, - "score": 0.1619, + "score": 0.1629, "shared_terms": [ "household", "income", @@ -12596,6 +12992,27 @@ "poverty" ] }, + { + "a": { + "kind": "agent", + "id": "document-collector" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.1626, + "shared_terms": [ + "month", + "months", + "documentation", + "government", + "benefit", + "program", + "document", + "development" + ] + }, { "a": { "kind": "agent", @@ -12605,7 +13022,7 @@ "kind": "agent", "id": "reform-classifier" }, - "score": 0.1619, + "score": 0.1623, "shared_terms": [ "reform", "parameter", @@ -12617,6 +13034,27 @@ "ctc" ] }, + { + "a": { + "kind": "skill", + "id": "policyengine-standards" + }, + "b": { + "kind": "agent", + "id": "issue-manager" + }, + "score": 0.1622, + "shared_terms": [ + "repo", + "number", + "create", + "repository", + "draft", + "issue", + "never", + "title" + ] + }, { "a": { "kind": "agent", @@ -12626,7 +13064,7 @@ "kind": "agent", "id": "model-corroborator" }, - "score": 0.1613, + "score": 0.162, "shared_terms": [ "calibration", "reform", @@ -12647,7 +13085,7 @@ "kind": "command", "id": "audit-state-tax" }, - "score": 0.1612, + "score": 0.1616, "shared_terms": [ "pdf", "oregon", @@ -12656,28 +13094,49 @@ "full", "income", "gov", - "number" + "files" ] }, { "a": { "kind": "agent", - "id": "pr-pusher" + "id": "edge-case-generator" }, "b": { "kind": "agent", - "id": "test-creator" + "id": "review-worker" + }, + "score": 0.1611, + "shared_terms": [ + "test", + "review", + "assigned", + "program", + "read", + "one", + "only", + "model" + ] + }, + { + "a": { + "kind": "skill", + "id": "encode-policy-v2" + }, + "b": { + "kind": "command", + "id": "write-tests" }, - "score": 0.1607, + "score": 0.1606, "shared_terms": [ "tests", - "caller", - "commit", - "pusher", - "files", - "contract", + "test", + "source", + "run", "fix", - "commits" + "claude", + "existing", + "shared" ] }, { @@ -12689,12 +13148,12 @@ "kind": "command", "id": "backdate-program" }, - "score": 0.1604, + "score": 0.1606, "shared_terms": [ "page", "pdf", - "program", "reference", + "program", "review", "href", "phase", @@ -12704,43 +13163,64 @@ { "a": { "kind": "skill", - "id": "policyengine-standards" + "id": "review-program" }, "b": { "kind": "agent", - "id": "issue-manager" + "id": "reference-validator" }, - "score": 0.1602, + "score": 0.1605, "shared_terms": [ - "repo", - "number", - "create", - "repository", - "draft", - "issue", - "never", - "title" + "pdf", + "review", + "reference", + "references", + "source", + "validation", + "program", + "missing" + ] + }, + { + "a": { + "kind": "agent", + "id": "ci-fixer" + }, + "b": { + "kind": "agent", + "id": "review-worker" + }, + "score": 0.1605, + "shared_terms": [ + "test", + "review", + "blocked", + "root", + "role", + "evidence", + "program", + "read" ] }, { "a": { - "kind": "command", - "id": "audit-multizone" + "kind": "agent", + "id": "pr-pusher" }, "b": { - "kind": "command", - "id": "write-tests" + "kind": "agent", + "id": "test-creator" }, - "score": 0.159, + "score": 0.1598, "shared_terms": [ - "path", - "target", - "repo", - "test", - "app", - "config", - "bash", - "existing" + "tests", + "caller", + "commit", + "pusher", + "files", + "contract", + "fix", + "create" ] }, { @@ -12752,7 +13232,7 @@ "kind": "command", "id": "audit-multizone" }, - "score": 0.1584, + "score": 0.1586, "shared_terms": [ "dashboard", "zone", @@ -12764,6 +13244,27 @@ "repo" ] }, + { + "a": { + "kind": "command", + "id": "audit-multizone" + }, + "b": { + "kind": "command", + "id": "write-tests" + }, + "score": 0.1585, + "shared_terms": [ + "path", + "target", + "repo", + "test", + "app", + "config", + "bash", + "existing" + ] + }, { "a": { "kind": "agent", @@ -12773,7 +13274,7 @@ "kind": "agent", "id": "reference-validator" }, - "score": 0.1582, + "score": 0.158, "shared_terms": [ "pdf", "reference", @@ -12785,27 +13286,6 @@ "issues" ] }, - { - "a": { - "kind": "agent", - "id": "dashboard-integrator" - }, - "b": { - "kind": "command", - "id": "new-tool" - }, - "score": 0.157, - "shared_terms": [ - "api", - "const", - "function", - "import", - "return", - "countryid", - "export", - "create" - ] - }, { "a": { "kind": "skill", @@ -12815,18 +13295,39 @@ "kind": "skill", "id": "policyengine-uk" }, - "score": 0.1568, + "score": 0.1573, "shared_terms": [ "household", "entity", - "model", "age", + "model", "benunit", "person", "income", "canada" ] }, + { + "a": { + "kind": "agent", + "id": "review-worker" + }, + "b": { + "kind": "agent", + "id": "test-creator" + }, + "score": 0.157, + "shared_terms": [ + "test", + "assigned", + "program", + "model", + "needed", + "read", + "actual", + "development" + ] + }, { "a": { "kind": "skill", @@ -12836,7 +13337,7 @@ "kind": "agent", "id": "dashboard-design-validator" }, - "score": 0.1566, + "score": 0.1568, "shared_terms": [ "kit", "css", @@ -12848,6 +13349,48 @@ "node" ] }, + { + "a": { + "kind": "agent", + "id": "dashboard-integrator" + }, + "b": { + "kind": "command", + "id": "new-tool" + }, + "score": 0.1567, + "shared_terms": [ + "api", + "const", + "function", + "import", + "countryid", + "export", + "return", + "create" + ] + }, + { + "a": { + "kind": "agent", + "id": "prior-scores-finder" + }, + "b": { + "kind": "command", + "id": "text-to-reform" + }, + "score": 0.1567, + "shared_terms": [ + "reform", + "microsim", + "prior", + "bill", + "scores", + "reforms", + "same", + "not" + ] + }, { "a": { "kind": "agent", @@ -12857,7 +13400,7 @@ "kind": "command", "id": "implement-structural" }, - "score": 0.1564, + "score": 0.1565, "shared_terms": [ "reform", "original", @@ -12872,64 +13415,64 @@ { "a": { "kind": "skill", - "id": "encode-policy-v2" + "id": "fix-pr" }, "b": { "kind": "agent", - "id": "test-creator" + "id": "model-worker" }, - "score": 0.1563, + "score": 0.1561, "shared_terms": [ - "tests", - "test", - "program", + "role", + "canonical", + "delegation", + "workflow", + "assigned", + "worker", "references", - "contract", - "not", - "development", "read" ] }, { "a": { - "kind": "skill", - "id": "review-program" + "kind": "command", + "id": "audit-seo" }, "b": { "kind": "command", - "id": "encode-reform" + "id": "deploy-dashboard" }, - "score": 0.1563, + "score": 0.1561, "shared_terms": [ - "review", - "prefix", - "pdf", - "workflow", - "summary", - "full", - "phase", - "read" + "vercel", + "deploy", + "url", + "step", + "zone", + "host", + "app", + "check" ] }, { "a": { - "kind": "agent", - "id": "prior-scores-finder" + "kind": "command", + "id": "create-dashboard" }, "b": { "kind": "command", - "id": "text-to-reform" + "id": "encode-reform" }, - "score": 0.1563, + "score": 0.1556, "shared_terms": [ "reform", - "microsim", - "prior", - "bill", - "scores", - "reforms", - "same", - "not" + "page", + "multi", + "arguments", + "implement", + "phase", + "skip", + "workflow" ] }, { @@ -12941,7 +13484,7 @@ "kind": "agent", "id": "reform-describer" }, - "score": 0.1554, + "score": 0.1555, "shared_terms": [ "parameter", "description", @@ -12950,70 +13493,70 @@ "amount", "eligibility", "income", - "sentence" + "title" ] }, { "a": { "kind": "agent", - "id": "component-test-writer" + "id": "backend-builder" }, "b": { "kind": "agent", - "id": "dashboard-plan-validator" + "id": "microsim-runner" }, - "score": 0.1549, + "score": 0.1552, "shared_terms": [ - "component", - "tsx", - "test", - "components", - "app", - "chart", - "render", - "expect" + "data", + "api", + "json", + "client", + "response", + "step", + "results", + "reform" ] }, { "a": { - "kind": "command", - "id": "audit-seo" + "kind": "skill", + "id": "policyengine-uk" }, "b": { - "kind": "command", - "id": "deploy-dashboard" + "kind": "agent", + "id": "dashboard-integrator" }, - "score": 0.1549, + "score": 0.1548, "shared_terms": [ - "vercel", - "deploy", - "url", - "step", - "zone", - "host", - "app", - "check" + "household", + "income", + "person", + "unit", + "data", + "tax", + "age", + "spm" ] }, { "a": { - "kind": "command", - "id": "create-dashboard" - }, - "b": { - "kind": "command", - "id": "encode-reform" - }, - "score": 0.1548, - "shared_terms": [ - "reform", - "page", - "multi", - "implement", - "arguments", - "phase", - "skip", - "workflow" + "kind": "agent", + "id": "component-test-writer" + }, + "b": { + "kind": "agent", + "id": "dashboard-plan-validator" + }, + "score": 0.1546, + "shared_terms": [ + "component", + "tsx", + "test", + "components", + "app", + "chart", + "render", + "expect" ] }, { @@ -13027,8 +13570,8 @@ }, "score": 0.1543, "shared_terms": [ - "single", "baseline", + "single", "year", "reform", "microsim", @@ -13037,27 +13580,6 @@ "result" ] }, - { - "a": { - "kind": "agent", - "id": "backend-builder" - }, - "b": { - "kind": "agent", - "id": "microsim-runner" - }, - "score": 0.1542, - "shared_terms": [ - "data", - "api", - "json", - "client", - "response", - "step", - "results", - "reform" - ] - }, { "a": { "kind": "skill", @@ -13067,7 +13589,7 @@ "kind": "agent", "id": "structural-implementer" }, - "score": 0.1541, + "score": 0.1537, "shared_terms": [ "draft", "changelog", @@ -13075,71 +13597,50 @@ "venv", "ready", "issue", - "check", - "committing" + "committing", + "check" ] }, { "a": { "kind": "skill", - "id": "policyengine-uk" + "id": "policyengine-content" }, "b": { - "kind": "agent", - "id": "dashboard-integrator" - }, - "score": 0.1538, - "shared_terms": [ - "household", - "income", - "person", - "unit", - "data", - "tax", - "age", - "spm" - ] - }, - { - "a": { "kind": "skill", - "id": "review-program" - }, - "b": { - "kind": "agent", - "id": "pr-pusher" + "id": "policyengine-writing" }, - "score": 0.1537, + "score": 0.1535, "shared_terms": [ - "review", - "workflow", - "local", - "contract", - "run", - "head", - "program", - "repository" + "social", + "post", + "blog", + "copy", + "neutrality", + "writing", + "content", + "make" ] }, { "a": { "kind": "skill", - "id": "policyengine-content" + "id": "policyengine" }, "b": { - "kind": "skill", - "id": "policyengine-writing" + "kind": "command", + "id": "audit-state-tax" }, "score": 0.1533, "shared_terms": [ - "social", - "post", - "blog", - "copy", - "writing", - "neutrality", - "content", - "make" + "tax", + "state", + "income", + "year", + "result", + "revenue", + "gov", + "python" ] }, { @@ -13151,13 +13652,13 @@ "kind": "command", "id": "create-dashboard" }, - "score": 0.153, + "score": 0.1533, "shared_terms": [ "dashboard", "plan", "multi", - "path", "fail", + "path", "name", "api", "validates" @@ -13172,7 +13673,7 @@ "kind": "command", "id": "prior-scores" }, - "score": 0.1529, + "score": 0.1532, "shared_terms": [ "reform", "analyze", @@ -13193,7 +13694,7 @@ "kind": "agent", "id": "report-logger" }, - "score": 0.1523, + "score": 0.1531, "shared_terms": [ "analyses", "archive", @@ -13208,43 +13709,43 @@ { "a": { "kind": "skill", - "id": "policyengine" + "id": "policyengine-uk" }, "b": { - "kind": "command", - "id": "audit-state-tax" + "kind": "skill", + "id": "policyengine-writing" }, - "score": 0.1522, + "score": 0.153, "shared_terms": [ - "tax", - "state", + "poverty", "income", - "year", - "result", - "revenue", - "gov", - "python" + "tax", + "costs", + "household", + "net", + "writing", + "credit" ] }, { "a": { "kind": "skill", - "id": "policyengine-uk" + "id": "policyengine-user-guide" }, "b": { "kind": "skill", "id": "policyengine-writing" }, - "score": 0.1522, + "score": 0.1526, "shared_terms": [ - "poverty", + "reform", "income", + "poverty", + "benefits", "tax", - "costs", "household", "net", - "writing", - "credit" + "impacts" ] }, { @@ -13256,7 +13757,7 @@ "kind": "skill", "id": "policyengine-research-lookup" }, - "score": 0.1519, + "score": 0.1525, "shared_terms": [ "post", "blog", @@ -13268,27 +13769,6 @@ "research" ] }, - { - "a": { - "kind": "skill", - "id": "policyengine-user-guide" - }, - "b": { - "kind": "skill", - "id": "policyengine-writing" - }, - "score": 0.1517, - "shared_terms": [ - "reform", - "income", - "poverty", - "benefits", - "tax", - "household", - "net", - "impacts" - ] - }, { "a": { "kind": "agent", @@ -13298,7 +13778,7 @@ "kind": "agent", "id": "reform-classifier" }, - "score": 0.1514, + "score": 0.152, "shared_terms": [ "gov", "ctc", @@ -13310,27 +13790,6 @@ "provision" ] }, - { - "a": { - "kind": "agent", - "id": "ci-fixer" - }, - "b": { - "kind": "command", - "id": "encode-reform" - }, - "score": 0.1512, - "shared_terms": [ - "prefix", - "test", - "files", - "fixer", - "orchestrator", - "spec", - "encode", - "override" - ] - }, { "a": { "kind": "agent", @@ -13340,7 +13799,7 @@ "kind": "command", "id": "household-calc" }, - "score": 0.1512, + "score": 0.1515, "shared_terms": [ "reform", "version", @@ -13354,43 +13813,43 @@ }, { "a": { - "kind": "skill", - "id": "review-program" + "kind": "agent", + "id": "ci-fixer" }, "b": { "kind": "command", - "id": "audit-seo" + "id": "encode-reform" }, - "score": 0.151, + "score": 0.1514, "shared_terms": [ - "canonical", - "audit", - "local", - "report", - "read", - "url", - "github", - "findings" + "prefix", + "test", + "files", + "fixer", + "orchestrator", + "spec", + "override", + "encode" ] }, { "a": { - "kind": "skill", - "id": "encode-policy-v2" + "kind": "agent", + "id": "issue-manager" }, "b": { "kind": "command", "id": "audit-state-tax" }, - "score": 0.1509, + "score": 0.1513, "shared_terms": [ - "pdf", "state", - "source", - "official", - "audit", - "local", - "arguments", + "number", + "url", + "abbreviation", + "search", + "discover", + "mode", "phase" ] }, @@ -13403,7 +13862,7 @@ "kind": "skill", "id": "policyengine-us" }, - "score": 0.1502, + "score": 0.1509, "shared_terms": [ "entity", "household", @@ -13417,23 +13876,44 @@ }, { "a": { - "kind": "skill", - "id": "policyengine-model-development" + "kind": "agent", + "id": "microsim-runner" }, "b": { + "kind": "command", + "id": "analyze-policy" + }, + "score": 0.1502, + "shared_terms": [ + "year", + "default", + "economy", + "data", + "microsim", + "baseline", + "reform", + "api" + ] + }, + { + "a": { "kind": "agent", - "id": "structural-implementer" + "id": "report-logger" + }, + "b": { + "kind": "command", + "id": "audit-seo" }, - "score": 0.15, + "score": 0.1501, "shared_terms": [ - "tests", - "parameter", - "changelog", - "formula", - "encoding", - "bracket", - "contrib", - "model" + "issue", + "repo", + "open", + "github", + "local", + "report", + "app", + "step" ] } ], @@ -13762,8 +14242,10 @@ "./agents/country-models/edge-case-generator.md", "./agents/country-models/implementation-validator.md", "./agents/country-models/issue-manager.md", + "./agents/country-models/model-worker.md", "./agents/country-models/pr-pusher.md", "./agents/country-models/program-reviewer.md", + "./agents/country-models/review-worker.md", "./agents/country-models/rules-engineer.md", "./agents/country-models/structural-implementer.md", "./agents/country-models/test-creator.md", @@ -13833,8 +14315,10 @@ "./agents/country-models/edge-case-generator.md", "./agents/country-models/implementation-validator.md", "./agents/country-models/issue-manager.md", + "./agents/country-models/model-worker.md", "./agents/country-models/pr-pusher.md", "./agents/country-models/program-reviewer.md", + "./agents/country-models/review-worker.md", "./agents/country-models/rules-engineer.md", "./agents/country-models/structural-implementer.md", "./agents/country-models/test-creator.md", @@ -16724,7 +17208,9 @@ "document-collector", "edge-case-generator", "implementation-validator", + "model-worker", "program-reviewer", + "review-worker", "rules-engineer", "test-creator", "reference-validator" @@ -16732,7 +17218,7 @@ "commands": [ "write-tests" ], - "total": 16 + "total": 18 }, { "name": "energy-price-shock", @@ -17196,8 +17682,10 @@ "edge-case-generator", "implementation-validator", "issue-manager", + "model-worker", "pr-pusher", "program-reviewer", + "review-worker", "rules-engineer", "structural-implementer", "test-creator", @@ -17239,7 +17727,7 @@ "text-to-reform", "write-tests" ], - "total": 70 + "total": 72 }, { "name": "policyengine.py", diff --git a/docs/when-to-use.md b/docs/when-to-use.md index b027f7e..eccf768 100644 --- a/docs/when-to-use.md +++ b/docs/when-to-use.md @@ -1,6 +1,6 @@ # When to use what -The PolicyEngine plugin ships 20 command files, 34 agents, and 23 skills (20 knowledge skills plus the three workflow skills, consolidated from 53 in the July 2026 rebuild). The `/encode-policy-v2`, `/review-program`, and `/fix-pr` entries are provided directly by skills: each name resolves to a skill whose `references/workflow.md` is the canonical definition, with no duplicate command stub. Most days you'll only use 3-5 entry points. This guide maps common work to the right one. +The PolicyEngine plugin ships 20 command files, 36 agents, and 23 skills (20 knowledge skills plus the three workflow skills, consolidated from 53 in the July 2026 rebuild). The `/encode-policy-v2`, `/review-program`, and `/fix-pr` entries are provided directly by skills: each name resolves to a skill whose `references/workflow.md` is the canonical definition, with no duplicate command stub. Most days you'll only use 3-5 entry points. This guide maps common work to the right one. ## Quick decision matrix diff --git a/skills/encode-policy-v2/references/claude-launcher.md b/skills/encode-policy-v2/references/claude-launcher.md index 2251c87..9eb9ada 100644 --- a/skills/encode-policy-v2/references/claude-launcher.md +++ b/skills/encode-policy-v2/references/claude-launcher.md @@ -21,8 +21,9 @@ adding stages, audits, test commands or approval prompts. profile (Skill access, no delegation or web tools) with the full canonical role, exact owned paths, artifact contracts, relevant skill sections, concrete `WORKTREE_ROOT`, `WORKTREE_ID`, `RUN_ROOT`, `PREFIX` and local/publication mode. If that profile is not - installed, use `general-purpose` with an explicit no-delegation instruction and record - the substitution. A specialized standalone agent is not required and must not add its + installed, or cannot be spawned as a retained named worker in this runtime, use + `general-purpose` with an explicit no-delegation instruction and record the + substitution. A specialized standalone agent is not required and must not add its own audits, dependency sync, formatting, test suites, commits or pushes to this role contract. Give both workers the same shared contract block; do not paraphrase it per worker. @@ -40,10 +41,11 @@ adding stages, audits, test commands or approval prompts. each worker's `{PREFIX}-encode-progress-{role}.log`; routine progress can also arrive by message or artifact; a partial report is not DONE. If delegation is unavailable, perform the roles directly, retaining independent review context. -- Run the test runner through `run_bounded.py --seconds 600` with the Bash tool's - `timeout` set above that deadline (milliseconds, up to 600000) and output redirected - to the log; the default two-minute Bash limit kills a program suite mid-run and - discards its status. Pass the same instruction to workers for their single self-check. +- Run the test runner through `run_bounded.py --seconds 540` with the Bash tool's + `timeout` at its 600000-millisecond maximum, so the wrapper's deadline fires first and + its exit-status line survives; redirect output to the log. The default two-minute Bash + limit kills a program suite mid-run and discards its status. Pass the same instruction + to workers for their single self-check. - Invoke review-program in a fresh `general-purpose` coordinator with its exact local or published arguments, approved scope, captured head, source manifest and runtime constraints. Require that coordinator to load both review-program and model-development diff --git a/skills/encode-policy-v2/references/workflow.md b/skills/encode-policy-v2/references/workflow.md index 3de9142..7fc20ec 100644 --- a/skills/encode-policy-v2/references/workflow.md +++ b/skills/encode-policy-v2/references/workflow.md @@ -108,7 +108,8 @@ not unaffected research. A workflow-contract change requires reassessing old com markers; legacy role names alone do not establish that the new gates passed. Use the review-program skill's `scripts/run_bounded.py` for networked Git/GitHub commands -with a 60-second deadline and for test-runner invocations with a 600-second deadline. +with a 60-second deadline and for test-runner invocations with a 540-second deadline, +below the runtime's tool timeout so the wrapper's exit status is always recorded. Resolve that installed skill directory as `REVIEW_SKILL_ROOT`. A failed fetch/read is not an empty result; retry a transient setup failure once, then report the blocker. Scope GitHub reads/writes explicitly to `BASE_REPO`. @@ -289,8 +290,8 @@ The coordinator's invocation is the run of record. A worker may run its owned te at most once per task as a self-check before reporting DONE, in one bounded invocation; it never loops over files one at a time, repeats an unchanged set to recover lost output, or runs another owner's files. Every invocation uses the bounded helper with a -600-second deadline and a tool timeout above it, writes combined output to a log under -RUN_ROOT, and reads back the summary line and failures. Do not pipe the runner through +540-second deadline and the tool timeout at its maximum above it, writes combined output +to a log under RUN_ROOT, and reads back the summary line and failures. Do not pipe the runner through `tail`, detach it, or rely on a default two-minute tool limit; each loses the exit status and forces a repeat. Record the number of runner invocations and their total time in the CI status so repeated runs stay visible. diff --git a/skills/review-program/references/claude-launcher.md b/skills/review-program/references/claude-launcher.md index 452504e..8567a1b 100644 --- a/skills/review-program/references/claude-launcher.md +++ b/skills/review-program/references/claude-launcher.md @@ -33,9 +33,10 @@ to Claude Code; it adds no review stages or completion gates. the call is rejected and each retry costs about a minute. Unnamed reviewers are identified by their progress-log path. - **Test runs**: the code reviewer invokes the runner once through - `run_bounded.py --seconds 600` with the Bash tool's `timeout` set above that deadline - (milliseconds, up to 600000) and output redirected to its log; the default two-minute - Bash limit kills a program suite mid-run and discards its status. + `run_bounded.py --seconds 540` with the Bash tool's `timeout` at its 600000-millisecond + maximum, so the wrapper's deadline fires first and its exit-status line survives, and + output redirected to its log; the default two-minute Bash limit kills a program suite + mid-run and discards its status. - **Model-development loading**: the country-model review coordinator and reviewers invoke the resolved installed skill with the `Skill` tool in their own context, then read the relevant references. Require canonical `SKILLS_READY` evidence before accepting their work. A worker without diff --git a/skills/review-program/references/workflow.md b/skills/review-program/references/workflow.md index 00fde64..6fade63 100644 --- a/skills/review-program/references/workflow.md +++ b/skills/review-program/references/workflow.md @@ -346,8 +346,8 @@ coverage. Trace suspicious cases through dependencies. Run the changed tests and directly relevant regression tests in one runner invocation (pass every path to the same command; each invocation pays the model's import cost), writing full output to a log under `RUN_ROOT` and reading back only the summary line and failures. Use -`scripts/run_bounded.py --seconds 600 COMMAND ...` with combined stdout/stderr captured -in that log and a tool timeout longer than the subprocess deadline. The wrapper records +`scripts/run_bounded.py --seconds 540 COMMAND ...` with combined stdout/stderr captured +in that log and the tool timeout at its maximum, above the subprocess deadline. The wrapper records exit status and elapsed time on the first execution. Do not detach with `nohup` or shell `&`, or pipe through `tail` and lose the runner's status. Add a small reproduction when useful. If the environment is unavailable, report tests NOT RUN; do diff --git a/targets/claude/agents/country-models/review-worker.md b/targets/claude/agents/country-models/review-worker.md index c245c60..0a84512 100644 --- a/targets/claude/agents/country-models/review-worker.md +++ b/targets/claude/agents/country-models/review-worker.md @@ -1,7 +1,7 @@ --- name: review-worker description: Executes one assigned policy/source or code/test role from review-program, with skill access and no delegation tools -tools: Bash, Read, Write, Edit, Grep, Glob, WebFetch, WebSearch, Skill, ToolSearch, SendMessage +tools: Bash, Read, Write, Grep, Glob, WebFetch, WebSearch, Skill, ToolSearch, SendMessage disallowedTools: Agent, Task model: inherit --- diff --git a/targets/claude/hooks/model-development-context.py b/targets/claude/hooks/model-development-context.py index 1dab186..a7cd398 100644 --- a/targets/claude/hooks/model-development-context.py +++ b/targets/claude/hooks/model-development-context.py @@ -9,41 +9,48 @@ import sys -def main(): - event = json.load(sys.stdin) +PACKAGES = ("policyengine_us", "policyengine_uk", "policyengine_canada") +EVENTS = {"SessionStart", "SubagentStart"} +CONTEXT = ( + "This is a PolicyEngine country-model repository. Model implementation, " + "test-authoring and review roles, including encoding/review coordinators, " + "require policyengine-model-development loaded with the Skill tool in each " + "agent's own context before substantive work, followed by its " + "relevant references. Resolve the available installed skill name and follow " + "references/agent-loading.md: SKILLS_READY includes successful load evidence; " + "SKILLS_BLOCKED identifies an unavailable skill/tool before substantive work. " + "A parent load, dispatch instruction or agent type is not proof of a worker " + "load. The active workflow owns agent selection and stages; this reminder " + "does not add validators, fixers or pushers, or itself load any skills." +) + + +def context_for(event: dict) -> dict | None: + """Return the hook output for a country-model checkout, otherwise None.""" name = event.get("hook_event_name") - if name not in {"SessionStart", "SubagentStart"}: - return - cwd = Path(event["cwd"]).resolve() - packages = ("policyengine_us", "policyengine_uk", "policyengine_canada") + cwd = event.get("cwd") + if name not in EVENTS or not isinstance(cwd, str) or not cwd: + return None + root = Path(cwd).resolve() if not any( - (root / package).is_dir() - for root in (cwd, *cwd.parents) - for package in packages + (candidate / package).is_dir() + for candidate in (root, *root.parents) + for package in PACKAGES ): + return None + return {"hookSpecificOutput": {"hookEventName": name, "additionalContext": CONTEXT}} + + +def main() -> None: + try: + event = json.load(sys.stdin) + except (ValueError, OSError): + return # A malformed or empty event never produces output or an error. + if not isinstance(event, dict): return - context = ( - "This is a PolicyEngine country-model repository. Model implementation, " - "test-authoring and review roles, including encoding/review coordinators, " - "require policyengine-model-development loaded with the Skill tool in each " - "agent's own context before substantive work, followed by its " - "relevant references. Resolve the available installed skill name and follow " - "references/agent-loading.md: SKILLS_READY includes successful load evidence; " - "SKILLS_BLOCKED identifies an unavailable skill/tool before substantive work. " - "A parent load, dispatch instruction or agent type is not proof of a worker " - "load. The active workflow owns agent selection and stages; this reminder " - "does not add validators, fixers or pushers, or itself load any skills." - ) - print( - json.dumps( - { - "hookSpecificOutput": { - "hookEventName": name, - "additionalContext": context, - } - } - ) - ) + output = context_for(event) + if output is not None: + print(json.dumps(output)) if __name__ == "__main__": diff --git a/tests/test_model_development_hook.py b/tests/test_model_development_hook.py new file mode 100644 index 0000000..881c322 --- /dev/null +++ b/tests/test_model_development_hook.py @@ -0,0 +1,63 @@ +from __future__ import annotations + +import json +import subprocess +import sys +from pathlib import Path + +HOOK = ( + Path(__file__).resolve().parent.parent + / "targets" + / "claude" + / "hooks" + / "model-development-context.py" +) + + +def run_hook(stdin: str) -> subprocess.CompletedProcess[str]: + return subprocess.run( + [sys.executable, str(HOOK)], + input=stdin, + capture_output=True, + text=True, + timeout=30, + ) + + +def test_adds_context_inside_a_country_model_checkout(tmp_path: Path) -> None: + (tmp_path / "policyengine_us").mkdir() + nested = tmp_path / "policyengine_us" / "variables" + nested.mkdir() + for event_name in ("SessionStart", "SubagentStart"): + result = run_hook( + json.dumps({"hook_event_name": event_name, "cwd": str(nested)}) + ) + assert result.returncode == 0, result.stderr + output = json.loads(result.stdout)["hookSpecificOutput"] + assert output["hookEventName"] == event_name + assert "policyengine-model-development" in output["additionalContext"] + assert "SKILLS_READY" in output["additionalContext"] + + +def test_stays_silent_outside_country_models(tmp_path: Path) -> None: + result = run_hook( + json.dumps({"hook_event_name": "SessionStart", "cwd": str(tmp_path)}) + ) + assert result.returncode == 0 + assert result.stdout == "" + assert result.stderr == "" + + +def test_ignores_other_events_and_bad_input(tmp_path: Path) -> None: + (tmp_path / "policyengine_uk").mkdir() + for stdin in ( + json.dumps({"hook_event_name": "PostToolUse", "cwd": str(tmp_path)}), + json.dumps({"hook_event_name": "SessionStart"}), + "not json", + "", + "[]", + ): + result = run_hook(stdin) + assert result.returncode == 0, (stdin, result.stderr) + assert result.stdout == "" + assert result.stderr == ""