@event4u/agent-config 14.12.0 → 14.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +118 -155
- package/CONTRIBUTING.md +38 -0
- package/CREDITS.md +135 -0
- package/NOTICE +13 -0
- package/README.md +8 -6
- package/dist/agent-src/commands/analyze/inbox.md +145 -2
- package/dist/agent-src/commands/feature/dev.md +7 -2
- package/dist/agent-src/commands/ghostwriter/write.md +5 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/orchestrate.md +2 -2
- package/dist/agent-src/commands/post-as/me.md +5 -1
- package/dist/agent-src/commands/pr/merge.md +19 -6
- package/dist/agent-src/commands/roadmap/process-full.md +19 -5
- package/dist/agent-src/commands/tdd/red.md +12 -2
- package/dist/agent-src/commands/work.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -0
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
- package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
- package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/broken-access-control.md +4 -0
- package/dist/agent-src/rules/code-comment-discipline.md +6 -0
- package/dist/agent-src/rules/code-provenance.md +4 -0
- package/dist/agent-src/rules/design-fidelity.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +4 -0
- package/dist/agent-src/rules/domain-safety-retention.md +4 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
- package/dist/agent-src/rules/improve-before-implement.md +6 -8
- package/dist/agent-src/rules/laravel-routing.md +1 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +12 -34
- package/dist/agent-src/rules/symfony-routing.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +14 -0
- package/dist/agent-src/rules/tool-safety.md +4 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +252 -8
- package/dist/agent-src/scripts/guarded_baseline.ts +343 -0
- package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/dist/agent-src/scripts/stub_queue.ts +82 -0
- package/dist/agent-src/scripts/stubs_due.ts +516 -0
- package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +16 -12
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
- package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
- package/dist/agent-src/skills/database/SKILL.md +8 -0
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
- package/dist/agent-src/skills/design-review/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +17 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
- package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
- package/dist/agent-src/skills/laravel/SKILL.md +35 -0
- package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/procedure.md +5 -5
- package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
- package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
- package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +45 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +97 -3
- package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/dist/cli/commands/uiAudit.js +124 -5
- package/dist/cli/registry.js +2 -0
- package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
- package/dist/cli-delegate/{chunk-JCW7ZLHK.js → chunk-4FS4WRXP.js} +5 -0
- package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
- package/dist/cli-delegate/{chunk-JJA2QEWA.js → chunk-AKJGUQNO.js} +466 -285
- package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
- package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
- package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
- package/dist/cli-delegate/cmd_adr_effective.js +102 -0
- package/dist/cli-delegate/cmd_conformance.js +80 -11
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +3 -2
- package/dist/cli-delegate/cmd_fleet.js +2 -2
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +3 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
- package/dist/cli-delegate/cmd_settings_set.js +2 -2
- package/dist/cli-delegate/cmd_sync.js +3 -2
- package/dist/cli-delegate/cmd_uninstall.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +3 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +58 -58
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +2900 -1049
- package/dist/install/claudeRuleRewrite.js +254 -0
- package/dist/install/detect.js +29 -16
- package/dist/install/detect_php_shape.js +159 -0
- package/dist/install/install.mjs +634 -428
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +4895 -2627
- package/dist/server/schemas/settings.js +3 -0
- package/dist/ui/assets/index-D0jaCRPM.js +29 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/THIRD-PARTY-NOTICES.md +25 -0
- package/docs/contracts/provider-lifecycle.md +1 -1
- package/docs/contracts/settings-classes.md +10 -4
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
- package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
- package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
- package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
- package/docs/guidelines/agent-infra/layered-settings.md +10 -10
- package/docs/guidelines/agent-infra/memory-access.md +1 -1
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
- package/docs/guidelines/agent-infra/role-contracts.md +2 -2
- package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
- package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
- package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +6 -4
- package/docs/guidelines/code-clarity.md +18 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/design-fidelity-mechanics.md +1 -1
- package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
- package/docs/guidelines/php/database.md +90 -7
- package/docs/guidelines/prompt-templates.md +7 -7
- package/llms.txt +2 -2
- package/package.json +5 -2
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +252 -8
- package/src/agent-src/scripts/guarded_baseline.ts +343 -0
- package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/src/agent-src/scripts/stub_queue.ts +82 -0
- package/src/agent-src/scripts/stubs_due.ts +516 -0
- package/src/agent-src/scripts/ticket_bundles.ts +84 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +16 -12
- package/src/agent-src/templates/scripts/check_memory.ts +258 -17
- package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/src/config/agent-settings.template.yml +32 -3
- package/src/config/assurance-capability-registry.json +21 -9
- package/src/config/canonical-terms.yml +119 -0
- package/src/config/capability-native-outcome-bars.json +81 -0
- package/src/config/ci-local-parity.yml +80 -0
- package/src/config/drafting-channels.yml +43 -0
- package/src/config/estate-count-budget.json +57 -36
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +729 -63
- package/src/config/gate-reachability-exemptions.json +21 -0
- package/src/config/gate-violation-baselines.json +42 -19
- package/src/config/harness-evolution-budget.json +25 -0
- package/src/config/lapsed-beta-baseline.json +96 -0
- package/src/config/memory-twin-verdicts.yml +129 -0
- package/src/config/metric-registry.yml +124 -0
- package/src/config/pack-size-budget.json +16 -15
- package/src/config/preamble-payload-budget.json +12 -4
- package/src/config/profiles/balanced.ini +27 -0
- package/src/config/profiles/full.ini +27 -0
- package/src/config/profiles/minimal.ini +27 -0
- package/src/config/publish-surface.json +9 -2
- package/src/config/routing-coverage-seed.json +16 -2
- package/src/config/rule-stub-ceilings.json +133 -112
- package/src/config/turnaround-budget.json +66 -0
- package/src/install/claudeRuleRewrite.ts +288 -0
- package/src/install/detect.ts +60 -17
- package/src/install/detect_php_shape.ts +191 -0
- package/src/scripts/_cli/cmd_doctor.ts +27 -112
- package/src/scripts/_dispatch.bash +23 -0
- package/src/scripts/_lib/activation_ladder.ts +255 -0
- package/src/scripts/_lib/activation_receipt_producer.ts +341 -0
- package/src/scripts/_lib/activation_states.ts +88 -0
- package/src/scripts/_lib/adherence_detectors.ts +143 -0
- package/src/scripts/_lib/adr_frontmatter.ts +26 -0
- package/src/scripts/_lib/arith_claims.ts +181 -0
- package/src/scripts/_lib/arm_ranking.ts +62 -0
- package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
- package/src/scripts/_lib/audit_field_provenance.ts +54 -0
- package/src/scripts/_lib/auto_dispatch.ts +32 -3
- package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
- package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
- package/src/scripts/_lib/candidate_pair_delta.ts +349 -0
- package/src/scripts/_lib/candidate_proposer.ts +402 -0
- package/src/scripts/_lib/candidate_record.ts +601 -0
- package/src/scripts/_lib/capture_rate.ts +319 -0
- package/src/scripts/_lib/carrier_status.ts +118 -0
- package/src/scripts/_lib/cascade_stage_enumeration.ts +92 -0
- package/src/scripts/_lib/collector_denominator.ts +771 -0
- package/src/scripts/_lib/collector_record.ts +340 -0
- package/src/scripts/_lib/collector_store.ts +664 -0
- package/src/scripts/_lib/collector_supervision.ts +827 -0
- package/src/scripts/_lib/concern_estate.ts +77 -0
- package/src/scripts/_lib/config_chain.ts +477 -0
- package/src/scripts/_lib/config_cost.ts +209 -0
- package/src/scripts/_lib/corpus_manifest.ts +726 -0
- package/src/scripts/_lib/council_settings_block.ts +6 -0
- package/src/scripts/_lib/curator_ops.ts +172 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +282 -0
- package/src/scripts/_lib/delivery_criticality.ts +126 -0
- package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
- package/src/scripts/_lib/empty_cycles.ts +88 -0
- package/src/scripts/_lib/estate_carrier_cases.ts +72 -0
- package/src/scripts/_lib/eval_publication.ts +354 -0
- package/src/scripts/_lib/evaluation_cascade.ts +452 -0
- package/src/scripts/_lib/evaluation_vector.ts +283 -0
- package/src/scripts/_lib/evaluator_promotion.ts +225 -0
- package/src/scripts/_lib/evidence_basis.ts +118 -0
- package/src/scripts/_lib/evolution_roi.ts +562 -0
- package/src/scripts/_lib/exec_evidence.ts +8 -0
- package/src/scripts/_lib/experience_card.ts +272 -0
- package/src/scripts/_lib/experience_report.ts +151 -0
- package/src/scripts/_lib/experiment_freeze.ts +112 -0
- package/src/scripts/_lib/generated_by.ts +66 -0
- package/src/scripts/_lib/harness_evolution_guards.ts +239 -0
- package/src/scripts/_lib/hook_effect_probe.ts +141 -0
- package/src/scripts/_lib/host_denominator.ts +687 -0
- package/src/scripts/_lib/host_projection_reach.ts +157 -0
- package/src/scripts/_lib/ignored_blocker.ts +148 -0
- package/src/scripts/_lib/install_reach_checks.ts +495 -0
- package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
- package/src/scripts/_lib/judge_hygiene.ts +228 -0
- package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
- package/src/scripts/_lib/lexical_shortlist.ts +215 -0
- package/src/scripts/_lib/llm_candidate_proposer.ts +461 -0
- package/src/scripts/_lib/llm_proposer_transport.ts +153 -0
- package/src/scripts/_lib/loop_guards.ts +299 -0
- package/src/scripts/_lib/loss_class.ts +129 -0
- package/src/scripts/_lib/machine_wake.ts +51 -0
- package/src/scripts/_lib/md_prose_lines.ts +177 -0
- package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
- package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
- package/src/scripts/_lib/orchestration_record.ts +253 -5
- package/src/scripts/_lib/outcome_envelope.ts +227 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
- package/src/scripts/_lib/paired_stats.ts +245 -0
- package/src/scripts/_lib/paired_verdict.ts +226 -0
- package/src/scripts/_lib/pathology_archive.ts +393 -0
- package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
- package/src/scripts/_lib/privacy_class.ts +47 -0
- package/src/scripts/_lib/promotion_capability.ts +315 -0
- package/src/scripts/_lib/promotion_evidence.ts +414 -0
- package/src/scripts/_lib/promotion_review.ts +294 -0
- package/src/scripts/_lib/prompt_shape.ts +92 -0
- package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
- package/src/scripts/_lib/release_highlights.ts +70 -1
- package/src/scripts/_lib/release_material.ts +125 -2
- package/src/scripts/_lib/repeated_failure.ts +105 -0
- package/src/scripts/_lib/repo_root.ts +111 -0
- package/src/scripts/_lib/review_skipped_record.ts +37 -0
- package/src/scripts/_lib/role_split.ts +338 -0
- package/src/scripts/_lib/routing_corpus.ts +307 -0
- package/src/scripts/_lib/routing_index_input.ts +104 -0
- package/src/scripts/_lib/rule_injection.ts +22 -1
- package/src/scripts/_lib/runtime_journal.ts +1499 -0
- package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
- package/src/scripts/_lib/semantic_noop.ts +167 -0
- package/src/scripts/_lib/skill_catalogue.ts +11 -1
- package/src/scripts/_lib/source_digest.ts +200 -0
- package/src/scripts/_lib/source_redact.ts +260 -0
- package/src/scripts/_lib/source_shape.ts +502 -0
- package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
- package/src/scripts/_lib/strip_comments.d.mts +8 -0
- package/src/scripts/_lib/strip_comments.mjs +65 -0
- package/src/scripts/_lib/test_red_state.ts +154 -0
- package/src/scripts/_lib/trigger_shift.ts +144 -0
- package/src/scripts/_lib/untrusted_content.ts +82 -7
- package/src/scripts/activation_receipt.ts +258 -0
- package/src/scripts/adoption_report.ts +1 -1
- package/src/scripts/adr/evidence_census.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +26 -2
- package/src/scripts/adr_cite_check.ts +164 -1
- package/src/scripts/ai_council/blind_review.ts +11 -1
- package/src/scripts/ai_council/clients.ts +4 -0
- package/src/scripts/ai_council/config.ts +3 -0
- package/src/scripts/ai_council/consensus.ts +28 -8
- package/src/scripts/ai_council/consensus_round.ts +226 -0
- package/src/scripts/ai_council/cross_exam.ts +128 -0
- package/src/scripts/ai_council/disagreement_signal.ts +338 -0
- package/src/scripts/ai_council/explain_route.ts +157 -0
- package/src/scripts/ai_council/information_gain.ts +293 -0
- package/src/scripts/ai_council/inline_findings.ts +340 -0
- package/src/scripts/ai_council/judge_position_bias.ts +197 -0
- package/src/scripts/ai_council/leakage_corpus.ts +385 -0
- package/src/scripts/ai_council/leakage_patterns.ts +453 -0
- package/src/scripts/ai_council/minority_retention.ts +171 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -203
- package/src/scripts/ai_council/orchestrator_results.ts +23 -3
- package/src/scripts/ai_council/pricing.ts +106 -0
- package/src/scripts/ai_council/prompts.ts +74 -7
- package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
- package/src/scripts/ai_council/py_format.ts +14 -3
- package/src/scripts/ai_council/recouncil_guard.ts +293 -0
- package/src/scripts/ai_council/recouncil_savings.ts +299 -0
- package/src/scripts/ai_council/replay_route.ts +223 -0
- package/src/scripts/ai_council/response_record.ts +50 -0
- package/src/scripts/ai_council/reviewer_assignment.ts +279 -0
- package/src/scripts/ai_council/routing_training_row.ts +197 -0
- package/src/scripts/ai_council/synthesis_strategy.ts +159 -0
- package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
- package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
- package/src/scripts/asset_delivery_ledger.ts +157 -0
- package/src/scripts/attest_artifact.ts +193 -0
- package/src/scripts/audit_auto_rules.ts +2 -1
- package/src/scripts/audit_command_surface.ts +1 -1
- package/src/scripts/audit_mcp_tools.ts +2 -2
- package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
- package/src/scripts/audit_user_type_axis.ts +2 -1
- package/src/scripts/bench_ab_clone.ts +215 -10
- package/src/scripts/bench_ab_integrity.ts +119 -5
- package/src/scripts/bench_ab_v2_stats.ts +40 -213
- package/src/scripts/build_archive_index.ts +1 -1
- package/src/scripts/build_linear_digest.ts +1 -1
- package/src/scripts/build_proof.ts +11 -4
- package/src/scripts/build_rule_trigger_matrix.ts +1 -1
- package/src/scripts/build_source_digests.ts +157 -0
- package/src/scripts/cache_realization_report.ts +103 -0
- package/src/scripts/check_adr_frontmatter.ts +131 -10
- package/src/scripts/check_benchmark_report_fields.ts +207 -0
- package/src/scripts/check_beta_review_markers.ts +235 -6
- package/src/scripts/check_bundle_path_leakage.ts +34 -1
- package/src/scripts/check_claims.ts +576 -6
- package/src/scripts/check_composite_arming.ts +35 -0
- package/src/scripts/check_concern_admissions.ts +365 -0
- package/src/scripts/check_enforcement_coverage.ts +28 -0
- package/src/scripts/check_estate_count.ts +347 -25
- package/src/scripts/check_gate_reachability.ts +383 -0
- package/src/scripts/check_host_loadability.ts +104 -0
- package/src/scripts/check_loss_class_declared.ts +308 -0
- package/src/scripts/check_md_language.ts +15 -98
- package/src/scripts/check_memory_proposal.ts +18 -11
- package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
- package/src/scripts/check_no_external_sources.ts +281 -6
- package/src/scripts/check_pack_conformance_fixture.ts +11 -1
- package/src/scripts/check_pack_size.ts +59 -2
- package/src/scripts/check_preamble_payload_budget.ts +114 -3
- package/src/scripts/check_prefix_stable_mutation.ts +372 -0
- package/src/scripts/check_publish_surface.ts +10 -1
- package/src/scripts/check_references.ts +24 -1
- package/src/scripts/check_release_highlights.ts +96 -13
- package/src/scripts/check_roadmap_trackable.ts +17 -2
- package/src/scripts/check_rule_evidence_declaration.ts +316 -0
- package/src/scripts/check_rule_projection_integrity.ts +14 -4
- package/src/scripts/check_score_contract.ts +26 -3
- package/src/scripts/check_static_parity.ts +285 -0
- package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
- package/src/scripts/check_suppression_hygiene.ts +15 -0
- package/src/scripts/ci_settle.ts +39 -2
- package/src/scripts/code_graph/build.ts +60 -3
- package/src/scripts/code_graph/extract.ts +44 -0
- package/src/scripts/code_graph/types.ts +24 -0
- package/src/scripts/collector_daemon.ts +714 -0
- package/src/scripts/config_cost_report.ts +302 -0
- package/src/scripts/consumer_matrix.ts +74 -1
- package/src/scripts/corpus_manifest.ts +235 -0
- package/src/scripts/cost/budget.mjs +10 -3
- package/src/scripts/cost/track.mjs +10 -3
- package/src/scripts/council_cli.ts +37 -54
- package/src/scripts/dispatch_r2_reviewer.ts +46 -5
- package/src/scripts/evolution_lab.ts +1153 -0
- package/src/scripts/external_sources_denylist.json +5 -18
- package/src/scripts/extract_audit_patterns.ts +21 -0
- package/src/scripts/fold_intake.ts +12 -1
- package/src/scripts/gen_discovery_baseline.ts +1 -1
- package/src/scripts/generate_capabilities_index.ts +12 -5
- package/src/scripts/generate_capability_matrix.ts +3 -3
- package/src/scripts/generate_command_flows.ts +2 -2
- package/src/scripts/generate_cookbook.ts +2 -2
- package/src/scripts/generate_index.ts +8 -1
- package/src/scripts/generate_knowledge_index.ts +2 -1
- package/src/scripts/generate_ownership_matrix.ts +2 -1
- package/src/scripts/generate_pack_manifests.ts +10 -2
- package/src/scripts/generate_role_experiences_catalog.ts +2 -2
- package/src/scripts/generate_settings_reference.ts +1 -1
- package/src/scripts/git_authorization_hook.ts +22 -1
- package/src/scripts/grade_target_readiness.ts +48 -5
- package/src/scripts/hook_effect_doctor.ts +261 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +125 -16
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
- package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
- package/src/scripts/hooks/comment_discipline_hook.ts +146 -0
- package/src/scripts/hooks/concern_registry.ts +6 -0
- package/src/scripts/hooks/dispatch_hook.ts +32 -0
- package/src/scripts/hooks/journal_record_hook.ts +345 -0
- package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
- package/src/scripts/hooks/run_continuation_hook.ts +44 -9
- package/src/scripts/hooks/shims/install.sh +61 -0
- package/src/scripts/hooks/shims/php +101 -0
- package/src/scripts/hooks/suggestion_capture_hook.ts +10 -0
- package/src/scripts/hooks/turn_end_gate_hook.ts +9 -1
- package/src/scripts/hot_context_hook.ts +16 -0
- package/src/scripts/install-hooks.sh +20 -5
- package/src/scripts/install.ts +17 -35
- package/src/scripts/inventory_frontmatter.ts +2 -1
- package/src/scripts/language_mirror_hook.ts +14 -2
- package/src/scripts/lint_adr_sweep_routing.ts +12 -0
- package/src/scripts/lint_canonical_terms.ts +604 -0
- package/src/scripts/lint_carrier_integrity.ts +820 -0
- package/src/scripts/lint_code_comments.ts +643 -0
- package/src/scripts/lint_composition_review.ts +619 -0
- package/src/scripts/lint_consolidation_lineage.ts +666 -0
- package/src/scripts/lint_eval_specs.ts +593 -0
- package/src/scripts/lint_hook_manifest.ts +19 -0
- package/src/scripts/lint_host_portability.ts +373 -0
- package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
- package/src/scripts/lint_memory_twin_parity.ts +335 -0
- package/src/scripts/lint_metric_consumers.ts +355 -0
- package/src/scripts/lint_plan_risk_register.ts +39 -19
- package/src/scripts/lint_promotion_paths.ts +779 -0
- package/src/scripts/lint_skill_descriptions.ts +18 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
- package/src/scripts/lint_skill_link_reach.ts +252 -0
- package/src/scripts/lint_skill_trigger_corpus.ts +426 -23
- package/src/scripts/lint_ticket_buildable.ts +17 -1
- package/src/scripts/llm_propose.ts +256 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
- package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
- package/src/scripts/measure_delivery_sets.ts +361 -0
- package/src/scripts/measure_docs_dead_links.ts +348 -0
- package/src/scripts/measure_host_capture.ts +461 -0
- package/src/scripts/measure_routing_signal.ts +307 -0
- package/src/scripts/migration_status.ts +3 -3
- package/src/scripts/model_rule_injection.ts +76 -0
- package/src/scripts/orchestration_record.ts +14 -0
- package/src/scripts/preamble_byte_census.ts +139 -10
- package/src/scripts/prepack-check.mjs +4 -1
- package/src/scripts/probe_council_retention.ts +495 -0
- package/src/scripts/probe_turnaround.ts +384 -0
- package/src/scripts/probe_unblocked_ask.ts +279 -0
- package/src/scripts/release.ts +21 -37
- package/src/scripts/release_drill.ts +143 -0
- package/src/scripts/release_env.ts +35 -0
- package/src/scripts/release_publication.ts +84 -0
- package/src/scripts/render_benchmark_md.ts +1 -1
- package/src/scripts/rule_activation_census.ts +70 -9
- package/src/scripts/rule_backlinks.ts +1 -1
- package/src/scripts/run_lifecycle_suite.ts +208 -0
- package/src/scripts/run_skill_evals.ts +40 -0
- package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
- package/src/scripts/schemas/drafting-channels.schema.json +43 -0
- package/src/scripts/schemas/evals.schema.json +24 -1
- package/src/scripts/schemas/rule.schema.json +52 -1
- package/src/scripts/schemas/skill.schema.json +17 -2
- package/src/scripts/skill_overlap.ts +7 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
- package/src/scripts/skill_usage_report.ts +2 -1
- package/src/scripts/stubs_due.ts +211 -0
- package/src/scripts/sweep_source_surfaces.ts +678 -0
- package/src/scripts/sync_pr_branch.ts +3 -3
- package/src/scripts/trigger_eval_grandfather.json +202 -222
- package/src/scripts/utilization_report.ts +22 -2
- package/src/server/schemas/settings.ts +5 -0
- package/src/templates/marketing-copy.yml +1 -1
- package/dist/ui/assets/index-Cxgy63kz.js +0 -26
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* measure_routing_signal — does the skill BODY carry routing signal the
|
|
4
|
+
* description does not? (`road-to-governed-harness-evolution` step 5.1.)
|
|
5
|
+
*
|
|
6
|
+
* THE BAR WAS FIXED BEFORE THIS FILE EXISTED. Every threshold, the k, the
|
|
7
|
+
* corpus partition, the verdict function and a committed prediction live in
|
|
8
|
+
* `agents/evidence/analysis/routing-signal-preregistration-2026-08-31.md`,
|
|
9
|
+
* which is committed in an earlier commit that adds no measurement module. The
|
|
10
|
+
* constants below are transcribed from it; they are not chosen here.
|
|
11
|
+
*
|
|
12
|
+
* TWO GAPS, AND ONLY ONE OF THEM IS MEASURABLE HERE.
|
|
13
|
+
*
|
|
14
|
+
* Gap A — proxy-to-real-session fidelity. Stated by the description-surface
|
|
15
|
+
* route checker's own header: asking a model which units it would
|
|
16
|
+
* load is not the host's selection procedure. Measuring it needs real
|
|
17
|
+
* sessions, and step 5.2 parks the live harness for this whole
|
|
18
|
+
* roadmap. So this run emits `null` with `status:
|
|
19
|
+
* unmeasured-by-construction` and the reason. That field is not a
|
|
20
|
+
* caveat — it bounds the external validity of the Gap B verdict, and
|
|
21
|
+
* a consumer reading the verdict file gets both or neither.
|
|
22
|
+
*
|
|
23
|
+
* Gap B — the description-vs-body question this run answers.
|
|
24
|
+
*
|
|
25
|
+
* WHY McNEMAR AND NOT A RERUN BAND. The estimator is deterministic: same tree,
|
|
26
|
+
* same ranking, every time. A rerun band would be identically zero and would
|
|
27
|
+
* measure nothing. The variance that exists is sampling variance over cases, so
|
|
28
|
+
* the paired discordant-pair test is the form that addresses it.
|
|
29
|
+
*
|
|
30
|
+
* ZERO MODEL CALLS AND ZERO SPEND, and that follows from the imports rather
|
|
31
|
+
* than from good behaviour: this module imports a file reader and a pure
|
|
32
|
+
* scorer, and nothing that can open a socket.
|
|
33
|
+
*
|
|
34
|
+
* Usage:
|
|
35
|
+
* ./scripts-run src/scripts/measure_routing_signal human table
|
|
36
|
+
* ./scripts-run src/scripts/measure_routing_signal --json machine record
|
|
37
|
+
* ./scripts-run src/scripts/measure_routing_signal --write persist verdict
|
|
38
|
+
*
|
|
39
|
+
* Exit 0 = the measurement ran · 2 = it could not run.
|
|
40
|
+
*/
|
|
41
|
+
import * as fs from 'node:fs';
|
|
42
|
+
import * as path from 'node:path';
|
|
43
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
44
|
+
|
|
45
|
+
import {
|
|
46
|
+
ARMS,
|
|
47
|
+
type Arm,
|
|
48
|
+
type CatalogueEntry,
|
|
49
|
+
type CorpusCase,
|
|
50
|
+
legacyShaped,
|
|
51
|
+
loadCatalogue,
|
|
52
|
+
loadTrainCases,
|
|
53
|
+
termIndex,
|
|
54
|
+
topK,
|
|
55
|
+
} from './_lib/routing_corpus.js';
|
|
56
|
+
|
|
57
|
+
export const REPO = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
58
|
+
|
|
59
|
+
/** Where the verdict lands. Step 6.5 derives its input set from this file. */
|
|
60
|
+
export const VERDICT_REL = 'agents/evidence/analysis/routing-body-signal-verdict.json';
|
|
61
|
+
export const PREREG_REL = 'agents/evidence/analysis/routing-signal-preregistration-2026-08-31.md';
|
|
62
|
+
|
|
63
|
+
// --- the pre-registered constants, transcribed ------------------------------
|
|
64
|
+
|
|
65
|
+
export const K = 5;
|
|
66
|
+
export const RECALL_GAIN_BAR_PP = 5.0;
|
|
67
|
+
export const FALSE_ACTIVATION_GUARD_PP = 2.0;
|
|
68
|
+
export const POWER_FLOOR_DISCORDANT = 10;
|
|
69
|
+
export const ALPHA = 0.05;
|
|
70
|
+
|
|
71
|
+
export type Verdict = 'signal' | 'null' | 'harmful' | 'underpowered';
|
|
72
|
+
|
|
73
|
+
export interface ArmCounts {
|
|
74
|
+
readonly positives: number;
|
|
75
|
+
readonly positiveHits: number;
|
|
76
|
+
readonly negatives: number;
|
|
77
|
+
readonly negativeHits: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface Discordance {
|
|
81
|
+
/** control miss → body hit. */
|
|
82
|
+
readonly gained: number;
|
|
83
|
+
/** control hit → body miss. */
|
|
84
|
+
readonly lost: number;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface Measurement {
|
|
88
|
+
readonly k: number;
|
|
89
|
+
readonly catalogueSize: number;
|
|
90
|
+
readonly trainCorpora: number;
|
|
91
|
+
readonly legacyShaped: readonly string[];
|
|
92
|
+
readonly cases: number;
|
|
93
|
+
readonly arms: Record<Arm, ArmCounts>;
|
|
94
|
+
readonly recallPp: Record<Arm, number>;
|
|
95
|
+
readonly falseActivationPp: Record<Arm, number>;
|
|
96
|
+
readonly deltaRecallPp: number;
|
|
97
|
+
readonly deltaFalseActivationPp: number;
|
|
98
|
+
readonly positiveDiscordance: Discordance;
|
|
99
|
+
readonly pValue: number;
|
|
100
|
+
readonly verdict: Verdict;
|
|
101
|
+
readonly verdictReason: string;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Exact two-sided McNemar: a binomial sign test over the discordant pairs. */
|
|
105
|
+
export function mcnemarExactP(gained: number, lost: number): number {
|
|
106
|
+
const n = gained + lost;
|
|
107
|
+
if (n === 0) return 1;
|
|
108
|
+
const logFact: number[] = [0];
|
|
109
|
+
for (let i = 1; i <= n; i++) logFact.push((logFact[i - 1] as number) + Math.log(i));
|
|
110
|
+
const logChoose = (a: number, b: number): number =>
|
|
111
|
+
(logFact[a] as number) - (logFact[b] as number) - (logFact[a - b] as number);
|
|
112
|
+
const extreme = Math.min(gained, lost);
|
|
113
|
+
let tail = 0;
|
|
114
|
+
for (let i = 0; i <= extreme; i++) tail += Math.exp(logChoose(n, i) - n * Math.LN2);
|
|
115
|
+
return Math.min(1, 2 * tail);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const pp = (hits: number, total: number): number => (total === 0 ? 0 : (hits / total) * 100);
|
|
119
|
+
|
|
120
|
+
export function measure(repo = REPO, k = K): Measurement {
|
|
121
|
+
const catalogue: CatalogueEntry[] = loadCatalogue(repo);
|
|
122
|
+
const cases: CorpusCase[] = loadTrainCases(repo);
|
|
123
|
+
if (catalogue.length === 0 || cases.length === 0) {
|
|
124
|
+
throw new Error('measure_routing_signal: empty catalogue or corpus — a run over nothing');
|
|
125
|
+
}
|
|
126
|
+
const indexes = new Map<Arm, ReturnType<typeof termIndex>>();
|
|
127
|
+
for (const arm of ARMS) indexes.set(arm, termIndex(catalogue, arm));
|
|
128
|
+
|
|
129
|
+
const counts: Record<string, { p: number; ph: number; n: number; nh: number }> = {};
|
|
130
|
+
for (const arm of ARMS) counts[arm] = { p: 0, ph: 0, n: 0, nh: 0 };
|
|
131
|
+
let gained = 0;
|
|
132
|
+
let lost = 0;
|
|
133
|
+
|
|
134
|
+
// One ranking pass per (case, arm). The prompt is re-tokenized per arm by
|
|
135
|
+
// `topK`; that is the price of keeping the control arm byte-identical to
|
|
136
|
+
// the shipped call rather than hand-rolling a shared fast path.
|
|
137
|
+
for (const c of cases) {
|
|
138
|
+
const hit: Record<string, boolean> = {};
|
|
139
|
+
for (const arm of ARMS) {
|
|
140
|
+
const ranked = topK(c.prompt, catalogue, indexes.get(arm) as Map<string, Set<string>>, k);
|
|
141
|
+
hit[arm] = ranked.some((r) => r.name === c.skill);
|
|
142
|
+
const bucket = counts[arm] as { p: number; ph: number; n: number; nh: number };
|
|
143
|
+
if (c.expect) {
|
|
144
|
+
bucket.p += 1;
|
|
145
|
+
if (hit[arm]) bucket.ph += 1;
|
|
146
|
+
} else {
|
|
147
|
+
bucket.n += 1;
|
|
148
|
+
if (hit[arm]) bucket.nh += 1;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (c.expect) {
|
|
152
|
+
const control = hit['description'] === true;
|
|
153
|
+
const body = hit['description+body'] === true;
|
|
154
|
+
if (!control && body) gained += 1;
|
|
155
|
+
if (control && !body) lost += 1;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const arms = {} as Record<Arm, ArmCounts>;
|
|
160
|
+
const recallPp = {} as Record<Arm, number>;
|
|
161
|
+
const falsePp = {} as Record<Arm, number>;
|
|
162
|
+
for (const arm of ARMS) {
|
|
163
|
+
const b = counts[arm] as { p: number; ph: number; n: number; nh: number };
|
|
164
|
+
arms[arm] = { positives: b.p, positiveHits: b.ph, negatives: b.n, negativeHits: b.nh };
|
|
165
|
+
recallPp[arm] = pp(b.ph, b.p);
|
|
166
|
+
falsePp[arm] = pp(b.nh, b.n);
|
|
167
|
+
}
|
|
168
|
+
const deltaRecall = (recallPp['description+body'] as number) - (recallPp['description'] as number);
|
|
169
|
+
const deltaFalse =
|
|
170
|
+
(falsePp['description+body'] as number) - (falsePp['description'] as number);
|
|
171
|
+
const p = mcnemarExactP(gained, lost);
|
|
172
|
+
|
|
173
|
+
// The pre-registered verdict function, in its pre-registered order.
|
|
174
|
+
let verdict: Verdict;
|
|
175
|
+
let reason: string;
|
|
176
|
+
if (gained + lost < POWER_FLOOR_DISCORDANT) {
|
|
177
|
+
verdict = 'underpowered';
|
|
178
|
+
reason = `${gained + lost} discordant positive pairs < power floor ${POWER_FLOOR_DISCORDANT}`;
|
|
179
|
+
} else if (deltaFalse > FALSE_ACTIVATION_GUARD_PP) {
|
|
180
|
+
verdict = 'harmful';
|
|
181
|
+
reason = `false activation +${deltaFalse.toFixed(2)} pp breaches the +${FALSE_ACTIVATION_GUARD_PP.toFixed(1)} pp guard`;
|
|
182
|
+
} else if (deltaRecall >= RECALL_GAIN_BAR_PP && p < ALPHA) {
|
|
183
|
+
verdict = 'signal';
|
|
184
|
+
reason = `recall +${deltaRecall.toFixed(2)} pp at p=${p.toExponential(2)}`;
|
|
185
|
+
} else {
|
|
186
|
+
verdict = 'null';
|
|
187
|
+
reason = `recall +${deltaRecall.toFixed(2)} pp at p=${p.toExponential(2)} does not clear +${RECALL_GAIN_BAR_PP.toFixed(1)} pp and p<${ALPHA}`;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return {
|
|
191
|
+
k,
|
|
192
|
+
catalogueSize: catalogue.length,
|
|
193
|
+
trainCorpora: new Set(cases.map((c) => c.skill)).size,
|
|
194
|
+
legacyShaped: legacyShaped(repo),
|
|
195
|
+
cases: cases.length,
|
|
196
|
+
arms,
|
|
197
|
+
recallPp,
|
|
198
|
+
falseActivationPp: falsePp,
|
|
199
|
+
deltaRecallPp: deltaRecall,
|
|
200
|
+
deltaFalseActivationPp: deltaFalse,
|
|
201
|
+
positiveDiscordance: { gained, lost },
|
|
202
|
+
pValue: p,
|
|
203
|
+
verdict,
|
|
204
|
+
verdictReason: reason,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* The verdict record step 6.5 reads.
|
|
210
|
+
*
|
|
211
|
+
* `proxy_to_real_fidelity` is a REQUIRED field carrying `null`. A consumer that
|
|
212
|
+
* reads `body_signal` without reading it has taken the conclusion without its
|
|
213
|
+
* bound, so the two ship in one object.
|
|
214
|
+
*/
|
|
215
|
+
export function verdictRecord(m: Measurement, measuredAt: string): Record<string, unknown> {
|
|
216
|
+
return {
|
|
217
|
+
schema: 1,
|
|
218
|
+
step: '5.1',
|
|
219
|
+
roadmap: 'road-to-governed-harness-evolution',
|
|
220
|
+
preregistration: PREREG_REL,
|
|
221
|
+
measured_at: measuredAt,
|
|
222
|
+
proxy_to_real_fidelity: {
|
|
223
|
+
value: null,
|
|
224
|
+
status: 'unmeasured-by-construction',
|
|
225
|
+
reason:
|
|
226
|
+
'Step 5.2 parks the live routing harness for this roadmap; a fidelity ' +
|
|
227
|
+
'figure requires real sessions. Every routing conclusion in this file is ' +
|
|
228
|
+
'bounded by this unmeasured quantity.',
|
|
229
|
+
},
|
|
230
|
+
body_signal: {
|
|
231
|
+
verdict: m.verdict,
|
|
232
|
+
reason: m.verdictReason,
|
|
233
|
+
k: m.k,
|
|
234
|
+
delta_recall_pp: Number(m.deltaRecallPp.toFixed(3)),
|
|
235
|
+
delta_false_activation_pp: Number(m.deltaFalseActivationPp.toFixed(3)),
|
|
236
|
+
p_value: Number(m.pValue.toPrecision(4)),
|
|
237
|
+
discordant_positive_pairs: m.positiveDiscordance,
|
|
238
|
+
bars: {
|
|
239
|
+
recall_gain_pp: RECALL_GAIN_BAR_PP,
|
|
240
|
+
false_activation_guard_pp: FALSE_ACTIVATION_GUARD_PP,
|
|
241
|
+
power_floor_discordant: POWER_FLOOR_DISCORDANT,
|
|
242
|
+
alpha: ALPHA,
|
|
243
|
+
},
|
|
244
|
+
arms: m.arms,
|
|
245
|
+
recall_pp: {
|
|
246
|
+
description: Number((m.recallPp['description'] as number).toFixed(3)),
|
|
247
|
+
'description+body': Number((m.recallPp['description+body'] as number).toFixed(3)),
|
|
248
|
+
},
|
|
249
|
+
false_activation_pp: {
|
|
250
|
+
description: Number((m.falseActivationPp['description'] as number).toFixed(3)),
|
|
251
|
+
'description+body': Number(
|
|
252
|
+
(m.falseActivationPp['description+body'] as number).toFixed(3),
|
|
253
|
+
),
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
corpus: {
|
|
257
|
+
partition: 'train',
|
|
258
|
+
holdout_sealed: true,
|
|
259
|
+
train_corpora: m.trainCorpora,
|
|
260
|
+
legacy_shaped_corpora: m.legacyShaped,
|
|
261
|
+
cases: m.cases,
|
|
262
|
+
catalogue_size: m.catalogueSize,
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export function render(m: Measurement): string {
|
|
268
|
+
const rows = ARMS.map(
|
|
269
|
+
(arm) =>
|
|
270
|
+
` ${arm.padEnd(18)} recall@${m.k} ${(m.recallPp[arm] as number).toFixed(2).padStart(6)} %` +
|
|
271
|
+
` false-activation@${m.k} ${(m.falseActivationPp[arm] as number).toFixed(2).padStart(6)} %`,
|
|
272
|
+
);
|
|
273
|
+
return [
|
|
274
|
+
`measure_routing_signal — step 5.1, k=${m.k}`,
|
|
275
|
+
` catalogue ${m.catalogueSize} skills · train corpora ${m.trainCorpora}` +
|
|
276
|
+
` (${m.legacyShaped.length} legacy-shaped: ${m.legacyShaped.join(', ') || 'none'})` +
|
|
277
|
+
` · cases ${m.cases}`,
|
|
278
|
+
...rows,
|
|
279
|
+
` delta recall ${m.deltaRecallPp >= 0 ? '+' : ''}${m.deltaRecallPp.toFixed(2)} pp` +
|
|
280
|
+
` (bar +${RECALL_GAIN_BAR_PP.toFixed(1)} pp)`,
|
|
281
|
+
` delta false activation ${m.deltaFalseActivationPp >= 0 ? '+' : ''}${m.deltaFalseActivationPp.toFixed(2)} pp` +
|
|
282
|
+
` (guard +${FALSE_ACTIVATION_GUARD_PP.toFixed(1)} pp)`,
|
|
283
|
+
` discordant positives gained ${m.positiveDiscordance.gained} lost ${m.positiveDiscordance.lost}` +
|
|
284
|
+
` · McNemar exact p=${m.pValue.toExponential(3)}`,
|
|
285
|
+
` proxy-to-real fidelity: null (unmeasured-by-construction — 5.2 park)`,
|
|
286
|
+
` VERDICT: ${m.verdict} — ${m.verdictReason}`,
|
|
287
|
+
].join('\n');
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export function main(argv: readonly string[]): number {
|
|
291
|
+
const m = measure();
|
|
292
|
+
const record = verdictRecord(m, new Date().toISOString().slice(0, 10));
|
|
293
|
+
if (argv.includes('--write')) {
|
|
294
|
+
fs.writeFileSync(path.join(REPO, VERDICT_REL), `${JSON.stringify(record, null, 2)}\n`);
|
|
295
|
+
}
|
|
296
|
+
process.stdout.write(argv.includes('--json') ? `${JSON.stringify(record, null, 2)}\n` : `${render(m)}\n`);
|
|
297
|
+
return 0;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
301
|
+
try {
|
|
302
|
+
process.exit(main(process.argv.slice(2)));
|
|
303
|
+
} catch (err) {
|
|
304
|
+
process.stderr.write(`measure_routing_signal: ${(err as Error).message}\n`);
|
|
305
|
+
process.exit(2);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* dashboard (default: `agents/evidence/migration-status.md`).
|
|
11
11
|
*
|
|
12
12
|
* Usage:
|
|
13
|
-
* npx tsx
|
|
13
|
+
* npx tsx migration_status [--out <path>]
|
|
14
14
|
*
|
|
15
15
|
* Node builtins only — no third-party imports.
|
|
16
16
|
*/
|
|
@@ -240,7 +240,7 @@ function renderDashboard(
|
|
|
240
240
|
lines.push('# Python → TypeScript Migration Status');
|
|
241
241
|
lines.push('');
|
|
242
242
|
lines.push(
|
|
243
|
-
`> Generated by \`
|
|
243
|
+
`> Generated by \`migration_status\` — do not edit by hand. Timestamp: ${timestamp}`,
|
|
244
244
|
);
|
|
245
245
|
lines.push('');
|
|
246
246
|
lines.push(
|
|
@@ -311,7 +311,7 @@ function main(): void {
|
|
|
311
311
|
process.stdout.write(`Tracked .py after exclusions: ${pyFiles.length}\n`);
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
-
// Run the CLI only when executed directly (`npx tsx
|
|
314
|
+
// Run the CLI only when executed directly (`npx tsx migration_status`),
|
|
315
315
|
// not when imported (e.g. by src/scripts/parity/phase_gate.ts for `categorize`).
|
|
316
316
|
function _isCliEntry(): boolean {
|
|
317
317
|
if (process.argv[1] === undefined) {
|
|
@@ -52,6 +52,7 @@ import { parse as parseYaml } from 'yaml';
|
|
|
52
52
|
|
|
53
53
|
import { LexicalIndex } from './_lib/lexical_index.js';
|
|
54
54
|
import { gpt_tokens } from './_lib/token_count.js';
|
|
55
|
+
import { makePromptShortlist } from './_lib/lexical_shortlist.js';
|
|
55
56
|
import {
|
|
56
57
|
allTierRules,
|
|
57
58
|
kernelIds,
|
|
@@ -63,6 +64,12 @@ import {
|
|
|
63
64
|
triggerlessRuleIds,
|
|
64
65
|
type Router,
|
|
65
66
|
} from './_lib/rule_injection.js';
|
|
67
|
+
import {
|
|
68
|
+
renderArmExperiment,
|
|
69
|
+
runArmExperiment,
|
|
70
|
+
type ArmName,
|
|
71
|
+
type ArmRow,
|
|
72
|
+
} from './_lib/delivery_arm_experiment.js';
|
|
66
73
|
import { thin_entry } from './project_thin_rules.js';
|
|
67
74
|
import { CAP_BYTES, buildInjection } from './hooks/rule_inject_hook.js';
|
|
68
75
|
|
|
@@ -802,11 +809,56 @@ export function runSelftest(corpusDir: string): SelftestCase[] {
|
|
|
802
809
|
return out;
|
|
803
810
|
}
|
|
804
811
|
|
|
812
|
+
/**
|
|
813
|
+
* Step 6.1's three-arm run, assembled from parts that already exist.
|
|
814
|
+
*
|
|
815
|
+
* The standing token figures come from `standingCorpora` — the SAME function
|
|
816
|
+
* the price grid reads — so the delivery table and the price table can never
|
|
817
|
+
* disagree about what a shape costs to stand up. `capBytes` is a parameter
|
|
818
|
+
* rather than a constant so the run can be shown sensitive to the mechanism it
|
|
819
|
+
* reports on; the default is the concern's own `CAP_BYTES`.
|
|
820
|
+
*/
|
|
821
|
+
export function runThreeArm(
|
|
822
|
+
corpusDir: string,
|
|
823
|
+
capBytes: number = CAP_BYTES,
|
|
824
|
+
useShortlist = false,
|
|
825
|
+
): { rows: ArmRow[]; lines: string[] } {
|
|
826
|
+
const router = loadRouter(REPO_ROOT);
|
|
827
|
+
const cases = loadCorpus(corpusDir);
|
|
828
|
+
const sc = standingCorpora(router);
|
|
829
|
+
const standing: Record<ArmName, number> = {
|
|
830
|
+
'eager-all': sc.eagerTokens,
|
|
831
|
+
thin: sc.thinTokens,
|
|
832
|
+
delivery: sc.thinTokens,
|
|
833
|
+
};
|
|
834
|
+
// STEP 6.3 — the shortlist is OPT-IN and OFF by default, so the figures 6.1
|
|
835
|
+
// recorded reproduce byte-for-byte without it. It reaches the delivery arm
|
|
836
|
+
// as a tie-break under the matcher's score and can move nothing but which
|
|
837
|
+
// matched bodies survive a binding cap.
|
|
838
|
+
const rows = runArmExperiment({
|
|
839
|
+
repoRoot: REPO_ROOT,
|
|
840
|
+
router,
|
|
841
|
+
cases,
|
|
842
|
+
capBytes,
|
|
843
|
+
standing,
|
|
844
|
+
tokensOf,
|
|
845
|
+
shortlist: useShortlist ? makePromptShortlist(REPO_ROOT, router) : null,
|
|
846
|
+
});
|
|
847
|
+
const lines = renderArmExperiment(rows, capBytes);
|
|
848
|
+
lines.push(
|
|
849
|
+
useShortlist
|
|
850
|
+
? 'shortlist: ON — lexical BM25 tie-break under the matcher score (step 6.3)'
|
|
851
|
+
: 'shortlist: OFF — cap order is score then router order (step 6.1 baseline)',
|
|
852
|
+
);
|
|
853
|
+
return { rows, lines };
|
|
854
|
+
}
|
|
855
|
+
|
|
805
856
|
// ── CLI ──────────────────────────────────────────────────────────────────
|
|
806
857
|
|
|
807
858
|
const USAGE = `usage: model_rule_injection [--corpus DIR] [--baseline-comparison]
|
|
808
859
|
[--honour-open-files]
|
|
809
860
|
[--selftest] [--endpoints] [--json]
|
|
861
|
+
[--three-arm] [--cap-bytes N] [--shortlist]
|
|
810
862
|
|
|
811
863
|
Offline recall + cost model for trigger-delivered rule bodies. No metered call
|
|
812
864
|
on any path.
|
|
@@ -820,6 +872,9 @@ export function main(argv: string[] | null = null): number {
|
|
|
820
872
|
let selftest = false;
|
|
821
873
|
let endpoints = false;
|
|
822
874
|
let json = false;
|
|
875
|
+
let threeArm = false;
|
|
876
|
+
let shortlist = false;
|
|
877
|
+
let capBytes = CAP_BYTES;
|
|
823
878
|
for (let i = 0; i < args.length; i += 1) {
|
|
824
879
|
const a = args[i] as string;
|
|
825
880
|
if (a === '--corpus') {
|
|
@@ -835,6 +890,17 @@ export function main(argv: string[] | null = null): number {
|
|
|
835
890
|
endpoints = true;
|
|
836
891
|
} else if (a === '--json') {
|
|
837
892
|
json = true;
|
|
893
|
+
} else if (a === '--three-arm') {
|
|
894
|
+
threeArm = true;
|
|
895
|
+
} else if (a === '--shortlist') {
|
|
896
|
+
shortlist = true;
|
|
897
|
+
} else if (a === '--cap-bytes') {
|
|
898
|
+
i += 1;
|
|
899
|
+
capBytes = Number.parseInt(args[i] as string, 10);
|
|
900
|
+
if (!Number.isFinite(capBytes) || capBytes < 1) {
|
|
901
|
+
process.stderr.write(`model_rule_injection: --cap-bytes needs a positive integer\n`);
|
|
902
|
+
return 2;
|
|
903
|
+
}
|
|
838
904
|
} else if (a === '-h' || a === '--help') {
|
|
839
905
|
process.stdout.write(USAGE);
|
|
840
906
|
return 0;
|
|
@@ -844,6 +910,16 @@ export function main(argv: string[] | null = null): number {
|
|
|
844
910
|
}
|
|
845
911
|
}
|
|
846
912
|
|
|
913
|
+
if (threeArm) {
|
|
914
|
+
const res = runThreeArm(corpus, capBytes, shortlist);
|
|
915
|
+
if (json) {
|
|
916
|
+
process.stdout.write(`${JSON.stringify(res.rows, null, 2)}\n`);
|
|
917
|
+
} else {
|
|
918
|
+
process.stdout.write(`${res.lines.join('\n')}\n`);
|
|
919
|
+
}
|
|
920
|
+
return 0;
|
|
921
|
+
}
|
|
922
|
+
|
|
847
923
|
if (selftest) {
|
|
848
924
|
const results = runSelftest(corpus);
|
|
849
925
|
const failed = results.filter((r) => !r.passed);
|
|
@@ -127,6 +127,20 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
127
127
|
tier_source: str(flags, 'tier-source') as TierSource | undefined,
|
|
128
128
|
task_class: str(flags, 'task-class'),
|
|
129
129
|
dispatch_mode: str(flags, 'dispatch-mode') as never,
|
|
130
|
+
// `--skills-applied=a,b` records ids; `--skills-applied=` (empty)
|
|
131
|
+
// records the EMPTY array, which is a real observation ("none
|
|
132
|
+
// applied") and deliberately not the same as omitting the flag
|
|
133
|
+
// ("not recorded"). The empty-string check therefore cannot be folded
|
|
134
|
+
// into the `?.split()` chain above, which would map both onto
|
|
135
|
+
// undefined and destroy the distinction the field exists for.
|
|
136
|
+
expected_output: str(flags, 'expected-output') as never,
|
|
137
|
+
diff_lines: int(flags, 'diff-lines'),
|
|
138
|
+
empty_cycles: int(flags, 'empty-cycles'),
|
|
139
|
+
skills_applied: (() => {
|
|
140
|
+
const raw = str(flags, 'skills-applied');
|
|
141
|
+
if (raw === undefined) return undefined;
|
|
142
|
+
return raw.split(',').map((v) => v.trim()).filter(Boolean);
|
|
143
|
+
})(),
|
|
130
144
|
task_size_estimate: int(flags, 'task-size-estimate'),
|
|
131
145
|
wall_clock_ms: int(flags, 'wall-clock-ms'),
|
|
132
146
|
dispatch_tokens: int(flags, 'dispatch-tokens'),
|