@event4u/agent-config 14.12.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 +234 -0
- 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/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/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 +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 +57 -57
- 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 +1836 -712
- 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 +4818 -2645
- 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/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 +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 +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 +38 -36
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +579 -63
- package/src/config/gate-reachability-exemptions.json +21 -0
- package/src/config/gate-violation-baselines.json +37 -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 +8 -8
- 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 +126 -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 +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/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/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/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 +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 +142 -1
- 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_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/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 +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 +98 -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 +4 -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/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_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 +426 -23
- 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/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/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
|
@@ -121,11 +121,75 @@ Resolve the argument. Directory mode: list files with size and line count, and
|
|
|
121
121
|
say up front how many there are. **A large inbox is a triage problem, not a
|
|
122
122
|
throughput problem** — never open ten files at full depth in one pass.
|
|
123
123
|
|
|
124
|
+
#### The inbox directory name is opaque, or the whole chain leaks
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
AN INBOX DIRECTORY UNDER agents/tmp/ CARRIES AN OPAQUE ROUND IDENTIFIER.
|
|
128
|
+
NEVER NAME IT AFTER THE SOURCE. THE TRUE SOURCE IS RECORDED ONCE, `ENC1:`
|
|
129
|
+
ENCRYPTED, IN THE ROUND'S OWN INTAKE NOTE. ROADMAP `Source:` LINES CITE THE
|
|
130
|
+
CODENAME ONLY.
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`agents/tmp/` is gitignored, so a speaking directory name looks free. It is not:
|
|
134
|
+
the name gets **quoted** into a tracked roadmap `Source:` header, into an
|
|
135
|
+
evidence artefact, into a review-snapshot filename and into a PR body, and each
|
|
136
|
+
quote republishes it in a public repository. Measured at
|
|
137
|
+
`road-to-source-silence` Phase 0: 190 block-tier occurrences of quoted
|
|
138
|
+
non-opaque `agents/tmp(.old)/<name>/` paths across the tracked tree, plus one
|
|
139
|
+
tracked findings file named after a round. **The directory name is the root of
|
|
140
|
+
the leak chain — if it is opaque, nothing readable exists to be quoted.**
|
|
141
|
+
|
|
142
|
+
Accepted forms — `isOpaqueRoundId` in `src/scripts/_lib/source_shape.ts` is the
|
|
143
|
+
authority, and the gate enforces the same predicate:
|
|
144
|
+
|
|
145
|
+
| Form | Example |
|
|
146
|
+
|---|---|
|
|
147
|
+
| round-dated, optional 1-3 char disambiguator | `inbox-2026-08-h` |
|
|
148
|
+
| content-free hex | `round-a91f3c`, `set-a91f3c` |
|
|
149
|
+
| set number | `S17` |
|
|
150
|
+
|
|
151
|
+
Anything that reads is speaking by construction. If a round arrives under a
|
|
152
|
+
speaking name, **rename the directory before Phase 2** and record the mapping as
|
|
153
|
+
below; renaming after the first quote lands means chasing the quotes.
|
|
154
|
+
|
|
155
|
+
**Record the true source exactly once, encrypted.** In the round's intake note
|
|
156
|
+
(`agents/tmp/<round-id>/intake.md`):
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
printf '%s' '<the real source, url or description>' \
|
|
160
|
+
| ./scripts-run src/scripts/_lib/link_crypto encrypt
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Paste the `ENC1:` token into the intake note. That token, and the codename map at
|
|
164
|
+
`agents/evidence/reports/source-codename-map.md`, are the only places the
|
|
165
|
+
correspondence may exist. Never a second plaintext copy — not in the roadmap, not
|
|
166
|
+
in the PR body, not in a commit message.
|
|
167
|
+
|
|
124
168
|
### Phase 2 — Triage (cheap, all files)
|
|
125
169
|
|
|
126
170
|
One pass per file, shallow, producing a table before any deep read:
|
|
127
171
|
|
|
128
|
-
| file | genre | age | drafted-against | recurrence | first-impression disposition |
|
|
172
|
+
| file | genre | age | drafted-against | recurrence | lineage | first-impression disposition |
|
|
173
|
+
|
|
174
|
+
`lineage` is `n/a` for a file that claims no consolidation, `complete` for one
|
|
175
|
+
whose declared parent set matches the siblings present, or `omits: <names>` /
|
|
176
|
+
`ghost: <name>` / `undeclared`. Fill it from one command over the folder, not by
|
|
177
|
+
reading:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
./scripts-run src/scripts/lint_consolidation_lineage --root <the inbox folder>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
The column exists because a consolidating artifact is the one genre that reads
|
|
184
|
+
as *finished* while being incomplete: it presents its content as adjudicated —
|
|
185
|
+
parents named, conflicts resolved, a kill register for what was rejected — so a
|
|
186
|
+
parent missing from that list is not *killed*, it is *undiscussed*, and nothing
|
|
187
|
+
in the artifact distinguishes those two states. Measured over four inbox folders
|
|
188
|
+
carrying a declared consolidation, four had an incomplete lineage
|
|
189
|
+
(`agents/evidence/analysis/consolidation-lineage-census-2026-08-26.md`). It sits
|
|
190
|
+
in the triage table rather than in a deep read for the same reason `recurrence`
|
|
191
|
+
does: it is one command, and by the time a deep read starts the artifact has
|
|
192
|
+
already been believed.
|
|
129
193
|
|
|
130
194
|
`recurrence` is `first-seen` or a pointer to the earlier artifact — the marker in
|
|
131
195
|
the file's own words, or a hit in `agents/tmp.old/` on the same subject (Phase
|
|
@@ -400,6 +464,16 @@ visibly not a new one, and the resulting learning is emitted as an artefact in
|
|
|
400
464
|
Phase 5 like any other survivor — never as a line in the reply that nothing reads
|
|
401
465
|
again.
|
|
402
466
|
|
|
467
|
+
**A status-update prediction naming a concrete mechanism becomes a stub or a
|
|
468
|
+
roadmap in the SAME run, never a line in a file about to be consumed.** That is
|
|
469
|
+
the "right, never recorded" outcome caught at its source: the round before
|
|
470
|
+
`inbox-2026-08-g` already named the hook-concern axis as the next ratchet
|
|
471
|
+
candidate at 68→69, the sentence sat in an untracked inbox file, the file was
|
|
472
|
+
consumed, and nothing under `agents/roadmaps/` inherited it — so the same
|
|
473
|
+
recommendation arrived again a round later, correct both times and durable
|
|
474
|
+
neither. A prediction that names a mechanism is already an artefact; the only
|
|
475
|
+
question is whether anyone writes it down before its carrier disappears.
|
|
476
|
+
|
|
403
477
|
### Phase 5 — Map survivors onto this suite's artefact types
|
|
404
478
|
|
|
405
479
|
The question is never "what does the file say" but **"what does it become here"**:
|
|
@@ -413,6 +487,29 @@ The question is never "what does the file say" but **"what does it become here"*
|
|
|
413
487
|
| reference material read on demand | a `guideline` or `context` |
|
|
414
488
|
| a measured finding | a `decision-record`/ADR, not a rule |
|
|
415
489
|
| a defect claim | a roadmap item, once verified |
|
|
490
|
+
| a consolidation omitting a parent | **not an artifact — a discharge, see below** |
|
|
491
|
+
|
|
492
|
+
**An omitted parent is discharged, never left silent.** When Phase 2's `lineage`
|
|
493
|
+
column read anything but `n/a` or `complete`, this phase says what happened to
|
|
494
|
+
each omitted parent. Exactly three discharges are legal, and the choice is the
|
|
495
|
+
operator's:
|
|
496
|
+
|
|
497
|
+
1. **Fold it in** — read the omitted parent and carry its surviving items into
|
|
498
|
+
the consolidation, marking them as coming from it.
|
|
499
|
+
2. **Record a kill ID for it** — the consolidation's kill register gains a row
|
|
500
|
+
naming the parent and why its content does not survive.
|
|
501
|
+
3. **State that it was read and adds nothing** — one sentence, in the artifact,
|
|
502
|
+
naming the parent.
|
|
503
|
+
|
|
504
|
+
**Silence is the failure mode; any of the three is a complete discharge.** The
|
|
505
|
+
obligation is to *name* it, never to consolidate it — whether the omission was
|
|
506
|
+
correct is a judgement the operator makes and this command does not. A finding
|
|
507
|
+
that is usually wrong gets ignored, which is why a false positive costs one
|
|
508
|
+
sentence (discharge 3) rather than a re-run.
|
|
509
|
+
|
|
510
|
+
A `ghost:` reading — a declared parent with no matching file — has the same three
|
|
511
|
+
discharges plus a fourth that is really a correction: fix the name. A lineage
|
|
512
|
+
naming a plan nobody can open is the cheaper half of the same defect.
|
|
416
513
|
|
|
417
514
|
Three hard defaults, from this repo's own scar tissue:
|
|
418
515
|
|
|
@@ -449,10 +546,20 @@ transcription. Phase 4b states this obligation for Phases 5 and 6 both; it is
|
|
|
449
546
|
repeated here because this is the phase that writes the artefact, and an
|
|
450
547
|
obligation named only upstream is one a Phase-6 executor never sees.
|
|
451
548
|
|
|
549
|
+
**The `Source:` line carries the codename, never the source.** Per Phase 1's
|
|
550
|
+
naming rule the round directory is already opaque, so
|
|
551
|
+
`> **Source:** \`agents/tmp.old/inbox-2026-08-h/\`` is a compliant header and a
|
|
552
|
+
speaking one is not. The gate's `source-header` and `tmp-quote` classes both
|
|
553
|
+
block inside `agents/**`, so a speaking value fails CI rather than merely
|
|
554
|
+
reading badly. If the roadmap needs to say *what kind* of source it was, describe
|
|
555
|
+
the class ("an external acceptance-pipeline reference") and put the identity in
|
|
556
|
+
the encrypted intake note.
|
|
557
|
+
|
|
452
558
|
Then the inbox contract from
|
|
453
559
|
[`agents-layout`](../../../../docs/contracts/agents-layout.md), in the **same
|
|
454
560
|
reply**: `mv` the consumed file to `agents/tmp.old/`, point the roadmap's
|
|
455
|
-
`Source:` line at its new path
|
|
561
|
+
`Source:` line at its new path — still the codename — and regenerate the
|
|
562
|
+
dashboard. A consumed file
|
|
456
563
|
left in `agents/tmp/` is a rule violation, not untidiness. Move only the files
|
|
457
564
|
actually processed — never sweep the rest of the inbox.
|
|
458
565
|
|
|
@@ -7,7 +7,7 @@ cluster: feature
|
|
|
7
7
|
sub: dev
|
|
8
8
|
description: Full 7-phase feature development workflow for complex features.
|
|
9
9
|
argument-hint: "[description]"
|
|
10
|
-
skills: [laravel, php-coder]
|
|
10
|
+
skills: [laravel, php-coder, test-driven-development]
|
|
11
11
|
suggestion:
|
|
12
12
|
eligible: false
|
|
13
13
|
rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
|
|
@@ -88,7 +88,12 @@ Do NOT use for single-line fixes, trivial changes, or urgent hotfixes.
|
|
|
88
88
|
3. Follow chosen architecture from Phase 4.
|
|
89
89
|
4. Follow codebase conventions strictly (read guidelines).
|
|
90
90
|
5. Update task list as progress is made.
|
|
91
|
-
6.
|
|
91
|
+
6. Work **one behavior at a time**: write the failing test for that behavior,
|
|
92
|
+
observe it fail, write the minimum code that makes that one behavior pass,
|
|
93
|
+
then take the next behavior. A test phase followed by a code phase is
|
|
94
|
+
batch-TDD, not test-first — it buys the ordering and loses the feedback.
|
|
95
|
+
The only exceptions are the Do-NOT list in the `test-driven-development`
|
|
96
|
+
skill; a skipped test-first cycle is recorded in the decision log, never silent.
|
|
92
97
|
|
|
93
98
|
### Phase 6: Quality Review
|
|
94
99
|
|
|
@@ -81,7 +81,11 @@ Style fidelity may be lower."* Non-blocking.
|
|
|
81
81
|
Per [`write-engine § 2`](../../../docs/contracts/write-engine.md).
|
|
82
82
|
Flag form: `--tone=<formal|casual|neutral>`,
|
|
83
83
|
`--length=<words>`, `--channel=<linkedin-post|tweet|blog|freeform>`,
|
|
84
|
-
`--audience=<text>`.
|
|
84
|
+
`--audience=<text>`. The channel values and their length defaults are
|
|
85
|
+
the schema-validated set in `src/config/drafting-channels.yml` — edit
|
|
86
|
+
that file and `write-engine.md` together, never one alone;
|
|
87
|
+
`tests/scripts/drafting_channels_schema.test.ts` fails on drift, and on
|
|
88
|
+
the short form `linkedin`, which is not a value. Missing flags → interactive prompt, **one
|
|
85
89
|
question per turn**, in the order Topic → Tone → Length → Channel →
|
|
86
90
|
Audience. Tone / length defaults derive from the per-channel table
|
|
87
91
|
and the vocab-register → tone mapping in the engine contract.
|
|
@@ -7,7 +7,7 @@ routes_to: [refine-ticket, feature-planning]
|
|
|
7
7
|
replaces: []
|
|
8
8
|
visibility: visible
|
|
9
9
|
skills: [refine-ticket, feature-planning]
|
|
10
|
-
description: Drive a ticket end-to-end through refine → memory → analyze → plan → implement → test → verify → report — Option-A loop over
|
|
10
|
+
description: Drive a ticket end-to-end through refine → memory → analyze → plan → implement → test → verify → report — Option-A loop over `work_engine`, block-on-ambiguity, no auto-git, test-first enforced.
|
|
11
11
|
argument-hint: "[ticket-key | url | bundle-path | pasted-text]"
|
|
12
12
|
suggestion:
|
|
13
13
|
eligible: true
|
|
@@ -122,7 +122,7 @@ catalog fixes are test-driven — a bounded generate→run→revise→re-run loo
|
|
|
122
122
|
a numeric threshold (then a judge confirms), reusing the same N=3 cap. Use
|
|
123
123
|
test/quality verdicts only; the live-app Playwright verdict stays deferred. The
|
|
124
124
|
loop is multi-turn reasoning, not a runtime — it honors
|
|
125
|
-
[`
|
|
125
|
+
[`resident-process-governance`](../../docs/contracts/resident-process-governance.md) exactly as
|
|
126
126
|
the mission does.
|
|
127
127
|
|
|
128
128
|
Handle exit codes per the `/work` contract:
|
|
@@ -5,7 +5,7 @@ pack: meta
|
|
|
5
5
|
visibility: internal
|
|
6
6
|
cluster: orchestrate
|
|
7
7
|
skills: [subagent-orchestration]
|
|
8
|
-
description: Run a YAML pipeline defined under `.agent-config/orchestrations/` — chains personas / skills / commands /
|
|
8
|
+
description: Run a YAML pipeline defined under `.agent-config/orchestrations/` — chains personas / skills / commands / subagents per the orchestration-dsl-v1 contract
|
|
9
9
|
argument-hint: "<pipeline-name | path> [key=value ...]"
|
|
10
10
|
suggestion:
|
|
11
11
|
eligible: true
|
|
@@ -23,7 +23,7 @@ packs:
|
|
|
23
23
|
|
|
24
24
|
Execute a YAML pipeline file from `.agent-config/orchestrations/`
|
|
25
25
|
against the current workspace. Pipelines are deterministic chains of
|
|
26
|
-
personas, skills, commands, and
|
|
26
|
+
personas, skills, commands, and subagents pinned by the
|
|
27
27
|
[`orchestration-dsl-v1`](../docs/contracts/orchestration-dsl-v1.md)
|
|
28
28
|
contract.
|
|
29
29
|
|
|
@@ -75,7 +75,11 @@ operator notes, not voice signal.
|
|
|
75
75
|
Per [`write-engine § 2`](../../../docs/contracts/write-engine.md).
|
|
76
76
|
Flag form: `--tone=<formal|casual|neutral>`,
|
|
77
77
|
`--length=<words>`, `--channel=<linkedin-post|tweet|blog|freeform>`,
|
|
78
|
-
`--audience=<text>`.
|
|
78
|
+
`--audience=<text>`. The channel values and their length defaults are
|
|
79
|
+
the schema-validated set in `src/config/drafting-channels.yml` — edit
|
|
80
|
+
that file and `write-engine.md` together, never one alone;
|
|
81
|
+
`tests/scripts/drafting_channels_schema.test.ts` fails on drift, and on
|
|
82
|
+
the short form `linkedin`, which is not a value. Missing flags → interactive prompt, **one
|
|
79
83
|
question per turn**, in the order Topic → Tone → Length → Channel →
|
|
80
84
|
Audience. Defaults inherit from the engine's per-channel table and
|
|
81
85
|
the pace mapping above.
|
|
@@ -287,9 +287,9 @@ built bundle.
|
|
|
287
287
|
## 7. Expiry is a reported state, never a stall
|
|
288
288
|
|
|
289
289
|
```
|
|
290
|
-
WHEN THE AUTHORIZATION WINDOW CLOSES WITH WORK LEFT, THE RUN
|
|
291
|
-
AND
|
|
292
|
-
ITS SOURCE, OR ITS BUNDLES — READ-ONLY VERIFICATION ONLY.
|
|
290
|
+
WHEN THE AUTHORIZATION WINDOW CLOSES WITH WORK LEFT, THE RUN PAUSES, REPORTS,
|
|
291
|
+
AND ASKS FOR RE-AUTHORIZATION. IT NEVER RETRIES THE GUARD, AND IT NEVER EDITS
|
|
292
|
+
THE GUARD, ITS SOURCE, OR ITS BUNDLES — READ-ONLY VERIFICATION ONLY.
|
|
293
293
|
```
|
|
294
294
|
|
|
295
295
|
**Unreachable while the merge step is gated**, and stated rather than left for
|
|
@@ -298,9 +298,22 @@ operation (`push` and `commit` are `WARN_OPS`), so the window governs nothing
|
|
|
298
298
|
it does. This section is the contract for when the gate opens.
|
|
299
299
|
|
|
300
300
|
Write the summary as-is with a `window-expired` disposition per unprocessed PR
|
|
301
|
-
and name the exact re-authorization needed.
|
|
302
|
-
|
|
303
|
-
|
|
301
|
+
and name the exact re-authorization needed. Then STOP and wait — do not end the
|
|
302
|
+
run, and do not proceed to the next PR. ADR-251 (2026-08-30) decided this
|
|
303
|
+
shape: expiry is a pause, not a termination.
|
|
304
|
+
|
|
305
|
+
**The operator's reply is what resumes it, and it renews the window through the
|
|
306
|
+
path that already exists.** `git_authorization_hook.ts` rewrites this session's
|
|
307
|
+
ledger with a fresh `detected_at` on every human-typed prompt, so a reply
|
|
308
|
+
carrying the re-authorization you named resets the age the guard compares
|
|
309
|
+
against — no new mechanism, and the signal still comes from text the user typed.
|
|
310
|
+
Re-verify the manifest entry (number and head SHA) before resuming, exactly as
|
|
311
|
+
§ 8 requires: the pause is a window in which the world can move.
|
|
312
|
+
|
|
313
|
+
Widening `LEDGER_MAX_AGE_MS` is still forbidden practice, and ADR-251 kept the
|
|
314
|
+
30-minute value deliberately rather than by omission: on 2026-08-21 it was
|
|
315
|
+
patched to six hours for a drain run and the widening reached the trunk. The run proposes no value for it, edits neither it nor its bundles,
|
|
316
|
+
and treats a refusal as the answer.
|
|
304
317
|
|
|
305
318
|
## 8. Kill switches, and what happens after a merge
|
|
306
319
|
|
|
@@ -313,11 +313,25 @@ branch setting, push, open a PR, re-run CI, update a merge base, fix a failing
|
|
|
313
313
|
test, authorise spend inside a budget — is machine-executable by the agent, and
|
|
314
314
|
is therefore remediation work rather than a blocker.
|
|
315
315
|
|
|
316
|
-
| Outcome | When | Success? |
|
|
317
|
-
|
|
318
|
-
| `complete` | `count_open == 0` and the PR is open | yes — archival check runs |
|
|
319
|
-
| `blocked` | every remaining open step is **externally impossible** for the agent | **no** — partial progress, labelled as such |
|
|
320
|
-
| a halt | one of the five conditions fired | **no** — the halt is reported |
|
|
316
|
+
| Outcome | When | Success? | terminal state |
|
|
317
|
+
|---|---|---|---|
|
|
318
|
+
| `complete` | `count_open == 0` and the PR is open | yes — archival check runs | `success` |
|
|
319
|
+
| `blocked` | every remaining open step is **externally impossible** for the agent | **no** — partial progress, labelled as such | `blocked`, or `approval-required` where the work is finished and waiting on a human |
|
|
320
|
+
| a halt | one of the five conditions fired | **no** — the halt is reported | `exhausted` when a declared budget ran out; `stagnated` when the same failure signature repeated with budget left |
|
|
321
|
+
|
|
322
|
+
**The closing report names the terminal state by word**, from
|
|
323
|
+
[`terminal-states`](../../../../src/agent-src/contexts/execution/terminal-states.md).
|
|
324
|
+
The reason is the failure that vocabulary exists to stop: a run that stopped at
|
|
325
|
+
its iteration cap and one that finished both leave the roadmap looking the same,
|
|
326
|
+
because the checkbox glyphs cannot express `exhausted`, `stagnated` or
|
|
327
|
+
`approval-required` — they collapse into `[ ]` and `[~]`. Three of the six states
|
|
328
|
+
are therefore invisible in the dashboard and visible only in the report, which is
|
|
329
|
+
why the report has to say the word.
|
|
330
|
+
|
|
331
|
+
`exhausted` and `stagnated` are **never** reported as `complete`, whatever
|
|
332
|
+
partial progress exists, and they are kept apart on purpose: `exhausted` says the
|
|
333
|
+
budget may have been too small and raising it is a legitimate response;
|
|
334
|
+
`stagnated` says more of the same will not help and raising it is the wrong one.
|
|
321
335
|
|
|
322
336
|
`blocked-preflight` no longer exists. A run always starts.
|
|
323
337
|
|
|
@@ -6,7 +6,7 @@ visibility: internal
|
|
|
6
6
|
cluster: tdd
|
|
7
7
|
sub: red
|
|
8
8
|
skills: [test-driven-development]
|
|
9
|
-
description: TDD red phase — enumerate cases, write ONE failing test, watch it fail
|
|
9
|
+
description: TDD red phase — enumerate cases, write ONE failing test, watch it fail for a reason that is about the behaviour under test
|
|
10
10
|
argument-hint: "[behavior to test]"
|
|
11
11
|
suggestion:
|
|
12
12
|
eligible: false
|
|
@@ -26,6 +26,16 @@ Drives the **Design → Test-Red** phases of
|
|
|
26
26
|
|
|
27
27
|
1. State the behavior in one sentence; enumerate the cases (happy / boundary / error).
|
|
28
28
|
2. Write ONE failing test for the first case.
|
|
29
|
-
3. Run it; confirm
|
|
29
|
+
3. Run it; confirm the failure is **about the behavior under test**. Valid:
|
|
30
|
+
a failing **assertion** · a **missing target** (class-not-found, or a
|
|
31
|
+
compile/type error naming the unimplemented symbol) · a **contract
|
|
32
|
+
failure**. Invalid: a broken **fixture** · a **syntax error** in the test ·
|
|
33
|
+
a missing **unrelated dependency** · a **runner or environment** fault —
|
|
34
|
+
those would fail identically with the behavior fully implemented, so they
|
|
35
|
+
measure nothing. A symbol that does not exist yet can only fail at load;
|
|
36
|
+
demanding an assertion there would force a production stub first, which is
|
|
37
|
+
what this phase exists to prevent. Taxonomy owner:
|
|
38
|
+
[`test-driven-development`](../../../skills/test-driven-development/SKILL.md)
|
|
39
|
+
§ What makes a RED valid.
|
|
30
40
|
4. Honor the Test-Red Forbidden block: **no production edits** (diff = `tests/**` only).
|
|
31
41
|
5. Output: the failing test + its observed failure reason. Hand to `/tdd green`.
|
|
@@ -7,7 +7,7 @@ routes_to: [refine-prompt, command-routing]
|
|
|
7
7
|
replaces: []
|
|
8
8
|
visibility: visible
|
|
9
9
|
skills: [refine-prompt, command-routing]
|
|
10
|
-
description: Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over
|
|
10
|
+
description: Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over `work_engine`, confidence-band gated, no auto-git, test-first.
|
|
11
11
|
argument-hint: "[prompt]"
|
|
12
12
|
suggestion:
|
|
13
13
|
eligible: true
|
|
@@ -115,3 +115,43 @@ the enumerated-set carve-out.
|
|
|
115
115
|
- User explicitly asks for full output — show it.
|
|
116
116
|
|
|
117
117
|
→ Detailed patterns: `docs/guidelines/agent-infra/output-patterns.md`
|
|
118
|
+
|
|
119
|
+
## Independent calls go in ONE block — the evidence
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
CALLS WITH NO DEPENDENCY BETWEEN THEM GO IN THE SAME BLOCK.
|
|
123
|
+
A SECOND CALL THAT DOES NOT READ THE FIRST ONE'S RESULT IS NOT A SECOND TURN.
|
|
124
|
+
BEFORE EMITTING A SINGLE CALL, ASK WHAT ELSE IS ALREADY KNOWN TO BE NEEDED.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The ceiling above forbids repetition; this forbids the opposite failure —
|
|
128
|
+
splitting work that had no reason to be split. It is stated because it is
|
|
129
|
+
**measured, not suspected**: over ten sessions of this package,
|
|
130
|
+
`probe_turnaround` reports a mean tool-call batch size of **1.01**, with 27 of
|
|
131
|
+
2,889 tool-using requests (0.93 %) carrying more than one call. At a 4.7 s
|
|
132
|
+
median generation latency, a request that fans out to 42 calls spends about five
|
|
133
|
+
minutes on serialization before a single tool runs.
|
|
134
|
+
|
|
135
|
+
**Nothing in this package caused that, and nothing in it can fix it.** The cause
|
|
136
|
+
was looked for and is recorded as absent
|
|
137
|
+
(`agents/evidence/analysis/agent-turnaround-2026-08-30.md` § E2): no rule, skill
|
|
138
|
+
or template forbids parallel calls, and parallel calls do occur — so 1.01 is a
|
|
139
|
+
tendency, not a floor with a mechanism behind it.
|
|
140
|
+
|
|
141
|
+
**The discriminator is the dependency, never the count.** Two greps over
|
|
142
|
+
different files, a status and a log, three independent reads named before the
|
|
143
|
+
first one runs — one block. A read whose path comes out of the previous result —
|
|
144
|
+
two blocks, and batching them would be guessing.
|
|
145
|
+
|
|
146
|
+
**Do not read this as "write shorter commands".** In the same corpus, 98.1 % of
|
|
147
|
+
`Bash` calls are already compound or heredoc, and the 18 % that exceed 1,500
|
|
148
|
+
characters carry 75 % of all command bytes — those are one-shot scripts that each
|
|
149
|
+
replace three to six round-trips. Splitting them trades one expensive call for
|
|
150
|
+
several cheap ones and makes the number worse while looking like a fix.
|
|
151
|
+
|
|
152
|
+
**Honest enforcement — `instruction-only`.** No gate can observe a call that was
|
|
153
|
+
not batched: a transcript records the calls that happened, never the block they
|
|
154
|
+
could have shared. `probe_turnaround` reports the rate afterwards and refuses to
|
|
155
|
+
gate on a store CI does not have. This paragraph is the whole mechanism, and the
|
|
156
|
+
roadmap that added it pre-committed to recording a null if the rate does not
|
|
157
|
+
move rather than repeating the reminder more loudly.
|
|
@@ -232,8 +232,11 @@ NEVER A SILENTLY DEGRADED ANSWER. NO LLM CLASSIFIER FALLBACK (CUT C3).
|
|
|
232
232
|
**Why rg-first** (council 2026-07-28, 2 rounds): the pre-registered benchmark
|
|
233
233
|
behind the `code-graph-retrieval-null` claim (`docs/CLAIMS.md`) measured
|
|
234
234
|
native-graph recall 0.365 vs grep 0.797 on graph-shaped questions — an
|
|
235
|
-
indexing gap that keeps `code_graph.enabled` false
|
|
236
|
-
|
|
235
|
+
indexing gap that keeps `code_graph.enabled` false BY DEFAULT — not
|
|
236
|
+
permanently: the 2026-08-15 withdrawal retracted that, and the figures predate
|
|
237
|
+
the 2026-08-22 extractor repair. The accelerant clause above is that bound's
|
|
238
|
+
escape hatch; `classifyLookup` reads the flag, so turning it on is the whole
|
|
239
|
+
change.
|
|
237
240
|
|
|
238
241
|
**Escalation, not degradation:** a primitive that returns nothing (index miss,
|
|
239
242
|
pattern too ambiguous, report script absent) — **or an unusable result**
|
|
@@ -157,6 +157,27 @@ When validating a single target, run the **specific** check, not a meta-task tha
|
|
|
157
157
|
|
|
158
158
|
Concrete tool mapping — verify with the narrowest tool that proves the target green: a single `curl` / Playwright spec / browser run for HTTP behavior, the project's test runner with a `--filter` for one test, a debugger / `xdebug` step-through for one frame. Never substitute a meta-pipeline for a tool that pinpoints the failure.
|
|
159
159
|
|
|
160
|
+
### Progress-primary ordering — and why the cap stays
|
|
161
|
+
|
|
162
|
+
Where the objective is **countable** — findings closed, tests passing,
|
|
163
|
+
occurrences remaining — the primary stop signal is **no progress** or a **new
|
|
164
|
+
minimum**, and the N=3 iteration cap is the **backstop**. A counter alone cannot
|
|
165
|
+
tell three attempts that each closed a finding from three that changed nothing.
|
|
166
|
+
|
|
167
|
+
**Do not remove the cap.** A no-progress signal is only as good as the metric
|
|
168
|
+
behind it, and a metric that stops moving because the MEASUREMENT broke looks
|
|
169
|
+
exactly like one that stops moving because the work is done. The cap bounds the
|
|
170
|
+
damage when the primary signal is wrong.
|
|
171
|
+
|
|
172
|
+
The two stops are different outcomes and are reported as different words: the cap
|
|
173
|
+
firing is `exhausted`, a repeating failure signature with budget left is
|
|
174
|
+
`stagnated` — see
|
|
175
|
+
[`terminal-states`](terminal-states.md). Collapsing them invites the wrong
|
|
176
|
+
remedy, because raising a budget helps the first and never the second.
|
|
177
|
+
|
|
178
|
+
Where the objective is NOT countable, the cap is the only signal and the N=3
|
|
179
|
+
budget above applies unchanged.
|
|
180
|
+
|
|
160
181
|
## Adaptive effort & stop (RDP)
|
|
161
182
|
|
|
162
183
|
Scale effort to task difficulty, and stop when marginal evidence drops — coupled
|
|
@@ -39,6 +39,7 @@ v1 forward-compat rule on unknown fields).
|
|
|
39
39
|
|---|---|---|
|
|
40
40
|
| `task_size_estimate` | int | Pre-dispatch estimate of the task's size (the orchestrator's sizing heuristic). Counts only, no body. |
|
|
41
41
|
| `spawn_count` | int | Number of subagents dispatched for this task. `0` → handled in-session. |
|
|
42
|
+
| `empty_cycles` | int \| null | Trigger fires suppressed as duplicates since the last outcome record. Reported as its OWN quantity and never folded into a success rate's numerator or denominator: a duplicate is not an outcome, and it is also not nothing — a rising count is what an idle loop looks like from outside. `null` = not tracked by this producer, which is **not** the same as zero duplicates observed. Deduplication rule in `src/scripts/_lib/empty_cycles.ts`: same key AND inside the window, both conjuncts required. |
|
|
42
43
|
| `tiers` | string[] | Model tiers dispatched to, one entry per spawn class (e.g. `["sonnet","opus"]`). Tier names only, no prompts. |
|
|
43
44
|
| `token_delta` | int | Net token cost of the dispatch versus the in-session baseline. Positive = orchestration cost more; negative = saved tokens. Counts only. |
|
|
44
45
|
| `token_delta_provenance` | enum | `"measured"` when sourced from host-reported `usage` metadata (preferred); `"estimated"` when self-estimated from response length (mark always when host usage is unavailable). |
|
|
@@ -47,6 +47,46 @@ Direction chosen: **narrow the contract to what the validator already accepts**,
|
|
|
47
47
|
not widen the validator. Widening makes every future divergence legal by
|
|
48
48
|
construction, which is how one contract came to have three states.
|
|
49
49
|
|
|
50
|
+
## Why success is gated, and not accepted
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
AN UNVERIFIED SELF-REPORT IS INDISTINGUISHABLE FROM A RESULT.
|
|
54
|
+
A RETURN THAT CLAIMS SUCCESS AND SHOWS NO CHANGE AGAINST ITS OWN DECLARED
|
|
55
|
+
OUTPUT CONTRACT IS NOT EVIDENCE OF SUCCESS. IT IS EVIDENCE OF A CLAIM.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**The failure this prevents.** Every downstream aggregation reads the recorded
|
|
59
|
+
outcome, not the return. `src/scripts/extract_audit_patterns.ts` mines repeated
|
|
60
|
+
patterns from it, and the per-asset effectiveness report is built on the same
|
|
61
|
+
stream. A forged `success` does not stay one line: it becomes signal, and the
|
|
62
|
+
report then recommends keeping an asset that never worked and retiring one that
|
|
63
|
+
did. Nothing downstream can detect it, because at that point the forgery is
|
|
64
|
+
indistinguishable from the thing it imitates — which is the whole reason the
|
|
65
|
+
check has to happen where the record is written rather than where it is read.
|
|
66
|
+
|
|
67
|
+
**Why the gate reads the declared output contract and not the diff.** The
|
|
68
|
+
obvious rule — claimed success plus an empty diff is never a success — is wrong
|
|
69
|
+
here, and wrong in a way that is worse than doing nothing. Analysis, review and
|
|
70
|
+
read-only research dispatches are a large share of this repository's subagent
|
|
71
|
+
traffic, and every one of them legitimately produces no diff. The unconditional
|
|
72
|
+
rule would mark them all as failures and poison the same aggregation in the
|
|
73
|
+
opposite direction. **Zero diff may be valid, so "zero diff = failure" must not
|
|
74
|
+
be global.** The gate therefore fires only where the dispatch itself declared
|
|
75
|
+
that a code change was the expected output.
|
|
76
|
+
|
|
77
|
+
**An unmeasured diff is not an empty diff.** Where the producer did not measure,
|
|
78
|
+
the gate does not fire. Treating "not measured" as zero manufactures the same
|
|
79
|
+
forgery with the opposite sign, and an aggregation cannot tell the two apart any
|
|
80
|
+
better than it can tell a forged success from a real one.
|
|
81
|
+
|
|
82
|
+
Implemented by `envelopeOutcome` in `src/scripts/_lib/orchestration_record.ts`,
|
|
83
|
+
the tree's only cross-domain outcome mapping. Because it is the only one, the
|
|
84
|
+
mapping is **versioned**: lines carry `outcome_semantics`, and an absent field
|
|
85
|
+
means the pre-2026-08-30 unconditional semantics. `audit-log-v1` is append-only,
|
|
86
|
+
so a labelling change cannot be rolled back the way a gate can — a reader
|
|
87
|
+
aggregating across the cutover segments on that field rather than inferring from
|
|
88
|
+
a date.
|
|
89
|
+
|
|
50
90
|
### Per-field divergence, one row per field
|
|
51
91
|
|
|
52
92
|
| Field | spawn-contract (f) | `team_dispatch` model JSON (`:297`) | `subagent_response.ts` validator | `dispatch_r2_reviewer` |
|
|
@@ -104,11 +104,23 @@ doing its job; the orchestrator verifies (or revises) the parent first.
|
|
|
104
104
|
## Rollback guardrails — surfaced, not auto-disabled
|
|
105
105
|
|
|
106
106
|
```
|
|
107
|
-
A
|
|
107
|
+
A RESIDENT PROCESS HERE IS GOVERNED, NEVER AUTOMATIC. NO COHORT-DISABLE.
|
|
108
108
|
BREACHES ARE SURFACED FROM THE AUDIT LOG FOR THE MAINTAINER / USER TO ACT ON.
|
|
109
109
|
THE ONLY AUTOMATIC STOP IS THE PER-TARGET N=3 BUDGET.
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
+
> **Amended 2026-08-27 (ADR-249).** The first line used to read *"A CONFIG
|
|
113
|
+
> PACKAGE RUNS NO DAEMON"*, and that premise no longer holds: a **supervised**
|
|
114
|
+
> resident process is permitted in core under four governance conditions
|
|
115
|
+
> (`docs/contracts/resident-process-governance.md`, class P1). The block's force
|
|
116
|
+
> is unchanged, because the daemon clause was never what it governed — the rule
|
|
117
|
+
> here is that a breach never stops a cohort by itself, and that is if anything
|
|
118
|
+
> more load-bearing now than when nothing could be running. The replacement
|
|
119
|
+
> states the adopted constraint rather than an absence, which is the wording rule
|
|
120
|
+
> the same reversal imposes on every surface: name what the repository holds
|
|
121
|
+
> itself to, never a state of the world.
|
|
122
|
+
|
|
123
|
+
|
|
112
124
|
The guardrail thresholds (`breachedGuardrails()`), read off the
|
|
113
125
|
[`orchestration-telemetry`](orchestration-telemetry.md) audit signals:
|
|
114
126
|
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Terminal states — what a run REPORTS when it stops
|
|
2
|
+
|
|
3
|
+
> `road-to-skill-ecosystem-runtime-enforcement` Phase 4. Loaded on demand;
|
|
4
|
+
> the obligation surface is [`verify-before-complete`](../../rules/verify-before-complete.md).
|
|
5
|
+
|
|
6
|
+
A run has exactly one terminal state, and reporting the wrong one is not a
|
|
7
|
+
wording problem. **An error or an exhausted budget is never reported as
|
|
8
|
+
success.** The failure this vocabulary exists to stop is the one that reads
|
|
9
|
+
identically to a win: a loop that hit its iteration cap, a gate that could not
|
|
10
|
+
run, an approval that never came — each ending with a summary that says the work
|
|
11
|
+
is done.
|
|
12
|
+
|
|
13
|
+
## The six states
|
|
14
|
+
|
|
15
|
+
| state | what it means | what it is NOT |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `success` | The stated objective is met AND verified by a command run this turn. | Not "the edits landed". Landing is not verifying. |
|
|
18
|
+
| `clean-no-op` | Nothing needed doing, and that was **established**, not assumed. | Not "I found nothing" from a scan that never ran. A dead scope is `blocked`. |
|
|
19
|
+
| `blocked` | An external precondition is missing: a credential, a permission, a service, a decision only the user can make. | Not "hard". A blocker is a thing that is absent, not a thing that is difficult. |
|
|
20
|
+
| `approval-required` | The work is ready and the next action crosses a gate the agent may not cross alone. | Not `blocked`: nothing is missing, and the run produced a deliverable. |
|
|
21
|
+
| `exhausted` | A declared budget ran out — iterations, tokens, spend, wall-clock. | **Never** `success`, whatever partial progress exists. The cap firing IS the outcome. |
|
|
22
|
+
| `stagnated` | The budget has not run out and progress has stopped: the same failure signature is repeating. | Not `exhausted`. Stagnation is detected by a NO-PROGRESS signal, not by a counter. |
|
|
23
|
+
|
|
24
|
+
**Why `exhausted` and `stagnated` are separate**, when both stop a loop: they
|
|
25
|
+
have different remedies and different next actions. `exhausted` says *the work
|
|
26
|
+
may be fine and the budget was too small* — raising it is a legitimate response.
|
|
27
|
+
`stagnated` says *more of the same will not help* — raising the budget is the
|
|
28
|
+
wrong response, and a vocabulary that collapses them invites exactly that.
|
|
29
|
+
|
|
30
|
+
## The mapping onto roadmap glyphs, and the three states glyphs cannot express
|
|
31
|
+
|
|
32
|
+
Roadmap checkboxes carry four glyphs. They describe a **step's disposition**, not
|
|
33
|
+
a **run's outcome**, and the gap is not an oversight — it is what makes a
|
|
34
|
+
budget-exhausted stop indistinguishable from a completed one in a dashboard.
|
|
35
|
+
|
|
36
|
+
| glyph | meaning | nearest terminal state |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `[x]` | done | `success` — and only when a verify clause was met |
|
|
39
|
+
| `[ ]` | open | *(no state — the step has not run)* |
|
|
40
|
+
| `[~]` | deferred | `blocked` or `approval-required`, undistinguished |
|
|
41
|
+
| `[-]` | cancelled | *(a decision, not a run outcome)* |
|
|
42
|
+
|
|
43
|
+
**Three states have no glyph, and they are exactly the ones a validation budget
|
|
44
|
+
and a hard-blocker class produce:**
|
|
45
|
+
|
|
46
|
+
1. **`exhausted`** — the run stopped at its cap with the step still open. The
|
|
47
|
+
glyph stays `[ ]`, which is identical to *never attempted*. A reader cannot
|
|
48
|
+
tell three failed attempts from zero.
|
|
49
|
+
2. **`stagnated`** — same `[ ]`, and the distinction that matters (retrying is
|
|
50
|
+
pointless) is invisible.
|
|
51
|
+
3. **`approval-required`** — collapses into `[~]` alongside `blocked`, so a
|
|
52
|
+
roadmap cannot show that the work is FINISHED and waiting on a human, versus
|
|
53
|
+
not startable at all.
|
|
54
|
+
|
|
55
|
+
**This is recorded rather than fixed.** Adding glyphs would change a format that
|
|
56
|
+
`update_roadmap_progress`, `check_roadmap_trackable`, `lint_empty_roadmaps` and
|
|
57
|
+
every archived roadmap already parse — a migration, not a step. What the
|
|
58
|
+
vocabulary buys today is that a run's CLOSING REPORT can say the word the glyph
|
|
59
|
+
cannot.
|
|
60
|
+
|
|
61
|
+
## Progress-primary ordering
|
|
62
|
+
|
|
63
|
+
When the objective is **countable** — findings closed, tests passing, occurrences
|
|
64
|
+
remaining — the primary stop signal is **no progress** or a **new minimum**, and
|
|
65
|
+
the iteration cap is the **backstop**.
|
|
66
|
+
|
|
67
|
+
**Do not remove the cap.** A no-progress signal is only as good as the metric
|
|
68
|
+
behind it, and a metric that stops moving because the measurement broke looks
|
|
69
|
+
exactly like a metric that stops moving because the work is done. The cap is what
|
|
70
|
+
bounds the damage when the primary signal is wrong.
|
|
71
|
+
|
|
72
|
+
Where the objective is not countable, the cap is the only signal and the N=3
|
|
73
|
+
validation budget in [`autonomous-execution`](../../rules/autonomous-execution.md)
|
|
74
|
+
applies unchanged.
|
|
75
|
+
|
|
76
|
+
## Reporting contract
|
|
77
|
+
|
|
78
|
+
A closing report names the state **by one of the six words above**, and where the
|
|
79
|
+
state is not `success` it names what would change it:
|
|
80
|
+
|
|
81
|
+
- `exhausted` — the budget that ran out, its value, and what was achieved inside it.
|
|
82
|
+
- `stagnated` — the repeating failure signature, and the attempts it survived.
|
|
83
|
+
- `blocked` — the missing thing, by name.
|
|
84
|
+
- `approval-required` — the exact action awaiting approval.
|
|
85
|
+
- `clean-no-op` — what was scanned, so "nothing to do" is distinguishable from
|
|
86
|
+
"nothing was read".
|
|
87
|
+
|
|
88
|
+
## See also
|
|
89
|
+
|
|
90
|
+
- [`verify-before-complete`](../../rules/verify-before-complete.md) — no
|
|
91
|
+
completion claim without fresh evidence; this names what to claim when the
|
|
92
|
+
claim is not completion.
|
|
93
|
+
- [`autonomous-execution`](../../rules/autonomous-execution.md) — the N=3
|
|
94
|
+
validation budget whose firing is `exhausted`.
|
|
95
|
+
- [`autonomy-mechanics`](autonomy-mechanics.md) — the budget's mechanics and the
|
|
96
|
+
adaptive-effort ordering this page's progress-primary section states.
|
|
@@ -44,7 +44,7 @@ Fires once per creation task, not once per edit.
|
|
|
44
44
|
|
|
45
45
|
## The three phases
|
|
46
46
|
|
|
47
|
-
**A — Understand** (≤ 5 clarifying questions: problem, trigger surface, should-trigger examples, near-misses, artifact type) · **B — Research** (mandatory four-surface overlap scan; open + skim the 3 nearest matches; extend-vs-create decision) · **C — Draft** (2-3 description variants first, then the body; live size enforcement). Per-phase procedure + the roadmap batch-mode carve-out: the mechanics guideline below.
|
|
47
|
+
**A — Understand** (≤ 5 clarifying questions: problem, trigger surface, should-trigger examples, near-misses, artifact type) · **B — Research** (mandatory four-surface overlap scan; open + skim the 3 nearest matches; extend-vs-create decision, written into the artifact as `composition_review:`) · **C — Draft** (2-3 description variants first, then the body; live size enforcement). Per-phase procedure + the roadmap batch-mode carve-out: the mechanics guideline below.
|
|
48
48
|
|
|
49
49
|
## Golden rules
|
|
50
50
|
|
|
@@ -25,6 +25,10 @@ collision_ok:
|
|
|
25
25
|
"tenant": "cross-tenant isolation is this rule's core subject"
|
|
26
26
|
# obligation: line 55
|
|
27
27
|
obligation_frequency: "per-edit"
|
|
28
|
+
evidence:
|
|
29
|
+
source_type: external-standard
|
|
30
|
+
verified_on: 2026-08-30
|
|
31
|
+
normative_level: recommended
|
|
28
32
|
---
|
|
29
33
|
|
|
30
34
|
# Broken Access Control
|