@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,390 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Verify that the forge enforces what the ratification mechanism claims it does.
|
|
4
|
+
*
|
|
5
|
+
* `check_kernel_edit_ratified` proves a gated diff carries an independently
|
|
6
|
+
* reviewed artifact. It cannot prove the repository required anyone to review
|
|
7
|
+
* it — that lives in repository settings, which no diff contains. This gate is
|
|
8
|
+
* that second limb: it reads the live branch rulesets and compares them against
|
|
9
|
+
* the committed expectation in `src/config/platform-anchor.json`.
|
|
10
|
+
*
|
|
11
|
+
* It fires ONLY on a diff that already requires ratification — a kernel rule, a
|
|
12
|
+
* governance hook, the ratification mechanism itself, or the expectation file.
|
|
13
|
+
* An ordinary pull request never reaches the network through this path, which is
|
|
14
|
+
* what keeps a fail-closed network dependency proportionate.
|
|
15
|
+
*
|
|
16
|
+
* Failing closed is deliberate and was the explicit condition of the decision
|
|
17
|
+
* that commissioned this gate: `unverifiable` is a failure, not a pass, because
|
|
18
|
+
* a control that succeeds when it cannot measure is advisory. The two negative
|
|
19
|
+
* outcomes stay distinct — NONCOMPLIANT was measured and violates policy,
|
|
20
|
+
* UNVERIFIABLE could not be established — because they are different repairs.
|
|
21
|
+
*
|
|
22
|
+
* The policy is read from THIS script's tree rather than from `--root`, for the
|
|
23
|
+
* same reason its sibling reads its quorum policy that way: a base-revision run
|
|
24
|
+
* must not honour an expectation the candidate branch lowered.
|
|
25
|
+
*
|
|
26
|
+
* Usage:
|
|
27
|
+
* check_platform_anchor [--files F …] [--base-ref REF] [--root DIR]
|
|
28
|
+
* [--policy-root DIR] [--repo OWNER/NAME] [--quiet]
|
|
29
|
+
*
|
|
30
|
+
* Exit codes: 0 = pass (or nothing gated) · 1 = fail · 3 = internal error.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import { spawnSync } from 'node:child_process';
|
|
34
|
+
import * as fs from 'node:fs';
|
|
35
|
+
import * as path from 'node:path';
|
|
36
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
37
|
+
|
|
38
|
+
import { asOf } from './_lib/as_of.js';
|
|
39
|
+
import { GateLedger } from './_lib/gate_ledger.js';
|
|
40
|
+
import {
|
|
41
|
+
checkAnchorIdentity,
|
|
42
|
+
evaluateAnchor,
|
|
43
|
+
readAnchorPolicy,
|
|
44
|
+
readWaivers,
|
|
45
|
+
type AnchorReading,
|
|
46
|
+
type RulesetDetail,
|
|
47
|
+
} from './_lib/platform_anchor.js';
|
|
48
|
+
import { reportScanned } from './_lib/scan_scope.js';
|
|
49
|
+
import { ANCHOR_PATHS, classifyPaths, requiresRatification } from './check_kernel_edit_ratified.js';
|
|
50
|
+
|
|
51
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
52
|
+
const REPO = path.resolve(path.dirname(_HERE), '..', '..');
|
|
53
|
+
|
|
54
|
+
/** The committed expectation. On the gated-surface list, so an edit is reviewed. */
|
|
55
|
+
export const POLICY_PATH = 'src/config/platform-anchor.json';
|
|
56
|
+
|
|
57
|
+
/** How the forge is queried. Injectable so both polarities are testable offline. */
|
|
58
|
+
export interface AnchorSource {
|
|
59
|
+
/** `null` on any failure — network, credentials, scope, offline. */
|
|
60
|
+
rulesets(repo: string): RulesetDetail[] | null;
|
|
61
|
+
/** `null` when the default branch cannot be resolved. */
|
|
62
|
+
defaultBranch(repo: string): string | null;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function gh(args: readonly string[]): unknown | null {
|
|
66
|
+
const r = spawnSync('gh', args, { encoding: 'utf8', maxBuffer: 32 * 1024 * 1024 });
|
|
67
|
+
if (r.status !== 0 || typeof r.stdout !== 'string' || r.stdout.trim() === '') {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
return JSON.parse(r.stdout);
|
|
72
|
+
} catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The live source.
|
|
79
|
+
*
|
|
80
|
+
* The listing endpoint returns summaries without `rules` or `bypass_actors`, so
|
|
81
|
+
* each ruleset is fetched individually. A single failed detail read makes the
|
|
82
|
+
* whole reading `null` rather than a partial one: a subset of rulesets would
|
|
83
|
+
* understate the effective protection in one direction and overstate it in the
|
|
84
|
+
* other, and neither is a verdict worth recording.
|
|
85
|
+
*/
|
|
86
|
+
export const liveSource: AnchorSource = {
|
|
87
|
+
rulesets(repo: string): RulesetDetail[] | null {
|
|
88
|
+
// `--paginate --slurp`, because the listing endpoint pages at 30 and a
|
|
89
|
+
// silently truncated reading is the partial verdict this function's own
|
|
90
|
+
// contract forbids. Truncation can drop an unconditional `bypass_actors`
|
|
91
|
+
// entry onto a page nobody read, so it can overstate safety rather than
|
|
92
|
+
// only understate it. `--slurp` is required alongside: bare
|
|
93
|
+
// `--paginate` emits one JSON array PER PAGE, concatenated, which is not
|
|
94
|
+
// parseable as a single document.
|
|
95
|
+
const paged = gh(['api', '--paginate', '--slurp', `repos/${repo}/rulesets`]);
|
|
96
|
+
if (!Array.isArray(paged)) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const list = paged.every((p) => Array.isArray(p)) ? paged.flat() : paged;
|
|
100
|
+
const out: RulesetDetail[] = [];
|
|
101
|
+
for (const entry of list) {
|
|
102
|
+
const id = (entry as { id?: unknown } | null)?.id;
|
|
103
|
+
if (typeof id !== 'number') {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
const detail = gh(['api', `repos/${repo}/rulesets/${id}`]);
|
|
107
|
+
if (detail === null || typeof detail !== 'object') {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
out.push(detail as RulesetDetail);
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
},
|
|
114
|
+
defaultBranch(repo: string): string | null {
|
|
115
|
+
const meta = gh(['api', `repos/${repo}`]);
|
|
116
|
+
const b = (meta as { default_branch?: unknown } | null)?.default_branch;
|
|
117
|
+
return typeof b === 'string' && b !== '' ? b : null;
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
function gitChangedFiles(baseRef: string, root: string): string[] | null {
|
|
122
|
+
const r = spawnSync('git', ['diff', '--name-only', `${baseRef}...HEAD`], {
|
|
123
|
+
cwd: root,
|
|
124
|
+
encoding: 'utf8',
|
|
125
|
+
});
|
|
126
|
+
if (r.status !== 0) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
return r.stdout.split('\n').map((s) => s.trim()).filter((s) => s !== '');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function resolveBaseRef(explicit: string | null, root: string): string {
|
|
133
|
+
if (explicit !== null) {
|
|
134
|
+
return explicit;
|
|
135
|
+
}
|
|
136
|
+
// The same four the sibling gate tries. Two of them were missing here,
|
|
137
|
+
// which on a `master`-default repository silently degraded the scope to a
|
|
138
|
+
// one-commit `HEAD~1` diff — an odd narrowing in a file that otherwise
|
|
139
|
+
// resolves the default branch from the forge.
|
|
140
|
+
for (const ref of ['origin/main', 'origin/master', 'main', 'master']) {
|
|
141
|
+
const r = spawnSync('git', ['rev-parse', '--verify', '--quiet', ref], {
|
|
142
|
+
cwd: root,
|
|
143
|
+
encoding: 'utf8',
|
|
144
|
+
});
|
|
145
|
+
if (r.status === 0) {
|
|
146
|
+
return ref;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return 'HEAD~1';
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** True when the diff touches the expectation file itself. */
|
|
153
|
+
export function touchesPolicy(files: readonly string[]): boolean {
|
|
154
|
+
return files.map((f) => f.replace(/\\/g, '/').trim()).includes(POLICY_PATH);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export interface AnchorGateResult {
|
|
158
|
+
exitCode: 0 | 1;
|
|
159
|
+
lines: string[];
|
|
160
|
+
scanned: number;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export function evaluateGate(
|
|
164
|
+
files: readonly string[],
|
|
165
|
+
policyText: string | null,
|
|
166
|
+
source: AnchorSource,
|
|
167
|
+
repo: string,
|
|
168
|
+
now: Date = asOf(),
|
|
169
|
+
): AnchorGateResult {
|
|
170
|
+
const lines: string[] = [];
|
|
171
|
+
const scanned = files.length;
|
|
172
|
+
const classified = classifyPaths(files);
|
|
173
|
+
const gatedPaths = [
|
|
174
|
+
...classified.kernelRules,
|
|
175
|
+
...classified.governanceHooks,
|
|
176
|
+
...files.map((f) => f.replace(/\\/g, '/').trim()).filter((f) => ANCHOR_PATHS.includes(f)),
|
|
177
|
+
];
|
|
178
|
+
const gated = requiresRatification(classified) || touchesPolicy(files);
|
|
179
|
+
|
|
180
|
+
// Per-target accounting, like the sibling gate this one is the second limb
|
|
181
|
+
// of. The verdict is whole-diff by nature — one platform, one answer — but
|
|
182
|
+
// a reader still needs to see WHICH gated path pulled the network read,
|
|
183
|
+
// and a path decided out of scope is a decision worth counting rather than
|
|
184
|
+
// a silence.
|
|
185
|
+
const ledger = new GateLedger('check_platform_anchor');
|
|
186
|
+
ledger.plan(files.map((f) => f.replace(/\\/g, '/').trim()).filter((f) => f !== ''));
|
|
187
|
+
const gatedSet = new Set(gatedPaths);
|
|
188
|
+
for (const target of ledger.unaccountedTargets()) {
|
|
189
|
+
if (!gatedSet.has(target)) {
|
|
190
|
+
ledger.outOfScope(target, 'not_applicable_kind');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const close = (ok: boolean, why: string): void => {
|
|
194
|
+
for (const target of ledger.unaccountedTargets()) {
|
|
195
|
+
if (ok) {
|
|
196
|
+
ledger.complete(target);
|
|
197
|
+
} else {
|
|
198
|
+
ledger.fail(target, why);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const tally = ledger.finalize();
|
|
202
|
+
lines.push('');
|
|
203
|
+
lines.push(
|
|
204
|
+
`ledger: planned ${tally.planned} · completed ${tally.completed} · ` +
|
|
205
|
+
`failed ${tally.failed} · out_of_scope ${tally.out_of_scope}`,
|
|
206
|
+
);
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
if (!gated) {
|
|
210
|
+
lines.push(
|
|
211
|
+
'✅ no kernel rule, governance hook, ratification mechanism or platform expectation ' +
|
|
212
|
+
'in the diff — the platform anchor is not consulted',
|
|
213
|
+
);
|
|
214
|
+
close(true, '');
|
|
215
|
+
return { exitCode: 0, lines, scanned };
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const { policy, findings: policyFindings } = readAnchorPolicy(policyText);
|
|
219
|
+
const identity = checkAnchorIdentity(policyText, repo);
|
|
220
|
+
if (policy === null || identity.length > 0) {
|
|
221
|
+
lines.push('❌ the platform expectation could not be used:');
|
|
222
|
+
for (const f of [...policyFindings, ...identity]) {
|
|
223
|
+
lines.push(` · [${f.code}] ${f.message}`);
|
|
224
|
+
}
|
|
225
|
+
close(false, 'the platform expectation could not be used');
|
|
226
|
+
return { exitCode: 1, lines, scanned };
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Short-circuited deliberately: when the ruleset read already failed there
|
|
230
|
+
// is nothing the default-branch call can change, and evaluating both as
|
|
231
|
+
// arguments spent an API round-trip on every failure path.
|
|
232
|
+
// The WHOLE reading is passed on, not just the honoured map. Printing the
|
|
233
|
+
// refusals here and handing over only the map is what let a malformed
|
|
234
|
+
// waiver outrank a correct one: the refusals never reached the exit code.
|
|
235
|
+
const waivers = readWaivers(policyText, now);
|
|
236
|
+
const rulesets = source.rulesets(repo);
|
|
237
|
+
const reading: AnchorReading = evaluateAnchor(
|
|
238
|
+
policy,
|
|
239
|
+
rulesets,
|
|
240
|
+
rulesets === null ? null : source.defaultBranch(repo),
|
|
241
|
+
waivers,
|
|
242
|
+
);
|
|
243
|
+
for (const e of reading.evidence) {
|
|
244
|
+
lines.push(` ${e}`);
|
|
245
|
+
}
|
|
246
|
+
if (reading.status === 'compliant') {
|
|
247
|
+
lines.push(`✅ platform anchor COMPLIANT for ${repo}`);
|
|
248
|
+
close(true, '');
|
|
249
|
+
return { exitCode: 0, lines, scanned };
|
|
250
|
+
}
|
|
251
|
+
if (reading.status === 'compliant-with-accepted-risk') {
|
|
252
|
+
// Exit 0, and the wording carries the whole difference. Both council
|
|
253
|
+
// seats required that the assertion not imply merge-result validation:
|
|
254
|
+
// a required context certifies the commit it ran on, never that the
|
|
255
|
+
// change composes with the current base.
|
|
256
|
+
// The waived dimensions are read from the verdict rather than named in
|
|
257
|
+
// this string. Hardcoding one made the message wrong the moment a
|
|
258
|
+
// second waiver existed, and this gate's whole subject is not saying
|
|
259
|
+
// more than it measured.
|
|
260
|
+
const waived = [...waivers.honoured.keys()].join(', ');
|
|
261
|
+
lines.push(
|
|
262
|
+
`✅ platform anchor PASS_WITH_ACCEPTED_RISK for ${repo} — every hard dimension is ` +
|
|
263
|
+
'present; the accepted risks above are recorded waivers with an expiry, not ' +
|
|
264
|
+
`silent passes. Waived: ${waived}. Where \`strict_required_status_checks\` is ` +
|
|
265
|
+
'among them, current-base compatibility is NOT guaranteed: a required check ' +
|
|
266
|
+
'certifies the commit it ran on, never the merge result.',
|
|
267
|
+
);
|
|
268
|
+
close(true, '');
|
|
269
|
+
return { exitCode: 0, lines, scanned };
|
|
270
|
+
}
|
|
271
|
+
lines.push('');
|
|
272
|
+
lines.push(
|
|
273
|
+
reading.status === 'unverifiable'
|
|
274
|
+
? `❌ platform anchor UNVERIFIABLE for ${repo} — this is a failure, not a pass:`
|
|
275
|
+
: `❌ platform anchor NONCOMPLIANT for ${repo}:`,
|
|
276
|
+
);
|
|
277
|
+
for (const f of reading.findings) {
|
|
278
|
+
lines.push(` · [${f.code}] ${f.message}`);
|
|
279
|
+
}
|
|
280
|
+
close(false, `platform anchor ${reading.status} for ${repo}`);
|
|
281
|
+
return { exitCode: 1, lines, scanned };
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function resolveRepo(explicit: string | null, root: string): string | null {
|
|
285
|
+
if (explicit !== null) {
|
|
286
|
+
return explicit;
|
|
287
|
+
}
|
|
288
|
+
const r = spawnSync('git', ['remote', 'get-url', 'origin'], { cwd: root, encoding: 'utf8' });
|
|
289
|
+
if (r.status !== 0) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
const m = /[:/]([^/:]+\/[^/]+?)(?:\.git)?\s*$/.exec(r.stdout);
|
|
293
|
+
return m?.[1] ?? null;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export function main(argv: readonly string[] = process.argv.slice(2), source = liveSource): number {
|
|
297
|
+
let baseRef: string | null = null;
|
|
298
|
+
let root = REPO;
|
|
299
|
+
let policyRoot = REPO;
|
|
300
|
+
let repoArg: string | null = null;
|
|
301
|
+
let quiet = false;
|
|
302
|
+
const files: string[] = [];
|
|
303
|
+
let collectingFiles = false;
|
|
304
|
+
// `--files` with nothing after it is an explicit empty changed-set, not an
|
|
305
|
+
// absent one. Keyed on the FLAG rather than on the list length, because a
|
|
306
|
+
// caller that computed "nothing to check" and a caller that passed no
|
|
307
|
+
// scope at all were otherwise indistinguishable here, and the second reads
|
|
308
|
+
// a git diff that may well be gated.
|
|
309
|
+
let filesFlagSeen = false;
|
|
310
|
+
|
|
311
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
312
|
+
const a = argv[i];
|
|
313
|
+
if (a === '--base-ref') {
|
|
314
|
+
baseRef = argv[i + 1] ?? null;
|
|
315
|
+
i += 1;
|
|
316
|
+
collectingFiles = false;
|
|
317
|
+
} else if (a === '--root') {
|
|
318
|
+
root = path.resolve(argv[i + 1] ?? root);
|
|
319
|
+
i += 1;
|
|
320
|
+
collectingFiles = false;
|
|
321
|
+
} else if (a === '--policy-root') {
|
|
322
|
+
policyRoot = path.resolve(argv[i + 1] ?? policyRoot);
|
|
323
|
+
i += 1;
|
|
324
|
+
collectingFiles = false;
|
|
325
|
+
} else if (a === '--repo') {
|
|
326
|
+
repoArg = argv[i + 1] ?? null;
|
|
327
|
+
i += 1;
|
|
328
|
+
collectingFiles = false;
|
|
329
|
+
} else if (a === '--quiet') {
|
|
330
|
+
quiet = true;
|
|
331
|
+
collectingFiles = false;
|
|
332
|
+
} else if (a === '--files') {
|
|
333
|
+
collectingFiles = true;
|
|
334
|
+
filesFlagSeen = true;
|
|
335
|
+
} else if (collectingFiles && a !== undefined) {
|
|
336
|
+
files.push(a);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
let changed: string[];
|
|
341
|
+
if (filesFlagSeen) {
|
|
342
|
+
changed = files;
|
|
343
|
+
} else {
|
|
344
|
+
const fromGit = gitChangedFiles(resolveBaseRef(baseRef, root), root);
|
|
345
|
+
if (fromGit === null) {
|
|
346
|
+
process.stderr.write('❌ check_platform_anchor: git diff failed\n');
|
|
347
|
+
return 3;
|
|
348
|
+
}
|
|
349
|
+
changed = fromGit;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
const repo = resolveRepo(repoArg, root);
|
|
353
|
+
if (repo === null) {
|
|
354
|
+
process.stderr.write(
|
|
355
|
+
'❌ check_platform_anchor: could not resolve the repository from `origin`; ' +
|
|
356
|
+
'pass --repo OWNER/NAME\n',
|
|
357
|
+
);
|
|
358
|
+
return 3;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
let policyText: string | null;
|
|
362
|
+
try {
|
|
363
|
+
policyText = fs.readFileSync(path.join(policyRoot, POLICY_PATH), 'utf8');
|
|
364
|
+
} catch {
|
|
365
|
+
policyText = null;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const result = evaluateGate(changed, policyText, source, repo);
|
|
369
|
+
|
|
370
|
+
reportScanned({
|
|
371
|
+
gate: 'check_platform_anchor',
|
|
372
|
+
scanned: result.scanned,
|
|
373
|
+
units: 'changed path(s)',
|
|
374
|
+
roots: ['<the diff against the base ref>'],
|
|
375
|
+
allowEmpty:
|
|
376
|
+
'EMPTY_VALID: the corpus is one diff. A commit range that changed nothing carries no ' +
|
|
377
|
+
'gated surface, so there is no platform claim to anchor — the gate has read ' +
|
|
378
|
+
'everything there was.',
|
|
379
|
+
});
|
|
380
|
+
if (!quiet || result.exitCode !== 0) {
|
|
381
|
+
for (const l of result.lines) {
|
|
382
|
+
process.stdout.write(`${l}\n`);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return result.exitCode;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
|
|
389
|
+
process.exit(main());
|
|
390
|
+
}
|