@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,119 @@
|
|
|
1
|
+
# Canonical terms — the house dialect for repository-authored prose.
|
|
2
|
+
# road-to-canonical-terms Phase 1.1. AI council 2/2, 2026-08-25.
|
|
3
|
+
#
|
|
4
|
+
# WHAT THIS FILE DECIDES, AND WHAT IT DOES NOT.
|
|
5
|
+
# It records the canonical side of each measured pair. It does NOT authorise a
|
|
6
|
+
# sweep of the existing corpus. Both council seats separated the two
|
|
7
|
+
# deliberately: choosing a canonical dialect and rewriting ~5000 historical
|
|
8
|
+
# occurrences have different evidentiary requirements, and only the first is
|
|
9
|
+
# supported today. `policy_scope` below states that boundary in the data rather
|
|
10
|
+
# than only in prose, so a future reader cannot take this file for authorisation.
|
|
11
|
+
#
|
|
12
|
+
# WHY AMERICAN, WHEN THE PUBLISHED AGGREGATE SAID BRITISH.
|
|
13
|
+
# The roadmap's Phase 1.1 rests on `behaviour`/`behavior` splitting 57/43 with
|
|
14
|
+
# the BRITISH side ahead, calling it a case where the majority rule and the
|
|
15
|
+
# consistency rule point in opposite directions. Decomposed by directory, they
|
|
16
|
+
# do not point in opposite directions at all:
|
|
17
|
+
#
|
|
18
|
+
# src/ 128 behaviour / 432 behavior -> 22/78 AMERICAN
|
|
19
|
+
# docs/ 304 / 189 -> 61/39
|
|
20
|
+
# agents/ 971 / 419 -> 69/31
|
|
21
|
+
#
|
|
22
|
+
# The British majority is produced almost entirely by `agents/` -- roadmaps,
|
|
23
|
+
# evidence notes and archive, i.e. this repository's own working prose, much of
|
|
24
|
+
# it in files nobody will edit again. On the SHIPPED surface the tree is already
|
|
25
|
+
# 78 % American. So this file documents existing practice where it matters
|
|
26
|
+
# rather than imposing a rewrite, which is also the strongest answer to the
|
|
27
|
+
# seat that asked for evidence of harm before authorising 5000 changed lines:
|
|
28
|
+
# declaring the convention `src/` already follows costs nothing and changes no
|
|
29
|
+
# file.
|
|
30
|
+
#
|
|
31
|
+
# Full decomposition, including the two other pairs that flip between the
|
|
32
|
+
# shipped surface and the aggregate (`artifact`/`artefact` and
|
|
33
|
+
# `preflight`/`pre-flight`), is the CORRECTION section of
|
|
34
|
+
# agents/evidence/analysis/wording-baseline-2026-08-25.md.
|
|
35
|
+
schema_version: canonical-terms-v1
|
|
36
|
+
|
|
37
|
+
policy_scope: prose-authored-here
|
|
38
|
+
# `prose-authored-here` -- the canonical side applies to prose THIS repository
|
|
39
|
+
# writes. It never applies to: exact external titles and quotations, code,
|
|
40
|
+
# identifiers, paths, URLs, commands, test fixtures, snapshots, or externally
|
|
41
|
+
# synchronised material. The council's wording, adopted verbatim in intent:
|
|
42
|
+
# do NOT exempt ordinary prose merely because it sits near protected text.
|
|
43
|
+
|
|
44
|
+
sweep_authorised: false
|
|
45
|
+
# Set true only when a classified inventory and a bounded pilot exist. The
|
|
46
|
+
# conditions are recorded at the roadmap's step 2.1; this key exists so a gate
|
|
47
|
+
# or a future session reads the answer rather than inferring it from silence.
|
|
48
|
+
|
|
49
|
+
terms:
|
|
50
|
+
# --- decided, and the direction is the same in src/, docs/ and agents/ ---
|
|
51
|
+
- canonical: subagent
|
|
52
|
+
variant: sub-agent
|
|
53
|
+
confidence: unambiguous
|
|
54
|
+
note: 98/2 in src/, 99/1 in docs/ and agents/. No directory disagrees.
|
|
55
|
+
- canonical: handoff
|
|
56
|
+
variant: hand-off
|
|
57
|
+
confidence: unambiguous
|
|
58
|
+
note: >-
|
|
59
|
+
84/16 in src/, 85/15 in docs/, 95/5 in agents/. `hand off` as two words is
|
|
60
|
+
a verb phrase and is not a variant of the noun; it is out of scope here.
|
|
61
|
+
- canonical: organize
|
|
62
|
+
variant: organise
|
|
63
|
+
confidence: unambiguous
|
|
64
|
+
note: >-
|
|
65
|
+
100/0 in src/ and docs/. agents/ is 53/47 on n=13, which is too small to
|
|
66
|
+
contradict anything.
|
|
67
|
+
- canonical: gray
|
|
68
|
+
variant: grey
|
|
69
|
+
confidence: low-count
|
|
70
|
+
note: >-
|
|
71
|
+
68/32 in src/ on n=25. Direction is consistent across directories but the
|
|
72
|
+
total is small; recorded as decided and flagged as thin evidence.
|
|
73
|
+
- canonical: canonicalize
|
|
74
|
+
variant: canonicalise
|
|
75
|
+
confidence: low-count
|
|
76
|
+
note: 100/0 in src/ on n=2. Follows `organize` rather than standing on its own count.
|
|
77
|
+
|
|
78
|
+
# --- decided AGAINST the published aggregate, on the shipped-surface reading ---
|
|
79
|
+
- canonical: behavior
|
|
80
|
+
variant: behaviour
|
|
81
|
+
confidence: decided-against-aggregate
|
|
82
|
+
note: >-
|
|
83
|
+
The pair the roadmap called hard. src/ is 22/78 American, so on the
|
|
84
|
+
shipped surface the majority rule and the consistency rule agree. The
|
|
85
|
+
aggregate's 57/43 British lead is an artifact of counting agents/.
|
|
86
|
+
- canonical: artifact
|
|
87
|
+
variant: artefact
|
|
88
|
+
confidence: decided-against-aggregate
|
|
89
|
+
note: >-
|
|
90
|
+
Aggregate 51/49 is a coin-flip and agents/ is 49/51, but src/ is 63/37.
|
|
91
|
+
Decided on the shipped surface for the same reason as `behavior`.
|
|
92
|
+
|
|
93
|
+
# --- decided, but the migration is explicitly NOT mechanical ---
|
|
94
|
+
- canonical: license
|
|
95
|
+
variant: licence
|
|
96
|
+
confidence: semantic-care-required
|
|
97
|
+
note: >-
|
|
98
|
+
94/6 in src/. `license` is both noun and verb in the canonical dialect, so
|
|
99
|
+
no noun/verb distinction is preserved in repository-authored prose. But
|
|
100
|
+
exact licence TITLES and quoted names are protected text and are never
|
|
101
|
+
rewritten -- and per the council, proximity to a protected name does not
|
|
102
|
+
exempt the surrounding prose. This pair is the one where a mechanical
|
|
103
|
+
find-and-replace would be wrong.
|
|
104
|
+
|
|
105
|
+
# --- NOT decided ---
|
|
106
|
+
- canonical: null
|
|
107
|
+
variant: pre-flight
|
|
108
|
+
also: preflight
|
|
109
|
+
confidence: undecided
|
|
110
|
+
note: >-
|
|
111
|
+
The one pair this file declines to decide. src/ is 44/56 in favour of the
|
|
112
|
+
HYPHENATED form on n=25, while the aggregate says 68/32 for the closed
|
|
113
|
+
form. The honest reading of a 25-sample near-tie is undecided, not decided
|
|
114
|
+
the other way, and picking a side to make the table look complete is the
|
|
115
|
+
failure this entry exists to avoid. Revisit when src/ carries enough
|
|
116
|
+
occurrences to separate the two.
|
|
117
|
+
|
|
118
|
+
# `cancelled` / `canceled` is 946/0 and needs no entry -- recorded in the
|
|
119
|
+
# wording baseline so a later pass does not spend a sweep on it.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Pre-registered outcome bars for road-to-capability-native-execution, step 0.6. FIXED BEFORE ANY MEASUREMENT — the step requires the prereg commit to precede any default-preference change, so a bar edited after a run is a moved goalpost and must be recorded as one. Phase 3.4 binds the other direction: the published set must cover EVERY bar named here, with none missing and none present that this file does not name. Shape asserted by tests/scripts/capability_native_outcome_bars.test.ts — a bar with no falsifier FAILS the shape check rather than passing, which is the step's own verify clause. HONESTY ABOUT THE NUMBERS: three bars are DERIVED from a contract or a frozen-fixture property and say so; three are STATED DEFAULTS with a revisit-if, and say that instead of implying a derivation they do not have; one (evidence-completeness) is a contract restatement. A pre-registered threshold nobody can source is worse than none, because it looks measured.",
|
|
3
|
+
"schema_version": 1,
|
|
4
|
+
"registered_at": "2026-08-30",
|
|
5
|
+
"owner": "maintainer",
|
|
6
|
+
"review_by": "2027-02-28",
|
|
7
|
+
"roadmap": "road-to-capability-native-execution",
|
|
8
|
+
"step": "0.6",
|
|
9
|
+
"bars": [
|
|
10
|
+
{
|
|
11
|
+
"id": "dispatch-success",
|
|
12
|
+
"what": "Of the frozen 0.5 fixtures a dispatchable adapter advertises it can handle, the share it completes without an execution error.",
|
|
13
|
+
"threshold": 0.95,
|
|
14
|
+
"direction": "at-least",
|
|
15
|
+
"unit": "ratio",
|
|
16
|
+
"basis": "DERIVED, not chosen. 0.5 froze the fixture set and 2.4/3.5 require an advertised-but-undispatchable fixture to be REFUSED BEFORE EXECUTION — so a dispatch that reaches execution has already passed a dispatchability probe, and anything below near-total success means the probe is not doing its job. The bar is on the post-probe population, which is why it is high.",
|
|
17
|
+
"falsifier": "any dispatchable adapter completes fewer than 95% of the fixtures it advertised, measured on the frozen 0.5 set with its digest recorded",
|
|
18
|
+
"measured_by": "phase 3.2"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "evidence-completeness",
|
|
22
|
+
"what": "Every field the evidence contract requires is present in the adapter's output for a completed run.",
|
|
23
|
+
"threshold": 1.0,
|
|
24
|
+
"direction": "at-least",
|
|
25
|
+
"unit": "ratio",
|
|
26
|
+
"basis": "DERIVED from the contract, not chosen: 3.2 requires each adapter to produce THE SAME required evidence contract on the same fixture. A required field is required; 0.99 would mean the contract is advisory, and a partial evidence envelope is the shape a reader mistakes for a complete one.",
|
|
27
|
+
"falsifier": "any completed run emits an envelope missing a field the contract marks required",
|
|
28
|
+
"measured_by": "phase 3.2"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "token-context-cost",
|
|
32
|
+
"what": "Per-fixture token cost of the capability-dispatched arm against the direct-call arm.",
|
|
33
|
+
"threshold": 1.1,
|
|
34
|
+
"direction": "at-most",
|
|
35
|
+
"unit": "ratio-vs-baseline",
|
|
36
|
+
"basis": "STATED DEFAULT, not a measured optimum — said plainly rather than implying a derivation it does not have. 1.10 encodes 'the indirection may cost something, and not much'. Revisit-if: 3.3's first paired run lands outside 0.9-1.3 in either direction, which would mean the bar was set against the wrong order of magnitude rather than against a real regression.",
|
|
37
|
+
"falsifier": "the dispatched arm costs more than 1.10x the direct arm on the frozen fixtures, both figures reproducible from a command in the bench log",
|
|
38
|
+
"measured_by": "phase 3.3"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "wall-clock",
|
|
42
|
+
"what": "Per-fixture wall-clock of the capability-dispatched arm against the direct-call arm.",
|
|
43
|
+
"threshold": 1.25,
|
|
44
|
+
"direction": "at-most",
|
|
45
|
+
"unit": "ratio-vs-baseline",
|
|
46
|
+
"basis": "STATED DEFAULT. Looser than the token bar on purpose: dispatch adds a probe and a selection step whose cost is wall-clock rather than tokens, so a bar equal to the token one would fail on the mechanism working as designed. Revisit-if: the probe's own measured cost exceeds a quarter of the baseline, at which point the bar is measuring the probe rather than the dispatch.",
|
|
47
|
+
"falsifier": "median wall-clock of the dispatched arm exceeds 1.25x the direct arm over the frozen fixtures",
|
|
48
|
+
"measured_by": "phase 3.3"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "setup-friction",
|
|
52
|
+
"what": "Manual steps a first-time operator performs before a dispatchable adapter runs at all.",
|
|
53
|
+
"threshold": 2,
|
|
54
|
+
"direction": "at-most",
|
|
55
|
+
"unit": "manual-steps",
|
|
56
|
+
"basis": "STATED DEFAULT, and the unit is the argument: steps are counted, not timed, because a timing figure on one machine is not transferable and a step count is. Two is 'install the engine, point at it'. Revisit-if: any adapter needs a credential, at which point the honest count is three and the bar moves with the reason recorded rather than the adapter being excluded.",
|
|
57
|
+
"falsifier": "any adapter counted as dispatchable needs more than two manual steps from a clean machine, counted from its own documented setup",
|
|
58
|
+
"measured_by": "phase 3.2"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "deterministic-replay",
|
|
62
|
+
"what": "Re-running one fixture through one adapter twice yields the same required evidence fields.",
|
|
63
|
+
"threshold": 1.0,
|
|
64
|
+
"direction": "at-least",
|
|
65
|
+
"unit": "ratio",
|
|
66
|
+
"basis": "DERIVED. The frozen fixtures exist so a result is reproducible; an adapter whose required fields vary between runs cannot be compared against another adapter at all, which is what 3.2 exists to do. Timestamps and durations are explicitly OUT of the compared set — a bar that failed on a clock would be measuring the clock.",
|
|
67
|
+
"falsifier": "two runs of one fixture through one adapter differ in any required evidence field outside the declared volatile set",
|
|
68
|
+
"measured_by": "phase 3.2"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "degraded-run-honesty",
|
|
72
|
+
"what": "A run that could not complete the full contract reports the degradation rather than emitting a partial envelope as if complete.",
|
|
73
|
+
"threshold": 1.0,
|
|
74
|
+
"direction": "at-least",
|
|
75
|
+
"unit": "ratio",
|
|
76
|
+
"basis": "DERIVED, and it is the bar the others rest on. Every ratio above is computed over runs the adapter CLAIMS completed; a degraded run silently counted as complete inflates all six. This is the same soundness invariant road-to-governed-harness-evolution 1.2 states for its activation ladder — an unobserved state is never silently converted to success.",
|
|
77
|
+
"falsifier": "any degraded run emits an envelope that a consumer cannot distinguish from a complete one",
|
|
78
|
+
"measured_by": "phase 3.2, phase 3.4"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
@@ -124,6 +124,41 @@ ci_only:
|
|
|
124
124
|
- id: report_pack_delta
|
|
125
125
|
class: artifact
|
|
126
126
|
reason: "a pull-request-only delta report with no local meaning (base==head reads +0.0 KB and the step writes nothing); it packs two refs in throwaway worktrees at ~1 min, cannot red the build, and is reachable on demand via `task report-pack-delta`"
|
|
127
|
+
|
|
128
|
+
# road-to-supervised-telemetry-collector step 4.2 (AC-7). Runs the
|
|
129
|
+
# dispatcher-reaching suite TWICE — once with the collector present-but-off,
|
|
130
|
+
# once with it aliased away entirely — and compares per-test verdicts rather
|
|
131
|
+
# than declaring each run green. That is the whole set twice, roughly a minute,
|
|
132
|
+
# which is not a per-change local gate; and its result is a property of a
|
|
133
|
+
# clean checkout rather than of a developer's working tree, since it pins
|
|
134
|
+
# HOME to an empty directory precisely so the invoking user's own collector
|
|
135
|
+
# state cannot decide the answer.
|
|
136
|
+
#
|
|
137
|
+
# Reachable on demand: `./scripts-run src/scripts/check_static_parity`.
|
|
138
|
+
- id: check_static_parity
|
|
139
|
+
class: benchmark
|
|
140
|
+
reason: "two full runs of the dispatcher-reaching suite, compared per-test verdict by verdict, ~1 minute; a per-change local gate cannot afford it and its answer is a property of a clean checkout rather than of a working tree"
|
|
141
|
+
# road-to-supervised-telemetry-collector step 5.2. What is CI-only is this
|
|
142
|
+
# WRAPPER, whose whole job is to write
|
|
143
|
+
# `internal/reports/supervision-lifecycle.json` stamped with
|
|
144
|
+
# `git rev-parse HEAD`. That artifact is gitignored and read by
|
|
145
|
+
# `check_supervision_claim_atomicity`, which refuses any result whose recorded
|
|
146
|
+
# revision is not HEAD — so an artifact written during a local run of a dirty
|
|
147
|
+
# working tree is evidence about a revision nobody shipped.
|
|
148
|
+
#
|
|
149
|
+
# CORRECTED on R2 round-3 finding 7. This note used to say the five properties
|
|
150
|
+
# "run in the ordinary vitest chain" locally AND that a `task ci` wrapper
|
|
151
|
+
# "would spawn real daemons on every local run" — which cannot both be true,
|
|
152
|
+
# and the second half was already stale: the same change excluded
|
|
153
|
+
# `collector_lifecycle.test.ts` from the `node-tests` shards. The accurate
|
|
154
|
+
# position is that the suite runs on demand and in the dedicated
|
|
155
|
+
# `Collector Lifecycle` job, and the wrapper's CI-only status rests on the
|
|
156
|
+
# revision-stamped artifact alone — the argument that survives.
|
|
157
|
+
#
|
|
158
|
+
# Reachable on demand: `./scripts-run src/scripts/run_lifecycle_suite`.
|
|
159
|
+
- id: run_lifecycle_suite
|
|
160
|
+
class: artifact
|
|
161
|
+
reason: "writes the revision-stamped lifecycle evidence artifact the atomicity gate reads; the artifact is gitignored and only meaningful at the revision CI is testing, while the five properties themselves already run locally in tests/scripts/collector_lifecycle.test.ts"
|
|
127
162
|
- id: classify_change_risk
|
|
128
163
|
class: benchmark
|
|
129
164
|
reason: "invoked as the nightly drift workflow's self-test step; the classifier itself gates nothing and its `--self-test` is runnable locally on demand (`./scripts-run src/scripts/classify_change_risk --self-test`)"
|
|
@@ -139,6 +174,27 @@ ci_only:
|
|
|
139
174
|
- id: check_finding_dispositions
|
|
140
175
|
class: release
|
|
141
176
|
reason: "adjudicates the release-PR self-review findings ledger, whose input JSON is produced by the self-review workflow job"
|
|
177
|
+
# road-to-source-silence Phase 5.3. Two modes, and the distinction is the whole
|
|
178
|
+
# reason this is a declaration rather than a `task ci` entry.
|
|
179
|
+
#
|
|
180
|
+
# The mode a CI workflow invokes on a schedule is the FIVE-SURFACE CENSUS
|
|
181
|
+
# (source-surface-sweep.yml, weekly). It needs `gh` for the pull-request
|
|
182
|
+
# surface and a full-depth clone for the 9,000-commit trunk surface, it takes
|
|
183
|
+
# minutes, it writes no verdict, and it deliberately CANNOT red the build — a
|
|
184
|
+
# scheduled job that fails `main` for a residual count nobody can lower this
|
|
185
|
+
# week is a job that gets disabled. Putting it in `task ci` would add minutes
|
|
186
|
+
# to every local run for a number that is a standing observation, not a gate.
|
|
187
|
+
#
|
|
188
|
+
# The mode that IS a gate — `--gate-metadata`, which refuses source
|
|
189
|
+
# attribution in a branch name, PR title, PR body or commit message — has a
|
|
190
|
+
# stronger local story than `task ci` membership gives anything else here: it
|
|
191
|
+
# runs on PRE-PUSH via src/scripts/hooks/prepush_metadata_sources.sh, i.e.
|
|
192
|
+
# BEFORE the metadata is public, which is the only moment fixing it is free.
|
|
193
|
+
# A contributor therefore discovers that failure locally by construction,
|
|
194
|
+
# which is exactly the harm this checker exists to prevent.
|
|
195
|
+
- id: sweep_source_surfaces
|
|
196
|
+
class: network
|
|
197
|
+
reason: "the CI invocation is the weekly five-surface census — needs `gh` for the PR surface and a full-depth clone for the ~9,000-commit trunk surface, writes counts not a verdict, and is deliberately non-failing; its GATE mode (`--gate-metadata`) is reachable locally on pre-push via src/scripts/hooks/prepush_metadata_sources.sh and by hand, so no failure is discoverable only after a push"
|
|
142
198
|
- id: rule_trigger_eval
|
|
143
199
|
class: network
|
|
144
200
|
reason: "live cross-model LLM trigger evaluation in the secret-gated canary workflow; advisory, paid, and never gating"
|
|
@@ -213,6 +269,30 @@ ci_only:
|
|
|
213
269
|
# worth remote enforcement, OR it should simply be added to a workflow. Prefer
|
|
214
270
|
# adding it: a local-only gate is the direction that let real defects merge.
|
|
215
271
|
local_only:
|
|
272
|
+
- id: check_host_loadability_reach
|
|
273
|
+
class: developer-machine-scoped
|
|
274
|
+
reason: >
|
|
275
|
+
`check_host_loadability --reach` asks whether each generated host tree
|
|
276
|
+
carries artefacts, and — when it does not — whether the TOOL is absent or
|
|
277
|
+
the PROJECTION is dead. Those two are opposite findings that every current
|
|
278
|
+
gate reports as the same green, because a checker that returns early on a
|
|
279
|
+
missing tree cannot tell them apart.
|
|
280
|
+
|
|
281
|
+
Local-only by declaration rather than by omission, and the reason inverts
|
|
282
|
+
the obvious one: the verdict depends on which host tools are INSTALLED,
|
|
283
|
+
and a CI runner has none. Wired into a workflow, every row would resolve
|
|
284
|
+
`skipped-tool-absent` and the gate would scan nothing — the empty-scope
|
|
285
|
+
false green this repository's gate-coverage manifest exists to refuse.
|
|
286
|
+
|
|
287
|
+
This CORRECTS `road-to-skill-ecosystem-runtime-enforcement` Phase 3 Step 2,
|
|
288
|
+
which asked for a continuous-integration-only job. That instruction fits
|
|
289
|
+
the SHAPE half (`check_host_loadability --root .`), which is already
|
|
290
|
+
wired into `consistency.yml` and does not depend on installed tools; it
|
|
291
|
+
does not fit the reach half, and wiring it there would have produced a
|
|
292
|
+
permanently-skipping check that looked like coverage. Measured on a
|
|
293
|
+
developer machine: 6 of 6 host surfaces present and projecting
|
|
294
|
+
(claude-code 13, cursor 228, cline 14, windsurf 215, gemini-cli 1,
|
|
295
|
+
copilot 1).
|
|
216
296
|
- id: check_hook_bundle_content
|
|
217
297
|
class: developer-machine-scoped
|
|
218
298
|
reason: >
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Drafting channel registry — the `--channel` enum and its per-channel
|
|
2
|
+
# defaults, extracted from docs/contracts/write-engine.md § Per-channel
|
|
3
|
+
# defaults (road-to-channel-contract-and-profile-drift Phase 1.2).
|
|
4
|
+
#
|
|
5
|
+
# WHY THIS IS A SIBLING OF reach-channels.yml AND NOT AN EXTENSION OF IT.
|
|
6
|
+
# One line, as the step requires: a drafting channel is an OUTPUT SHAPE for
|
|
7
|
+
# prose this package writes (how long, how many paragraphs, whether hashtags
|
|
8
|
+
# are allowed), whereas a reach channel is an EXTERNAL RETRIEVAL BACKEND the
|
|
9
|
+
# operator installs and the package never calls — that file's own header says
|
|
10
|
+
# it is "not a routing table, not a recommendation, not an agent-facing
|
|
11
|
+
# surface" and that its Phase-0 benchmark returned `band: stop`, so nothing in
|
|
12
|
+
# it is agent-facing at all. The two share the word "channel" and no field: a
|
|
13
|
+
# drafting channel has no backend, no install string, no health probe and no
|
|
14
|
+
# lifecycle; a reach channel has no length and no cadence. Merging them would
|
|
15
|
+
# produce one schema in which every field is optional for half its rows, which
|
|
16
|
+
# is the "two truths for one word" this roadmap's Risk Register row 2 names.
|
|
17
|
+
#
|
|
18
|
+
# WHAT READS THIS FILE. `docs/contracts/write-engine.md` is the prose contract
|
|
19
|
+
# and stays the human-facing statement of the same values; this file is the
|
|
20
|
+
# machine-checked copy, and
|
|
21
|
+
# `tests/scripts/drafting_channels_schema.test.ts` asserts the two agree, so a
|
|
22
|
+
# future edit to one that is not made to the other fails rather than drifts.
|
|
23
|
+
#
|
|
24
|
+
# THE VALUE IS THE FLAG VALUE. `id` is what a user types after `--channel=`.
|
|
25
|
+
# `linkedin-post` is the value; `linkedin` is not a value and is rejected —
|
|
26
|
+
# see the test case that pins exactly that, because the short form is the
|
|
27
|
+
# plausible typo and silently accepting it would make the enum decorative.
|
|
28
|
+
schema_version: drafting-channels-v1
|
|
29
|
+
channels:
|
|
30
|
+
- id: tweet
|
|
31
|
+
length_default: 50
|
|
32
|
+
cadence: One paragraph, no lists.
|
|
33
|
+
- id: linkedin-post
|
|
34
|
+
length_default: 180
|
|
35
|
+
cadence: >-
|
|
36
|
+
2–4 short paragraphs. Hashtags only if
|
|
37
|
+
`style.fingerprint.hashtag_rules` allows.
|
|
38
|
+
- id: blog
|
|
39
|
+
length_default: 600
|
|
40
|
+
cadence: Inherits `style.fingerprint.paragraph_cadence`.
|
|
41
|
+
- id: freeform
|
|
42
|
+
length_default: 250
|
|
43
|
+
cadence: Inherits `style.fingerprint.paragraph_cadence`.
|
|
@@ -1,38 +1,59 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
2
|
+
"_comment": "Roadmap-estate ratchet (road-to-estate-drawdown T2 + T3). POLICY ONLY — this file no longer stores a number. Until ADR-243 it carried a measured `baseline` object plus a `baseline_history` audit trail (113 entries at removal, last measurement 23/59/60), and that made it the most-conflicted non-generated path in the repository: 7 of 7 CONFLICTING open PRs on 2026-08-21, and 39 of 43 non-merge commits in a 60-day window moving the baseline. `check_estate_count` now MEASURES the floor on the base ref's own tree with the same functions it measures HEAD with, so the 'before' side is still something the change under review cannot rewrite — it is just no longer something a human has to remember to walk. Two failure classes went with the storage and are now unrepresentable: a baseline left above the truth (spendable headroom, which the gate used to fail on as an un-walked tightening), and a baseline left below it after main archived a roadmap without walking the number, which reddened every branch that merged main. The legitimate-growth path the stored number provided — a raise carrying a recorded reason — is replaced by `estate_growth_exempt: <reason>` in the frontmatter of a roadmap the change touches, read from the diff so it cannot be banked. T1's proposed ceilings stay under `target` and are still NOT registered: they are the maintainer's to set.",
|
|
3
|
+
"schema_version": 2,
|
|
4
|
+
"registered_at": "2026-08-18",
|
|
5
|
+
"baseline_removed_at": "2026-08-22",
|
|
6
|
+
"owner": "maintainer",
|
|
7
|
+
"review_by": "2027-08-18",
|
|
8
|
+
"metric": {
|
|
9
|
+
"basis": "src/scripts/check_estate_count.ts. The live side uses collect() from update_roadmap_progress — the same parser the dashboard is generated from, imported rather than re-implemented. The floor side runs the SAME functions over a scratch copy of the base ref's agents/roadmaps/, materialised by _lib/base_tree.ts (git ls-tree + git cat-file --batch; `git archive` cannot be used here because .gitattributes carries `/agents export-ignore` and would yield an empty, silently-zero tree). SKILL METRICS (added 2026-08-24): _lib/skill_estate.ts walks src/skills/*/SKILL.md under the SAME root, so the floor side measures the base ref's own skill tree with the same function. That needs a SECOND materialised subtree — materialiseSubtree takes one prefix — and the two are independent on purpose: a base ref with no src/skills (an old tag, a shallow clone) drops the skill metrics and leaves the roadmap metrics ratcheting.",
|
|
10
|
+
"active_roadmaps": "roadmap candidates at the top level of agents/roadmaps/ that are not drafts, as collect() counts them, PLUS the ones collect() drops for declaring status: carrier. NO LONGER EQUAL TO THE DASHBOARD HEADER'S 'N open roadmaps', and the divergence is deliberate: with carriers excluded, flipping one roadmap's frontmatter to status: carrier measured active_roadmaps 3 -> 2 with the gate printing 'estate within its ratchet', because a count below the floor is a drawdown and free. The floor is measured at the base ref, so that flip lowers the next change's floor permanently, the file cannot be flipped back without paying, and any roadmap can be laundered out of the count by adding one word. A reclassification is not a disposal, so the metric counts the file on both sides and a flip changes nothing. Same reasoning later_roadmaps and open_blockers already carry: estate all the same, and a number that falls on a relocation prints free tightening over a burial. Both directions hold - deleting a carrier is still a shrink that earns no offset (classifyDiff), and adding one is growth that takes the estate_growth_exempt claim path like any other new roadmap. Drafts stay excluded on both sides, unchanged.",
|
|
11
|
+
"later_roadmaps": "roadmap-shaped *.md files under agents/roadmaps/later/ — the same is_roadmap_candidate name filter the active side uses, so later/README.md is not counted. Counted from the filesystem because parked roadmaps sit outside collect()'s corpus by design; they are estate all the same, and a drawdown that moved everything into later/ and called the number down would be the burial T1's quality anchor exists to prevent.",
|
|
12
|
+
"open_blockers": "blockers whose Status does not start with `resolved`, summed over the active and later corpora.",
|
|
13
|
+
"floor": "the same three metrics measured at the base ref (origin/main, else the merge commit's first parent). No base ref resolves -> no floor -> the gate FAILS rather than skipping: a shrink-only gate with no floor passes every possible tree. `--base <ref>` is the explicit escape.",
|
|
14
|
+
"skill_count": "Maintained src/skills/*/SKILL.md files; `lifecycle: deprecated` EXCLUDED. The exclusion is load-bearing rather than tidy: with deprecated skills counted, deprecating one would create no headroom and the retirement mechanism would be unusable against its own gate. 0 skills carry it today, so the exclusion is a no-op now and a correctness property once a tranche lands. Measured 2026-08-24: 299. Reproduce with `find src/skills -name SKILL.md | wc -l` (299 including any deprecated) or `npx tsx -e \"import {measureSkillEstate} from './src/scripts/_lib/skill_estate.ts'; console.log(measureSkillEstate(process.cwd()))\"` for the split.",
|
|
15
|
+
"skill_description_tokens": "Exact-BPE tokens (js-tiktoken, cl100k_base, via _lib/token_count.ts gpt_tokens) across those skills' `description:` frontmatter fields ONLY — not bodies. Measured 2026-08-24: 11,461 over 299 skills (52,983 chars). A SECOND DIMENSION, not a companion figure: a count ratchet alone is gameable by merging four large skills into one file, which lowers the count while the description payload a host must carry stays put. AI council 2/2 (2026-08-24) asked for both in one gate over the roadmap's own recommendation of count-plus-informational-figure. UNRESOLVED rather than approximated: when the tokeniser does not resolve on either side the metric is dropped from the compare with a printed reason, because an exact reading against a proxy one differs by more than the growth this gate is trying to catch.",
|
|
16
|
+
"skill_metric_rejected_candidates": "Measured before choosing, not argued. (b) catalogue bytes via _lib/skill_catalogue.ts read 0 on a real checkout: readProjectedCatalogue walks .claude/skills, empty in any tree where `task generate-tools` cannot complete (it fails under projection.mode=scoped without the config package) — a ratchet whose reading depends on whether a generator ran reds for the environment. (d) host-listing slots are the host's decision, not the repository's: a measured install published its own budget event stating it had stripped every description and dropped 402 entries. Neither is reproducible from the repo, so neither can carry a floor.",
|
|
17
|
+
"concern_count": "Hook concerns declared under the `concerns:` map in src/scripts/hook_manifest.yaml. Measured 2026-08-30: 55. Reproduce with `npx tsx -e \"import {countConcerns} from './src/scripts/_lib/concern_estate.ts';import fs from 'node:fs';console.log(countConcerns(fs.readFileSync('src/scripts/hook_manifest.yaml','utf-8')))\"`. THE ORIGINATING ROADMAP'S REPRODUCE COMMAND IS A PROXY AND OVER-COUNTS, and the correction is recorded here rather than only in the roadmap because this file is what a later reader checks the number against. `grep -cE '^ [a-z][a-z0-9_-]*:$'` greps the WHOLE manifest, so it also counts members of `roles:`, `platforms:` and `native_event_aliases:`, which sit at the same two-space indent. Re-measured at the roadmap's own six pins the over-count is EXACTLY 16 every time: 63/65/65/68/69/71 by the grep is 47/49/49/52/53/55 scoped. Both consequences, because they point in opposite directions -- the FINDING survives untouched (the delta is constant, so the axis climbs +8 either way and is growing exactly as the roadmap says), and the ABSOLUTE FIGURE does not (the axis stands at 55, and a floor of 71 is one this gate's own parser could never reproduce, i.e. a gate that fails on its first honest run). REJECTED CANDIDATES, measured rather than argued: counting `platforms:` rows instead -- rejected, it is 8 and flat across all six pins, so it measures host coverage and not concern growth; counting the per-(platform,event) cap in lint_hook_concern_budget.ts -- rejected, DEFAULT_MAX_PER_EVENT=8 is blind to total growth by construction (eight new concerns spread across eight events violate nothing) and it ships DEFAULT_HARD_FAIL=false, which is why this axis needed a ratchet at all."
|
|
18
|
+
},
|
|
19
|
+
"growth_allowances": {
|
|
20
|
+
"_comment": "An exact floor leaves no incidental headroom, so every legitimate increase needs a named path. Two are automatic because existing policy already sanctions the act; the third is the general authorisation.",
|
|
21
|
+
"active_roadmaps": "+1 per addition carrying `estate_offset_exempt: <reason>` in its own frontmatter (unchanged T3 key). Without this the sanctioned un-offsettable addition would fail the count half with no green path.",
|
|
22
|
+
"later_roadmaps": "+1 per roadmap moved from the active top level into later/ in the same change. Parking relocates estate rather than creating it. It does NOT cover a later/ file that appears from nowhere, and it is keyed on parking rather than on any offset so that an archive move cannot buy a new later/ file.",
|
|
23
|
+
"open_blockers": "none. Nothing in the policy sanctions a new blocker, so it takes the claim path or nothing.",
|
|
24
|
+
"claim": "`estate_growth_exempt: <reason>` added, in this change, to the frontmatter of any roadmap under agents/roadmaps/. Authorises growth in any metric, with the reason printed. Diff-scoped, so a claim left in a file authorises nothing later — the banking failure a stored baseline had. Deliberately unbounded, which a stored baseline could not afford: there the surplus of an over-raise was inherited by the next change, where nobody could act on it; here the next change's floor IS this change's measurement, so there is no surplus to inherit.",
|
|
25
|
+
"skill_count": "0 — no allowance, deliberately. The defect this metric addresses is a corpus that grew +8 in one release (290 at 14.0.0, 291 at 14.9.0 and 14.10.0, 299 at 14.11.0) with nothing objecting. An addition takes the estate_growth_exempt claim path — a recorded reason read from the diff — or it fails.",
|
|
26
|
+
"skill_description_tokens": "0 — same reasoning. An addition that grows the description payload without adding a file is the gaming path this dimension exists to close, and an allowance would reopen it.",
|
|
27
|
+
"concern_count": "0 — no allowance, deliberately, and the same reason skill_count gives. An allowance reopens the gaming path the dimension exists to close. Sharper here than for skills: eight concerns spread across eight events violate the existing per-event cap zero times, which is precisely why a total-growth ratchet was needed and precisely why it must not carry a per-change freebie. An addition takes the estate_growth_exempt claim path — a recorded reason read from the diff — or it fails."
|
|
28
|
+
},
|
|
29
|
+
"target": {
|
|
30
|
+
"_comment": "T1's proposed ceilings, kept as the destination. PROPOSALS, NOT REGISTERED: the roadmap says in as many words that both numbers and the window belong to the maintainer, and no date is pinned in this file. Nothing reads these values — `one_in_one_out.applies_above_active` is the only threshold the gate evaluates.",
|
|
31
|
+
"active_roadmaps": 15,
|
|
32
|
+
"open_blockers": 12,
|
|
33
|
+
"window": "roughly six weeks from campaign start (drafted; unregistered)"
|
|
34
|
+
},
|
|
35
|
+
"one_in_one_out": {
|
|
36
|
+
"_comment": "T3. `applies_above_active: null` means UNCONDITIONAL. T3 phrases the condition as 'while the active count sits above target', and T1 says the target belongs to the maintainer — so rather than inventing a ceiling so the condition could be evaluated, null states that no ceiling is registered and the lint therefore applies. Registering a number here is how it gets a threshold; registering one above the live count is how it is turned off.",
|
|
37
|
+
"applies_above_active": null,
|
|
38
|
+
"exemption": "estate_offset_exempt: <reason> in the added roadmap's own frontmatter. The key lives in the file rather than in this config for the reason RATCHET_RESET_KEY gives for living inside its baseline JSON: the claim shows up in the diff of the change that makes it."
|
|
39
|
+
},
|
|
40
|
+
"provisional_promotion": {
|
|
41
|
+
"_comment": "Phase 3.1 + 3.2 of road-to-blocked-quickwin-visibility: the mechanically capped provisional-promotion path the 2026-08-24 estate council named as the alternative TO loosening its five-condition rule — SPECIFIED IN FULL HERE AND DECLINED. The five conditions are answered one sentence each under `five_conditions`; the declination and its reasoning are the four `declined_*` fields; the fallback that now governs each future occurrence is `fallback`. READ THE NULLS HERE THE OTHER WAY ROUND FROM THE SIBLING KEY: `one_in_one_out.applies_above_active: null` means UNCONDITIONAL — no ceiling is registered, so that lint applies to everything — while `max_live: null` and `expires_after_days: null` HERE mean NOT REGISTERED, PATH INACTIVE. The two nulls sit a few lines apart in one file and mean opposite things, so a reader who transfers the sibling's semantics reads a declined path as an uncapped one, which is the exact inversion of what this object records. `check_estate_count` reads this object and distinguishes THREE states so that an intentional declination can never be mistaken for a config nobody wrote: `declined` (specified, refused, inactive), absent (misconfiguration — a could-not-run, never a pass, same shape as the missing-`one_in_one_out` throw), and `registered` (both integers present, which is the owner's act and nobody else's). Half-registered — one integer, one null — throws rather than guessing which half was meant. READING IS NOT ACTIVATION: the gate grants no allowance in any of the three states, and wiring an allowance for the `registered` state is a separate change that needs the owner's authorization rather than this one; a gate that started granting headroom the moment someone typed a number would be the self-certification the 2026-08-24 verdict refused, arriving one commit later.",
|
|
42
|
+
"status": "declined",
|
|
43
|
+
"declined_on": "2026-09-01",
|
|
44
|
+
"declined_by": "AI council (drain run 15), 2/2 convergent — anthropic/claude-sonnet-4-5 + openai/codex-default, 2 rounds, depth deep, peer-review, blind chairman, quorum 2/2 present (needed 1), subscription transport, billable=0, $0.0000. The verdict was endorsed by the blind chairman as the anchor reasoning of the session.",
|
|
45
|
+
"declined_reason": "Registering either integer — including the `max_live: 1` bounded-trial variant — constitutes governance self-amendment: it extends the agent's own write authority over a recorded estate floor, and `decision-revisit-gate` expressly reserves that class to the owner and states that no delegation overrides it. `max_live: 1` limits magnitude, not the legal character of the authority change, so the bounded trial is the same act at a smaller scale rather than a smaller act. The strongest counter-argument, recorded because it is real: the owner's standing instruction for the run was unusually broad and could be read as the owner personally choosing the council as decision-maker for this question. That general language nevertheless loses to the narrower rule expressly covering delegation and self-amendment, which is why the decline is convergent rather than split.",
|
|
46
|
+
"fallback": "Each future occurrence of the deadlock falsifier remains blocked until explicit owner authorization for THAT occurrence. This is the behaviour that already obtained, now recorded as a decision rather than left as a gap: `stubs:due` reports the blocked quick-win in its own bucket and `releases_since_blocked` counts the condition against published releases, so the next occurrence is detected by a query rather than by a reviewer noticing for the ninth time — and neither surface promotes anything on its own.",
|
|
47
|
+
"five_conditions": {
|
|
48
|
+
"1_authorizing_rule": "An existing repository-authorized rule explicitly permits autonomous exemption — this key is that rule and the repository holds no other, so registering `max_live` and `expires_after_days` here as integers is the single act that would create the permission, which is precisely why a specification shipping with its own numbers filled in would be the self-certification the 2026-08-24 verdict refused.",
|
|
49
|
+
"2_objective_criteria": "That rule supplies objective eligibility criteria — the three blocked-quick-win frontmatter scalars `stubs:due` already reads (`design_validated` non-empty, `capability_gap: none`, `blocker_class: estate` or `budget`) plus a defect measurable in at least two released artefacts, every one of them a field or a count rather than a judgement.",
|
|
50
|
+
"3_repository_evidence": "Repository evidence proves those criteria satisfied — `agent-config stubs:due --json` computes all three scalars from frontmatter rather than from body prose, so a claim appears in a diff and is reviewable, and `releases_since_blocked` counts published releases across both CHANGELOG eras, so the release criterion is measured against artefacts outside the promoting branch and cannot be self-asserted by the diff that claims it.",
|
|
51
|
+
"4_mechanical_cap": "The exemption is mechanically capped or expiring — `max_live` bounds how many provisional promotions may be live at once and `expires_after_days` reverts an unmerged one to `agents/roadmaps/stubs/`, both read by `check_estate_count` from this file rather than enforced by anyone remembering.",
|
|
52
|
+
"5_no_priority_choice": "Applying it requires no choice among competing roadmap priorities — a provisional promotion offsets nothing, so no active roadmap is retired in exchange and the pick that both 2026-08-24 council seats refused to invent, because no mechanical evidence identifies the least valuable active roadmap, never arises."
|
|
53
|
+
},
|
|
54
|
+
"max_live": null,
|
|
55
|
+
"expires_after_days": null,
|
|
56
|
+
"owner": "maintainer",
|
|
57
|
+
"review_by": "2027-09-01"
|
|
58
|
+
}
|
|
38
59
|
}
|