@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
|
@@ -59,6 +59,7 @@ import process from 'node:process';
|
|
|
59
59
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
60
60
|
|
|
61
61
|
import { collect } from './update_roadmap_progress.js';
|
|
62
|
+
import { guardedBaselineProblems, parseGuardedBaselines } from './guarded_baseline.js';
|
|
62
63
|
|
|
63
64
|
const _HERE = fileURLToPath(import.meta.url);
|
|
64
65
|
|
|
@@ -144,7 +145,7 @@ function _branch_touched_paths(root: string, base: string): Set<string> | null {
|
|
|
144
145
|
* the payload. Rewriting them detaches the patch from the commit it records
|
|
145
146
|
* AND makes `git apply` target a path the diff never created.
|
|
146
147
|
*
|
|
147
|
-
* Measured 2026-08-11: archiving one roadmap rewrote four frozen
|
|
148
|
+
* Measured 2026-08-11: archiving one roadmap rewrote four frozen artifacts
|
|
148
149
|
* under `agents/evidence/reviews/`, including the `diff.patch` headers of a
|
|
149
150
|
* recorded review input. Nothing caught it — the sweep reported it as
|
|
150
151
|
* "4 ref(s) migrated", which reads like success.
|
|
@@ -311,7 +312,202 @@ interface ArchiveRecord {
|
|
|
311
312
|
refs_migrated: string[];
|
|
312
313
|
}
|
|
313
314
|
|
|
314
|
-
|
|
315
|
+
|
|
316
|
+
/** One `[~]` step and whatever resolution annotation follows it. */
|
|
317
|
+
export interface DeferredItem {
|
|
318
|
+
/** The step text, trimmed, for the operator message. */
|
|
319
|
+
text: string;
|
|
320
|
+
/** `carried-to` / `merged-into`, or `null` when no annotation was found. */
|
|
321
|
+
kind: 'carried-to' | 'merged-into' | null;
|
|
322
|
+
/** Destination roadmap slug, or `null`. */
|
|
323
|
+
destination: string | null;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* `<!-- deferred-resolution: carried-to=<slug> -->` — the resolved-deferral
|
|
328
|
+
* annotation. `merged-into=<slug>` is the second accepted form.
|
|
329
|
+
*/
|
|
330
|
+
const DEFERRED_RESOLUTION_RE = /<!--\s*deferred-resolution:\s*(carried-to|merged-into)\s*=\s*([A-Za-z0-9._-]+)\s*-->/;
|
|
331
|
+
|
|
332
|
+
/** `- [~] …` — a deferred step, at any indent, with `-` or `*`. */
|
|
333
|
+
const DEFERRED_STEP_RE = /^[ \t]*[-*][ \t]+\[~\][ \t]*(.*)$/;
|
|
334
|
+
/** Any other checkbox, or a heading — where a step's block ends. */
|
|
335
|
+
const BLOCK_END_RE = /^[ \t]*[-*][ \t]+\[[ xX~-]\]|^#{1,6}[ \t]/;
|
|
336
|
+
|
|
337
|
+
/** Escape a string for literal use inside a `RegExp`. */
|
|
338
|
+
function _escapeRe(v: string): string {
|
|
339
|
+
return v.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Does this frontmatter declare a `relates:` row naming `slug`?
|
|
344
|
+
*
|
|
345
|
+
* Structured, not textual: the slug has to appear as a `- slug: <name>` row or a
|
|
346
|
+
* bare `- <name>` item inside the `relates:` block, which is a declaration the
|
|
347
|
+
* author made deliberately. A mention anywhere else in the file does not count.
|
|
348
|
+
*/
|
|
349
|
+
function _relatesTo(text: string, slug: string): boolean {
|
|
350
|
+
const lines = text.split('\n');
|
|
351
|
+
const start = lines.findIndex((l) => /^relates:/.test(l));
|
|
352
|
+
if (start === -1) return false;
|
|
353
|
+
const re = new RegExp(`^\\s*-\\s*(slug:\\s*)?${_escapeRe(slug)}\\s*$`);
|
|
354
|
+
for (let i = start + 1; i < lines.length; i++) {
|
|
355
|
+
const line = lines[i] as string;
|
|
356
|
+
if (/^\S/.test(line)) break;
|
|
357
|
+
if (re.test(line)) return true;
|
|
358
|
+
}
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** Every `[~]` step in a roadmap, with the annotation that follows it (if any). */
|
|
363
|
+
export function parseDeferredItems(text: string): DeferredItem[] {
|
|
364
|
+
const lines = text.split('\n');
|
|
365
|
+
const out: DeferredItem[] = [];
|
|
366
|
+
for (let i = 0; i < lines.length; i++) {
|
|
367
|
+
const m = DEFERRED_STEP_RE.exec(lines[i] as string);
|
|
368
|
+
if (m === null) continue;
|
|
369
|
+
// The annotation may sit on the step line itself or anywhere in the
|
|
370
|
+
// step's continuation block, which ends at the next checkbox or heading.
|
|
371
|
+
let block = lines[i] as string;
|
|
372
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
373
|
+
if (BLOCK_END_RE.test(lines[j] as string)) break;
|
|
374
|
+
block += '\n' + (lines[j] as string);
|
|
375
|
+
}
|
|
376
|
+
const a = DEFERRED_RESOLUTION_RE.exec(block);
|
|
377
|
+
out.push({
|
|
378
|
+
text: (m[1] ?? '').trim().slice(0, 120),
|
|
379
|
+
kind: a === null ? null : (a[1] as 'carried-to' | 'merged-into'),
|
|
380
|
+
destination: a === null ? null : (a[2] as string),
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
return out;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Decide whether a roadmap's `[~]` items are RESOLVED, per the AI council of
|
|
388
|
+
* 2026-08-27 (2 seats, convergent on option (c)).
|
|
389
|
+
*
|
|
390
|
+
* Iron Law 3 says a deferral must be resolved before archival, and the
|
|
391
|
+
* preservation test routes four dispositions to the council — but three of them
|
|
392
|
+
* (carry to a follow-up, merge into existing work, restore to open) leave the
|
|
393
|
+
* `[~]` glyph in place, and this sweep used to require `deferred === 0`
|
|
394
|
+
* unconditionally. So a genuinely UNEXECUTABLE item — one needing elapsed time
|
|
395
|
+
* rather than effort — had no council-reachable path to an archived roadmap, and
|
|
396
|
+
* the only glyph that cleared the gate was `[-]`, which is owner-reserved AND
|
|
397
|
+
* pinned to mean "won't happen at all". Using it for a carried item would make
|
|
398
|
+
* cancellation and transfer indistinguishable to every later reader.
|
|
399
|
+
*
|
|
400
|
+
* **Fail-closed at every step**, which is the condition both seats attached to
|
|
401
|
+
* their verdict: a bare `[~]` blocks, a malformed annotation blocks, a
|
|
402
|
+
* destination that does not exist blocks, a destination that is itself archived
|
|
403
|
+
* or skipped blocks, and a missing back-link blocks. The annotation is cheap to
|
|
404
|
+
* write and must therefore be expensive to satisfy.
|
|
405
|
+
*
|
|
406
|
+
* NOT checked, and named rather than implied: that the destination's copy of the
|
|
407
|
+
* criterion is faithful. Both seats asked for stable item identity over verbatim
|
|
408
|
+
* text matching, and neither a text match nor an id exists today — the back-link
|
|
409
|
+
* plus the source-slug mention is the strongest link this sweep can verify
|
|
410
|
+
* without inventing an identity scheme. The reviewer of the carry still reads it.
|
|
411
|
+
*
|
|
412
|
+
* @returns `problems` empty ⇒ every deferral is resolved and archival may proceed.
|
|
413
|
+
*/
|
|
414
|
+
export function deferralProblems(
|
|
415
|
+
root: string,
|
|
416
|
+
rel: string,
|
|
417
|
+
text: string,
|
|
418
|
+
/**
|
|
419
|
+
* Slugs this same sweep is about to archive. A destination in this set is
|
|
420
|
+
* about to become dead, so accepting it would leave the carried item with no
|
|
421
|
+
* live receiver — the exact loss the annotation exists to prevent, produced
|
|
422
|
+
* by the mechanism meant to prevent it. Found by an independent review, with
|
|
423
|
+
* two reproducers: a roadmap naming ITSELF as destination, and two roadmaps
|
|
424
|
+
* both complete in one run where the parent carries to the child.
|
|
425
|
+
*
|
|
426
|
+
* Optional so the unit tests can call this with one roadmap in view; the
|
|
427
|
+
* sweep always passes the real set.
|
|
428
|
+
*/
|
|
429
|
+
alsoArchiving: ReadonlySet<string> = new Set(),
|
|
430
|
+
): string[] {
|
|
431
|
+
const sourceSlug = rel.replace(/\.md$/, '');
|
|
432
|
+
const problems: string[] = [];
|
|
433
|
+
for (const item of parseDeferredItems(text)) {
|
|
434
|
+
const label = item.text === '' ? '(unnamed step)' : item.text;
|
|
435
|
+
if (item.kind === null || item.destination === null) {
|
|
436
|
+
problems.push(
|
|
437
|
+
`deferred step ${JSON.stringify(label)} carries no ` +
|
|
438
|
+
'`<!-- deferred-resolution: carried-to=<slug> -->` annotation',
|
|
439
|
+
);
|
|
440
|
+
continue;
|
|
441
|
+
}
|
|
442
|
+
// Active or parked are both live. Archived and skipped are not: carrying
|
|
443
|
+
// an item into a dead roadmap is the silent loss the annotation exists
|
|
444
|
+
// to prevent, and it is exactly the "broken promise" case one seat asked
|
|
445
|
+
// to be detectable.
|
|
446
|
+
const candidates = [
|
|
447
|
+
path.join(root, 'agents', 'roadmaps', `${item.destination}.md`),
|
|
448
|
+
path.join(root, 'agents', 'roadmaps', 'later', `${item.destination}.md`),
|
|
449
|
+
];
|
|
450
|
+
// Self-reference is never a carry. It passes every other check — the
|
|
451
|
+
// file exists, and a `parent_roadmap:` naming itself would satisfy the
|
|
452
|
+
// back-link — and then the sweep archives it, so the destination is dead
|
|
453
|
+
// the moment the source is.
|
|
454
|
+
if (item.destination === sourceSlug) {
|
|
455
|
+
problems.push(
|
|
456
|
+
`deferred step ${JSON.stringify(label)} names its OWN roadmap as the destination — ` +
|
|
457
|
+
'a carry needs a different receiver, or the item is not carried at all',
|
|
458
|
+
);
|
|
459
|
+
continue;
|
|
460
|
+
}
|
|
461
|
+
if (alsoArchiving.has(item.destination)) {
|
|
462
|
+
problems.push(
|
|
463
|
+
`destination \`${item.destination}\` is being archived by this same sweep, so it would be ` +
|
|
464
|
+
'dead the moment the carry lands — archive it first and re-run, or carry to a roadmap that stays active',
|
|
465
|
+
);
|
|
466
|
+
continue;
|
|
467
|
+
}
|
|
468
|
+
const found = candidates.find((c) => fs.existsSync(c));
|
|
469
|
+
if (found === undefined) {
|
|
470
|
+
const dead = ['archive', 'skipped'].find((d) =>
|
|
471
|
+
fs.existsSync(path.join(root, 'agents', 'roadmaps', d, `${item.destination ?? ''}.md`)),
|
|
472
|
+
);
|
|
473
|
+
problems.push(
|
|
474
|
+
dead === undefined
|
|
475
|
+
? `deferred step ${JSON.stringify(label)} names destination \`${item.destination}\`, which does not exist`
|
|
476
|
+
: `deferred step ${JSON.stringify(label)} names destination \`${item.destination}\`, which is in \`${dead}/\` — a dead roadmap cannot receive a carried item`,
|
|
477
|
+
);
|
|
478
|
+
continue;
|
|
479
|
+
}
|
|
480
|
+
const destText = fs.readFileSync(found, 'utf-8');
|
|
481
|
+
// ESCAPED. The slug was interpolated raw, so `road.parent` matched
|
|
482
|
+
// `roadXparent` and a slug containing `[` or `(` made `new RegExp` THROW
|
|
483
|
+
// and abort the whole sweep — in a function whose entire contract is
|
|
484
|
+
// failing closed. Found by an independent review; both seats named it.
|
|
485
|
+
const backlink = new RegExp(`^parent_roadmap:[ \t]*${_escapeRe(sourceSlug)}[ \t]*$`, 'm');
|
|
486
|
+
if (item.kind === 'carried-to' && !backlink.test(destText)) {
|
|
487
|
+
problems.push(
|
|
488
|
+
`destination \`${item.destination}\` carries no \`parent_roadmap: ${sourceSlug}\` back-link — ` +
|
|
489
|
+
'the link must be verifiable from both ends',
|
|
490
|
+
);
|
|
491
|
+
continue;
|
|
492
|
+
}
|
|
493
|
+
// A STRUCTURED link, not a substring. `destText.includes(sourceSlug)` was
|
|
494
|
+
// satisfied by any incidental mention — a filename, an example, an HTML
|
|
495
|
+
// comment — so `merged-into` proved nothing about a merge. Both review
|
|
496
|
+
// seats called it trivially spoofable. The link now has to be a
|
|
497
|
+
// frontmatter declaration: a `relates:` row naming the source, or a
|
|
498
|
+
// `parent_roadmap:` back-link. Prose cannot satisfy it.
|
|
499
|
+
if (item.kind === 'merged-into' && !backlink.test(destText) && !_relatesTo(destText, sourceSlug)) {
|
|
500
|
+
problems.push(
|
|
501
|
+
`destination \`${item.destination}\` carries no structured link back to \`${sourceSlug}\` — ` +
|
|
502
|
+
'add a `relates:` row naming it (with a `relation:`) or a `parent_roadmap:` line. A mention ' +
|
|
503
|
+
'in prose is not a link: it is satisfied by a filename or an example.',
|
|
504
|
+
);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
return problems;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/** Archive every complete active roadmap: no open steps, and every `[~]` resolved. */
|
|
315
511
|
function archive_completed(
|
|
316
512
|
root: string,
|
|
317
513
|
opts: { changed_only: boolean; base: string; dry_run: boolean },
|
|
@@ -331,11 +527,59 @@ function archive_completed(
|
|
|
331
527
|
return [];
|
|
332
528
|
}
|
|
333
529
|
|
|
530
|
+
// Every slug this sweep will consider archiving, computed BEFORE any of them
|
|
531
|
+
// is judged. Without it, a deferral carried to another roadmap that is also
|
|
532
|
+
// complete passes validation and then loses its receiver in the same run.
|
|
533
|
+
const sweepSet = new Set(
|
|
534
|
+
collect(roadmap_root)
|
|
535
|
+
.filter((s2) => s2.open_ === 0)
|
|
536
|
+
.map((s2) => s2.rel.replace(/\.md$/, '')),
|
|
537
|
+
);
|
|
538
|
+
|
|
334
539
|
const archived: ArchiveRecord[] = [];
|
|
335
540
|
for (const stats of collect(roadmap_root)) {
|
|
336
|
-
|
|
541
|
+
// `guarded-baseline` is INCOMPLETE by construction (council 2026-08-31,
|
|
542
|
+
// 2/2 convergent) — checked BEFORE the open-step test on purpose. A
|
|
543
|
+
// well-formed record keeps its box `[ ]` and would be skipped silently as
|
|
544
|
+
// "not complete", which is the right verdict reached for the wrong reason
|
|
545
|
+
// and invisible in a sweep that only reports what it moved; a MALFORMED
|
|
546
|
+
// one on `[x]` would otherwise archive with an annotation claiming the
|
|
547
|
+
// opposite. Both are named here instead.
|
|
548
|
+
const guarded = parseGuardedBaselines(
|
|
549
|
+
fs.readFileSync(path.join(roadmap_root, stats.rel), 'utf-8'),
|
|
550
|
+
);
|
|
551
|
+
if (guarded.length > 0) {
|
|
552
|
+
process.stderr.write(
|
|
553
|
+
` ⚠️ ${stats.rel}: ${guarded.length} guarded-baseline step(s) — ` +
|
|
554
|
+
'not archived. Verify against the real mechanism, then flip to ' +
|
|
555
|
+
'`[x]`.\n',
|
|
556
|
+
);
|
|
557
|
+
for (const p of guardedBaselineProblems(guarded)) {
|
|
558
|
+
process.stderr.write(` · ${p}\n`);
|
|
559
|
+
}
|
|
560
|
+
continue;
|
|
561
|
+
}
|
|
562
|
+
if (stats.open_ !== 0) {
|
|
337
563
|
continue; // not complete
|
|
338
564
|
}
|
|
565
|
+
// A `[~]` no longer blocks unconditionally: it blocks unless it carries a
|
|
566
|
+
// validated resolution annotation. See `deferralProblems` for why, and
|
|
567
|
+
// for every way that check fails closed.
|
|
568
|
+
if (stats.deferred !== 0) {
|
|
569
|
+
const abs = path.join(roadmap_root, stats.rel);
|
|
570
|
+
// The source's own slug is removed: it is trivially in `sweepSet`,
|
|
571
|
+
// and self-reference is reported by its own, clearer message.
|
|
572
|
+
const others = new Set(sweepSet);
|
|
573
|
+
others.delete(stats.rel.replace(/\.md$/, ''));
|
|
574
|
+
const problems = deferralProblems(root, stats.rel, fs.readFileSync(abs, 'utf-8'), others);
|
|
575
|
+
if (problems.length > 0) {
|
|
576
|
+
process.stderr.write(
|
|
577
|
+
` ⚠️ ${stats.rel}: ${problems.length} unresolved deferral(s) — not archived.\n`,
|
|
578
|
+
);
|
|
579
|
+
for (const p of problems) process.stderr.write(` · ${p}\n`);
|
|
580
|
+
continue;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
339
583
|
// An unresolved blocker outlives its steps. Closing every box does not
|
|
340
584
|
// answer a question the roadmap raised for a human, and archiving on
|
|
341
585
|
// step-count alone is how `b-highlights-mechanism` left the active tree
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `guarded-baseline` — the third machine-readable step state, and its evidence
|
|
3
|
+
* contract (AI council 2026-08-31, 2/2 convergent: anthropic/claude-sonnet-4-5 +
|
|
4
|
+
* openai/codex-default, option C).
|
|
5
|
+
*
|
|
6
|
+
* A roadmap step whose `verify:` asserts a property of a mechanism that DOES NOT
|
|
7
|
+
* YET EXIST may not close `[x]` — that overstates the evidence. It keeps the
|
|
8
|
+
* canonical unchecked box, carries an annotation, and carries a structured
|
|
9
|
+
* evidence record next to it:
|
|
10
|
+
*
|
|
11
|
+
* - [ ] <!-- roadmap-status: guarded-baseline -->
|
|
12
|
+
* **7.3** …step text…
|
|
13
|
+
* ```yaml
|
|
14
|
+
* guarded_baseline:
|
|
15
|
+
* category: future-mechanism
|
|
16
|
+
* scope: src/scripts/ai_council/**
|
|
17
|
+
* command: npx vitest run tests/scripts/x.test.ts
|
|
18
|
+
* red_proof: sabotage run 2026-08-31 — 2 failed
|
|
19
|
+
* sabotage_model: added a `--topology` flag to the option table
|
|
20
|
+
* recheck_when: src/scripts/ai_council/topology_selector.ts
|
|
21
|
+
* discharged_ac: the baseline is pinned and RED-proven
|
|
22
|
+
* pending_ac: the constraint under real topology selection
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* BOTH SEATS MADE THE TOOLING A CONDITION OF THE VERDICT — "C is acceptable only
|
|
26
|
+
* if its tooling lands atomically; otherwise use ordinary `[ ]` with structured
|
|
27
|
+
* evidence" — so the annotation is worth nothing without the five semantics
|
|
28
|
+
* below, and they live here rather than duplicated in the two consumers:
|
|
29
|
+
*
|
|
30
|
+
* 1. reported separately and NEVER counted as done — the canonical box stays
|
|
31
|
+
* `[ ]`, so `count_checkboxes` already excludes it; `reportGuardedBaselines`
|
|
32
|
+
* is the separate surface that makes the state visible rather than silent;
|
|
33
|
+
* 2. `archive_completed_roadmaps` treats it as incomplete and refuses archival;
|
|
34
|
+
* 3. a `recheck_when` trigger that now RESOLVES in the tree marks the evidence
|
|
35
|
+
* STALE — the guard was written against an absence that has since ended;
|
|
36
|
+
* 4. only verification against the real mechanism permits `[x]`;
|
|
37
|
+
* 5. a baseline that has not demonstrably gone RED is an ordinary open item —
|
|
38
|
+
* hence `red_proof` is mandatory and its absence REJECTS the annotation.
|
|
39
|
+
*
|
|
40
|
+
* The two legal categories are the council's own split. An `absence-assertion`
|
|
41
|
+
* step asserts something directly observable today and MAY close `[x]` once
|
|
42
|
+
* sabotage-verified; a `future-mechanism` step is what this state exists for. No
|
|
43
|
+
* third value is accepted and absence is not defaulted: defaulting would silently
|
|
44
|
+
* promote the strict case into the lax one, which is the overstatement the whole
|
|
45
|
+
* verdict is against.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
import * as fs from 'node:fs';
|
|
49
|
+
import * as path from 'node:path';
|
|
50
|
+
|
|
51
|
+
/** The annotation itself. Tolerant of internal spacing, nothing else. */
|
|
52
|
+
export const GUARDED_BASELINE_RE = /<!--[ \t]*roadmap-status:[ \t]*guarded-baseline[ \t]*-->/;
|
|
53
|
+
|
|
54
|
+
/** The only two legal `category:` values — see the header on why absence is not a default. */
|
|
55
|
+
export const GUARDED_CATEGORIES: readonly string[] = ['future-mechanism', 'absence-assertion'];
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* `- [<glyph>] …` at any indent, with `-` or `*`.
|
|
59
|
+
*
|
|
60
|
+
* Deliberately neither of the two checkbox patterns already in this directory:
|
|
61
|
+
* the dashboard's `CHECKBOX_RE` is `g`-sticky and requires trailing whitespace,
|
|
62
|
+
* and the sweep's `DEFERRED_STEP_RE` pins `[~]`. This one has to CAPTURE the
|
|
63
|
+
* glyph an annotation sits on — including `[x]` — because refusing that case is
|
|
64
|
+
* the whole point of the validator below.
|
|
65
|
+
*/
|
|
66
|
+
const ANY_CHECKBOX_RE = /^[ \t]*[-*][ \t]+\[([ xX~-])\]/;
|
|
67
|
+
|
|
68
|
+
/** A following step or any heading ends the annotated step's span. */
|
|
69
|
+
const SPAN_END_RE = /^[ \t]*[-*][ \t]+\[[ xX~-]\]|^#{1,6}[ \t]/;
|
|
70
|
+
|
|
71
|
+
const BLOCK_START_RE = /^[ \t]*guarded_baseline:[ \t]*$/;
|
|
72
|
+
const FIELD_RE = /^[ \t]*([a-z_]+):[ \t]*(.*)$/;
|
|
73
|
+
const FENCE_RE = /^[ \t]*(?:```|~~~)/;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A record annotates a STEP, so it is only recognised on a list item.
|
|
77
|
+
*
|
|
78
|
+
* Measured, not defensive: without this the very roadmap that SPECIFIES this
|
|
79
|
+
* state reddened its own dashboard, because its verdict paragraph names the
|
|
80
|
+
* annotation in prose. Same discipline `parse_blockers` already applies with
|
|
81
|
+
* `_stripFencedCode` — a documentation example of a shape is not an instance of
|
|
82
|
+
* it — extended to the two prose forms that actually occur, an inline code span
|
|
83
|
+
* and a fenced example.
|
|
84
|
+
*/
|
|
85
|
+
const LIST_ITEM_RE = /^[ \t]*[-*][ \t]+/;
|
|
86
|
+
const INLINE_CODE_RE = /`[^`]*`/g;
|
|
87
|
+
|
|
88
|
+
/** One annotated step, as both consumers need it. */
|
|
89
|
+
export interface GuardedBaselineItem {
|
|
90
|
+
/** 1-based line of the annotated line, for the messages. */
|
|
91
|
+
line: number;
|
|
92
|
+
/** Step text, from the annotated line or its first continuation line. */
|
|
93
|
+
label: string;
|
|
94
|
+
/**
|
|
95
|
+
* The checkbox glyph the annotation actually sits on, or `null` when the
|
|
96
|
+
* annotation is not on a checkbox line at all. Both non-`' '` and `null` are
|
|
97
|
+
* rejections — recorded rather than normalised, so the message can say which.
|
|
98
|
+
*/
|
|
99
|
+
glyph: string | null;
|
|
100
|
+
/** Did the span carry a `guarded_baseline:` block at all? */
|
|
101
|
+
hasBlock: boolean;
|
|
102
|
+
fields: Readonly<Record<string, string>>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function _label(annotatedLine: string, lines: readonly string[], i: number): string {
|
|
106
|
+
const own = annotatedLine
|
|
107
|
+
.replace(ANY_CHECKBOX_RE, '')
|
|
108
|
+
.replace(GUARDED_BASELINE_RE, '')
|
|
109
|
+
.replace(/\*\*/g, '')
|
|
110
|
+
.trim();
|
|
111
|
+
if (own !== '') {
|
|
112
|
+
return own;
|
|
113
|
+
}
|
|
114
|
+
// The council's mechanical form puts the step text on the NEXT line.
|
|
115
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
116
|
+
const next = (lines[j] as string).trim();
|
|
117
|
+
if (next === '') {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (SPAN_END_RE.test(lines[j] as string)) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
return next.replace(/\*\*/g, '').trim();
|
|
124
|
+
}
|
|
125
|
+
return '(unlabelled)';
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Every `guarded-baseline`-annotated step in one roadmap, with its evidence block. */
|
|
129
|
+
export function parseGuardedBaselines(text: string): GuardedBaselineItem[] {
|
|
130
|
+
const lines = text.split('\n');
|
|
131
|
+
const out: GuardedBaselineItem[] = [];
|
|
132
|
+
let inFence = false;
|
|
133
|
+
for (let i = 0; i < lines.length; i++) {
|
|
134
|
+
const raw = lines[i] as string;
|
|
135
|
+
if (FENCE_RE.test(raw)) {
|
|
136
|
+
inFence = !inFence;
|
|
137
|
+
}
|
|
138
|
+
// Inside a fence it is an example; inside backticks it is prose; off a
|
|
139
|
+
// list item it is not a step at all. See LIST_ITEM_RE for the measurement.
|
|
140
|
+
if (inFence || !LIST_ITEM_RE.test(raw)) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (!GUARDED_BASELINE_RE.test(raw.replace(INLINE_CODE_RE, ''))) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const box = ANY_CHECKBOX_RE.exec(raw);
|
|
147
|
+
const fields: Record<string, string> = {};
|
|
148
|
+
let hasBlock = false;
|
|
149
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
150
|
+
const line = lines[j] as string;
|
|
151
|
+
if (SPAN_END_RE.test(line)) {
|
|
152
|
+
break; // the next step — this one's span is over
|
|
153
|
+
}
|
|
154
|
+
if (FENCE_RE.test(line)) {
|
|
155
|
+
continue; // a ```yaml wrapper is optional, and not the data
|
|
156
|
+
}
|
|
157
|
+
if (!hasBlock) {
|
|
158
|
+
hasBlock = BLOCK_START_RE.test(line);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const f = FIELD_RE.exec(line);
|
|
162
|
+
if (f) {
|
|
163
|
+
fields[f[1] as string] = (f[2] as string).trim();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
out.push({
|
|
167
|
+
line: i + 1,
|
|
168
|
+
label: _label(raw, lines, i),
|
|
169
|
+
glyph: box ? (box[1] as string) : null,
|
|
170
|
+
hasBlock,
|
|
171
|
+
fields,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Every reason this annotation is REJECTED. Empty means the record is well
|
|
179
|
+
* formed — never that the acceptance criterion is discharged.
|
|
180
|
+
*/
|
|
181
|
+
export function guardedBaselineProblems(items: readonly GuardedBaselineItem[]): string[] {
|
|
182
|
+
const problems: string[] = [];
|
|
183
|
+
for (const it of items) {
|
|
184
|
+
const at = `line ${it.line} (${it.label})`;
|
|
185
|
+
if (it.glyph === null) {
|
|
186
|
+
problems.push(
|
|
187
|
+
`${at}: the guarded-baseline annotation is not on a checkbox step — ` +
|
|
188
|
+
'it is only legal on an unchecked `- [ ]` line',
|
|
189
|
+
);
|
|
190
|
+
} else if (it.glyph !== ' ') {
|
|
191
|
+
problems.push(
|
|
192
|
+
`${at}: the guarded-baseline annotation sits on \`[${it.glyph}]\` — ` +
|
|
193
|
+
'the canonical checkbox stays UNCHECKED; only verification against ' +
|
|
194
|
+
'the real mechanism permits `[x]`',
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
if (!it.hasBlock) {
|
|
198
|
+
problems.push(`${at}: carries no adjacent \`guarded_baseline:\` evidence block`);
|
|
199
|
+
}
|
|
200
|
+
if ((it.fields['red_proof'] ?? '') === '') {
|
|
201
|
+
problems.push(
|
|
202
|
+
`${at}: records no \`red_proof\` — a baseline that has not demonstrably ` +
|
|
203
|
+
'gone RED is an ordinary open item, not a guarded one',
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
const category = it.fields['category'] ?? '';
|
|
207
|
+
if (category === '') {
|
|
208
|
+
problems.push(
|
|
209
|
+
`${at}: records no \`category\` — one of ${GUARDED_CATEGORIES.join(', ')} ` +
|
|
210
|
+
'is required, and absence is not defaulted',
|
|
211
|
+
);
|
|
212
|
+
} else if (!GUARDED_CATEGORIES.includes(category)) {
|
|
213
|
+
problems.push(
|
|
214
|
+
`${at}: records category \`${category}\`, which is not one of ` +
|
|
215
|
+
GUARDED_CATEGORIES.join(', '),
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return problems;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Which records are STALE, i.e. whose `recheck_when` trigger now resolves in the
|
|
224
|
+
* tree — the mechanism the baseline was written against has arrived, so the
|
|
225
|
+
* evidence describes a world that no longer exists.
|
|
226
|
+
*
|
|
227
|
+
* HONEST SCOPE. Only a PATH trigger is machine-checkable: a token containing `/`
|
|
228
|
+
* is resolved against the repo root and stale iff it exists. A bare symbol name
|
|
229
|
+
* cannot be decided from a path, so it is returned as `unverifiable` rather than
|
|
230
|
+
* silently reading as "not stale" — an unchecked trigger that looks checked is
|
|
231
|
+
* the failure this whole state exists to avoid.
|
|
232
|
+
*/
|
|
233
|
+
export function guardedBaselineStaleness(
|
|
234
|
+
items: readonly GuardedBaselineItem[],
|
|
235
|
+
repo_root: string,
|
|
236
|
+
): { stale: string[]; unverifiable: string[] } {
|
|
237
|
+
const stale: string[] = [];
|
|
238
|
+
const unverifiable: string[] = [];
|
|
239
|
+
for (const it of items) {
|
|
240
|
+
const trigger = it.fields['recheck_when'] ?? '';
|
|
241
|
+
if (trigger === '') {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
for (const token of trigger.split(/[\s,]+/).filter((t) => t !== '')) {
|
|
245
|
+
if (!token.includes('/')) {
|
|
246
|
+
unverifiable.push(`line ${it.line} (${it.label}): recheck_when \`${token}\``);
|
|
247
|
+
} else if (fs.existsSync(path.join(repo_root, token))) {
|
|
248
|
+
stale.push(
|
|
249
|
+
`line ${it.line} (${it.label}): recheck_when \`${token}\` now exists — ` +
|
|
250
|
+
're-verify against the real mechanism',
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return { stale, unverifiable };
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/** One roadmap, as the report needs it — structural, so `RoadmapStats` fits as-is. */
|
|
259
|
+
export interface GuardedBaselineHost {
|
|
260
|
+
readonly rel: string;
|
|
261
|
+
readonly path: string;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
export interface GuardedBaselineReport {
|
|
265
|
+
/** Dashboard section, appended to the rendered markdown. `''` when nothing is annotated. */
|
|
266
|
+
section: string;
|
|
267
|
+
/** Rejections across every roadmap — `--check` must fail on these. */
|
|
268
|
+
problems: number;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Report every guarded baseline in the estate: a dashboard section, and the
|
|
273
|
+
* rejections + staleness on stderr. Side-effecting on purpose, and named for it
|
|
274
|
+
* — the sibling `_warn_merge_gated` does the same, and it keeps the caller at
|
|
275
|
+
* one line in a file that sits at its size cap.
|
|
276
|
+
*/
|
|
277
|
+
export function reportGuardedBaselines(
|
|
278
|
+
roadmaps: readonly GuardedBaselineHost[],
|
|
279
|
+
repo_root: string,
|
|
280
|
+
write: (s: string) => void = (s) => process.stderr.write(s),
|
|
281
|
+
): GuardedBaselineReport {
|
|
282
|
+
const rows: string[] = [];
|
|
283
|
+
let problems = 0;
|
|
284
|
+
for (const r of roadmaps) {
|
|
285
|
+
let items: GuardedBaselineItem[];
|
|
286
|
+
try {
|
|
287
|
+
items = parseGuardedBaselines(fs.readFileSync(r.path, { encoding: 'utf-8' }));
|
|
288
|
+
} catch {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
if (items.length === 0) {
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
const bad = guardedBaselineProblems(items);
|
|
295
|
+
const { stale, unverifiable } = guardedBaselineStaleness(items, repo_root);
|
|
296
|
+
problems += bad.length;
|
|
297
|
+
rows.push(
|
|
298
|
+
`| [${r.rel}](roadmaps/${r.rel}) | ${items.length} | ${stale.length} | ${bad.length} |`,
|
|
299
|
+
);
|
|
300
|
+
write(
|
|
301
|
+
`🛡️ ${r.rel}: ${items.length} guarded-baseline step(s) — RED-proven, ` +
|
|
302
|
+
'NOT complete, and blocking archival:\n',
|
|
303
|
+
);
|
|
304
|
+
for (const it of items) {
|
|
305
|
+
write(` - ${it.label} (category ${it.fields['category'] ?? '—'})\n`);
|
|
306
|
+
}
|
|
307
|
+
for (const p of bad) write(` ❌ ${p}\n`);
|
|
308
|
+
for (const s of stale) write(` ⚠️ ${s}\n`);
|
|
309
|
+
for (const u of unverifiable) write(` · not machine-checkable: ${u}\n`);
|
|
310
|
+
}
|
|
311
|
+
if (rows.length === 0) {
|
|
312
|
+
return { section: '', problems };
|
|
313
|
+
}
|
|
314
|
+
return {
|
|
315
|
+
section:
|
|
316
|
+
'\n## 🛡️ Guarded baselines — RED-proven, not complete\n\n' +
|
|
317
|
+
'These steps carry `<!-- roadmap-status: guarded-baseline -->`: an ' +
|
|
318
|
+
'executable guard exists and has been shown to go RED under a named ' +
|
|
319
|
+
'sabotage, but the acceptance criterion names a mechanism that does not ' +
|
|
320
|
+
'exist yet. They are **not** done, they are **not** counted as done, and ' +
|
|
321
|
+
'they **block archival** until the real mechanism is verified (council ' +
|
|
322
|
+
'2026-08-31, 2/2 convergent).\n\n' +
|
|
323
|
+
'| Roadmap | Guarded | Stale | Rejected |\n|---|---:|---:|---:|\n' +
|
|
324
|
+
rows.join('\n') +
|
|
325
|
+
'\n',
|
|
326
|
+
problems,
|
|
327
|
+
};
|
|
328
|
+
}
|