@event4u/agent-config 14.23.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 +198 -0
- 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 +1 -1
- 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 +1 -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 +1 -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 +2 -2
- 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/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-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/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 +11 -5
- 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-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
- package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -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-KCNTUSPI.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 +4 -4
- 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 +1 -1
- 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 +22 -75
- 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 +8607 -8930
- package/dist/install/install.mjs +35 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1433 -1342
- 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/condense.js +2 -5
- package/dist/server/io/yamlIO.js +125 -17
- package/dist/server/schemas/settings.js +18 -4
- package/dist/shared/settingsSurface.js +6 -1
- package/docs/contracts/settings-classes.md +18 -9
- 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/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/package.json +7 -3
- package/src/config/agent-settings.template.yml +55 -8
- package/src/config/ci-local-parity.yml +34 -0
- package/src/config/continuity-surface.json +4 -32
- 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 +1 -1
- package/src/config/host-injection-effect.json +2 -2
- package/src/config/pack-size-budget.json +55 -4
- 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/rule-stub-ceilings.json +16 -9
- package/src/scripts/_cli/cmd_settings_get.ts +22 -7
- 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_writer.ts +72 -13
- 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/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/security_lint.ts +23 -2
- package/src/scripts/_lib/self_repair.ts +21 -0
- package/src/scripts/_lib/session_index_trust.ts +42 -1
- package/src/scripts/_lib/standing_bound_ratchet.ts +103 -37
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
- package/src/scripts/autonomy_friction_traffic.ts +379 -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 +292 -4
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/code_graph/cli.ts +6 -0
- package/src/scripts/condense.ts +2 -6
- package/src/scripts/generate_host_cost_table.ts +354 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +35 -27
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/session_eol_hook.ts +68 -154
- 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 +41 -401
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/session_memory_index.ts +5 -0
- package/src/scripts/sync_agent_settings.ts +270 -10
- package/src/server/io/yamlIO.ts +127 -17
- package/src/server/schemas/settings.ts +25 -5
- package/src/shared/settingsSurface.ts +13 -2
- package/src/templates/compact-instructions.md +8 -3
- package/dist/agent-src/commands/chat-history/import.md +0 -170
- package/dist/agent-src/commands/chat-history.md +0 -63
|
@@ -45,6 +45,7 @@ import * as path from 'node:path';
|
|
|
45
45
|
import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
|
|
46
46
|
import { censusClaudeMdHierarchy, censusRuleDir, censusSkillsCatalog } from './preamble_byte_census.js';
|
|
47
47
|
import { PREFIX_STABLE_SURFACES, prefixStableRoots } from './_lib/prefix_stable_surfaces.js';
|
|
48
|
+
import { HOST_SURFACES } from './_lib/host_projection_reach.js';
|
|
48
49
|
import { attributeGrowth, buildLedger, renderAttribution } from './_lib/asset_delivery_ledger.js';
|
|
49
50
|
import { resolveBaseRef } from './_lib/ratchet_base_ref.js';
|
|
50
51
|
import {
|
|
@@ -149,6 +150,174 @@ export function measureDeterministicPayload(
|
|
|
149
150
|
];
|
|
150
151
|
}
|
|
151
152
|
|
|
153
|
+
/**
|
|
154
|
+
* THE HOST READING — additive, and deliberately not the ratchet's surface.
|
|
155
|
+
*
|
|
156
|
+
* `measureDeterministicPayload` above measures `dist/agent-src/rules`: the
|
|
157
|
+
* projection SOURCE. That is the right surface for the shrink-only ratchet,
|
|
158
|
+
* because the source is what every host tree is written FROM and what a pull
|
|
159
|
+
* request actually edits. It is the wrong surface for one question: how many
|
|
160
|
+
* standing tokens does a session on host X start with? Under a per-host
|
|
161
|
+
* `delivery` projection the two answers diverge by design — measured 2026-09-07,
|
|
162
|
+
* `.claude/rules` went 99,598 tok to 24,166 tok while the source stayed at
|
|
163
|
+
* 138,200 either side of the flip.
|
|
164
|
+
*
|
|
165
|
+
* So this adds a SECOND reading and changes nothing about the first. AI council
|
|
166
|
+
* of 2026-09-09 (2/2 present, converged on option 1A):
|
|
167
|
+
*
|
|
168
|
+
* - the no-argument source measurement, the blocking CI invocation, the
|
|
169
|
+
* `task ci` invocation and the base-ref ratchet are untouched, so no
|
|
170
|
+
* existing baseline or history entry is reinterpreted;
|
|
171
|
+
* - the host reading is reported alongside and NEVER changes the exit code —
|
|
172
|
+
* an informational census, not a second gate.
|
|
173
|
+
*
|
|
174
|
+
* Both seats were explicit that the host id must resolve through the existing
|
|
175
|
+
* projection registry rather than a path map invented here, which is why the
|
|
176
|
+
* roots come from `HOST_SURFACES` in `_lib/host_projection_reach.ts` — the same
|
|
177
|
+
* committed constant `check_host_projection_reach` walks.
|
|
178
|
+
*/
|
|
179
|
+
export interface HostPayload {
|
|
180
|
+
/** The host id as given, or `null` when a raw rules-dir override was used. */
|
|
181
|
+
host: string | null;
|
|
182
|
+
/** Repo-relative rules root actually measured. */
|
|
183
|
+
rules_path: string;
|
|
184
|
+
buckets: Array<{ name: string; tokens: number; files: number }>;
|
|
185
|
+
total: number;
|
|
186
|
+
/**
|
|
187
|
+
* Rule files in the host tree, against rule files in the projection source.
|
|
188
|
+
*
|
|
189
|
+
* A maintainer checkout is NOT a consumer install and its host tree is
|
|
190
|
+
* routinely smaller for reasons that have nothing to do with a projection
|
|
191
|
+
* mode: the installer deduplicates a project rule against the same rule
|
|
192
|
+
* already present at user scope, and a dev tree may hold a partial
|
|
193
|
+
* projection. Measured in this repository 2026-09-09: 13 files under
|
|
194
|
+
* `.claude/rules` against 119 in `dist/agent-src/rules`.
|
|
195
|
+
*
|
|
196
|
+
* A bare token total cannot tell a genuine saving from a tree that was never
|
|
197
|
+
* fully written, and those two send a reader to completely different places.
|
|
198
|
+
* So the counts travel with the number, and `complete` is false whenever the
|
|
199
|
+
* host tree holds fewer rule files than the source.
|
|
200
|
+
*/
|
|
201
|
+
completeness: { host_rule_files: number; source_rule_files: number; complete: boolean };
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Every host id this reading accepts, in registry order. */
|
|
205
|
+
export function hostPayloadIds(): string[] {
|
|
206
|
+
return HOST_SURFACES.map((h) => h.id);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Split a host declared projections into the standing-payload buckets.
|
|
211
|
+
*
|
|
212
|
+
* Classification is derived from the registry rather than restated: a projection
|
|
213
|
+
* ending in `/skills` is the skills catalogue, one ending in `/commands` is
|
|
214
|
+
* EXCLUDED because a command is invoked rather than standing, and whatever
|
|
215
|
+
* remains is the rules surface — a directory on the per-rule hosts, a single
|
|
216
|
+
* `.md` file on the single-surface hosts, which is also that host root
|
|
217
|
+
* instruction file.
|
|
218
|
+
*
|
|
219
|
+
* The one conditional is `claude-code`, and it is a conditional rather than a
|
|
220
|
+
* map row: the `CLAUDE.md` / `CLAUDE.local.md` pair is already declared in
|
|
221
|
+
* `PREFIX_STABLE_SURFACES` as `project-claude-md` and `project-claude-local-md`,
|
|
222
|
+
* it is that host root instruction file, and no other host reads it.
|
|
223
|
+
*/
|
|
224
|
+
export function hostPayloadRoots(hostId: string): {
|
|
225
|
+
rules: string;
|
|
226
|
+
skills: string | null;
|
|
227
|
+
claudeMd: boolean;
|
|
228
|
+
} {
|
|
229
|
+
const surface = HOST_SURFACES.find((h) => h.id === hostId);
|
|
230
|
+
if (surface === undefined) {
|
|
231
|
+
throw new Error(
|
|
232
|
+
`unknown host '${hostId}' — known ids: ${hostPayloadIds().join(', ')}. ` +
|
|
233
|
+
'The set is HOST_SURFACES in _lib/host_projection_reach.ts; a host absent there has no ' +
|
|
234
|
+
'declared projection for this reading to measure.',
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
const skills = surface.projections.find((r) => r.endsWith('/skills')) ?? null;
|
|
238
|
+
const rules = surface.projections.find(
|
|
239
|
+
(r) => !r.endsWith('/skills') && !r.endsWith('/commands'),
|
|
240
|
+
);
|
|
241
|
+
if (rules === undefined) {
|
|
242
|
+
throw new Error(
|
|
243
|
+
`host '${hostId}' declares no rules-bearing projection in HOST_SURFACES ` +
|
|
244
|
+
`(projections: ${surface.projections.join(', ') || 'none'}) — nothing to measure`,
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
return { rules, skills, claudeMd: hostId === 'claude-code' };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** Char count for one root, whether it is a rules directory or a single file. */
|
|
251
|
+
function charsAtRoot(abs: string): { chars: number; files: number } {
|
|
252
|
+
let st: fs.Stats;
|
|
253
|
+
try {
|
|
254
|
+
st = fs.statSync(abs);
|
|
255
|
+
} catch {
|
|
256
|
+
return { chars: 0, files: 0 };
|
|
257
|
+
}
|
|
258
|
+
if (st.isFile()) return { chars: fs.readFileSync(abs, 'utf-8').length, files: 1 };
|
|
259
|
+
const c = censusRuleDir(abs);
|
|
260
|
+
return { chars: c.chars, files: c.files };
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Measure the standing payload of the tree ONE host loads.
|
|
265
|
+
*
|
|
266
|
+
* `rulesDirOverride` is the low-level escape for a tree no host id names — a
|
|
267
|
+
* fixture, a consumer-shaped root, a comparison against a never-flipped tree.
|
|
268
|
+
* It is mutually exclusive with `host` at the CLI layer.
|
|
269
|
+
*/
|
|
270
|
+
export function measureHostPayload(
|
|
271
|
+
repoRoot: string,
|
|
272
|
+
opts: { host?: string; rulesDirOverride?: string },
|
|
273
|
+
): HostPayload {
|
|
274
|
+
const roots = opts.rulesDirOverride === undefined ? hostPayloadRoots(opts.host ?? '') : null;
|
|
275
|
+
const rulesRel = opts.rulesDirOverride ?? (roots as { rules: string }).rules;
|
|
276
|
+
const rulesAbs = path.isAbsolute(rulesRel) ? rulesRel : path.join(repoRoot, rulesRel);
|
|
277
|
+
if (!fs.existsSync(rulesAbs)) {
|
|
278
|
+
throw new Error(
|
|
279
|
+
`rules root '${rulesRel}' does not exist under ${repoRoot} — a host tree that was never ` +
|
|
280
|
+
'projected reads as zero tokens, which is indistinguishable from a tiny one, so this ' +
|
|
281
|
+
'refuses rather than reporting a green nothing',
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
const buckets: Array<{ name: string; tokens: number; files: number }> = [];
|
|
285
|
+
const rulesCensus = charsAtRoot(rulesAbs);
|
|
286
|
+
buckets.push({
|
|
287
|
+
name: `rules (${rulesRel})`,
|
|
288
|
+
tokens: tokens(rulesCensus.chars),
|
|
289
|
+
files: rulesCensus.files,
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
if (roots !== null && roots.skills !== null) {
|
|
293
|
+
const sk = censusSkillsCatalog(path.join(repoRoot, roots.skills));
|
|
294
|
+
buckets.push({
|
|
295
|
+
name: `skills catalog (${roots.skills})`,
|
|
296
|
+
tokens: tokens(sk.chars),
|
|
297
|
+
files: sk.skills,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
if (roots !== null && roots.claudeMd) {
|
|
301
|
+
const md = censusClaudeMdHierarchy(repoRoot, path.join(repoRoot, '.no-such-home'));
|
|
302
|
+
const chars = md.project_claude_md_chars + md.project_claude_local_md_chars;
|
|
303
|
+
const files =
|
|
304
|
+
(md.project_claude_md_present ? 1 : 0) + (md.project_claude_local_md_present ? 1 : 0);
|
|
305
|
+
buckets.push({ name: 'CLAUDE.md hierarchy (project only)', tokens: tokens(chars), files });
|
|
306
|
+
}
|
|
307
|
+
const sourceRules = censusRuleDir(path.join(repoRoot, surfaceRoot('project-scope-rules')));
|
|
308
|
+
return {
|
|
309
|
+
host: opts.rulesDirOverride === undefined ? (opts.host ?? null) : null,
|
|
310
|
+
rules_path: rulesRel,
|
|
311
|
+
buckets,
|
|
312
|
+
total: buckets.reduce((n, b) => n + b.tokens, 0),
|
|
313
|
+
completeness: {
|
|
314
|
+
host_rule_files: rulesCensus.files,
|
|
315
|
+
source_rule_files: sourceRules.files,
|
|
316
|
+
complete: rulesCensus.files >= sourceRules.files,
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
152
321
|
/**
|
|
153
322
|
* A caller-supplied ceiling, and the one direction it may go.
|
|
154
323
|
*
|
|
@@ -201,6 +370,8 @@ export interface DecideOptions {
|
|
|
201
370
|
git?: GitRunner;
|
|
202
371
|
/** Test seam: pin the base ref instead of resolving it. `null` = none resolved. */
|
|
203
372
|
baseRef?: string | null;
|
|
373
|
+
/** Refuse instead of skipping when the shrink-only bound cannot be verified. */
|
|
374
|
+
requireBase?: boolean;
|
|
204
375
|
}
|
|
205
376
|
|
|
206
377
|
export function decide(opts: DecideOptions = {}): Decision {
|
|
@@ -215,6 +386,7 @@ export function decide(opts: DecideOptions = {}): Decision {
|
|
|
215
386
|
baseRef,
|
|
216
387
|
git,
|
|
217
388
|
headGraceCeiling: opts.overrideCeiling ?? budget.grace_ceiling ?? 0,
|
|
389
|
+
requireBase: opts.requireBase === true,
|
|
218
390
|
});
|
|
219
391
|
return { verdict, bounds, ok: bounds.ok && verdict.withinBudget };
|
|
220
392
|
}
|
|
@@ -280,6 +452,13 @@ function attributeGrowthAgainstBase(): string[] | null {
|
|
|
280
452
|
}
|
|
281
453
|
}
|
|
282
454
|
|
|
455
|
+
/** The stderr header for a refused bound. Exported so both refusals are testable. */
|
|
456
|
+
export function boundsRefusalHeader(b: BoundsRatchetVerdict): string {
|
|
457
|
+
return b.verified
|
|
458
|
+
? '❌ the standing-payload ceiling rose in this change:\n'
|
|
459
|
+
: '❌ the standing-payload ceiling could not be VERIFIED, and this run requires it:\n';
|
|
460
|
+
}
|
|
461
|
+
|
|
283
462
|
/**
|
|
284
463
|
* The bound check, rendered for a human — on BOTH paths, green and red.
|
|
285
464
|
*
|
|
@@ -287,11 +466,24 @@ function attributeGrowthAgainstBase(): string[] | null {
|
|
|
287
466
|
* already load-bearing. Printing the compared ref and the earlier bound on the
|
|
288
467
|
* passing path is also the only way a reader can tell "verified and unchanged"
|
|
289
468
|
* from "skipped because no base ref resolved", which are different facts.
|
|
469
|
+
*
|
|
470
|
+
* THREE STATES, not two, and the third is why this was rewritten. An
|
|
471
|
+
* unverifiable bound and a risen one are both `ok: false` and need opposite
|
|
472
|
+
* actions — repair the checkout, or lower the addition. The first cut of the
|
|
473
|
+
* enforcing posture rendered both as `ROSE`, which a completion review caught:
|
|
474
|
+
* it sends an operator to shrink a rule over a fetch problem. `SKIPPED` is
|
|
475
|
+
* reserved for the ADVISORY skip, where nothing was refused at all.
|
|
290
476
|
*/
|
|
291
|
-
function renderBounds(b: BoundsRatchetVerdict): string {
|
|
292
|
-
if (b.note !== null) {
|
|
477
|
+
export function renderBounds(b: BoundsRatchetVerdict): string {
|
|
478
|
+
if (b.note !== null && b.ok) {
|
|
293
479
|
return ` ${'grace ceiling ratchet'.padEnd(38)} ${'SKIPPED'.padStart(8)} — ${b.note}\n`;
|
|
294
480
|
}
|
|
481
|
+
if (!b.verified) {
|
|
482
|
+
return (
|
|
483
|
+
` ${'grace ceiling ratchet'.padEnd(38)} ${'UNVERIFIED'.padStart(8)} — ` +
|
|
484
|
+
`${b.note ?? 'the bound could not be read'} (this run requires it)\n`
|
|
485
|
+
);
|
|
486
|
+
}
|
|
295
487
|
const base = b.baseGraceCeiling === null ? 'n/a' : String(b.baseGraceCeiling);
|
|
296
488
|
const state = b.ok ? 'ok' : 'ROSE';
|
|
297
489
|
return (
|
|
@@ -308,9 +500,64 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
308
500
|
// tighter-than-design value is IGNORED rather than honoured — see `evaluate`.
|
|
309
501
|
const ci = argv.indexOf('--ceiling');
|
|
310
502
|
const override = ci !== -1 && argv[ci + 1] !== undefined ? Number(argv[ci + 1]) : undefined;
|
|
503
|
+
|
|
504
|
+
// `--require-base`: refuse instead of skipping when the shrink-only bound
|
|
505
|
+
// cannot be verified. An AI council (2/2, 2026-09-10) made this blocking
|
|
506
|
+
// before the ceiling may be measured at the base ref rather than stored,
|
|
507
|
+
// because an unreadable base costs a comparison today and would grant an
|
|
508
|
+
// unbounded budget there. Opt-in rather than the default, and rather than
|
|
509
|
+
// derived from `GITHUB_ACTIONS`: a shallow clone, a first commit and a
|
|
510
|
+
// detached build all legitimately have no base, and a gate that reds on a
|
|
511
|
+
// developer's machine gets switched off.
|
|
512
|
+
const requireBase = argv.includes('--require-base');
|
|
513
|
+
|
|
514
|
+
// `--host <id>` / `--project-rules-dir <path>`: the additive host reading
|
|
515
|
+
// (AI council 2026-09-09, option 1A). Mutually exclusive on purpose — a call
|
|
516
|
+
// passing both is asking two different questions and would silently get one
|
|
517
|
+
// answer, so it is a usage error rather than a precedence rule nobody reads.
|
|
518
|
+
const hi = argv.indexOf('--host');
|
|
519
|
+
const hostArg = hi !== -1 ? argv[hi + 1] : undefined;
|
|
520
|
+
const pi = argv.indexOf('--project-rules-dir');
|
|
521
|
+
const rulesDirArg = pi !== -1 ? argv[pi + 1] : undefined;
|
|
522
|
+
if (hostArg !== undefined && rulesDirArg !== undefined) {
|
|
523
|
+
process.stderr.write(
|
|
524
|
+
'❌ preamble-payload budget: --host and --project-rules-dir are mutually exclusive. ' +
|
|
525
|
+
'Pass a host id to measure a declared projection, or a path to measure an ' +
|
|
526
|
+
'undeclared tree — never both.\n',
|
|
527
|
+
);
|
|
528
|
+
return 2;
|
|
529
|
+
}
|
|
530
|
+
if (hi !== -1 && (hostArg === undefined || hostArg.startsWith('--'))) {
|
|
531
|
+
process.stderr.write(
|
|
532
|
+
`❌ preamble-payload budget: --host needs an id — one of ${hostPayloadIds().join(', ')}.\n`,
|
|
533
|
+
);
|
|
534
|
+
return 2;
|
|
535
|
+
}
|
|
536
|
+
if (pi !== -1 && (rulesDirArg === undefined || rulesDirArg.startsWith('--'))) {
|
|
537
|
+
process.stderr.write('❌ preamble-payload budget: --project-rules-dir needs a path.\n');
|
|
538
|
+
return 2;
|
|
539
|
+
}
|
|
540
|
+
let host: HostPayload | null = null;
|
|
541
|
+
if (hostArg !== undefined || rulesDirArg !== undefined) {
|
|
542
|
+
try {
|
|
543
|
+
host = measureHostPayload(
|
|
544
|
+
REPO_ROOT,
|
|
545
|
+
hostArg !== undefined
|
|
546
|
+
? { host: hostArg }
|
|
547
|
+
: { rulesDirOverride: rulesDirArg as string },
|
|
548
|
+
);
|
|
549
|
+
} catch (err) {
|
|
550
|
+
process.stderr.write(`❌ preamble-payload budget: ${(err as Error).message}\n`);
|
|
551
|
+
return 2;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
311
555
|
let decision: Decision;
|
|
312
556
|
try {
|
|
313
|
-
decision = decide(
|
|
557
|
+
decision = decide({
|
|
558
|
+
...(override === undefined ? {} : { overrideCeiling: override }),
|
|
559
|
+
requireBase,
|
|
560
|
+
});
|
|
314
561
|
} catch (err) {
|
|
315
562
|
process.stderr.write(`❌ preamble-payload budget: ${(err as Error).message}\n`);
|
|
316
563
|
return 2;
|
|
@@ -341,6 +588,19 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
341
588
|
JSON.stringify(
|
|
342
589
|
{
|
|
343
590
|
...verdict,
|
|
591
|
+
// `source_corpus` and `host_payload` are structurally
|
|
592
|
+
// separate, and both seats of the 2026-09-09 council asked
|
|
593
|
+
// for exactly that: until the two are named apart, every
|
|
594
|
+
// ceiling discussion risks comparing unlike quantities. The
|
|
595
|
+
// legacy top-level fields stay so no existing reader breaks.
|
|
596
|
+
measurement_scope: host === null ? 'source-corpus' : 'source-corpus+host-payload',
|
|
597
|
+
source_corpus: {
|
|
598
|
+
measured: verdict.measured,
|
|
599
|
+
baseline: verdict.baseline,
|
|
600
|
+
ceiling: verdict.ceiling,
|
|
601
|
+
buckets: verdict.buckets,
|
|
602
|
+
},
|
|
603
|
+
host_payload: host,
|
|
344
604
|
ok: decision.ok,
|
|
345
605
|
bound_ratchet: {
|
|
346
606
|
ok: decision.bounds.ok,
|
|
@@ -368,13 +628,41 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
368
628
|
);
|
|
369
629
|
process.stdout.write(renderBounds(decision.bounds));
|
|
370
630
|
|
|
631
|
+
// The host reading prints AFTER the source verdict and never touches the
|
|
632
|
+
// exit code below. The label says which surface each number describes,
|
|
633
|
+
// because the whole defect this reading fixes was two different quantities
|
|
634
|
+
// sharing one name.
|
|
635
|
+
if (host !== null) {
|
|
636
|
+
const label = host.host === null ? host.rules_path : host.host;
|
|
637
|
+
process.stdout.write(`\n host payload — ${label} (informational, not gated)\n`);
|
|
638
|
+
for (const b of host.buckets) {
|
|
639
|
+
process.stdout.write(` ${('· ' + b.name).padEnd(38)} ${String(b.tokens).padStart(8)} tok\n`);
|
|
640
|
+
}
|
|
641
|
+
process.stdout.write(` ${'· host total'.padEnd(38)} ${String(host.total).padStart(8)} tok\n`);
|
|
642
|
+
const c = host.completeness;
|
|
643
|
+
if (!c.complete) {
|
|
644
|
+
process.stdout.write(
|
|
645
|
+
` ${'· PARTIAL TREE'.padEnd(38)} ${c.host_rule_files} rule file(s) vs ` +
|
|
646
|
+
`${c.source_rule_files} in the source.\n` +
|
|
647
|
+
' This total is NOT a consumer reading. A maintainer checkout deduplicates a\n' +
|
|
648
|
+
' project rule against the same rule at user scope, and a dev tree may hold a\n' +
|
|
649
|
+
' partial projection — both shrink this number for reasons unrelated to the\n' +
|
|
650
|
+
' projection mode. Measure a clean consumer-shaped root with\n' +
|
|
651
|
+
' --project-rules-dir <path> to get the number a consumer would load.\n',
|
|
652
|
+
);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
|
|
371
656
|
// The bound is checked BEFORE the size question and independently of it. A
|
|
372
657
|
// change that lifts its own ceiling has already defeated the gate, and
|
|
373
658
|
// reporting that as "within budget" would be the config-weakening move
|
|
374
659
|
// wearing a green checkmark.
|
|
375
660
|
if (!decision.bounds.ok) {
|
|
661
|
+
// Two refusals, two different fixes. `verified: false` means the bound
|
|
662
|
+
// could not be READ under `--require-base`; the header must not send the
|
|
663
|
+
// reader to lower a ceiling that never moved.
|
|
376
664
|
process.stderr.write(
|
|
377
|
-
|
|
665
|
+
boundsRefusalHeader(decision.bounds) +
|
|
378
666
|
decision.bounds.violations.map((v) => ` · ${v}\n`).join(''),
|
|
379
667
|
);
|
|
380
668
|
return 1;
|