@event4u/agent-config 14.22.0 → 15.0.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 +333 -356
- package/README.md +1 -1
- package/dist/agent-src/commands/agent-handoff.md +8 -7
- package/dist/agent-src/commands/agents/init.md +1 -1
- package/dist/agent-src/commands/agents/user/accept.md +4 -4
- package/dist/agent-src/commands/agents/user/delete.md +2 -2
- package/dist/agent-src/commands/agents/user/init.md +3 -3
- package/dist/agent-src/commands/agents/user/review.md +3 -3
- package/dist/agent-src/commands/agents/user/show.md +3 -3
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +6 -6
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +2 -2
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/inbox.md +5 -5
- package/dist/agent-src/commands/analyze/incident.md +3 -3
- package/dist/agent-src/commands/analyze/near-miss.md +3 -3
- package/dist/agent-src/commands/analyze/postmortem.md +4 -4
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/analyze.md +2 -2
- package/dist/agent-src/commands/bug/fix.md +1 -1
- package/dist/agent-src/commands/bug/investigate.md +2 -2
- package/dist/agent-src/commands/cost/profile.md +3 -3
- package/dist/agent-src/commands/design.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +2 -2
- package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/show.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +9 -9
- package/dist/agent-src/commands/humanize.md +6 -6
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/judge/solo.md +1 -1
- package/dist/agent-src/commands/judge.md +1 -1
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +2 -2
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/add.md +3 -3
- package/dist/agent-src/commands/memory/load.md +4 -4
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +4 -4
- package/dist/agent-src/commands/memory/propose.md +2 -2
- package/dist/agent-src/commands/mode.md +5 -5
- package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
- package/dist/agent-src/commands/post-as/me.md +7 -7
- package/dist/agent-src/commands/pr/create.md +1 -1
- package/dist/agent-src/commands/pr/merge.md +48 -39
- package/dist/agent-src/commands/profile/activate.md +1 -1
- package/dist/agent-src/commands/profile/show.md +1 -1
- package/dist/agent-src/commands/research/deep.md +2 -2
- package/dist/agent-src/commands/research/report.md +2 -2
- package/dist/agent-src/commands/review/changes.md +1 -1
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +2 -2
- package/dist/agent-src/commands/roadmap/next.md +9 -1
- package/dist/agent-src/commands/roadmap/process-full.md +2 -2
- package/dist/agent-src/commands/security-audit-config.md +3 -3
- package/dist/agent-src/commands/skill/preview.md +1 -1
- package/dist/agent-src/commands/skills/discover.md +1 -1
- package/dist/agent-src/commands/sync/agent-settings.md +2 -2
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +13 -1
- package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
- package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
- package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
- package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
- package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
- package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
- package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
- package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
- package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
- package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
- package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
- package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
- package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
- package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
- package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
- package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
- package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
- package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
- package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
- package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
- package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
- package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
- package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
- package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
- package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
- package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
- package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
- package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
- package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
- package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
- package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
- package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
- package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
- package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
- package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
- package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
- package/dist/agent-src/guidelines/code-clarity.md +350 -0
- package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
- package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
- package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
- package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
- package/dist/agent-src/guidelines/design-canon.md +63 -0
- package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
- package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
- package/dist/agent-src/guidelines/design-modes.md +143 -0
- package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
- package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
- package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
- package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
- package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
- package/dist/agent-src/guidelines/php/api-design.md +115 -0
- package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
- package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
- package/dist/agent-src/guidelines/php/controllers.md +90 -0
- package/dist/agent-src/guidelines/php/database.md +194 -0
- package/dist/agent-src/guidelines/php/eloquent.md +208 -0
- package/dist/agent-src/guidelines/php/flux.md +80 -0
- package/dist/agent-src/guidelines/php/general.md +207 -0
- package/dist/agent-src/guidelines/php/git.md +164 -0
- package/dist/agent-src/guidelines/php/jobs.md +111 -0
- package/dist/agent-src/guidelines/php/livewire.md +71 -0
- package/dist/agent-src/guidelines/php/logging.md +79 -0
- package/dist/agent-src/guidelines/php/naming.md +89 -0
- package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
- package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
- package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
- package/dist/agent-src/guidelines/php/patterns.md +28 -0
- package/dist/agent-src/guidelines/php/performance.md +92 -0
- package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
- package/dist/agent-src/guidelines/php/resources.md +100 -0
- package/dist/agent-src/guidelines/php/security.md +110 -0
- package/dist/agent-src/guidelines/php/sql.md +97 -0
- package/dist/agent-src/guidelines/php/validations.md +119 -0
- package/dist/agent-src/guidelines/php/websocket.md +100 -0
- package/dist/agent-src/guidelines/prompt-templates.md +189 -0
- package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
- package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
- package/dist/agent-src/personas/README.md +1 -1
- package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
- package/dist/agent-src/personas/product-owner.md +1 -1
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
- package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
- package/dist/agent-src/rules/code-comment-discipline.md +2 -2
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/content-quoting-floor.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +5 -5
- package/dist/agent-src/rules/cross-source-consistency.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +36 -46
- package/dist/agent-src/rules/direct-answers.md +2 -2
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/icon-consistency.md +5 -1
- package/dist/agent-src/rules/improve-before-implement.md +1 -1
- package/dist/agent-src/rules/language-and-tone.md +3 -3
- package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +36 -25
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/role-mode-adherence.md +2 -2
- package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
- package/dist/agent-src/rules/size-enforcement.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +2 -2
- package/dist/agent-src/rules/think-before-action.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +7 -5
- package/dist/agent-src/rules/ui-audit-gate.md +3 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
- package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
- package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
- package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -1
- package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
- package/dist/agent-src/skills/code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
- package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
- package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
- package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
- package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
- package/dist/agent-src/skills/design-review/SKILL.md +4 -4
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
- package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
- package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
- package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
- package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
- package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +9 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
- package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
- package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
- package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +3 -3
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
- package/dist/agent-src/skills/org-design/SKILL.md +1 -1
- package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
- package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
- package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
- package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +60 -4
- package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
- package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
- package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
- package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +6 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +2 -2
- package/dist/agent-src/user-types/_template/user-type.md +1 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +52 -4
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/{chunk-TGIPZBCW.js → chunk-2KKXJW25.js} +22 -8
- package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
- package/dist/cli-delegate/{chunk-4FS4WRXP.js → chunk-3FKR64R5.js} +34 -6
- package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
- package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
- package/dist/cli-delegate/{chunk-BIXEDQPZ.js → chunk-AK6HODNQ.js} +4 -4
- package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
- package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
- package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
- package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +24 -16
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +3 -3
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +4 -14
- package/dist/cli-delegate/cmd_settings_get.js +15 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +41 -11
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +27 -80
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +5 -7
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +4 -6
- package/dist/hooks/dispatch.js +9249 -8981
- package/dist/install/install.mjs +47 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +5496 -2400
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +73 -0
- package/dist/scripts/_lib/agent_src.js +20 -0
- package/dist/scripts/_lib/guidelines_lane.js +158 -0
- package/dist/scripts/_lib/lean_projection_mode.js +108 -0
- package/dist/scripts/_lib/router_match.js +243 -0
- package/dist/scripts/_lib/rule_injection.js +216 -0
- package/dist/scripts/condense.js +22 -25
- package/dist/scripts/project_thin_rules.js +139 -19
- package/dist/server/io/yamlIO.js +125 -17
- package/dist/server/schemas/settings.js +32 -5
- package/dist/shared/settingsSurface.js +6 -1
- package/docs/MIGRATION.md +56 -0
- package/docs/contracts/settings-classes.md +48 -7
- package/docs/guidelines/abstraction-thresholds.md +35 -0
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
- package/docs/guidelines/agent-infra/false-green.md +2 -2
- package/docs/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
- package/docs/guidelines/design-fidelity-mechanics.md +4 -0
- package/docs/guidelines/design-fidelity-routing.md +78 -0
- package/docs/guidelines/design-reconciliation.md +172 -0
- package/docs/guidelines/gtm-handoff.md +2 -2
- package/docs/guidelines/wing4-handoff.md +2 -2
- package/llms.txt +1 -1
- package/package.json +7 -3
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
- package/src/config/agent-settings.template.yml +94 -1
- package/src/config/ci-local-parity.yml +34 -0
- package/src/config/continuity-surface.json +8 -29
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +31 -8
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +3 -3
- package/src/config/hook-token-budget.json +8 -7
- package/src/config/host-injection-effect.json +2 -2
- package/src/config/pack-size-budget.json +55 -4
- package/src/config/packed-binary-manifest.json +1 -1
- package/src/config/platform-anchor.json +47 -0
- package/src/config/preamble-payload-budget.json +2 -3
- package/src/config/publish-surface.json +4 -2
- package/src/config/ratification-policy.json +7 -0
- package/src/config/routing-coverage-seed.json +9 -2
- package/src/config/rule-stub-ceilings.json +16 -9
- package/src/scripts/_cli/cmd_session_recycle.ts +2 -25
- package/src/scripts/_cli/cmd_settings_get.ts +22 -7
- package/src/scripts/_cli/handoff_sessions.ts +14 -44
- package/src/scripts/_lib/agent_settings.ts +85 -0
- package/src/scripts/_lib/agent_src.ts +21 -0
- package/src/scripts/_lib/artifact_maturity.ts +242 -0
- package/src/scripts/_lib/conformance_report.ts +403 -0
- package/src/scripts/_lib/continuity_slot.ts +295 -0
- package/src/scripts/_lib/continuity_writer.ts +312 -0
- package/src/scripts/_lib/design_system_import.ts +20 -0
- package/src/scripts/_lib/design_tolerance.ts +281 -0
- package/src/scripts/_lib/guidelines_lane.ts +164 -0
- package/src/scripts/_lib/hook_settings.ts +85 -0
- package/src/scripts/_lib/lean_projection_mode.ts +127 -0
- package/src/scripts/_lib/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/packed_binary_predicate.ts +37 -0
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/recycle_envelope_paths.ts +109 -21
- package/src/scripts/_lib/regression_neighbourhood.ts +159 -22
- package/src/scripts/_lib/security_lint.ts +23 -2
- package/src/scripts/_lib/self_repair.ts +21 -0
- package/src/scripts/_lib/session_eol.ts +44 -0
- package/src/scripts/_lib/session_index_trust.ts +387 -0
- package/src/scripts/_lib/standing_bound_ratchet.ts +220 -0
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/_lib/vendored_grammar_upstream.ts +280 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
- package/src/scripts/audit_mcp_tools.ts +69 -25
- package/src/scripts/autonomy_friction_traffic.ts +379 -0
- package/src/scripts/build_mcp_catalog.ts +24 -1
- package/src/scripts/check_host_tree_parity.ts +291 -0
- package/src/scripts/check_kernel_edit_ratified.ts +462 -0
- package/src/scripts/check_loss_class_declared.ts +793 -46
- package/src/scripts/check_platform_anchor.ts +390 -0
- package/src/scripts/check_preamble_payload_budget.ts +424 -7
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/check_rule_projection_integrity.ts +102 -2
- package/src/scripts/ci_settle.ts +205 -5
- package/src/scripts/code_graph/build.ts +79 -0
- package/src/scripts/code_graph/cli.ts +264 -7
- package/src/scripts/code_graph/detect.ts +38 -0
- package/src/scripts/code_graph/query.ts +25 -2
- package/src/scripts/code_graph/sqlite_store.ts +16 -1
- package/src/scripts/code_graph/types.ts +52 -3
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +590 -0
- package/src/scripts/condense.ts +22 -26
- package/src/scripts/generate_host_cost_table.ts +354 -0
- package/src/scripts/handoff_context_hook.ts +39 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +59 -28
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +182 -16
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/code_graph_context_hook.ts +7 -18
- package/src/scripts/hooks/push_settle_hook.ts +3 -2
- package/src/scripts/hooks/rule_inject_hook.ts +107 -20
- package/src/scripts/hooks/session_eol_hook.ts +177 -145
- package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
- package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
- package/src/scripts/hot_context_hook.ts +103 -408
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/lint_roadmap_blockers.ts +164 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +152 -2
- package/src/scripts/mcp_server/graph_tools.ts +294 -0
- package/src/scripts/mcp_server/path_util.ts +31 -0
- package/src/scripts/mcp_server/tool_catalog_source.ts +7 -1
- package/src/scripts/mcp_server/tools.ts +3 -13
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/model_rule_injection.ts +61 -4
- package/src/scripts/project_thin_rules.ts +149 -16
- package/src/scripts/report_standing_payload_by_host.ts +650 -0
- package/src/scripts/schemas/agent-settings.schema.json +7 -1
- package/src/scripts/session_memory_index.ts +86 -8
- package/src/scripts/sync_agent_settings.ts +270 -10
- package/src/server/io/yamlIO.ts +127 -17
- package/src/server/schemas/settings.ts +45 -6
- package/src/shared/settingsSurface.ts +13 -2
- package/src/templates/compact-instructions.md +8 -3
- package/src/vendor/grammars/README.md +27 -2
- package/dist/agent-src/commands/chat-history/import.md +0 -170
- package/dist/agent-src/commands/chat-history.md +0 -63
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
3
|
"mcpName": "io.github.event4u-app/agent-config",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "15.0.0",
|
|
5
5
|
"description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including the counts in these badges.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"private": false,
|
|
@@ -67,7 +67,9 @@
|
|
|
67
67
|
"!src/**/*.test.ts",
|
|
68
68
|
"!src/**/*.spec.ts",
|
|
69
69
|
"!dist/agent-src/skills/**/evals/**",
|
|
70
|
-
"!dist/**/*.map"
|
|
70
|
+
"!dist/**/*.map",
|
|
71
|
+
"!**/__pycache__/**",
|
|
72
|
+
"!**/*.pyc"
|
|
71
73
|
],
|
|
72
74
|
"bin": {
|
|
73
75
|
"agent-config": "dist/cli/agent-config.js"
|
|
@@ -80,6 +82,8 @@
|
|
|
80
82
|
"build:install-bundle": "esbuild src/scripts/install.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/install/install.mjs --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
|
|
81
83
|
"build:hooks": "esbuild src/scripts/hooks/dispatch_entry.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/hooks/dispatch.js --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url); const __acPath = require('node:path'); const __acFs = require('node:fs'); const __acUrl = require('node:url'); const __acReal = (p) => { try { return __acFs.realpathSync(p); } catch { return p; } }; const __acSelf = __acReal(__acUrl.fileURLToPath(import.meta.url)); if (process.argv[1] !== undefined && __acReal(__acPath.resolve(process.argv[1])) === __acSelf) { globalThis.__AC_HOOKS_BUNDLE_DIRECT = true; process.argv = [process.argv[0], __acSelf + '.__direct__', ...process.argv.slice(2)]; }\"",
|
|
82
84
|
"build:mcp-bundle": "esbuild src/scripts/mcp_server/__main__.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/mcp/server.mjs --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url); const __acPath = require('node:path'); const __acFs = require('node:fs'); const __acUrl = require('node:url'); const __acReal = (p) => { try { return __acFs.realpathSync(p); } catch { return p; } }; const __acSelf = __acReal(__acUrl.fileURLToPath(import.meta.url)); if (process.argv[1] !== undefined && __acReal(__acPath.resolve(process.argv[1])) === __acSelf) { globalThis.__AC_MCP_BUNDLE_DIRECT = true; process.argv = [process.argv[0], __acSelf + '.__direct__', ...process.argv.slice(2)]; }\"",
|
|
85
|
+
"clean:cli-delegate": "rm -rf dist/cli-delegate",
|
|
86
|
+
"build:delegates": "npm run clean:cli-delegate && npm run build:cli-delegate && npm run build:agent-src-delegate && npm run build:delegate-aux",
|
|
83
87
|
"build:cli-delegate": "esbuild src/scripts/_cli/cmd_*.ts --bundle --splitting --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --define:__AGENT_CONFIG_CLI_DELEGATE__=true --outdir=dist/cli-delegate --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
|
|
84
88
|
"build:agent-src-delegate": "esbuild src/agent-src/scripts/*.ts --bundle --splitting --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --define:__AGENT_CONFIG_CLI_DELEGATE__=true --outdir=dist/cli-delegate --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
|
|
85
89
|
"build:delegate-aux": "esbuild src/scripts/_lib/pin_resolver.ts src/scripts/check_update_banner.ts --bundle --splitting --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --define:__AGENT_CONFIG_CLI_DELEGATE__=true --outbase=src/scripts --outdir=dist/cli-delegate --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
|
|
@@ -89,7 +93,7 @@
|
|
|
89
93
|
"build:discovery": "./scripts-run src/scripts/build_discovery_manifest --write --strict",
|
|
90
94
|
"build:mcp-manifest": "./scripts-run src/scripts/build_mcp_registry_manifest --write --strict",
|
|
91
95
|
"build:mcp-catalog": "./scripts-run src/scripts/build_mcp_catalog --write --strict",
|
|
92
|
-
"build": "npm run build:cli && npm run build:install-bundle && npm run build:hooks && npm run build:mcp-bundle && npm run build:
|
|
96
|
+
"build": "npm run build:cli && npm run build:install-bundle && npm run build:hooks && npm run build:mcp-bundle && npm run build:delegates && npm run build:ui",
|
|
93
97
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.scripts.json",
|
|
94
98
|
"lint:ts": "eslint --cache --max-warnings 0 'src/**/*.ts'",
|
|
95
99
|
"test:ts": "vitest run",
|
|
@@ -58,7 +58,11 @@ import * as path from 'node:path';
|
|
|
58
58
|
import process from 'node:process';
|
|
59
59
|
import { fileURLToPath } from 'node:url';
|
|
60
60
|
|
|
61
|
-
import {
|
|
61
|
+
import {
|
|
62
|
+
blocker_is_resolved,
|
|
63
|
+
collect,
|
|
64
|
+
parse_blockers,
|
|
65
|
+
} from './update_roadmap_progress.js';
|
|
62
66
|
import { guardedBaselineProblems, parseGuardedBaselines } from './guarded_baseline.js';
|
|
63
67
|
|
|
64
68
|
import { isCliEntry } from './_cli_entry.js';
|
|
@@ -265,6 +269,80 @@ function _git_mv(root: string, src_rel: string, dst_rel: string, dry_run: boolea
|
|
|
265
269
|
}
|
|
266
270
|
}
|
|
267
271
|
|
|
272
|
+
// ---------------------------------------------------------------------
|
|
273
|
+
// The index/working-tree blocker divergence check (1b) + staging (1a)
|
|
274
|
+
// ---------------------------------------------------------------------
|
|
275
|
+
//
|
|
276
|
+
// The open-blocker refusal below reads the file with `fs.readFileSync`, i.e.
|
|
277
|
+
// the WORKING TREE. `git mv` then moves the INDEX ENTRY, which still carries
|
|
278
|
+
// whatever was staged. When the two disagree the commit ships the index
|
|
279
|
+
// content — content this gate never read.
|
|
280
|
+
//
|
|
281
|
+
// Measured, once, at full cost (2026-09-08): an edit removing a roadmap's
|
|
282
|
+
// blocker was made and never staged; `git mv` moved the stale index entry; the
|
|
283
|
+
// archived file shipped a blocker declared `Status: open` that had already been
|
|
284
|
+
// relocated to an active roadmap. The same blocker was open in two files at
|
|
285
|
+
// once, one of them archived, and it was caught by a human reading
|
|
286
|
+
// `git status` rather than by any gate.
|
|
287
|
+
//
|
|
288
|
+
// The check is scoped to blocker id → status and deliberately NOT to whole-file
|
|
289
|
+
// equality. An unstaged typo fix in a roadmap title has nothing to do with the
|
|
290
|
+
// defect, and refusing archival for it trains `git add -A`, which destroys the
|
|
291
|
+
// staging discipline this check depends on. AI council 2026-09-08, 2/2 present
|
|
292
|
+
// (anthropic/claude-sonnet-4-5 + openai/gpt-4o), on that scoping specifically:
|
|
293
|
+
// broad scoping is "user-hostile, trains developers to `git add -A`
|
|
294
|
+
// reflexively, defeating staging discipline".
|
|
295
|
+
|
|
296
|
+
/** Blocker id → status, as the archive-transition check compares them. */
|
|
297
|
+
function _blockerStatuses(text: string): Map<string, string> {
|
|
298
|
+
const out = new Map<string, string>();
|
|
299
|
+
for (const b of parse_blockers(text)) {
|
|
300
|
+
out.set(b.id, blocker_is_resolved(b) ? 'resolved' : 'open');
|
|
301
|
+
}
|
|
302
|
+
return out;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* `git show :<rel>` — the STAGED content of a path, or null when the path has
|
|
307
|
+
* no index entry.
|
|
308
|
+
*
|
|
309
|
+
* Null is the untracked / pre-first-commit case, which `_git_mv` already
|
|
310
|
+
* handles by falling back to a plain rename. There is no index entry to
|
|
311
|
+
* disagree with, so the divergence check has nothing to assert and says so by
|
|
312
|
+
* returning null rather than by guessing at an empty string — an empty staged
|
|
313
|
+
* file and an absent one differ, and only the second is legitimate here.
|
|
314
|
+
*/
|
|
315
|
+
function _indexContent(root: string, rel: string): string | null {
|
|
316
|
+
const cp = _run(['git', 'show', `:${rel}`], root);
|
|
317
|
+
return cp.returncode === 0 ? cp.stdout : null;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Human-readable disagreements between the staged and working-tree blocker
|
|
322
|
+
* maps of one path. Empty array = the two agree, or there is no index entry.
|
|
323
|
+
*/
|
|
324
|
+
function _blockerDivergence(root: string, rel: string, workTreeText: string): string[] {
|
|
325
|
+
const staged = _indexContent(root, rel);
|
|
326
|
+
if (staged === null) {
|
|
327
|
+
return [];
|
|
328
|
+
}
|
|
329
|
+
const wt = _blockerStatuses(workTreeText);
|
|
330
|
+
const idx = _blockerStatuses(staged);
|
|
331
|
+
const ids = [...new Set([...wt.keys(), ...idx.keys()])].sort();
|
|
332
|
+
const out: string[] = [];
|
|
333
|
+
for (const id of ids) {
|
|
334
|
+
const a = idx.get(id);
|
|
335
|
+
const b = wt.get(id);
|
|
336
|
+
if (a === b) {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
out.push(
|
|
340
|
+
`blocker '${id}': staged=${a ?? 'absent'} vs working tree=${b ?? 'absent'}`,
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
return out;
|
|
344
|
+
}
|
|
345
|
+
|
|
268
346
|
/**
|
|
269
347
|
* Repo-relative paths of files containing `needle`, by walking the filesystem.
|
|
270
348
|
*
|
|
@@ -547,9 +625,8 @@ function archive_completed(
|
|
|
547
625
|
// and invisible in a sweep that only reports what it moved; a MALFORMED
|
|
548
626
|
// one on `[x]` would otherwise archive with an annotation claiming the
|
|
549
627
|
// opposite. Both are named here instead.
|
|
550
|
-
const
|
|
551
|
-
|
|
552
|
-
);
|
|
628
|
+
const roadmapText = fs.readFileSync(path.join(roadmap_root, stats.rel), 'utf-8');
|
|
629
|
+
const guarded = parseGuardedBaselines(roadmapText);
|
|
553
630
|
if (guarded.length > 0) {
|
|
554
631
|
process.stderr.write(
|
|
555
632
|
` ⚠️ ${stats.rel}: ${guarded.length} guarded-baseline step(s) — ` +
|
|
@@ -603,12 +680,37 @@ function archive_completed(
|
|
|
603
680
|
if (changed_only && !(touched as Set<string>).has(old_rel)) {
|
|
604
681
|
continue; // complete, but not this branch's work
|
|
605
682
|
}
|
|
683
|
+
// The gate above validated the WORKING TREE; `git mv` ships the INDEX.
|
|
684
|
+
// When they disagree about a blocker, the validated content is not the
|
|
685
|
+
// content that gets committed — see § the index/working-tree blocker
|
|
686
|
+
// divergence check above for the measured failure.
|
|
687
|
+
const divergence = _blockerDivergence(root, old_rel, roadmapText);
|
|
688
|
+
if (divergence.length > 0) {
|
|
689
|
+
process.stderr.write(
|
|
690
|
+
` ⚠️ ${stats.rel}: staged and working-tree blockers disagree ` +
|
|
691
|
+
`(${divergence.length}) — not archived. \`git mv\` would commit ` +
|
|
692
|
+
'the staged content, which this sweep never validated. Stage or ' +
|
|
693
|
+
'discard the change, then re-run.\n',
|
|
694
|
+
);
|
|
695
|
+
for (const d of divergence) {
|
|
696
|
+
process.stderr.write(` · ${d}\n`);
|
|
697
|
+
}
|
|
698
|
+
continue;
|
|
699
|
+
}
|
|
606
700
|
const new_rel = `agents/roadmaps/archive/${stats.rel}`;
|
|
607
701
|
const mv = _git_mv(root, old_rel, new_rel, dry_run);
|
|
608
702
|
if (!mv.ok) {
|
|
609
703
|
process.stderr.write(` ⚠️ could not archive ${old_rel} (mv failed)\n`);
|
|
610
704
|
continue;
|
|
611
705
|
}
|
|
706
|
+
// `git mv` moved the index ENTRY, not the working-tree content. Staging
|
|
707
|
+
// the destination makes what gets committed identical to what the checks
|
|
708
|
+
// above read — the divergence check refuses a disagreement that exists
|
|
709
|
+
// BEFORE the move, and this closes one created by an edit between the
|
|
710
|
+
// move and the commit.
|
|
711
|
+
if (!dry_run && mv.tracked) {
|
|
712
|
+
_run(['git', 'add', '--', new_rel], root);
|
|
713
|
+
}
|
|
612
714
|
const refs = _inbound_ref_rewrite(root, old_rel, new_rel, dry_run, mv.tracked);
|
|
613
715
|
// Stage rewritten refs only in a tracked repo; an untracked consumer's
|
|
614
716
|
// files are not in the index, so the filesystem rewrite is the whole job.
|
|
@@ -195,8 +195,23 @@ rule_loading_tier: __RULE_LOADING_TIER__
|
|
|
195
195
|
# validate with `task bench:ab:live` before flipping, and
|
|
196
196
|
# keep `task trigger-coverage` at 100%. One-flip revert:
|
|
197
197
|
# set eager-all + `task generate-tools`.
|
|
198
|
+
# delivery = the `thin` projection PLUS the `rule-inject` hook concern, which
|
|
199
|
+
# delivers a rule body back on trigger match. SHIPPED DEFAULT for
|
|
200
|
+
# Claude Code since ADR-267. Measured over the frozen routing-matrix
|
|
201
|
+
# corpus: 616/616 byte-equal deliveries, 101/101 labelled rules
|
|
202
|
+
# reachable, 0 of 212 near-misses fired. Rollback is this one
|
|
203
|
+
# setting: `mode: eager-all` + `task generate-tools`.
|
|
204
|
+
#
|
|
205
|
+
# `hosts` scopes WHICH hosts are thinned. Every host outside the list receives
|
|
206
|
+
# exactly what `eager-all` writes, asserted byte-for-byte in CI by
|
|
207
|
+
# `check_host_tree_parity`. The default has one member because Claude Code is
|
|
208
|
+
# the only host that both binds the concern's slots and acts on its verdict
|
|
209
|
+
# (docs/enforcement-by-host.md); thinning a host with no bound slot would remove
|
|
210
|
+
# a body and put nothing in its place. Only `claude-code`, `cursor` and `cline`
|
|
211
|
+
# are thinnable at all - any other id is dropped with a warning.
|
|
198
212
|
lean_projection:
|
|
199
|
-
mode:
|
|
213
|
+
mode: delivery
|
|
214
|
+
hosts: [claude-code]
|
|
200
215
|
|
|
201
216
|
# --- Telegraph condensation (output-side) ---
|
|
202
217
|
#
|
|
@@ -723,6 +738,43 @@ design:
|
|
|
723
738
|
# autonomy setting, roadmap, or standing instruction lifts it).
|
|
724
739
|
fidelity_mode: strict
|
|
725
740
|
|
|
741
|
+
# Value reconciliation between a provided artifact and the project's own
|
|
742
|
+
# tokens. MEASUREMENT ships; BEHAVIOUR does not — AI council 2026-09-09
|
|
743
|
+
# (anthropic + openai, 2/2) on `blocker: approximation-tolerance`.
|
|
744
|
+
#
|
|
745
|
+
# The distance from the artifact's value to the nearest project token is
|
|
746
|
+
# computed and REPORTED on every value row regardless of these settings.
|
|
747
|
+
# What these decide is whether the agent may act on it without asking.
|
|
748
|
+
approximation:
|
|
749
|
+
# false ships. Turning it on lets a value INSIDE tolerance be replaced by
|
|
750
|
+
# the project's token without a per-value confirmation; outside tolerance
|
|
751
|
+
# the artifact's value is preserved either way. Shipping this enabled is a
|
|
752
|
+
# consumer-facing default flip and is owner-reserved — recorded in
|
|
753
|
+
# agents/roadmaps/stubs/road-to-frontend-power-default-flip.md, not decided
|
|
754
|
+
# here. `design.fidelity_mode: hard-floor` overrides it to off.
|
|
755
|
+
enabled: false
|
|
756
|
+
|
|
757
|
+
# Distance metric: OKLab ΔEOK for colour, absolute CSS pixels for length.
|
|
758
|
+
# The METHOD is fixed; the THRESHOLDS are deliberately absent.
|
|
759
|
+
#
|
|
760
|
+
# Both ship `null`, and `null` means "preserve and report", never
|
|
761
|
+
# "reconcile freely". No number is set because none is supported: zero of
|
|
762
|
+
# seven design-to-code benchmarks in the evidence set score token
|
|
763
|
+
# conformance, and a number in a config file — even flagged unmeasured —
|
|
764
|
+
# shapes behaviour and acquires the authority of a default.
|
|
765
|
+
#
|
|
766
|
+
# The one real measurement in the evidence set is GitHub Primer's spacing
|
|
767
|
+
# plugin, which widens each token's accepted set by ±1px and autofixes. It
|
|
768
|
+
# is recorded as an externally observed CANDIDATE in
|
|
769
|
+
# src/scripts/_lib/design_tolerance.ts and is not the shipped value.
|
|
770
|
+
tolerance:
|
|
771
|
+
# ΔEOK. Not an RGB channel delta — RGB distance is not perceptually
|
|
772
|
+
# uniform, which is why a `±5 per channel` proposal was rejected.
|
|
773
|
+
color: null
|
|
774
|
+
# CSS pixels, absolute. Not `max(1px, 2%)`, which grows more permissive
|
|
775
|
+
# at large dimensions with no evidence that this is wanted.
|
|
776
|
+
length: null
|
|
777
|
+
|
|
726
778
|
# --- Cross-source consistency ---
|
|
727
779
|
#
|
|
728
780
|
# When the agent plans, refines, roadmaps, or implements from multiple
|
|
@@ -1093,6 +1145,47 @@ commands:
|
|
|
1093
1145
|
ui_paths: []
|
|
1094
1146
|
api_paths: []
|
|
1095
1147
|
|
|
1148
|
+
# --- Continuity ---
|
|
1149
|
+
#
|
|
1150
|
+
# Automatic session-continuity production. The continuity record is the one
|
|
1151
|
+
# artefact a successor session resumes from; see
|
|
1152
|
+
# docs/contracts/continuity-record-slot.md for the slot's capacity policy and
|
|
1153
|
+
# docs/contracts/continuity-rollback.md for what each switch here undoes.
|
|
1154
|
+
continuity:
|
|
1155
|
+
# Deterministic continuity-record writer at session end
|
|
1156
|
+
# (road-to-continuity-writer-activation Phase 1). When `on`, the session-eol
|
|
1157
|
+
# concern writes the `continuity_record` capsule variant on Stop for a
|
|
1158
|
+
# SUBSTANTIVE session that has claimed a roadmap — every field computed from
|
|
1159
|
+
# on-disk state, no model spend, nothing shelled out.
|
|
1160
|
+
#
|
|
1161
|
+
# Default ON since 2026-09-10 (step 3.2). It shipped `off` while the parity
|
|
1162
|
+
# evidence was outstanding; steps 1.1 and 1.3 discharged that, and an AI
|
|
1163
|
+
# council of 2026-09-10 (2 seats, convergent, under the owner's written
|
|
1164
|
+
# delegation) authorised the flip so the normal path has an automatic writer
|
|
1165
|
+
# instead of a human remembering a command. The same verdict REFUSED to
|
|
1166
|
+
# retire `agent-config session:recycle`, which stays as an explicit
|
|
1167
|
+
# affordance — the automatic writer is not a strict superset of it (see
|
|
1168
|
+
# `on` below).
|
|
1169
|
+
#
|
|
1170
|
+
# Existing installs are unaffected: a value already written here keeps it.
|
|
1171
|
+
# on = (default) write the record at session end. Not written for a
|
|
1172
|
+
# session that claimed no roadmap, and the `git status` anchors
|
|
1173
|
+
# `session:recycle` collects are omitted.
|
|
1174
|
+
# off = no automatic record; only `session:recycle` writes one.
|
|
1175
|
+
auto_record: "on"
|
|
1176
|
+
|
|
1177
|
+
# Deterministic run-checkpoint production at session end
|
|
1178
|
+
# (road-to-continuity-writer-activation Phase 1.4). When `on`, a session
|
|
1179
|
+
# above the recycle threshold and inside a running roadmap contract leaves
|
|
1180
|
+
# agents/runtime/state/checkpoints/<run>.json behind, so a killed session can
|
|
1181
|
+
# be resumed by the watcher rather than by bookkeeping. Default ON: this is
|
|
1182
|
+
# the behavior the tree already had, and the switch exists so an operator can
|
|
1183
|
+
# disable checkpointing WITHOUT disabling continuity writing or the recycle
|
|
1184
|
+
# advisory.
|
|
1185
|
+
# on = (default) write the checkpoint.
|
|
1186
|
+
# off = no checkpoint; every other session-end handler is unaffected.
|
|
1187
|
+
run_checkpoints: "on"
|
|
1188
|
+
|
|
1096
1189
|
# --- Memory ---
|
|
1097
1190
|
#
|
|
1098
1191
|
# Engineering memory consolidation behaviour. Memory is entirely
|
|
@@ -275,6 +275,40 @@ ci_only:
|
|
|
275
275
|
# worth remote enforcement, OR it should simply be added to a workflow. Prefer
|
|
276
276
|
# adding it: a local-only gate is the direction that let real defects merge.
|
|
277
277
|
local_only:
|
|
278
|
+
- id: check_platform_anchor
|
|
279
|
+
class: token-scope-unavailable
|
|
280
|
+
reason: >
|
|
281
|
+
Reads `repos/{owner}/{repo}/rulesets` to check that the forge actually
|
|
282
|
+
requires what the ratification mechanism claims it does — an active branch
|
|
283
|
+
ruleset over the default branch, an approving review, last-push approval,
|
|
284
|
+
deletion and force-push blocked, strict required checks, and no
|
|
285
|
+
unconditional bypass actor.
|
|
286
|
+
|
|
287
|
+
Local-only because the permission does not exist, not because remote
|
|
288
|
+
enforcement is unwanted — which is the opposite of the usual reason on this
|
|
289
|
+
list and is why the class says so. The rulesets endpoint needs the
|
|
290
|
+
repository `administration` scope, and a workflow `GITHUB_TOKEN` cannot be
|
|
291
|
+
granted it: `administration: read` was tried in `rule-backstops.yml` on
|
|
292
|
+
2026-09-10 and actionlint refused it as an *"unknown permission scope"*,
|
|
293
|
+
listing the sixteen that do exist. None grants it.
|
|
294
|
+
|
|
295
|
+
Wiring it anyway would be worse than leaving it here. The gate fails closed
|
|
296
|
+
by design — a platform state it cannot read is `UNVERIFIABLE`, which is a
|
|
297
|
+
failure — so an unauthorised token would red every kernel and governance
|
|
298
|
+
pull request for a reason unrelated to the platform's actual state. The
|
|
299
|
+
three escapes were each rejected on the reasoning of the council that
|
|
300
|
+
commissioned the gate: `continue-on-error` makes it advisory, skipping when
|
|
301
|
+
unauthenticated makes it fail open, and putting it in `Sync + Generate Tools
|
|
302
|
+
Consistency` would freeze merges repository-wide on any red, since that
|
|
303
|
+
job's context is the ruleset's single required status check.
|
|
304
|
+
|
|
305
|
+
What moves it off this list: a PAT in a repository secret carrying
|
|
306
|
+
`administration: read`, then the workflow step. That is a human action and
|
|
307
|
+
is recorded as the open half of blocker `ratification-platform-anchor` in
|
|
308
|
+
`agents/roadmaps/road-to-typed-grants-that-persist.md`. Until then the gate
|
|
309
|
+
runs in `taskfiles/ci-fast.yml` — a real pre-push control, and not a CI one,
|
|
310
|
+
which is the honest description of its reach.
|
|
311
|
+
|
|
278
312
|
- id: check_host_loadability_reach
|
|
279
313
|
class: developer-machine-scoped
|
|
280
314
|
reason: >
|
|
@@ -43,13 +43,6 @@
|
|
|
43
43
|
"locus": "src/scripts/_lib/session_eol.ts:55",
|
|
44
44
|
"reason": "The writer`s own bookkeeping, not a record a successor reads. It holds counters and advisory stamps used across Stops within one session; nothing restores a session from it."
|
|
45
45
|
},
|
|
46
|
-
{
|
|
47
|
-
"id": "manual:run-session-recycle-before-clear",
|
|
48
|
-
"axis": "normal_path_manual_actions",
|
|
49
|
-
"disposition": "counted",
|
|
50
|
-
"locus": "src/scripts/hooks/session_eol_hook.ts:258",
|
|
51
|
-
"reason": "The advisory the stop slot injects past the recycle threshold instructs a human to run `agent-config session:recycle`, wait for the absolute path it prints, and only then `/clear`. That is a manual action on the normal path, and it exists precisely because no automatic writer does. It is what step 3.1 removes the need for."
|
|
52
|
-
},
|
|
53
46
|
{
|
|
54
47
|
"id": ".dispatcher",
|
|
55
48
|
"axis": "persistent_continuity_artefacts",
|
|
@@ -125,7 +118,7 @@
|
|
|
125
118
|
"axis": "persistent_continuity_artefacts",
|
|
126
119
|
"disposition": "counted",
|
|
127
120
|
"locus": "src/scripts/hooks/session_eol_hook.ts:31",
|
|
128
|
-
"reason": "Machine-readable fill level plus threshold state, overwritten every Stop. Written for later verification of whether the session crossed the recycle threshold. AUTHORISED FOR RETIREMENT and NOT RETIRED \u2014 the authorisation (AI council 2026-09-08 D1, resting on producer/no-consumer evidence) was obtained on incomplete facts. There is no consumer in code, but `agents/roadmaps/later/road-to-cost-parity-2-state-aware-dispatch.md` is a live parked roadmap whose open steps 1.1 and 1.4c read this file as a planned input, and 1.4c is specifically about bounding its staleness. The same council's own qualification anticipated this: \"no consumer in the tree\" proves no in-repository consumer, and a planned consumer inside the tree is a stronger objection than an external one because it is checkable. Retiring it is a decision for that roadmap's owner, not a side effect of this one. Blocker: `context-fill-retirement-has-a-parked-consumer
|
|
121
|
+
"reason": "Machine-readable fill level plus threshold state, overwritten every Stop. Written for later verification of whether the session crossed the recycle threshold. AUTHORISED FOR RETIREMENT and NOT RETIRED \u2014 the authorisation (AI council 2026-09-08 D1, resting on producer/no-consumer evidence) was obtained on incomplete facts. There is no consumer in code, but `agents/roadmaps/later/road-to-cost-parity-2-state-aware-dispatch.md` is a live parked roadmap whose open steps 1.1 and 1.4c read this file as a planned input, and 1.4c is specifically about bounding its staleness. The same council's own qualification anticipated this: \"no consumer in the tree\" proves no in-repository consumer, and a planned consumer inside the tree is a stronger objection than an external one because it is checkable. Retiring it is a decision for that roadmap's owner, not a side effect of this one. RETENTION DECIDED 2026-09-09 and this row is that decision, not a note about a pending one. An AI council under the owner's written delegation for the drain run (2 seats, anthropic + openai, quorum 2/2) resolved `context-fill-retirement-has-a-parked-consumer` as RETAIN: the file and `writeContextFill` stay, and this row stays `counted`. The named consumer is `agents/roadmaps/later/road-to-cost-parity-2-state-aware-dispatch.md` steps 1.1 and 1.4c. The alternative was re-anchoring those steps, which means editing a roadmap that is parked precisely because nobody is working on it \u2014 one small per-session write is the cheaper side of that trade. The artefact-axis reduction 5 to 4 is NOT claimed. Revisit when that roadmap is resumed, cancelled, or re-anchored onto another source. Blocker: `context-fill-retirement-has-a-parked-consumer`, resolved."
|
|
129
122
|
},
|
|
130
123
|
{
|
|
131
124
|
"id": "context-hygiene.json",
|
|
@@ -204,13 +197,6 @@
|
|
|
204
197
|
"locus": "src/scripts/_cli/cmd_handoff.ts:9",
|
|
205
198
|
"reason": "A second, prose-shaped session handoff written by `agent-config handoff` and injected once at the next `session_start`. Same job as the record, different format and different lifecycle \u2014 a competing mental model, which is what the count exists to expose."
|
|
206
199
|
},
|
|
207
|
-
{
|
|
208
|
-
"id": "hot-context.md",
|
|
209
|
-
"axis": "persistent_continuity_artefacts",
|
|
210
|
-
"disposition": "counted",
|
|
211
|
-
"locus": "src/scripts/hot_context_hook.ts:11",
|
|
212
|
-
"reason": "A working-memory cache rebuilt on stop/session_end/pre_compact and restored at session_start. Persisted state written for context restoration, so the behavioural rule counts it whatever it is called."
|
|
213
|
-
},
|
|
214
200
|
{
|
|
215
201
|
"id": "injection-census.jsonl",
|
|
216
202
|
"axis": "persistent_continuity_artefacts",
|
|
@@ -265,7 +251,7 @@
|
|
|
265
251
|
"axis": "persistent_continuity_artefacts",
|
|
266
252
|
"disposition": "counted",
|
|
267
253
|
"locus": "src/scripts/_cli/cmd_session_recycle.ts:9",
|
|
268
|
-
"reason": "The continuity record itself: written by `session:recycle
|
|
254
|
+
"reason": "The continuity record itself: written by `session:recycle` and, since 2026-09-10, by the automatic writer in the session-eol concern (`src/scripts/_lib/continuity_writer.ts` via `writeContinuityRecord`), resolved per session by `resolveContinuityRecord`, consumed once at `session_start` by the handoff-context concern. This is the artefact the whole roadmap is collapsing the others INTO \u2014 the surviving `1`. The locus stays on the command because the command still writes it; the second producer is named here so a reader does not conclude from the locus that a human is still the only source."
|
|
269
255
|
},
|
|
270
256
|
{
|
|
271
257
|
"id": "render",
|
|
@@ -482,14 +468,7 @@
|
|
|
482
468
|
"axis": "public_continuity_commands",
|
|
483
469
|
"disposition": "counted",
|
|
484
470
|
"locus": "src/cli/registry.ts:73",
|
|
485
|
-
"reason": "
|
|
486
|
-
},
|
|
487
|
-
{
|
|
488
|
-
"id": "command:chat-history",
|
|
489
|
-
"axis": "session_resume_pickers",
|
|
490
|
-
"disposition": "excluded",
|
|
491
|
-
"locus": "src/domains/meta/chat-history/command.md:3",
|
|
492
|
-
"reason": "The orchestrator shell that routes to the import picker; it presents no picker of its own. Counting both would double-count one surface. It is retired together with the picker it routes to, so the row disappears with it."
|
|
471
|
+
"reason": "RETAINED as an explicit affordance, and no longer the normal path. It was the ONLY writer of the continuity record until step 3.2 of road-to-continuity-writer-activation armed the automatic writer by default (2026-09-10), which is why this row's earlier reason called it REQUIRED. The same AI council (2 seats, convergent, under the owner's written delegation) REFUSED to retire the verb: removing a public callable contract is a different act from removing a manual step, and the automatic writer is not a strict superset of this command \u2014 it leaves no record for a session that claimed no roadmap, and it omits the `git status` anchor fields the command collects. So it stays COUNTED on this axis rather than excluded: it is a public continuity command that exists, the axis counts what exists, and the target of 0 is therefore not reachable while this decision stands. Recorded here rather than argued away, on the same terms as the `verb:handoff` exclusion note above."
|
|
493
472
|
},
|
|
494
473
|
{
|
|
495
474
|
"id": "picker:agent-handoff",
|
|
@@ -499,11 +478,11 @@
|
|
|
499
478
|
"reason": "A numbered-options block asking a human which prior session to resume. It is a picker by construction, and the parent`s target of 0 pickers is in tension with its preservation of this command \u2014 recorded here so the tension is visible in the count rather than argued away."
|
|
500
479
|
},
|
|
501
480
|
{
|
|
502
|
-
"id": "
|
|
503
|
-
"axis": "
|
|
504
|
-
"disposition": "
|
|
505
|
-
"locus": "src/
|
|
506
|
-
"reason": "A
|
|
481
|
+
"id": "session-index-latch",
|
|
482
|
+
"axis": "persistent_continuity_artefacts",
|
|
483
|
+
"disposition": "excluded",
|
|
484
|
+
"locus": "src/scripts/_lib/session_index_trust.ts:251",
|
|
485
|
+
"reason": "A duplicate-suppression latch, not a record. It holds one file per session under agents/runtime/state/session-index-latch/ whose entire content is a claim timestamp, and nothing reads it to restore anything \u2014 a successor session that finds it learns only that THIS session already received the memory index, which is the opposite of resumable state. It exists because `session_start` can fire more than once for one session (resume, host reconnect, compaction boundary on some hosts) and two injections double a fixed cost while presenting two corpora as one session memory. Excluded on the same reasoning as schema:session-eol-state: the writer own bookkeeping, not a record a successor reads. Deleting the directory costs a session nothing but a possible second injection."
|
|
507
486
|
}
|
|
508
487
|
]
|
|
509
488
|
}
|
|
@@ -65,11 +65,11 @@
|
|
|
65
65
|
"baseline_note": "80 → 81 on 2026-08-03 (release 9.15.0 gate). This RECORDS growth that already shipped through its own reviewed PR; it does not authorize new surface. The +1 is f02db54c2 (fix(cli): register routing:doctor in the CLI registry) — the command existed, only its registry entry was missing, and the registering PR did not move this budget. The gate did its job again: breach WARNS on main and BLOCKS on release, which is the conscious-decision point rather than a silently raised cap. Re-measured 2026-08-03 via the pinned method: 81. Headroom stays zero by design — the next registry addition must move this number in its own PR. 81 → 82 on 2026-08-04: the `handoff` subcommand (road-to-agent-handoff-resume Phase 4) registers in the same PR that adds the surface, per this record's own contract. Re-measured via the pinned method: 82. 82 → 84 on 2026-08-04: the `route:explain` + `route:audit` verbs (routing-correctness validation surface) register in the same PR that adds the surface. Re-measured via the pinned method: 84. 84 → 85 on 2026-08-05: the `settings:set` verb (road-to-zero-ceremony-settings Phase 2 — the one agent-reachable settings writer) registers in the same PR that adds the surface, per this record's own contract. Re-measured via the pinned method: 85. 85 → 86 on 2026-08-06: the `conformance:behavior` verb (road-to-agent-behavior-conformance Phase 5 — replays the local transcript store through the four mechanised conformance checks) registers in the same PR that adds the surface, per this record's own contract. Re-measured via the pinned method: 86. 86 → 88 on 2026-08-07: the `sessions:list` + `sessions:claim` verbs (road-to-parallel-session-coordination — the shell surface of the shared session register, needed because /roadmap:next is command markdown and can only reach the register through a shell call) register in the same PR that adds the surface, per this record's own contract. Re-measured via the pinned method: 88. 88 → 89 on 2026-08-08: the `council:status` verb registers in the same PR that adds the surface, per this record's own contract. It exists because an agent in a consumer project announced \"kein Council konfiguriert (keine .agent-settings.yml)\" and substituted a weaker path while the council was configured user-globally the whole time — there was no verb that answered availability, so the only route was an inference from a filename, and the intuitive filename is the one location ADR-104 guarantees is never consulted. Re-measured via the pinned method: 89. 89 → 91 on 2026-08-08: the `self-repair:status` + `self-repair:release` verbs (the queued-defect reader and the single Hard-Floor-gated outward step of the self-repair loop — the loop is deliberately unable to publish unless a human runs the release command) register in the same PR that adds the surface, per this record's own contract. Landed alongside the +1 council:status move in the same branch. Re-measured via the pinned method: 91. 91 → 94 on 2026-08-08: the `packs:active`, `settings:get` and `mcp:available` verbs (road-to-capability-answerability Phase 2 — the three capability probes for the gaps that had none) register in the same PR that adds the surface, per this record's own contract. Each answers a question that was previously only inferable from a filename: which packs are active and from which file, what a setting resolves to and which file set it, and what is declared in mcp.json versus what can actually launch. 94 -> 95 in the same PR: `brand:status` (Phase 2.4 — brand-layer presence, which the rule depended on and no surface could answer). Re-measured twice via the pinned method on the unchanged tree: 95/95. 95 → 96 on 2026-08-10: the `session:recycle` verb (road-to-token-economy-recycling Phase 2.2 — the deterministic producer of the main-session recycle envelope; the recycle advisory names this exact verb, so it must exist as a shell surface) registers in the same PR that adds the surface, per this record's own contract. Re-measured via the pinned method: 96. 96 -> 97 on 2026-08-10: the `gates` verb registers in the same PR that adds the surface, per this record's own contract. It exists because the blocker fields the dashboard already parses (Owner, What to do, Resolved when — CI-enforced by lint_roadmap_blockers) had no owner-filtered reader: the dashboard counts the open blockers across a 600-line file and links each to a per-roadmap anchor, so \"which of these are mine\" was a manual read of every anchor. The same inference-from-a-filename shape as the council:status entry above, one layer up. This branch and the session:recycle branch each measured 96 independently and landed on the same number for different verbs; the merge makes it 97, re-measured twice via the pinned method on the merged tree: 97/97. 97 -> 98 on 2026-08-15: the `workspace:doctor` verb (road-to-inbox-harvest-2026-08-c-workspace-identity Phase 3 — the read-only report over the new `workspaceIdentity()` resolver) registers in the same PR that adds the surface, per this record's own contract. It exists for the same inference-from-a-filename shape as the council:status and gates entries above, one layer down: the tree answered \"where am I\" in eight ad-hoc places across six files, and the 12.0.0 span shipped the same worktree misclassification twice, so no verb could be asked which checkout is the main one. Read-only by construction — the roadmap's Non-goals put worktree disposal out of scope and its Risk 3 names \"the pressure read becomes a disposal path by accident\" as the failure to design against, so the command carries no --fix and no --prune. Re-measured twice via the pinned method on the unchanged tree: 98/98. 98 -> 99 on 2026-08-17: the `council:quota` verb (road-to-council-quota-accounting-truth Phase 2) registers in the same PR that adds the surface, per this record's own contract. Exactly the inference-from-a-filename shape as the council:status entry above, one layer down: `cmd_quota` had existed in council_cli.ts and been reachable only via `scripts-run`, so the documented recovery path for an exhausted shared counter -- read the usage, reset one provider -- did not resolve through `agent-config`, and an operator debugging a quota failure met `unknown command`. The verb is read-only apart from the pre-existing `--reset <provider>`, which already required `--confirm`. Re-measured twice via the pinned method on the unchanged tree: 99/99. 99 -> 100 on 2026-08-19: the `decision:memo` verb (road-to-long-horizon-execution Phase 2.2, sequencing UOTL Phase 4.3 -- the decision-memo channel) registers in the same PR that adds the surface, per this record's own contract. It exists because the question ladder gained a rung between \"halt and ask\" and \"decide silently\": a resolution the run makes without contacting the operator is only legitimate if it is reviewable afterwards, and there was no surface that wrote such a record with a fixed shape. Write-and-list only, local-only (agents/runtime/ is gitignored), and it gates nothing -- the locked decision classes are refused at the config schema, never in the ledger. 100 -> 101 in the same PR: `run:supervise` (Phase 3.1 -- the out-of-process watcher for runs whose session died with open steps left). It is the operator-facing half of session continuity: nothing anywhere had the job of noticing that a claimed run stopped moving, so a roadmap 40% done and a roadmap finished looked identical from outside the dead session. Report-only by default and it NEVER merges, pushes or closes -- the auto-merge the reference design carries is a named rejection in the roadmap's harvest section, not an unbuilt feature. Re-measured twice via the pinned method on the unchanged tree: 101/101. 101 → 102 on 2026-08-22: the `adr:effective` verb (road-to-evidence-based-adr-governance step 2.2 — the effective-state projection over one decision record) registers in the same PR that adds the surface, per this record's own contract. It exists because current truth about an ADR was only reconstructable from linear prose: an agent had to read the body, then every amendment, and decide for itself which clauses still stand. The verb reports status, the Decision verbatim, clauses the record's own amendments superseded, active amendments, the three descriptive axes and the review-trigger state. It AUTHORIZES NOTHING — Phase 2 of that roadmap is titled \"surfacing only; no authority\" and its AC-7 forbids any authority consequence, so the verb reports an absent axis as absent (`— (no provenance axis)`, `— (ungraded)`, `absent → evidence`) and an unresolvable trigger as `indeterminate` rather than inferring one. Re-measured twice via the pinned method on the unchanged tree: 102/102. 102 → 104 on 2026-08-22: the `council:grant-billing` + `council:revoke-billing` verbs (road-to-billing-cliff-gate Phase 2 — the run-scoped billing grant that lets `ai_council.fallback.api_on_quota: 'ask'` be answered once per run instead of once per seat) register in the same PR that adds the surface, per this record's own contract. The two are a pair by construction rather than by convenience: a grant that can be issued and not revoked would outlive its run, which is the failure the run-scoped TTL exists to prevent. Re-measured via the pinned method: 104. 104 -> 106 on 2026-08-23: the `ui:audit` + `ui:render` verbs (road-to-frontend-power E2.1 and E3.1 -- the two Class-A commands that give the frontend obligations an artefact a gate can read and a render a verdict can cite) register in the same PR that adds the surface, per this record's own contract. The two are a pair by construction rather than by convenience: `ui-audit-gate`'s enforced_by moved from `none` to a carrier in the same change, and that carrier reports `verification: degraded` whenever the render artefact is absent -- so an audit verb without a render verb would ship a gate that can never reach `verified`. Both are Class A under ADR-124: they terminate, their whole state is a rebuildable directory under agents/runtime/state/, and ui:render closes chromium in a `finally` on every path with no --serve, watch or cache for a resident browser to hide in. Re-measured via the pinned method on the unchanged tree: 106. 106 → 107 on 2026-08-23: the `roadmap:context` verb (road-to-roadmap-situational-awareness — the single live probe that answers what else is in flight before a roadmap is picked) registers in the same PR that adds the surface, per this record's own contract. Its branch measured 105 against a base of 104 and this branch measured 106 against the same base for `ui:audit` + `ui:render`; the merge makes it 107, re-measured on the merged tree via the pinned method (registry enumeration): 107. 107 → 108 on 2026-08-26: the `roadmap:set-step` verb (road-to-skill-ecosystem-runtime-enforcement Phase 6 — the single sanctioned writer of a checkbox glyph) registers in the same PR that adds the surface, per this record's own contract. It exists because the glyph is written today by whatever edits the file, and a concurrent writer destroys work SILENTLY: the loser of an overwrite receives no error. The verb carries an advisory lock, a line-anchored edit that cannot span entries even in principle, a step-count invariant asserted against the LIVE pre-write file rather than an in-memory snapshot, and a post-write survival check. Re-measured via the pinned method (registry enumeration) on the unchanged tree: 108. 108 → 109 on 2026-08-26: the `stubs:due` verb (road-to-inbox-harvest-2026-08-f-owner-decision-queue step 2.1 — the read-only reader over `agents/roadmaps/stubs/` frontmatter) registers in the same PR that adds the surface, per this record's own contract. It exists because step 1.2 backfills a `review_by:` date into 77 parked files, and an AI council (2026-08-26, 2/2) made the ordering a RULE rather than a preference: dates without a reader are strictly worse than no dates, because a stale date certifies attention nobody paid. The verb is read-only by construction — it authors nothing under `agents/roadmaps/stubs/`, so `check_no_stub_inventory_table` stays green and unmodified, and `roadmap:progress` consumes only its two COUNTS for the dashboard header (two integers, no rows, nothing for the deleted index tables to grow back from). Re-measured via the pinned method (registry enumeration) on the unchanged tree: 109. 109 → 110 on 2026-09-03: the `hooks:effect` verb (road-to-wired-instruments Phase 1.1 — the CLI entry for `hook_effect_doctor`) registers in the same PR that adds the surface, per this record's own contract. It exists because the probe and its five-state vocabulary were built, tested and reachable from nothing: `grep -rn 'hook_effect_doctor|hook_effect_probe' src Taskfile.yml .github` returned only the two modules themselves, and a closed roadmap recorded the wiring as landed at `src/scripts/hooks_doctor.ts:88`, a line that is the closing brace of a filesystem helper in a file with zero references to the probe. Deliberately NOT merged into `hooks:doctor`: that verb reads the MANIFEST (what is declared) and this one reads what happened (what took effect), and the probe's own header names merging them as the thing to avoid — a declaration report and an execution report are different instruments, and merging them makes the cheap one expensive. Read-only apart from a scratch root it removes in a `finally`. Re-measured via the pinned method (registry enumeration) on the unchanged tree: 110."
|
|
66
66
|
},
|
|
67
67
|
"mcp_public_tool_count": {
|
|
68
|
-
"max":
|
|
69
|
-
"last_measured":
|
|
70
|
-
"last_measured_at": "2026-
|
|
68
|
+
"max": 25,
|
|
69
|
+
"last_measured": 25,
|
|
70
|
+
"last_measured_at": "2026-09-09",
|
|
71
71
|
"method": "tools/list length on the stdio server (post-ADR-132: implemented tools only)",
|
|
72
|
-
"baseline_note": "19 → 20 on 2026-08-17 (release 13.0.0 gate). The +1 is 866bd9861 (feat(mcp): recover what the host dropped — real ranker tool + a route to it, road-to-inbox-harvest-2026-08-d-runtime-skill-routing Phase 4): `suggest_skill_for_task` was promoted from a discovery STUB to a real ALLOWLIST entry and removed from STUB_TOOLS. Worth stating precisely, because the consumer-visible NAME did not grow — the stub already published that name and its `task` + `limit` input schema, which the promotion carried over verbatim. What grew is the count of tools tools/list actually returns, which is exactly what this metric measures post-ADR-132: implemented tools only. Same shape as the cli_help_command_count history above — this RECORDS growth that already shipped through its own reviewed PR (866bd9861 is on main), it does not authorize new surface. The registering PR did not move this budget, so the gate did its job: the breach warned on main and blocked on the release ref, which is the conscious-decision point rather than a silently raised cap. Re-measured twice via the pinned method on a freshly built dist/mcp/server.mjs: 20/20. Headroom stays zero by design — the next tool that leaves STUB_TOOLS must move this number in its own PR."
|
|
72
|
+
"baseline_note": "19 → 20 on 2026-08-17 (release 13.0.0 gate). The +1 is 866bd9861 (feat(mcp): recover what the host dropped — real ranker tool + a route to it, road-to-inbox-harvest-2026-08-d-runtime-skill-routing Phase 4): `suggest_skill_for_task` was promoted from a discovery STUB to a real ALLOWLIST entry and removed from STUB_TOOLS. Worth stating precisely, because the consumer-visible NAME did not grow — the stub already published that name and its `task` + `limit` input schema, which the promotion carried over verbatim. What grew is the count of tools tools/list actually returns, which is exactly what this metric measures post-ADR-132: implemented tools only. Same shape as the cli_help_command_count history above — this RECORDS growth that already shipped through its own reviewed PR (866bd9861 is on main), it does not authorize new surface. The registering PR did not move this budget, so the gate did its job: the breach warned on main and blocked on the release ref, which is the conscious-decision point rather than a silently raised cap. Re-measured twice via the pinned method on a freshly built dist/mcp/server.mjs: 20/20. Headroom stays zero by design — the next tool that leaves STUB_TOOLS must move this number in its own PR. 20 → 25 on 2026-09-09 (release 14.23.0 gate). The +5 are `graph_impact`, `graph_tests_for`, `graph_dead`, `graph_query` and `graph_path` — 9452f29b4 (feat(mcp): five graph tools, the pinned install hint, and the skill description; road-to-a-graph-that-is-shipped Phase 4.1), which is on main. They are the agent-facing readers of the code graph: the roadmap Risk-Register rank 1 is \"the install grows and the graph is still unread\", and an agent that has to shell out to reach a verb will not, so the tools ARE the mitigation rather than a convenience. Same shape as every entry above — this RECORDS growth that already shipped through its own reviewed PR; it does not authorize new surface. The registering PR did not move this budget, so the gate did its job again: the breach warned on main and BLOCKED on the release ref, which is the conscious-decision point rather than a silently raised cap. The move is +25%, over the 10% creep rule, and that is the intended reading: five tools in one commit is a surface decision, not creep. Re-measured three times via the pinned method on a freshly built dist/mcp/server.mjs: 25/25/25, the returned name set differing from the 20-tool set by exactly the five graph_* entries. Headroom stays zero by design — the next tool that leaves STUB_TOOLS must move this number in its own PR."
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
# `road-to-candidate-moves-floor` was that addition. The number is re-measured
|
|
65
65
|
# rather than the tolerance widened: a stated population that nobody re-measures
|
|
66
66
|
# is the un-asserted count this whole manifest exists to refuse.)
|
|
67
|
-
# **
|
|
68
|
-
# CI-identical argv, and
|
|
67
|
+
# **79 of them emit the machine-readable `scanned: <N>` line under their
|
|
68
|
+
# CI-identical argv, and 76 of those 79 are listed below.** The manifest is
|
|
69
69
|
# complete for every gate that can carry a floor, covering ~25 % of the population.
|
|
70
70
|
#
|
|
71
71
|
# RECOUNTED 2026-09-07, on the change that adds `lint_agent_security` — the
|
|
@@ -2365,7 +2365,7 @@ gates:
|
|
|
2365
2365
|
- id: check_loss_class_declared
|
|
2366
2366
|
argv: []
|
|
2367
2367
|
min_scanned: 45
|
|
2368
|
-
corpus: "every hook-manifest concern whose script exists (53 at baseline); of those, the
|
|
2368
|
+
corpus: "every hook-manifest concern whose script exists (53 at baseline, 58 on 2026-09-10); of those, the CONTEXT-EMITTING ones are walked through their relative module specifiers, and the modules that walk reaches whose code applies a lossy operation are the gated population. Measured 2026-09-10: 58 scanned, 7 emitters, 5 modules matched — 4 declaring a lossy class and 1 declaring `exact`. MATCHED IS NOT LOSSY: the detector establishes a match, the declaration says whether anything is lost, and an earlier version of this row said `5 lossy` and overstated the corpus by one. It read 0 between 2026-09-09 and 2026-09-10, when the hot-context cache retirement emptied the matched subset and the gate passed over nothing. A `loss_module:` pointer refilled it to 1 for part of 2026-09-10 and was superseded by the walk, whose two rejection premises were re-measured and did not hold — see docs/contracts/loss-classes.md."
|
|
2369
2369
|
status: enforced
|
|
2370
2370
|
canary:
|
|
2371
2371
|
class: contract-violation
|
|
@@ -2389,11 +2389,14 @@ gates:
|
|
|
2389
2389
|
has measurably never ratcheted. Both seats added the refinement adopted
|
|
2390
2390
|
here: unknown reachability is classified as model-reaching.
|
|
2391
2391
|
|
|
2392
|
-
MEASURED AT LANDING: **1** module
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
corpus
|
|
2392
|
+
MEASURED AT LANDING: **1** module qualified — `hot_context_hook`, the
|
|
2393
|
+
`ephemeral-lossy` exemplar `docs/contracts/loss-classes.md` classifies.
|
|
2394
|
+
MEASURED 2026-09-09, after step 3.1 of road-to-continuity-writer-activation
|
|
2395
|
+
retired that module's cache half: **0**. Setting the floor on the SCANNED
|
|
2396
|
+
corpus rather than the gated subset is what keeps this row meaningful
|
|
2397
|
+
through that drop — but a matched subset of zero means the gate currently
|
|
2398
|
+
proves nothing about any transform, which is tracked as blocker
|
|
2399
|
+
`loss-class-corpus-is-empty-after-hot-context`.
|
|
2397
2400
|
|
|
2398
2401
|
THE DETECTOR READS CODE, NOT PROSE. Its first cut matched `truncat` inside
|
|
2399
2402
|
three docblocks that describe truncation without performing any and
|
|
@@ -2777,3 +2780,23 @@ gates:
|
|
|
2777
2780
|
What the ROW buys on top of that is `ci_invocation` — the census had a
|
|
2778
2781
|
Taskfile target and no caller at all, so its removal would have been
|
|
2779
2782
|
noticed by nothing.
|
|
2783
|
+
|
|
2784
|
+
- id: check_projected_rule_routes
|
|
2785
|
+
argv: []
|
|
2786
|
+
min_scanned: 100
|
|
2787
|
+
corpus: "dist/agent-src/rules/*.md (119 at baseline, 22 distinct `guideline:` targets)"
|
|
2788
|
+
status: enforced
|
|
2789
|
+
canary:
|
|
2790
|
+
class: contract-violation
|
|
2791
|
+
path: dist/agent-src/rules/zz-canary-projected-route.md
|
|
2792
|
+
content: |
|
|
2793
|
+
---
|
|
2794
|
+
name: zz-canary-projected-route
|
|
2795
|
+
description: Canary planted by check_gate_coverage --canary; never ships.
|
|
2796
|
+
routes_to: guideline:zz-canary-target-that-does-not-exist
|
|
2797
|
+
---
|
|
2798
|
+
|
|
2799
|
+
# zz-canary-projected-route
|
|
2800
|
+
|
|
2801
|
+
A projected rule routing to a guideline body the projection does not
|
|
2802
|
+
contain. The gate must fail on this and pass once it is removed.
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"exempt": {
|
|
6
6
|
"ci-strict": "An ENTRY POINT, not a gate — the stricter sibling of `ci` itself, so wiring it into `ci` would be a cycle. Would run if strict became the default, which is a policy change rather than a wiring one.",
|
|
7
7
|
"check-augment-budget": "Emits a MEASUREMENT, not a verdict; a gate that cannot fail is a report. Would run once a pre-registered threshold exists to fail on.",
|
|
8
|
+
"check-platform-anchor": "THE PERMISSION DOES NOT EXIST, which is a different reason from every other row here — the others are unwired by judgement, this one by platform capability. It reads `repos/{owner}/{repo}/rulesets` to check that the forge actually requires what the ratification mechanism claims, and that endpoint needs the repository `administration` scope. A workflow `GITHUB_TOKEN` cannot be granted it: `administration: read` was tried in `rule-backstops.yml` on 2026-09-10 and actionlint refused it as an \"unknown permission scope\", listing the sixteen that do exist. Wiring it with an unauthorised token is worse than leaving it manual, because the gate fails closed by design — an unreadable platform is UNVERIFIABLE, which is a failure — so it would red every kernel and governance PR for a reason unrelated to the platform's actual state. The three escapes were each rejected on the reasoning of the council that commissioned the gate: `continue-on-error` makes it advisory, skipping when unauthenticated makes it fail open, and `Sync + Generate Tools Consistency` would freeze merges repository-wide on any red since that job's context is the single required check. The script itself IS reachable pre-push via the `preflight` list in `taskfiles/ci-fast.yml`; this target is the on-demand `task check-platform-anchor` entry point beside it. WOULD RUN given a PAT in a repository secret carrying `administration: read` — a human action, recorded as the open half of blocker `ratification-platform-anchor`.",
|
|
8
9
|
"check-corpus": "Requires council configuration, which is user-global (ADR-104) and absent in CI by construction. Would run against a fixture corpus that needs no configured council.",
|
|
9
10
|
"check-media-deps": "Requires external media tooling not installed on runners. Would run with those dependencies in the runner image, or behind a skip-with-reason path.",
|
|
10
11
|
"check-trunk-drift": "ADVISORY BY ITS OWN DOCSTRING — 'run it in the /create-pr pre-flight or wire into CI per your branch-protection policy'. Its red state is 'this branch is behind trunk', which is the normal state of an open PR, so wiring it would fail correct work. RECLASSIFIED from should-run during Phase 2 after reading what it asserts. Would run under a branch-protection policy that requires an up-to-date base.",
|