@event4u/agent-config 14.11.0 → 14.13.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 +368 -516
- 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 +109 -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/evidence-discipline.md +26 -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-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 +247 -3
- package/dist/agent-src/scripts/guarded_baseline.ts +328 -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 +400 -0
- package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +8 -4
- 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/code-refactoring/SKILL.md +45 -1
- package/dist/agent-src/skills/code-review/SKILL.md +65 -6
- package/dist/agent-src/skills/command-writing/SKILL.md +35 -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 +25 -2
- 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/project-analysis-core/SKILL.md +23 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +30 -13
- package/dist/agent-src/skills/skill-writing/references/procedure.md +29 -7
- 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/storybook-workshop/SKILL.md +9 -0
- 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 +53 -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-L43NCYPB.js → chunk-4FS4WRXP.js} +10 -0
- package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
- package/dist/cli-delegate/{chunk-236PNQZK.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 +42 -10
- 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 +62 -62
- 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 +2413 -1087
- 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 +639 -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 +4818 -2645
- package/dist/server/schemas/settings.js +6 -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 +30 -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/downstream-changes-mechanics.md +91 -0
- 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 +21 -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/docs/guidelines/redundancy-taxonomy.md +180 -0
- package/llms.txt +2 -2
- package/package.json +10 -3
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
- package/src/agent-src/scripts/guarded_baseline.ts +328 -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 +400 -0
- package/src/agent-src/scripts/ticket_bundles.ts +84 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +8 -4
- 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 +48 -3
- package/src/config/assurance-capability-registry.json +21 -9
- package/src/config/budgets.yml +19 -0
- 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 +95 -0
- package/src/config/discovery/prompt-patterns.yml +56 -0
- package/src/config/drafting-channels.yml +43 -0
- package/src/config/estate-count-budget.json +38 -31
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +731 -30
- package/src/config/gate-reachability-exemptions.json +21 -0
- package/src/config/gate-violation-baselines.json +38 -20
- 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 +35 -7
- package/src/config/preamble-payload-budget.json +97 -71
- 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 +43 -0
- package/src/config/rule-stub-ceilings.json +126 -112
- package/src/config/suggestion-capture.json +28 -0
- package/src/config/surface-matrix.yml +21 -2
- package/src/config/turnaround-budget.json +66 -0
- package/src/config/web-launch-readiness.json +188 -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 +27 -0
- package/src/scripts/_lib/activation_ladder.ts +211 -0
- package/src/scripts/_lib/activation_states.ts +88 -0
- package/src/scripts/_lib/adherence_detectors.ts +143 -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_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/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/council_settings_block.ts +6 -0
- package/src/scripts/_lib/curator_ops.ts +172 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +266 -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/eval_publication.ts +354 -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/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/gate_baseline.ts +150 -1
- package/src/scripts/_lib/generated_by.ts +66 -0
- package/src/scripts/_lib/harness_evolution_guards.ts +229 -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/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/prefix_stable_surfaces.ts +123 -0
- package/src/scripts/_lib/privacy_class.ts +47 -0
- package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
- 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/runtime_journal.ts +1499 -0
- package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
- package/src/scripts/_lib/skill_catalogue.ts +11 -1
- package/src/scripts/_lib/skill_estate.ts +115 -0
- 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/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/argument_exhaustion.ts +130 -0
- 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/disagreement_signal.ts +338 -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/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/response_record.ts +50 -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 +126 -0
- 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 +195 -7
- package/src/scripts/check_claims.ts +576 -6
- package/src/scripts/check_command_examples.ts +557 -0
- 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 +263 -3
- 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 +144 -6
- 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_routing_coverage.ts +352 -0
- 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 +528 -0
- package/src/scripts/check_skill_admissions.ts +514 -0
- 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/check_web_launch_readiness.ts +705 -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/cost/budget.mjs +10 -3
- package/src/scripts/cost/track.mjs +10 -3
- package/src/scripts/council_cli.ts +37 -54
- package/src/scripts/description_route_check.ts +494 -0
- package/src/scripts/dispatch_r2_reviewer.ts +46 -5
- package/src/scripts/evolution_lab.ts +980 -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 -11
- 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/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 +378 -0
- 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/lint_adr_sweep_routing.ts +12 -0
- package/src/scripts/lint_budget_ownership.ts +54 -4
- package/src/scripts/lint_canonical_terms.ts +604 -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_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 +752 -0
- package/src/scripts/lint_ticket_buildable.ts +17 -1
- 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_docs_dead_links.ts +348 -0
- package/src/scripts/measure_host_capture.ts +461 -0
- package/src/scripts/migration_status.ts +3 -3
- package/src/scripts/model_rule_injection.ts +60 -0
- package/src/scripts/orchestration_record.ts +14 -0
- package/src/scripts/pack_install_smoke.ts +363 -0
- package/src/scripts/pr_conflict_census.ts +187 -0
- package/src/scripts/preamble_byte_census.ts +139 -10
- package/src/scripts/prepack-check.mjs +4 -1
- package/src/scripts/probe_turnaround.ts +384 -0
- package/src/scripts/probe_unblocked_ask.ts +279 -0
- package/src/scripts/render_benchmark_md.ts +1 -1
- package/src/scripts/report_pack_delta.ts +204 -0
- 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/select_analysis_mode.ts +112 -0
- 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 +40 -1
- package/src/scripts/trigger_eval_grandfather.json +202 -222
- package/src/scripts/utilization_report.ts +22 -2
- package/src/server/schemas/settings.ts +10 -0
- package/src/templates/marketing-copy.yml +1 -1
- package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
- package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
- package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
- package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +0 -17
- package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
- package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
- package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
- package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
- package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
- package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
- package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
- package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
- package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
- package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
- package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
- package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
- package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
- package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
- package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
- package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
- package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
- package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
- package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
- package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
- package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
- package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -67
- package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
- package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
- package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
- package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
- package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
- package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
- package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
- package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
- package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
- package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
- package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
- package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
- package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
- package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
- package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
- package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
- package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +0 -17
- package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/operational-readiness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
- package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
- package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
- package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
- package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
- package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
- package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
- package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
- package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
- package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
- package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
- package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
- package/dist/agent-src/skills/server-hardening/evals/triggers.json +0 -17
- package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
- package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
- package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
- package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
- package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
- package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
- package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
- package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
- package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
- package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
- package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
- package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
- package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
- package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
- package/dist/agent-src/skills/workspace-link/evals/triggers.json +0 -17
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
- package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
- package/dist/cli/agent-config.js.map +0 -1
- package/dist/cli/bash/runBash.js.map +0 -1
- package/dist/cli/commands/commands.js.map +0 -1
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/doctorShell.js.map +0 -1
- package/dist/cli/commands/mcpServer.js.map +0 -1
- package/dist/cli/commands/packs.js.map +0 -1
- package/dist/cli/commands/profiles.js.map +0 -1
- package/dist/cli/commands/recordTriggerEval.js.map +0 -1
- package/dist/cli/commands/rtkDetect.js.map +0 -1
- package/dist/cli/commands/settings.js.map +0 -1
- package/dist/cli/commands/uiAudit.js.map +0 -1
- package/dist/cli/commands/uiRender.js.map +0 -1
- package/dist/cli/commands/uiServe.js.map +0 -1
- package/dist/cli/commands/versions.js.map +0 -1
- package/dist/cli/commands/workspaces.js.map +0 -1
- package/dist/cli/configRoot.js.map +0 -1
- package/dist/cli/discovery/loadManifest.js.map +0 -1
- package/dist/cli/firstRunNotice.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/initRouting.js.map +0 -1
- package/dist/cli/log/logger.js.map +0 -1
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/mcp/content.js.map +0 -1
- package/dist/cli/mcp/dispatch.js.map +0 -1
- package/dist/cli/mcp/stdio.js.map +0 -1
- package/dist/cli/paths.js.map +0 -1
- package/dist/cli/python/knowledge_ingest.js.map +0 -1
- package/dist/cli/python/workspace_analytics.js.map +0 -1
- package/dist/cli/python/workspace_crypto.js.map +0 -1
- package/dist/cli/python/workspace_documents.js.map +0 -1
- package/dist/cli/python/workspace_drive.js.map +0 -1
- package/dist/cli/python/workspace_drive_health.js.map +0 -1
- package/dist/cli/python/workspace_explain.js.map +0 -1
- package/dist/cli/python/workspace_hosts.js.map +0 -1
- package/dist/cli/python/workspace_inbox.js.map +0 -1
- package/dist/cli/python/workspace_render.js.map +0 -1
- package/dist/cli/python/workspace_roles.js.map +0 -1
- package/dist/cli/python/workspace_secrets.js.map +0 -1
- package/dist/cli/python/workspace_sessions.js.map +0 -1
- package/dist/cli/python/workspace_skills.js.map +0 -1
- package/dist/cli/registry.js.map +0 -1
- package/dist/install/agentSwitchDetection.js.map +0 -1
- package/dist/install/agentSwitchProfile.js.map +0 -1
- package/dist/install/atomic.js.map +0 -1
- package/dist/install/claudePathsPlan.js.map +0 -1
- package/dist/install/conflict.js.map +0 -1
- package/dist/install/detect.js.map +0 -1
- package/dist/install/emit_host_rules_cli.js.map +0 -1
- package/dist/install/globalRuleLayers.js.map +0 -1
- package/dist/install/hostLayerFingerprint.js.map +0 -1
- package/dist/install/partitionEligibility.js.map +0 -1
- package/dist/install/paths.js.map +0 -1
- package/dist/install/plan.js.map +0 -1
- package/dist/install/preflight.js.map +0 -1
- package/dist/install/rtkDetection.js.map +0 -1
- package/dist/install/ruleInScope.js.map +0 -1
- package/dist/install/ruleLayerPartition.js.map +0 -1
- package/dist/install/rule_scope.js.map +0 -1
- package/dist/install/rule_scope_cli.js.map +0 -1
- package/dist/install/selectedTools.js.map +0 -1
- package/dist/install/toolDetection.js.map +0 -1
- package/dist/install/txlog.js.map +0 -1
- package/dist/install/types.js.map +0 -1
- package/dist/install/wizard-plan.js.map +0 -1
- package/dist/install/wizardDismissals.js.map +0 -1
- package/dist/scripts/_lib/agent_settings.js.map +0 -1
- package/dist/scripts/_lib/agent_src.js.map +0 -1
- package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
- package/dist/scripts/_lib/claude_plugin.js.map +0 -1
- package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
- package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
- package/dist/scripts/_lib/environment_detector.js.map +0 -1
- package/dist/scripts/_lib/host_launch.js.map +0 -1
- package/dist/scripts/_lib/install_layout.js.map +0 -1
- package/dist/scripts/_lib/installed_lock.js.map +0 -1
- package/dist/scripts/_lib/lean_projection_mode.js.map +0 -1
- package/dist/scripts/_lib/model_tier.js.map +0 -1
- package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
- package/dist/scripts/_lib/scoped_projection.js.map +0 -1
- package/dist/scripts/_lib/script_output.js.map +0 -1
- package/dist/scripts/_lib/spawn_env.js.map +0 -1
- package/dist/scripts/_lib/surface_tiers.js.map +0 -1
- package/dist/scripts/_lib/token_count.js.map +0 -1
- package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
- package/dist/scripts/_lib/ui_surface.js.map +0 -1
- package/dist/scripts/_lib/user_global_paths.js.map +0 -1
- package/dist/scripts/ai_council/modes.js.map +0 -1
- package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
- package/dist/scripts/condense.js.map +0 -1
- package/dist/scripts/project_thin_rules.js.map +0 -1
- package/dist/server/app.js.map +0 -1
- package/dist/server/io/atomicMultiWrite.js.map +0 -1
- package/dist/server/io/atomicWrite.js.map +0 -1
- package/dist/server/io/sharedWriteCheck.js.map +0 -1
- package/dist/server/io/substituteTemplate.js.map +0 -1
- package/dist/server/io/yamlIO.js.map +0 -1
- package/dist/server/nicknameResolver.js.map +0 -1
- package/dist/server/port.js.map +0 -1
- package/dist/server/routes/discovery.js.map +0 -1
- package/dist/server/routes/install.js.map +0 -1
- package/dist/server/routes/ping.js.map +0 -1
- package/dist/server/routes/schema.js.map +0 -1
- package/dist/server/routes/settings.js.map +0 -1
- package/dist/server/routes/settingsChanges.js.map +0 -1
- package/dist/server/routes/userMd.js.map +0 -1
- package/dist/server/routes/wizard.js.map +0 -1
- package/dist/server/routes/workspace.js.map +0 -1
- package/dist/server/schemas/settings.js.map +0 -1
- package/dist/server/serverInfo.js.map +0 -1
- package/dist/server/token.js.map +0 -1
- package/dist/server/writeRoot.js.map +0 -1
- package/dist/shared/capabilities.js.map +0 -1
- package/dist/shared/interactiveContext.js.map +0 -1
- package/dist/shared/nicknamePrefill.js.map +0 -1
- package/dist/shared/settingsAsks.js.map +0 -1
- package/dist/shared/settingsCarveOut.js.map +0 -1
- package/dist/shared/settingsClasses.js.map +0 -1
- package/dist/shared/settingsConsent.js.map +0 -1
- package/dist/shared/settingsSurface.js.map +0 -1
- package/dist/shared/skillRanking.js.map +0 -1
- package/dist/shared/userMd/formAdapter.js.map +0 -1
- package/dist/shared/userMd/schema.js.map +0 -1
- package/dist/shared/userMd/utils.js.map +0 -1
- package/dist/ui/assets/index-Cxgy63kz.js +0 -26
- package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
- package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
- package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
- package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
- package/src/scripts/_lib/secret_detector.test.ts +0 -108
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
- package/src/scripts/_lib/ui_authority.test.ts +0 -251
- package/src/scripts/_lib/untrusted_content.test.ts +0 -175
- package/src/scripts/check_secret_leak.test.ts +0 -90
- package/src/scripts/design_slop_rules.test.ts +0 -246
- package/src/scripts/self_review_gate.test.ts +0 -296
- package/src/shared/capabilities.test.ts +0 -43
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-asset delivery ledger — which assets produce the standing payload
|
|
3
|
+
* (`road-to-delivered-cost-truth` step 2.1).
|
|
4
|
+
*
|
|
5
|
+
* `check_preamble_payload_budget` measures three BUCKET totals and refuses
|
|
6
|
+
* growth. It cannot say which asset inside a bucket is producing the cost, so a
|
|
7
|
+
* reduction effort has a number and no target. This module ranks the assets.
|
|
8
|
+
*
|
|
9
|
+
* WHAT "DELIVERY" MEANS PER BUCKET, because the two are not the same shape:
|
|
10
|
+
*
|
|
11
|
+
* - a RULE in the standing set delivers its whole body on every spawn;
|
|
12
|
+
* - a SKILL delivers only its catalogue line — `- <name>: <description>` — on
|
|
13
|
+
* every spawn. Its body is loaded on activation, which is not standing cost
|
|
14
|
+
* and is deliberately not counted here.
|
|
15
|
+
*
|
|
16
|
+
* Ranking the two together without that distinction would put every skill body
|
|
17
|
+
* above every rule and send a reduction effort at the wrong half of the tree.
|
|
18
|
+
*
|
|
19
|
+
* MEASUREMENT HONESTY. Each row states whether it was measured with the exact
|
|
20
|
+
* BPE tokenizer or the `chars/4` proxy, and a proxy reading within its own error
|
|
21
|
+
* margin of a threshold is reported `unresolved` rather than classified — the
|
|
22
|
+
* discipline `lint_token_budget_discipline` already applies to the rich band,
|
|
23
|
+
* reused here rather than reinvented.
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'node:fs';
|
|
26
|
+
import * as path from 'node:path';
|
|
27
|
+
|
|
28
|
+
import { parseFrontmatter } from '../preamble_byte_census.js';
|
|
29
|
+
import { gpt_tokens, gpt_tokens_proxy } from './token_count.js';
|
|
30
|
+
|
|
31
|
+
/** Worst-case per-file error of the character proxy, as measured for the rich band. */
|
|
32
|
+
export const PROXY_ERROR_MARGIN = 0.06;
|
|
33
|
+
|
|
34
|
+
export type AssetKind = 'rule' | 'skill-catalogue-line';
|
|
35
|
+
|
|
36
|
+
export interface AssetRow {
|
|
37
|
+
/** Repo-relative path of the asset. */
|
|
38
|
+
file: string;
|
|
39
|
+
/** Asset name as the preamble names it. */
|
|
40
|
+
name: string;
|
|
41
|
+
kind: AssetKind;
|
|
42
|
+
/** Tokens this asset contributes to EVERY spawn. */
|
|
43
|
+
tokens: number;
|
|
44
|
+
/**
|
|
45
|
+
* The same asset under the `chars/4` proxy.
|
|
46
|
+
*
|
|
47
|
+
* Carried alongside the BPE figure, not instead of it, because the payload
|
|
48
|
+
* gate counts chars/4 and reconciling a BPE total against a chars/4 total
|
|
49
|
+
* measures the METHODS, not the ledger. See {@link reconcile}.
|
|
50
|
+
*/
|
|
51
|
+
proxy_tokens: number;
|
|
52
|
+
/** `exact` when the BPE tokenizer resolved, `proxy` otherwise. */
|
|
53
|
+
method: 'exact' | 'proxy';
|
|
54
|
+
/** Share of the ledger total. */
|
|
55
|
+
share: number;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface LedgerVerdict {
|
|
59
|
+
rows: AssetRow[];
|
|
60
|
+
total_tokens: number;
|
|
61
|
+
/** True only when EVERY row came from the exact tokenizer. */
|
|
62
|
+
exact_throughout: boolean;
|
|
63
|
+
by_kind: Record<AssetKind, { count: number; tokens: number; proxy_tokens: number }>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Is a proxy reading too close to `threshold` to be classified?
|
|
68
|
+
*
|
|
69
|
+
* Symmetric, deliberately: the measured proxy error runs in BOTH directions
|
|
70
|
+
* (−5.3 % on the largest rich artifact), so a band that straddles the threshold
|
|
71
|
+
* yields no verdict rather than a confident wrong one.
|
|
72
|
+
*/
|
|
73
|
+
export function unresolvedAgainst(tokens: number, method: 'exact' | 'proxy', threshold: number): boolean {
|
|
74
|
+
if (method === 'exact') return false;
|
|
75
|
+
const margin = Math.ceil(tokens * PROXY_ERROR_MARGIN);
|
|
76
|
+
return tokens - margin <= threshold && tokens + margin > threshold;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Walk the standing rule directory. Each rule delivers its whole body. */
|
|
80
|
+
export function measureRules(rulesDir: string, repoRoot: string): AssetRow[] {
|
|
81
|
+
if (!fs.existsSync(rulesDir)) return [];
|
|
82
|
+
const rows: AssetRow[] = [];
|
|
83
|
+
for (const entry of fs.readdirSync(rulesDir, { withFileTypes: true })) {
|
|
84
|
+
if (!entry.isFile() || !entry.name.endsWith('.md')) continue;
|
|
85
|
+
const abs = path.join(rulesDir, entry.name);
|
|
86
|
+
const text = fs.readFileSync(abs, 'utf-8');
|
|
87
|
+
const count = gpt_tokens(text);
|
|
88
|
+
rows.push({
|
|
89
|
+
file: path.relative(repoRoot, abs),
|
|
90
|
+
name: entry.name.replace(/\.md$/, ''),
|
|
91
|
+
kind: 'rule',
|
|
92
|
+
tokens: count.tokens,
|
|
93
|
+
proxy_tokens: gpt_tokens_proxy(text).tokens,
|
|
94
|
+
method: count.exact ? 'exact' : 'proxy',
|
|
95
|
+
share: 0,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return rows;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Walk the skill catalogue. Each skill delivers ONE line, not its body.
|
|
103
|
+
*
|
|
104
|
+
* The line is built the same way `censusSkillsCatalog` builds it — `- <name>:
|
|
105
|
+
* <description>\n` — because a ledger that measured the body would rank a skill
|
|
106
|
+
* that is never activated above a rule that is always delivered.
|
|
107
|
+
*/
|
|
108
|
+
export function measureSkillCatalogue(skillsDir: string, repoRoot: string): AssetRow[] {
|
|
109
|
+
if (!fs.existsSync(skillsDir)) return [];
|
|
110
|
+
const rows: AssetRow[] = [];
|
|
111
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
112
|
+
if (!entry.isDirectory()) continue;
|
|
113
|
+
const skillMd = path.join(skillsDir, entry.name, 'SKILL.md');
|
|
114
|
+
let text: string;
|
|
115
|
+
try {
|
|
116
|
+
text = fs.readFileSync(skillMd, 'utf-8');
|
|
117
|
+
} catch {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
// The SAME parser the payload census uses, not a second reader of the
|
|
121
|
+
// same bytes. A regex version reconciled 17.1 % low because a folded
|
|
122
|
+
// multi-line `description:` truncates at the first newline.
|
|
123
|
+
const fm = parseFrontmatter(text);
|
|
124
|
+
const name = typeof fm.name === 'string' && fm.name.length > 0 ? fm.name : entry.name;
|
|
125
|
+
const description = typeof fm.description === 'string' ? fm.description : '';
|
|
126
|
+
const line = `- ${name}: ${description}\n`;
|
|
127
|
+
const count = gpt_tokens(line);
|
|
128
|
+
rows.push({
|
|
129
|
+
file: path.relative(repoRoot, skillMd),
|
|
130
|
+
name,
|
|
131
|
+
kind: 'skill-catalogue-line',
|
|
132
|
+
tokens: count.tokens,
|
|
133
|
+
proxy_tokens: gpt_tokens_proxy(line).tokens,
|
|
134
|
+
method: count.exact ? 'exact' : 'proxy',
|
|
135
|
+
share: 0,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return rows;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function buildLedger(rulesDir: string, skillsDir: string, repoRoot: string): LedgerVerdict {
|
|
142
|
+
const rows = [...measureRules(rulesDir, repoRoot), ...measureSkillCatalogue(skillsDir, repoRoot)];
|
|
143
|
+
const total = rows.reduce((n, r) => n + r.tokens, 0);
|
|
144
|
+
for (const r of rows) r.share = total > 0 ? r.tokens / total : 0;
|
|
145
|
+
rows.sort((a, b) => b.tokens - a.tokens || a.file.localeCompare(b.file));
|
|
146
|
+
|
|
147
|
+
const byKind: Record<AssetKind, { count: number; tokens: number; proxy_tokens: number }> = {
|
|
148
|
+
rule: { count: 0, tokens: 0, proxy_tokens: 0 },
|
|
149
|
+
'skill-catalogue-line': { count: 0, tokens: 0, proxy_tokens: 0 },
|
|
150
|
+
};
|
|
151
|
+
for (const r of rows) {
|
|
152
|
+
byKind[r.kind].count += 1;
|
|
153
|
+
byKind[r.kind].tokens += r.tokens;
|
|
154
|
+
byKind[r.kind].proxy_tokens += r.proxy_tokens;
|
|
155
|
+
}
|
|
156
|
+
return { rows, total_tokens: total, exact_throughout: rows.every((r) => r.method === 'exact'), by_kind: byKind };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export interface Reconciliation {
|
|
160
|
+
kind: AssetKind;
|
|
161
|
+
bucket: string;
|
|
162
|
+
/** The ledger's chars/4 total — the SAME method the bucket uses. */
|
|
163
|
+
ledger_proxy_tokens: number;
|
|
164
|
+
/** The ledger's BPE total, reported for contrast, never reconciled against. */
|
|
165
|
+
ledger_exact_tokens: number;
|
|
166
|
+
bucket_tokens: number;
|
|
167
|
+
/** Absolute relative difference, like-for-like. */
|
|
168
|
+
drift: number;
|
|
169
|
+
within_margin: boolean;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Reconcile the ledger against the payload gate's own bucket totals.
|
|
174
|
+
*
|
|
175
|
+
* LIKE-FOR-LIKE, and this took a correction. The first cut compared the
|
|
176
|
+
* ledger's BPE total against the gate's `chars/4` bucket and set a 15 % margin
|
|
177
|
+
* to absorb the difference. That margin was GUESSED, which is the exact defect
|
|
178
|
+
* this roadmap's own budget file is careful about — and it did not even work:
|
|
179
|
+
* rules reconciled at 1.6 % while skill catalogue lines drifted 28.1 %, because
|
|
180
|
+
* `chars/4` overestimates short structured lines far more than it does prose.
|
|
181
|
+
* The 15 % would have hidden the rule drift and failed the skill drift, and
|
|
182
|
+
* neither verdict would have been about the ledger.
|
|
183
|
+
*
|
|
184
|
+
* So the ledger carries BOTH figures and reconciles the proxy against the
|
|
185
|
+
* proxy. What remains is real disagreement — a different corpus, a different
|
|
186
|
+
* line format, a missed file — which is what a reconciliation is for. The
|
|
187
|
+
* margin can then be tight, because two implementations of one arithmetic
|
|
188
|
+
* should agree closely or one of them is wrong.
|
|
189
|
+
*/
|
|
190
|
+
export const RECONCILE_MARGIN = 0.02;
|
|
191
|
+
|
|
192
|
+
export function reconcile(
|
|
193
|
+
ledger: LedgerVerdict,
|
|
194
|
+
buckets: ReadonlyArray<{ name: string; tokens: number }>,
|
|
195
|
+
): Reconciliation[] {
|
|
196
|
+
const map: Array<{ kind: AssetKind; bucket: string }> = [
|
|
197
|
+
{ kind: 'rule', bucket: 'project-scope rules' },
|
|
198
|
+
{ kind: 'skill-catalogue-line', bucket: 'preloaded skills catalog' },
|
|
199
|
+
];
|
|
200
|
+
const out: Reconciliation[] = [];
|
|
201
|
+
for (const m of map) {
|
|
202
|
+
const bucket = buckets.find((b) => b.name === m.bucket);
|
|
203
|
+
if (bucket === undefined) continue;
|
|
204
|
+
const proxyTokens = ledger.by_kind[m.kind].proxy_tokens;
|
|
205
|
+
const drift =
|
|
206
|
+
bucket.tokens === 0 ? (proxyTokens === 0 ? 0 : 1) : Math.abs(proxyTokens - bucket.tokens) / bucket.tokens;
|
|
207
|
+
out.push({
|
|
208
|
+
kind: m.kind,
|
|
209
|
+
bucket: m.bucket,
|
|
210
|
+
ledger_proxy_tokens: proxyTokens,
|
|
211
|
+
ledger_exact_tokens: ledger.by_kind[m.kind].tokens,
|
|
212
|
+
bucket_tokens: bucket.tokens,
|
|
213
|
+
drift,
|
|
214
|
+
within_margin: drift <= RECONCILE_MARGIN,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return out;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// ─────────────────────────────────────────── growth attribution (step 2.2)
|
|
221
|
+
|
|
222
|
+
export interface GrowthEntry {
|
|
223
|
+
name: string;
|
|
224
|
+
kind: AssetKind;
|
|
225
|
+
/** Positive = this asset grew or arrived. */
|
|
226
|
+
delta: number;
|
|
227
|
+
status: 'added' | 'grew' | 'shrank' | 'removed';
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export interface GrowthAttribution {
|
|
231
|
+
/** Assets that grew or arrived, largest first. */
|
|
232
|
+
increases: GrowthEntry[];
|
|
233
|
+
/** Assets that shrank or left, largest saving first. */
|
|
234
|
+
decreases: GrowthEntry[];
|
|
235
|
+
net_delta: number;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Attribute a payload change to the assets that caused it (step 2.2).
|
|
240
|
+
*
|
|
241
|
+
* A ratchet that says "the payload grew past the ceiling" states a fact and
|
|
242
|
+
* leaves the reader to find the cause; the same refusal naming the asset and its
|
|
243
|
+
* token delta reads as a quantified saving instead of an obstacle. That is the
|
|
244
|
+
* whole difference this function buys, and it is a presentation difference with
|
|
245
|
+
* a real consequence: a refusal nobody can act on gets suppressed rather than
|
|
246
|
+
* fixed.
|
|
247
|
+
*
|
|
248
|
+
* Pure and order-independent — both sides are keyed on `kind:name`, so a
|
|
249
|
+
* reordered ledger produces the same attribution.
|
|
250
|
+
*/
|
|
251
|
+
export function attributeGrowth(before: readonly AssetRow[], after: readonly AssetRow[]): GrowthAttribution {
|
|
252
|
+
const key = (r: AssetRow): string => `${r.kind}:${r.name}`;
|
|
253
|
+
const b = new Map(before.map((r) => [key(r), r.tokens]));
|
|
254
|
+
const a = new Map(after.map((r) => [key(r), r.tokens]));
|
|
255
|
+
|
|
256
|
+
const entries: GrowthEntry[] = [];
|
|
257
|
+
for (const [k, tokens] of a) {
|
|
258
|
+
const prev = b.get(k);
|
|
259
|
+
const [kind, ...rest] = k.split(':');
|
|
260
|
+
const name = rest.join(':');
|
|
261
|
+
if (prev === undefined) {
|
|
262
|
+
entries.push({ name, kind: kind as AssetKind, delta: tokens, status: 'added' });
|
|
263
|
+
} else if (tokens !== prev) {
|
|
264
|
+
entries.push({ name, kind: kind as AssetKind, delta: tokens - prev, status: tokens > prev ? 'grew' : 'shrank' });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
for (const [k, tokens] of b) {
|
|
268
|
+
if (a.has(k)) continue;
|
|
269
|
+
const [kind, ...rest] = k.split(':');
|
|
270
|
+
entries.push({ name: rest.join(':'), kind: kind as AssetKind, delta: -tokens, status: 'removed' });
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const increases = entries.filter((e) => e.delta > 0).sort((x, y) => y.delta - x.delta || x.name.localeCompare(y.name));
|
|
274
|
+
const decreases = entries.filter((e) => e.delta < 0).sort((x, y) => x.delta - y.delta || x.name.localeCompare(y.name));
|
|
275
|
+
return { increases, decreases, net_delta: entries.reduce((n, e) => n + e.delta, 0) };
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Render an attribution as the lines a refusing gate appends to its message.
|
|
280
|
+
*
|
|
281
|
+
* Capped, because a refusal listing 400 assets is as unactionable as one listing
|
|
282
|
+
* none — and the cap is stated rather than silent, so a reader knows the list is
|
|
283
|
+
* a head and not the whole story.
|
|
284
|
+
*/
|
|
285
|
+
export function renderAttribution(g: GrowthAttribution, limit = 5): string[] {
|
|
286
|
+
if (g.increases.length === 0 && g.decreases.length === 0) return [];
|
|
287
|
+
const out: string[] = [];
|
|
288
|
+
const sign = (n: number): string => (n >= 0 ? `+${String(n)}` : String(n));
|
|
289
|
+
out.push(` net delivered-token change: ${sign(g.net_delta)} tok`);
|
|
290
|
+
if (g.increases.length > 0) {
|
|
291
|
+
out.push(` grew or arrived (top ${String(Math.min(limit, g.increases.length))} of ${String(g.increases.length)}):`);
|
|
292
|
+
for (const e of g.increases.slice(0, limit)) {
|
|
293
|
+
out.push(` ${sign(e.delta).padStart(7)} tok ${e.name} (${e.kind}, ${e.status})`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (g.decreases.length > 0) {
|
|
297
|
+
out.push(` shrank or left (top ${String(Math.min(limit, g.decreases.length))} of ${String(g.decreases.length)}):`);
|
|
298
|
+
for (const e of g.decreases.slice(0, limit)) {
|
|
299
|
+
out.push(` ${sign(e.delta).padStart(7)} tok ${e.name} (${e.kind}, ${e.status})`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return out;
|
|
303
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which audit-log fields are OBSERVED and which are producer constants.
|
|
3
|
+
*
|
|
4
|
+
* This module exists because a prose sentence was wrong for months and nothing
|
|
5
|
+
* could tell. `docs/contracts/audit-log-v1.md` described `rules_applied` as
|
|
6
|
+
* "stable rule ids whose Iron Law fired this phase" — an observation — while
|
|
7
|
+
* both shipped producers write the literal `['delegation-policy']` on every
|
|
8
|
+
* line. A consumer following the contract computes a per-rule win rate of 100 %
|
|
9
|
+
* for one rule and `undefined` for the other 118, and that reads as a finding.
|
|
10
|
+
*
|
|
11
|
+
* It was found by the loop rather than by review: mining the real audit stream
|
|
12
|
+
* with `extract_audit_patterns --min-count 2` mints exactly ONE pattern,
|
|
13
|
+
* `implement:success:delegation-policy`, at count 914 over 935 lines. A
|
|
14
|
+
* regularity that strong in a field that varied would be remarkable; in a field
|
|
15
|
+
* that does not vary it is arithmetic.
|
|
16
|
+
*
|
|
17
|
+
* The prose was DELETED rather than softened, and this check replaces it. A
|
|
18
|
+
* sentence cannot stop a consumer from aggregating over a constant; a function
|
|
19
|
+
* the consumer must call can, and it goes stale loudly instead of silently
|
|
20
|
+
* because the producers are named here and a test asserts they still match.
|
|
21
|
+
*
|
|
22
|
+
* road-to-experience-loop-broadening step 9.3 — the removal the loop motivated.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Fields a shipped producer writes as a fixed value, with the value.
|
|
27
|
+
*
|
|
28
|
+
* A field listed here is NOT evidence about the run. Adding a row is how a
|
|
29
|
+
* future producer records the same honesty; removing one requires that the
|
|
30
|
+
* producer actually compute the field.
|
|
31
|
+
*/
|
|
32
|
+
export const PRODUCER_CONSTANT_FIELDS: ReadonlyMap<string, readonly string[]> = new Map([
|
|
33
|
+
// Written identically by `orchestration_record.ts` and
|
|
34
|
+
// `review_skipped_record.ts`. Neither computes it from rules that fired.
|
|
35
|
+
['rules_applied', ['delegation-policy']],
|
|
36
|
+
]);
|
|
37
|
+
|
|
38
|
+
/** True when a per-asset rate over this field would measure the producer. */
|
|
39
|
+
export function isProducerConstantField(field: string): boolean {
|
|
40
|
+
return PRODUCER_CONSTANT_FIELDS.has(field);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The reason, for a consumer that wants to say why it skipped a column.
|
|
45
|
+
* `null` when the field is genuinely observed.
|
|
46
|
+
*/
|
|
47
|
+
export function constantFieldReason(field: string): string | null {
|
|
48
|
+
const v = PRODUCER_CONSTANT_FIELDS.get(field);
|
|
49
|
+
if (v === undefined) return null;
|
|
50
|
+
return (
|
|
51
|
+
`'${field}' is written as the fixed value [${v.map((x) => `'${x}'`).join(', ')}] by every shipped ` +
|
|
52
|
+
'producer, so any rate computed over it measures the writer rather than the work.'
|
|
53
|
+
);
|
|
54
|
+
}
|
|
@@ -156,14 +156,43 @@ const LOOKUP_PATTERNS: Array<{ cls: LookupClass; primitive: LookupPrimitive; re:
|
|
|
156
156
|
* silently degraded answer; an index-miss at execution time escalates the
|
|
157
157
|
* same way (runtime concern, documented in the classification context).
|
|
158
158
|
*/
|
|
159
|
-
export function classifyLookup(
|
|
159
|
+
export function classifyLookup(
|
|
160
|
+
taskText: string,
|
|
161
|
+
opts: { codeGraphEnabled?: boolean | undefined } = {},
|
|
162
|
+
): LookupRoute {
|
|
163
|
+
// The graph is an OPPORTUNISTIC ACCELERANT, gated on the setting — which is
|
|
164
|
+
// what `auto-dispatch-classification.md` § Task pattern has always said and
|
|
165
|
+
// what this function did not do.
|
|
166
|
+
//
|
|
167
|
+
// road-to-inbox-harvest-2026-08-f-code-graph-evidence-refresh 2.1 required
|
|
168
|
+
// deciding which of the two was right and changing the other, not splitting
|
|
169
|
+
// the difference. The CONTRACT is right, on the only evidence that exists:
|
|
170
|
+
// the pre-registered benchmark behind `claim:code-graph-retrieval-null`
|
|
171
|
+
// measured native-graph recall 0.365 against grep's 0.797 on exactly these
|
|
172
|
+
// graph-shaped questions. Routing to the graph unconditionally routed to the
|
|
173
|
+
// arm that lost, and no re-measurement has replaced that figure — Phase 3.1
|
|
174
|
+
// is blocked on inputs this repository does not hold.
|
|
175
|
+
//
|
|
176
|
+
// Default FALSE, deliberately, and not because the setting's default is
|
|
177
|
+
// false: an absent flag means nobody said the index is present and fresh,
|
|
178
|
+
// and an accelerant taken on an absent index is a miss that escalates —
|
|
179
|
+
// slower than the grep it replaced. When the flag is on, the class still
|
|
180
|
+
// routes to `code-graph-query`, so turning it on is the whole change needed
|
|
181
|
+
// to use the graph.
|
|
182
|
+
const graphOk = opts.codeGraphEnabled === true;
|
|
160
183
|
for (const p of LOOKUP_PATTERNS) {
|
|
161
184
|
if (p.re.test(taskText)) {
|
|
185
|
+
const primitive: LookupPrimitive =
|
|
186
|
+
p.primitive === 'code-graph-query' && !graphOk ? 'fts-or-capped-grep' : p.primitive;
|
|
162
187
|
return {
|
|
163
188
|
lookup_class: p.cls,
|
|
164
189
|
route: 'primitive',
|
|
165
|
-
primitive
|
|
166
|
-
reason:
|
|
190
|
+
primitive,
|
|
191
|
+
reason:
|
|
192
|
+
primitive === p.primitive
|
|
193
|
+
? `lookup-class ${p.cls} — deterministic primitive, no spawn`
|
|
194
|
+
: `lookup-class ${p.cls} — capped grep; the code-graph accelerant is ` +
|
|
195
|
+
'gated on hooks.code_graph.enabled and it is not on',
|
|
167
196
|
};
|
|
168
197
|
}
|
|
169
198
|
}
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* change to either has to touch the record and the code together.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import { decidePairedVerdict, floorWarning, MIN_DISCORDANT } from './paired_verdict.js';
|
|
17
|
+
|
|
16
18
|
/** T1 — median added lines must fall by at least this much. */
|
|
17
19
|
export const T1_MEDIAN_LINES_PCT = -10;
|
|
18
20
|
/** Two-sided significance for every endpoint in the pair. */
|
|
@@ -25,7 +27,15 @@ export interface PairedContinuous {
|
|
|
25
27
|
/** `null` when the baseline median is 0 — no percent change exists. */
|
|
26
28
|
median_delta_pct: number | null;
|
|
27
29
|
median_delta: number;
|
|
30
|
+
/**
|
|
31
|
+
* Retained for TRIAGE and reporting. Since PREREG amendment v2 it decides
|
|
32
|
+
* nothing — see {@link evaluateSizeClaim}.
|
|
33
|
+
*/
|
|
28
34
|
wilcoxon_p: number;
|
|
35
|
+
/** Non-tied pairs in the direction of interest. Absent on a pre-amendment report. */
|
|
36
|
+
direction_wins?: number | undefined;
|
|
37
|
+
/** Non-tied pairs against the direction of interest. Absent on a pre-amendment report. */
|
|
38
|
+
direction_losses?: number | undefined;
|
|
29
39
|
}
|
|
30
40
|
|
|
31
41
|
/** A paired binary endpoint (the safety tier). */
|
|
@@ -56,6 +66,44 @@ export interface SizeClaimVerdict {
|
|
|
56
66
|
safety_measured: boolean;
|
|
57
67
|
}
|
|
58
68
|
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
/** One clause naming the directional evidence, printable in a verdict reason. */
|
|
72
|
+
function describeDirection(v: ReturnType<typeof decidePairedVerdict> | null): string {
|
|
73
|
+
if (v === null) {
|
|
74
|
+
return `no direction counts in the report — pre-amendment or unmeasured, so the direction bar is not met`;
|
|
75
|
+
}
|
|
76
|
+
if (v.kind === 'underpowered') {
|
|
77
|
+
return `underpowered: ${String(v.discordant)} non-tied pair(s) below the derived floor of ${String(MIN_DISCORDANT)}`;
|
|
78
|
+
}
|
|
79
|
+
const warn = floorWarning(v);
|
|
80
|
+
return `${String(v.wins)}/${String(v.discordant)} non-tied pairs, one-sided exact p=${v.p.toFixed(4)}` +
|
|
81
|
+
(warn === null ? '' : ` — ${warn}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The directional verdict for one endpoint, or `null` when it cannot be formed.
|
|
86
|
+
*
|
|
87
|
+
* `null` means the report carries no direction counts — a pre-amendment report,
|
|
88
|
+
* or an unmeasured endpoint. The caller treats that as "not significant" rather
|
|
89
|
+
* than reaching for `wilcoxon_p`, which is the whole point of the amendment.
|
|
90
|
+
*
|
|
91
|
+
* The counts are reconstructed into a delta vector of ±1 rather than carrying
|
|
92
|
+
* raw deltas through the report: the exact sign test needs direction only, and
|
|
93
|
+
* a council seat noted the raw deltas are preferable for auditability but not
|
|
94
|
+
* mathematically required. The raw values remain in the trial artifacts.
|
|
95
|
+
*/
|
|
96
|
+
function directionVerdict(e: PairedContinuous): ReturnType<typeof decidePairedVerdict> | null {
|
|
97
|
+
if (!e.measured) return null;
|
|
98
|
+
const w = e.direction_wins;
|
|
99
|
+
const l = e.direction_losses;
|
|
100
|
+
if (w === undefined || l === undefined) return null;
|
|
101
|
+
return decidePairedVerdict({
|
|
102
|
+
deltas: [...Array<number>(w).fill(1), ...Array<number>(l).fill(-1)],
|
|
103
|
+
alpha: ALPHA,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
59
107
|
/**
|
|
60
108
|
* Evaluate the size claim for one comparison — binding, and structurally unable
|
|
61
109
|
* to report a win on size alone.
|
|
@@ -98,9 +146,52 @@ export function evaluateSizeClaim(input: SizeClaimInput): SizeClaimVerdict {
|
|
|
98
146
|
};
|
|
99
147
|
}
|
|
100
148
|
|
|
101
|
-
|
|
149
|
+
// ── PREREG amendment v2, 2026-08-26 — direction decides significance ────
|
|
150
|
+
//
|
|
151
|
+
// The significance half of every endpoint below was a Wilcoxon signed-rank
|
|
152
|
+
// p, which ranks by |difference| and is therefore magnitude-weighted. That
|
|
153
|
+
// was shown to disagree with the exact test on twelve records up to ten
|
|
154
|
+
// trials, PERMISSIVE in every one, with the visible symptom inverted: an
|
|
155
|
+
// artifact winning every trial still failed, because a few large
|
|
156
|
+
// opposite-direction deltas outweighed a clean sweep of small ones.
|
|
157
|
+
//
|
|
158
|
+
// TWO PROPOSITIONS, KEPT SEPARATE — this is the refinement both council
|
|
159
|
+
// seats independently required (2026-08-26, 2/2) and it is the half that
|
|
160
|
+
// makes the amendment safe. A sign test answers "did this help more often
|
|
161
|
+
// than it hurt" and says NOTHING about how much. Replacing Wilcoxon with it
|
|
162
|
+
// outright would let a clean sweep of negligible improvements claim a SIZE
|
|
163
|
+
// win. So:
|
|
164
|
+
// · directional reliability → exact one-sided sign test over non-tied pairs
|
|
165
|
+
// · practical magnitude → the pre-registered T1_MEDIAN_LINES_PCT bar,
|
|
166
|
+
// unchanged and still independently binding
|
|
167
|
+
// Both must hold. Dropping either is a different claim and needs its own
|
|
168
|
+
// amendment.
|
|
169
|
+
//
|
|
170
|
+
// A report predating the amendment carries no direction counts. It is
|
|
171
|
+
// treated as UNMEASURED for the significance half rather than falling back
|
|
172
|
+
// to `wilcoxon_p`, because a silent fallback to the defective test is
|
|
173
|
+
// exactly what this amendment removes.
|
|
174
|
+
const sizeDir = directionVerdict(size);
|
|
175
|
+
const cxDir = directionVerdict(cx);
|
|
176
|
+
// ASYMMETRY, deliberate and the conservative direction of it. A PASS needs
|
|
177
|
+
// the direction bar MET; a REFUSAL fires on EITHER signal. Applying the
|
|
178
|
+
// strict reading to both would make the anti-golfing refusal disappear on
|
|
179
|
+
// any report without direction counts — a missing input silently rescuing
|
|
180
|
+
// an arm is the failure mode a refusal exists to prevent, and it is the
|
|
181
|
+
// opposite of what the amendment is for. So the refusal keeps the legacy
|
|
182
|
+
// Wilcoxon signal as a second trigger; the claim does not.
|
|
183
|
+
const cx_rose =
|
|
184
|
+
cx.measured &&
|
|
185
|
+
cx.median_delta > 0 &&
|
|
186
|
+
(cxDir === null ? cx.wilcoxon_p < ALPHA : cxDir.kind === 'regression');
|
|
187
|
+
// `regression`, NOT `pass`, and the distinction cost a test run to find.
|
|
188
|
+
// `direction_wins` counts the endpoint's IMPROVEMENT direction — a negative
|
|
189
|
+
// delta — for every continuous endpoint, so on complexity a `pass` means
|
|
190
|
+
// complexity FELL. What `cx_rose` needs is the opposite tail, which is
|
|
191
|
+
// exactly what `regression` names. Writing `pass` here reads correctly in
|
|
192
|
+
// English and inverts the anti-golfing guard.
|
|
102
193
|
const pct = size.measured ? size.median_delta_pct : null;
|
|
103
|
-
const lines_fell = pct !== null && pct <= T1_MEDIAN_LINES_PCT &&
|
|
194
|
+
const lines_fell = pct !== null && pct <= T1_MEDIAN_LINES_PCT && sizeDir?.kind === 'pass';
|
|
104
195
|
|
|
105
196
|
// (2b) Golfing is refused as soon as T2 shows it, and does NOT wait for T4.
|
|
106
197
|
//
|
|
@@ -161,8 +252,11 @@ export function evaluateSizeClaim(input: SizeClaimInput): SizeClaimVerdict {
|
|
|
161
252
|
...base,
|
|
162
253
|
verdict: lines_fell ? 'PASS' : 'NO-SIZE-WIN',
|
|
163
254
|
reason: lines_fell
|
|
164
|
-
? `median added lines ${pct}%
|
|
165
|
-
|
|
255
|
+
? `median added lines ${pct}% (magnitude bar) AND ${describeDirection(sizeDir)} (direction bar) ` +
|
|
256
|
+
'with no significant complexity rise and no safety regression'
|
|
257
|
+
: `T1 not met (median added lines ${pct}%, bar <= ${T1_MEDIAN_LINES_PCT}%; ` +
|
|
258
|
+
`direction: ${describeDirection(sizeDir)}). Wilcoxon p=${size.wilcoxon_p} is reported for ` +
|
|
259
|
+
'triage and decides nothing.',
|
|
166
260
|
lines_fell,
|
|
167
261
|
size_measured: true,
|
|
168
262
|
complexity_measured: true,
|