@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
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* check_kernel_edit_ratified — ADR-268 § 4's CI gate, ADDED ALONGSIDE the
|
|
4
|
+
* tool-call deny, not in place of it.
|
|
5
|
+
*
|
|
6
|
+
* ADR-268 § 4 says the deny "is replaced by a CI gate reading the artifact —
|
|
7
|
+
* one mechanism, not two". This lands the gate and does NOT perform that
|
|
8
|
+
* replacement, and the distinction is the whole reason this header exists.
|
|
9
|
+
*
|
|
10
|
+
* A two-round independent ratification review REFUSED the replacement, 2/2 in
|
|
11
|
+
* round 2, on a defect neither the ADR nor the first implementation saw: the
|
|
12
|
+
* workflow file that decides whether the gate runs at all lives in the
|
|
13
|
+
* candidate branch. Running the gate's CODE from the base revision — which the
|
|
14
|
+
* workflow now does — closes the "candidate judges itself" hole one level
|
|
15
|
+
* down and leaves the level above it open, because a PR can still edit the
|
|
16
|
+
* step that invokes it. Closing that needs a platform-anchored required check
|
|
17
|
+
* (a protected reusable workflow, an org ruleset), which is a repository
|
|
18
|
+
* setting and not a diff. So the replacement waits on an owner action, and
|
|
19
|
+
* until then BOTH mechanisms stand.
|
|
20
|
+
*
|
|
21
|
+
* Two mechanisms is a state ADR-268 § 4 argues against, and it is the correct
|
|
22
|
+
* interim anyway: this gate ADDS a refusal and removes none, so it is pure
|
|
23
|
+
* tightening — the discriminator ADR-268 § 0 gives for a narrowing. Removing
|
|
24
|
+
* the deny is the authority change, and that is what was refused.
|
|
25
|
+
*
|
|
26
|
+
* What the gate buys over the deny, today, with the deny still in place: it
|
|
27
|
+
* reaches every host rather than the one that honours a deny, and its unit is
|
|
28
|
+
* the cumulative DIFF rather than one tool call — so the two-step
|
|
29
|
+
* write-to-staging-then-`mv` sequence that laundered past the hook is caught.
|
|
30
|
+
*
|
|
31
|
+
* Gated: a diff touching a kernel rule under `src/rules/` (the nine of
|
|
32
|
+
* `_lib/kernel_rules.ts`), a governance hook (`src/scripts/hooks/block_*.ts`),
|
|
33
|
+
* or this gate itself — so it cannot be weakened without its own record. Such
|
|
34
|
+
* a diff must carry a ratification artifact under
|
|
35
|
+
* the ratifications directory with `verdict: ratified`, valid per the
|
|
36
|
+
* ratification-artifact contract.
|
|
37
|
+
*
|
|
38
|
+
* Every kernel diff is gated, not only the authority-EXPANDING ones.
|
|
39
|
+
* ADR-268 § 4 makes the artifact required for authority-expanding edits. Which
|
|
40
|
+
* edits expand authority is a judgement over rule prose — not decidable from a
|
|
41
|
+
* diff, and a gate that guesses is a gate that is quietly wrong in the
|
|
42
|
+
* direction nobody notices. This gate therefore applies the strictly stronger
|
|
43
|
+
* and fully decidable rule: every kernel-rule and governance-hook diff carries
|
|
44
|
+
* a record. A narrowing edit pays one artifact it did not strictly owe; an
|
|
45
|
+
* expanding edit cannot slip through a misclassification.
|
|
46
|
+
*
|
|
47
|
+
* Provider diversity fails closed. The required count comes from
|
|
48
|
+
* `src/config/ratification-policy.json`, committed in this repository so it is
|
|
49
|
+
* present on every runner. The first review round refused reading it from the
|
|
50
|
+
* user-global council config: that file is absent on CI, so the rule printed
|
|
51
|
+
* "unmeasured" and passed, on the one surface where it most needed to fire. A
|
|
52
|
+
* missing or unparseable policy is now a refusal.
|
|
53
|
+
*
|
|
54
|
+
* Inputs:
|
|
55
|
+
* --base-ref REF git ref to diff against (default: origin/main, then main)
|
|
56
|
+
* --files F [F …] override the changed-file list (testing and CI)
|
|
57
|
+
* --root DIR repo root the diff and artifacts are read from (testing)
|
|
58
|
+
* --policy-root DIR where the quorum policy is read from (testing); defaults
|
|
59
|
+
* to THIS script's tree, so a base-revision run reads the
|
|
60
|
+
* base's policy rather than one the candidate lowered
|
|
61
|
+
* --quiet verdict line only
|
|
62
|
+
*
|
|
63
|
+
* Exit codes: 0 = pass (or nothing gated) · 1 = fail · 3 = internal error.
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
import { spawnSync } from 'node:child_process';
|
|
67
|
+
import * as fs from 'node:fs';
|
|
68
|
+
import * as path from 'node:path';
|
|
69
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
70
|
+
|
|
71
|
+
import { GateLedger } from './_lib/gate_ledger.js';
|
|
72
|
+
import { is_kernel_rule } from './_lib/kernel_rules.js';
|
|
73
|
+
import { reportScanned } from './_lib/scan_scope.js';
|
|
74
|
+
import {
|
|
75
|
+
isRatified,
|
|
76
|
+
RATIFICATION_DIR,
|
|
77
|
+
readRatification,
|
|
78
|
+
readRequiredProviders,
|
|
79
|
+
type RatificationProblem,
|
|
80
|
+
} from './_lib/ratification_artifact.js';
|
|
81
|
+
|
|
82
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
83
|
+
const REPO = path.resolve(path.dirname(_HERE), '..', '..');
|
|
84
|
+
|
|
85
|
+
/** This gate's own path, relative to the repo root. Watched by itself. */
|
|
86
|
+
export const SELF_PATH = 'src/scripts/check_kernel_edit_ratified.ts';
|
|
87
|
+
|
|
88
|
+
/** The reader this gate shares with the artifact contract, also self-watched. */
|
|
89
|
+
export const READER_PATH = 'src/scripts/_lib/ratification_artifact.ts';
|
|
90
|
+
|
|
91
|
+
/** The in-repo quorum policy. Present on every runner; absent means refuse. */
|
|
92
|
+
export const POLICY_PATH = 'src/config/ratification-policy.json';
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The workflow that invokes this gate.
|
|
96
|
+
*
|
|
97
|
+
* On the watch list because a round-3 reviewer named its absence: running the
|
|
98
|
+
* gate's CODE from the base revision closes "the candidate judges itself" one
|
|
99
|
+
* level down and leaves the level above it open, since the step that decides
|
|
100
|
+
* whether to run at all lives in the candidate branch. Watching the file does
|
|
101
|
+
* not close that — a PR editing it still edits it — but it makes the edit
|
|
102
|
+
* carry a record instead of passing silently. One more level, not an anchor.
|
|
103
|
+
*/
|
|
104
|
+
export const WORKFLOW_PATH = '.github/workflows/consistency.yml';
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The platform-anchor limb: the committed expectation, its pure evaluator and
|
|
108
|
+
* its gate.
|
|
109
|
+
*
|
|
110
|
+
* Watched for the reason the expectation file is committed at all. The
|
|
111
|
+
* expectation could otherwise be lowered by a diff nobody ratified, which would
|
|
112
|
+
* make the anchor as head-controlled as the settings it exists to check. The
|
|
113
|
+
* embedded floor in `_lib/platform_anchor.ts` stops a lowering from being
|
|
114
|
+
* honoured; this list is what makes the attempt visible.
|
|
115
|
+
*/
|
|
116
|
+
export const ANCHOR_PATHS: readonly string[] = [
|
|
117
|
+
'src/config/platform-anchor.json',
|
|
118
|
+
'src/scripts/_lib/platform_anchor.ts',
|
|
119
|
+
'src/scripts/check_platform_anchor.ts',
|
|
120
|
+
];
|
|
121
|
+
|
|
122
|
+
/** Governance hooks: the blocking PreToolUse guards. */
|
|
123
|
+
const GOVERNANCE_HOOK_RE = /^src\/scripts\/hooks\/block_[a-z0-9_]+\.ts$/;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* A kernel rule, in the source tree or in any projection.
|
|
127
|
+
*
|
|
128
|
+
* The reach is deliberately the same as the retired hook's: any path whose
|
|
129
|
+
* basename is a kernel rule filename and which sits under a `rules/` path
|
|
130
|
+
* segment. `src/rules/commit-policy.md` is the source; `.claude/rules/…`,
|
|
131
|
+
* `.augment/rules/…` and `dist/agent-src/rules/…` are projections. A
|
|
132
|
+
* hand-edited projection reaches consumers without the source ever changing,
|
|
133
|
+
* so narrowing this to the source alone would have quietly dropped half of
|
|
134
|
+
* what the deny covered — a retirement is not supposed to be a reduction.
|
|
135
|
+
*
|
|
136
|
+
* A kernel-NAMED file outside a `rules/` directory (a doc, a fixture) is not a
|
|
137
|
+
* rule file and is not matched.
|
|
138
|
+
*/
|
|
139
|
+
const KERNEL_RULE_PATH_RE = /(?:^|\/)rules\/([a-z0-9-]+)\.md$/;
|
|
140
|
+
|
|
141
|
+
export interface GatedPaths {
|
|
142
|
+
kernelRules: string[];
|
|
143
|
+
governanceHooks: string[];
|
|
144
|
+
self: boolean;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Partition a changed-file list into the surfaces this gate watches. */
|
|
148
|
+
export function classifyPaths(files: readonly string[]): GatedPaths {
|
|
149
|
+
const kernelRules: string[] = [];
|
|
150
|
+
const governanceHooks: string[] = [];
|
|
151
|
+
let self = false;
|
|
152
|
+
for (const raw of files) {
|
|
153
|
+
const p = raw.replace(/\\/g, '/').trim();
|
|
154
|
+
if (p === '') {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (
|
|
158
|
+
p === SELF_PATH ||
|
|
159
|
+
p === READER_PATH ||
|
|
160
|
+
p === POLICY_PATH ||
|
|
161
|
+
p === WORKFLOW_PATH ||
|
|
162
|
+
ANCHOR_PATHS.includes(p)
|
|
163
|
+
) {
|
|
164
|
+
self = true;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const m = KERNEL_RULE_PATH_RE.exec(p);
|
|
168
|
+
if (m !== null && is_kernel_rule(m[1] ?? '')) {
|
|
169
|
+
kernelRules.push(p);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (GOVERNANCE_HOOK_RE.test(p)) {
|
|
173
|
+
governanceHooks.push(p);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return { kernelRules, governanceHooks, self };
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** True when anything in the diff requires a ratification artifact. */
|
|
180
|
+
export function requiresRatification(gated: GatedPaths): boolean {
|
|
181
|
+
return gated.kernelRules.length > 0 || gated.governanceHooks.length > 0 || gated.self;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Ratification artifacts present in the diff, as repo-relative paths. */
|
|
185
|
+
export function ratificationArtifactsIn(files: readonly string[]): string[] {
|
|
186
|
+
return files
|
|
187
|
+
.map((f) => f.replace(/\\/g, '/').trim())
|
|
188
|
+
.filter((f) => f.startsWith(`${RATIFICATION_DIR}/`) && f.endsWith('.md'));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* The configured council member count, or `null` when it could not be read.
|
|
193
|
+
*
|
|
194
|
+
* Deliberately best-effort and deliberately silent on failure: the config is
|
|
195
|
+
* user-global, so "not found" is the NORMAL state in CI and is not an error.
|
|
196
|
+
*/
|
|
197
|
+
export function configuredProviderCount(policyRoot: string): number | null {
|
|
198
|
+
try {
|
|
199
|
+
return readRequiredProviders(fs.readFileSync(path.join(policyRoot, POLICY_PATH), 'utf8'));
|
|
200
|
+
} catch {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function gitChangedFiles(baseRef: string, root: string): string[] | null {
|
|
206
|
+
const res = spawnSync('git', ['diff', '--name-only', `${baseRef}...HEAD`], {
|
|
207
|
+
cwd: root,
|
|
208
|
+
encoding: 'utf8',
|
|
209
|
+
});
|
|
210
|
+
if (res.status !== 0) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
return (res.stdout ?? '').split('\n').filter((l) => l.trim() !== '');
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function resolveBaseRef(explicit: string | null, root: string): string {
|
|
217
|
+
if (explicit !== null) {
|
|
218
|
+
return explicit;
|
|
219
|
+
}
|
|
220
|
+
for (const candidate of ['origin/main', 'origin/master', 'main', 'master']) {
|
|
221
|
+
const res = spawnSync('git', ['rev-parse', '--verify', candidate], {
|
|
222
|
+
cwd: root,
|
|
223
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
224
|
+
});
|
|
225
|
+
if (res.status === 0) {
|
|
226
|
+
return candidate;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return 'HEAD~1';
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export interface GateResult {
|
|
233
|
+
exitCode: 0 | 1 | 3;
|
|
234
|
+
lines: string[];
|
|
235
|
+
/** Number of changed paths inspected — the honest `scanned:` count. */
|
|
236
|
+
scanned: number;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export function evaluate(
|
|
240
|
+
files: readonly string[],
|
|
241
|
+
root: string,
|
|
242
|
+
providerCount: number | null,
|
|
243
|
+
): GateResult {
|
|
244
|
+
const lines: string[] = [];
|
|
245
|
+
const gated = classifyPaths(files);
|
|
246
|
+
const scanned = files.length;
|
|
247
|
+
|
|
248
|
+
// Every changed path is a planned target: the gate's denominator is the
|
|
249
|
+
// whole diff, and a path it decided was out of scope is a decision worth
|
|
250
|
+
// counting rather than a silence.
|
|
251
|
+
const ledger = new GateLedger('check_kernel_edit_ratified');
|
|
252
|
+
ledger.plan(files.map((f) => f.replace(/\\/g, '/').trim()).filter((f) => f !== ''));
|
|
253
|
+
const gatedSet = new Set<string>([
|
|
254
|
+
...gated.kernelRules,
|
|
255
|
+
...gated.governanceHooks,
|
|
256
|
+
...(gated.self ? [SELF_PATH] : []),
|
|
257
|
+
]);
|
|
258
|
+
const artifactSet = new Set(ratificationArtifactsIn(files));
|
|
259
|
+
for (const target of ledger.unaccountedTargets()) {
|
|
260
|
+
if (!gatedSet.has(target) && !artifactSet.has(target)) {
|
|
261
|
+
ledger.outOfScope(target, 'not_applicable_kind');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Resolve every target that has not reached an outcome yet, then close.
|
|
267
|
+
*
|
|
268
|
+
* `finalize()` throws on an unaccounted target, which is the point — it is
|
|
269
|
+
* what stops a path from being enumerated and then quietly not decided.
|
|
270
|
+
*/
|
|
271
|
+
const close = (ok: boolean): void => {
|
|
272
|
+
for (const target of ledger.unaccountedTargets()) {
|
|
273
|
+
if (ok) {
|
|
274
|
+
ledger.complete(target);
|
|
275
|
+
} else {
|
|
276
|
+
ledger.fail(target, 'no valid ratified artifact covers this diff');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
const tally = ledger.finalize();
|
|
280
|
+
lines.push('');
|
|
281
|
+
lines.push(
|
|
282
|
+
`ledger: planned ${tally.planned} · completed ${tally.completed} · ` +
|
|
283
|
+
`failed ${tally.failed} · out_of_scope ${tally.out_of_scope}`,
|
|
284
|
+
);
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
if (!requiresRatification(gated)) {
|
|
288
|
+
lines.push(
|
|
289
|
+
'✅ no kernel rule, governance hook or self edit in the diff — nothing to ratify',
|
|
290
|
+
);
|
|
291
|
+
close(true);
|
|
292
|
+
return { exitCode: 0, lines, scanned };
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const touched = [
|
|
296
|
+
...gated.kernelRules.map((p) => `kernel rule ${p}`),
|
|
297
|
+
...gated.governanceHooks.map((p) => `governance hook ${p}`),
|
|
298
|
+
...(gated.self ? ['the ratification mechanism itself (gate, reader, policy or workflow)'] : []),
|
|
299
|
+
];
|
|
300
|
+
lines.push(`Gated surfaces in this diff (${touched.length}):`);
|
|
301
|
+
for (const t of touched) {
|
|
302
|
+
lines.push(` · ${t}`);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const artifacts = ratificationArtifactsIn(files);
|
|
306
|
+
if (artifacts.length === 0) {
|
|
307
|
+
lines.push('');
|
|
308
|
+
lines.push(
|
|
309
|
+
`❌ no ratification artifact under \`${RATIFICATION_DIR}/\` in this diff. ` +
|
|
310
|
+
'ADR-268 § 4: an agent may modify its constitution and may not ratify its own ' +
|
|
311
|
+
'increase in power. See docs/contracts/ratification-artifact.md.',
|
|
312
|
+
);
|
|
313
|
+
close(false);
|
|
314
|
+
return { exitCode: 1, lines, scanned };
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (providerCount === null) {
|
|
318
|
+
lines.push('');
|
|
319
|
+
lines.push(
|
|
320
|
+
`❌ \`${POLICY_PATH}\` is missing or unparseable, so the required provider count ` +
|
|
321
|
+
'is unknown. This gate fails closed rather than skipping the diversity rule — a ' +
|
|
322
|
+
'control that passes when it cannot measure is advisory.',
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
let anyRatified = false;
|
|
327
|
+
const failures: string[] = [];
|
|
328
|
+
for (const rel of artifacts) {
|
|
329
|
+
const abs = path.join(root, rel);
|
|
330
|
+
let text: string;
|
|
331
|
+
try {
|
|
332
|
+
text = fs.readFileSync(abs, 'utf8');
|
|
333
|
+
} catch {
|
|
334
|
+
failures.push(`${rel}: listed in the diff but not readable on disk`);
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
const reading = readRatification(text, providerCount);
|
|
338
|
+
if (isRatified(reading)) {
|
|
339
|
+
anyRatified = true;
|
|
340
|
+
lines.push('');
|
|
341
|
+
lines.push(
|
|
342
|
+
`✅ ${rel} — ratified by ${reading.artifact?.reviewed_by} ` +
|
|
343
|
+
`(providers: ${reading.artifact?.providers.join(', ')}; ` +
|
|
344
|
+
`effective after ${reading.artifact?.effective_after})`,
|
|
345
|
+
);
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
if (reading.artifact !== null) {
|
|
349
|
+
failures.push(`${rel}: verdict is \`${reading.artifact.verdict}\`, not \`ratified\``);
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
for (const p of reading.problems as RatificationProblem[]) {
|
|
353
|
+
failures.push(`${rel}: ${p.message}`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
if (!anyRatified) {
|
|
358
|
+
lines.push('');
|
|
359
|
+
lines.push('❌ no valid `verdict: ratified` artifact for this diff:');
|
|
360
|
+
for (const f of failures) {
|
|
361
|
+
lines.push(` · ${f}`);
|
|
362
|
+
}
|
|
363
|
+
close(false);
|
|
364
|
+
return { exitCode: 1, lines, scanned };
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
if (failures.length > 0) {
|
|
368
|
+
lines.push('');
|
|
369
|
+
lines.push('⚠️ other ratification artifacts in the diff did not validate:');
|
|
370
|
+
for (const f of failures) {
|
|
371
|
+
lines.push(` · ${f}`);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
close(true);
|
|
375
|
+
return { exitCode: 0, lines, scanned };
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
379
|
+
let baseRef: string | null = null;
|
|
380
|
+
let root = REPO;
|
|
381
|
+
// The policy is read relative to THIS SCRIPT's tree, never to `--root`.
|
|
382
|
+
//
|
|
383
|
+
// Round 1 refused the previous shape for a bootstrap reason: CI ran the
|
|
384
|
+
// gate from the PR head, so a candidate diff supplied the code that judged
|
|
385
|
+
// it. The workflow now runs the BASE revision's copy of this script with
|
|
386
|
+
// `--root <head>`, so the judging code is one the PR did not write — and
|
|
387
|
+
// that only holds if the quorum policy comes from the base too. Reading it
|
|
388
|
+
// from `--root` would let the same PR lower `required_providers` and have
|
|
389
|
+
// the base gate honour the lowered number.
|
|
390
|
+
let policyRoot = REPO;
|
|
391
|
+
let quiet = false;
|
|
392
|
+
const files: string[] = [];
|
|
393
|
+
let collectingFiles = false;
|
|
394
|
+
|
|
395
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
396
|
+
const a = argv[i];
|
|
397
|
+
if (a === '--base-ref') {
|
|
398
|
+
baseRef = argv[i + 1] ?? null;
|
|
399
|
+
i += 1;
|
|
400
|
+
collectingFiles = false;
|
|
401
|
+
} else if (a === '--root') {
|
|
402
|
+
root = path.resolve(argv[i + 1] ?? root);
|
|
403
|
+
i += 1;
|
|
404
|
+
collectingFiles = false;
|
|
405
|
+
} else if (a === '--policy-root') {
|
|
406
|
+
policyRoot = path.resolve(argv[i + 1] ?? policyRoot);
|
|
407
|
+
i += 1;
|
|
408
|
+
collectingFiles = false;
|
|
409
|
+
} else if (a === '--quiet') {
|
|
410
|
+
quiet = true;
|
|
411
|
+
collectingFiles = false;
|
|
412
|
+
} else if (a === '--files') {
|
|
413
|
+
collectingFiles = true;
|
|
414
|
+
} else if (collectingFiles && a !== undefined) {
|
|
415
|
+
files.push(a);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
let changed: string[];
|
|
420
|
+
if (files.length > 0) {
|
|
421
|
+
changed = files;
|
|
422
|
+
} else {
|
|
423
|
+
const fromGit = gitChangedFiles(resolveBaseRef(baseRef, root), root);
|
|
424
|
+
if (fromGit === null) {
|
|
425
|
+
process.stderr.write('❌ check_kernel_edit_ratified: git diff failed\n');
|
|
426
|
+
return 3;
|
|
427
|
+
}
|
|
428
|
+
changed = fromGit;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
const result = evaluate(changed, root, configuredProviderCount(policyRoot));
|
|
432
|
+
|
|
433
|
+
// OUTSIDE the quiet guard: CI passes --quiet, and a coverage guard that
|
|
434
|
+
// sees no count reports the gate silent.
|
|
435
|
+
//
|
|
436
|
+
// Through `reportScanned` rather than a bare write, which is what makes the
|
|
437
|
+
// gate HARDENED — `check_gate_coverage`'s predicate is "routes through
|
|
438
|
+
// _lib/scan_scope OR emits the line AND is registered with a floor", and a
|
|
439
|
+
// diff-scoped gate can carry no honest floor (an empty diff scans zero by
|
|
440
|
+
// construction). A bare write put it in the unhardened population and made
|
|
441
|
+
// it owe a `gate-coverage.yml` row it cannot fill.
|
|
442
|
+
reportScanned({
|
|
443
|
+
gate: 'check_kernel_edit_ratified',
|
|
444
|
+
scanned: result.scanned,
|
|
445
|
+
units: 'changed path(s)',
|
|
446
|
+
roots: ['<the diff against the base ref>'],
|
|
447
|
+
allowEmpty:
|
|
448
|
+
'EMPTY_VALID: the corpus is one diff. A commit range that changed nothing is a ' +
|
|
449
|
+
'real state, and there is then no kernel rule, governance hook or mechanism file ' +
|
|
450
|
+
'to ratify — the gate has read everything there was.',
|
|
451
|
+
});
|
|
452
|
+
if (!quiet || result.exitCode !== 0) {
|
|
453
|
+
for (const l of result.lines) {
|
|
454
|
+
process.stdout.write(`${l}\n`);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return result.exitCode;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
|
|
461
|
+
process.exit(main());
|
|
462
|
+
}
|