@event4u/agent-config 9.9.0 → 9.11.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +212 -194
- package/README.md +13 -16
- package/agents/templates/.ai-council.yml.example +481 -0
- package/agents/templates/.ai-video.xml.example +247 -0
- package/dist/agent-src/commands/agent-status.md +12 -11
- package/dist/agent-src/commands/agents/user/accept.md +115 -30
- package/dist/agent-src/commands/agents/user/delete.md +147 -0
- package/dist/agent-src/commands/agents/user/review.md +65 -28
- package/dist/agent-src/commands/agents/user/show.md +82 -29
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +16 -3
- package/dist/agent-src/commands/check-current-md.md +0 -10
- package/dist/agent-src/commands/condense.md +28 -97
- package/dist/agent-src/commands/cost/report.md +7 -0
- package/dist/agent-src/commands/fix/portability.md +0 -8
- package/dist/agent-src/commands/fix/refs.md +0 -8
- package/dist/agent-src/commands/humanize.md +2 -2
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/memory/load.md +11 -0
- package/dist/agent-src/commands/optimize/skills.md +1 -1
- package/dist/agent-src/commands/pr/create.md +4 -4
- package/dist/agent-src/commands/profile/show.md +3 -3
- package/dist/agent-src/commands/rule-compliance-audit.md +5 -4
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tdd.md +21 -0
- package/dist/agent-src/commands/team/delegate.md +2 -2
- package/dist/agent-src/commands/team-knowledge/bootstrap.md +9 -8
- package/dist/agent-src/commands/team-knowledge/consolidate.md +8 -7
- package/dist/agent-src/commands/team.md +4 -1
- package/dist/agent-src/commands/upstream-contribute.md +0 -1
- package/dist/agent-src/contexts/authority/commit-mechanics.md +7 -0
- package/dist/agent-src/contexts/authority/destructive-mechanics.md +16 -0
- package/dist/agent-src/contexts/authority/scope-mechanics.md +61 -0
- package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +20 -18
- package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +9 -10
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +11 -0
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +26 -15
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +3 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +67 -37
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-examples.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +7 -6
- package/dist/agent-src/contexts/execution/evidence-discipline.md +92 -77
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +22 -21
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +24 -0
- package/dist/agent-src/contexts/execution/project-intelligence.md +122 -103
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +23 -21
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +5 -5
- package/dist/agent-src/contexts/execution/subagent-routing.md +11 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +13 -13
- package/dist/agent-src/contexts/execution/subagent-steering.md +36 -34
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +189 -0
- package/dist/agent-src/contexts/execution/verification-mechanics.md +9 -0
- package/dist/agent-src/contexts/model-recommendations.md +3 -2
- package/dist/agent-src/contexts/subagent-configuration.md +3 -3
- package/dist/agent-src/ghostwriter/README.md +2 -2
- package/dist/agent-src/packs/README.md +1 -1
- package/dist/agent-src/personas/README.md +5 -5
- package/dist/agent-src/personas/_template-specialist/persona.md +3 -3
- package/dist/agent-src/personas/backend-architect.md +24 -23
- package/dist/agent-src/personas/eloquent-tamer.md +30 -30
- package/dist/agent-src/personas/frontend-engineer.md +30 -30
- package/dist/agent-src/personas/product-owner.md +41 -38
- package/dist/agent-src/personas/qa.md +13 -13
- package/dist/agent-src/personas/security-engineer.md +22 -22
- package/dist/agent-src/presets/README.md +3 -3
- package/dist/agent-src/profiles/README.md +3 -3
- package/dist/agent-src/rules/active-remediation.md +2 -2
- package/dist/agent-src/rules/artifact-engagement-recording.md +4 -4
- package/dist/agent-src/rules/ask-when-uncertain.md +0 -4
- package/dist/agent-src/rules/augment-edit-discipline.md +1 -1
- package/dist/agent-src/rules/broken-access-control.md +4 -4
- package/dist/agent-src/rules/code-comment-discipline.md +1 -1
- package/dist/agent-src/rules/code-provenance.md +2 -2
- package/dist/agent-src/rules/commit-policy.md +4 -9
- package/dist/agent-src/rules/communication-through-line.md +5 -5
- package/dist/agent-src/rules/decision-revisit-gate.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +1 -1
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +1 -1
- package/dist/agent-src/rules/external-code-graph-interop.md +1 -1
- package/dist/agent-src/rules/fast-path-marker-visibility.md +43 -7
- package/dist/agent-src/rules/finance-safety-floor.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -3
- package/dist/agent-src/rules/history-discipline.md +1 -1
- package/dist/agent-src/rules/legal-safety-floor.md +1 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +5 -5
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +10 -8
- package/dist/agent-src/rules/media-governance-routing.md +13 -13
- package/dist/agent-src/rules/media-sync-ground-truth.md +29 -11
- package/dist/agent-src/rules/no-cheap-questions.md +7 -7
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +29 -18
- package/dist/agent-src/rules/non-destructive-by-default.md +5 -23
- package/dist/agent-src/rules/onboarding-gate.md +14 -4
- package/dist/agent-src/rules/persona-governance.md +2 -2
- package/dist/agent-src/rules/prefer-enums-over-literals.md +9 -9
- package/dist/agent-src/rules/preservation-guard.md +10 -2
- package/dist/agent-src/rules/question-not-instruction.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +6 -6
- package/dist/agent-src/rules/rule-type-governance.md +1 -1
- package/dist/agent-src/rules/scale-discipline.md +1 -1
- package/dist/agent-src/rules/scope-control.md +1 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
- package/dist/agent-src/rules/security-sensitive-stop.md +17 -11
- package/dist/agent-src/rules/senior-engineering-discipline.md +17 -17
- package/dist/agent-src/rules/session-canary.md +1 -1
- package/dist/agent-src/rules/skill-quality.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +21 -19
- package/dist/agent-src/rules/source-of-truth.md +6 -5
- package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -2
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
- package/dist/agent-src/rules/think-before-action.md +5 -5
- package/dist/agent-src/rules/token-budget-discipline.md +5 -3
- package/dist/agent-src/rules/token-efficiency.md +2 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +4 -4
- package/dist/agent-src/rules/user-interaction.md +12 -0
- package/dist/agent-src/rules/verify-before-complete.md +4 -24
- package/dist/agent-src/skills/adversarial-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agent-security-review/SKILL.md +52 -45
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +20 -20
- package/dist/agent-src/skills/ai-council/SKILL.md +185 -128
- package/dist/agent-src/skills/analysis-skill-router/SKILL.md +3 -3
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/artisan-commands/SKILL.md +2 -2
- package/dist/agent-src/skills/async-python-patterns/SKILL.md +8 -7
- package/dist/agent-src/skills/authz-review/SKILL.md +16 -15
- package/dist/agent-src/skills/aws-infrastructure/SKILL.md +5 -5
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +30 -12
- package/dist/agent-src/skills/code-intelligence/SKILL.md +0 -1
- package/dist/agent-src/skills/code-intelligence/evals/triggers.json +52 -0
- package/dist/agent-src/skills/code-review/SKILL.md +6 -6
- package/dist/agent-src/skills/command-routing/SKILL.md +5 -4
- package/dist/agent-src/skills/composer-packages/SKILL.md +2 -2
- package/dist/agent-src/skills/condense-memory/SKILL.md +43 -41
- package/dist/agent-src/skills/context-document/SKILL.md +23 -21
- package/dist/agent-src/skills/copilot-config/SKILL.md +6 -1
- package/dist/agent-src/skills/decision-record/SKILL.md +20 -18
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-review/SKILL.md +15 -14
- package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +28 -25
- package/dist/agent-src/skills/devcontainer/SKILL.md +2 -2
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/docx-authoring/evals/triggers.json +52 -0
- package/dist/agent-src/skills/emit-tickets/SKILL.md +2 -2
- package/dist/agent-src/skills/error-handling-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/evaluate-llm-feature/SKILL.md +0 -1
- package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +52 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +21 -7
- package/dist/agent-src/skills/fe-design/SKILL.md +10 -0
- package/dist/agent-src/skills/feature-planning/SKILL.md +2 -2
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +3 -3
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +13 -13
- package/dist/agent-src/skills/git-workflow/SKILL.md +33 -33
- package/dist/agent-src/skills/grafana/SKILL.md +5 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +83 -66
- package/dist/agent-src/skills/humanizer/data/patterns.md +14 -14
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +4 -4
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +82 -37
- package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +17 -5
- package/dist/agent-src/skills/judge-injection-defense/SKILL.md +63 -25
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -0
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +72 -28
- package/dist/agent-src/skills/laravel-horizon/SKILL.md +5 -0
- package/dist/agent-src/skills/laravel-mail/SKILL.md +5 -4
- package/dist/agent-src/skills/laravel-middleware/SKILL.md +5 -4
- package/dist/agent-src/skills/laravel-notifications/SKILL.md +10 -9
- package/dist/agent-src/skills/laravel-pennant/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-pulse/SKILL.md +9 -8
- package/dist/agent-src/skills/laravel-reverb/SKILL.md +6 -5
- package/dist/agent-src/skills/laravel-scheduling/SKILL.md +6 -1
- package/dist/agent-src/skills/laravel-validation/SKILL.md +12 -0
- package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +7 -7
- package/dist/agent-src/skills/learning-tutor/SKILL.md +44 -43
- package/dist/agent-src/skills/learning-tutor/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-audit/SKILL.md +7 -7
- package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +3 -3
- package/dist/agent-src/skills/license-compliance-credits/SKILL.md +4 -4
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +0 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +69 -64
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -6
- package/dist/agent-src/skills/pdf-tools/evals/triggers.json +52 -0
- package/dist/agent-src/skills/performance-analysis/SKILL.md +7 -3
- package/dist/agent-src/skills/persona-improvement/SKILL.md +0 -2
- package/dist/agent-src/skills/persona-improvement/evals/triggers.json +52 -0
- package/dist/agent-src/skills/php-coder/SKILL.md +10 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +129 -120
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +36 -35
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +45 -41
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +4 -4
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
- package/dist/agent-src/skills/project-analysis-react/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
- package/dist/agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-validator/SKILL.md +39 -39
- package/dist/agent-src/skills/quality-tools/SKILL.md +15 -15
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +55 -19
- package/dist/agent-src/skills/react-shadcn-ui/reference/registry.md +29 -27
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -2
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +25 -25
- package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -5
- package/dist/agent-src/skills/refine-prompt/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +20 -2
- package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +80 -66
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +84 -77
- package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
- package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +52 -0
- package/dist/agent-src/skills/security-audit/SKILL.md +26 -9
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +38 -16
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +14 -11
- package/dist/agent-src/skills/skill-writing/SKILL.md +9 -8
- package/dist/agent-src/skills/song-to-script/SKILL.md +93 -85
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +4 -3
- package/dist/agent-src/skills/standards-from-config/SKILL.md +61 -43
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +22 -8
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +28 -2
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +13 -13
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +22 -21
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
- package/dist/agent-src/skills/technical-specification/SKILL.md +5 -0
- package/dist/agent-src/skills/terraform/SKILL.md +2 -2
- package/dist/agent-src/skills/terragrunt/SKILL.md +8 -8
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +19 -13
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +0 -1
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +9 -9
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -1
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +4 -6
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +67 -61
- package/dist/agent-src/skills/video-director/SKILL.md +7 -7
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +3 -3
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +47 -45
- package/dist/agent-src/templates/contexts/lesson-card.md +2 -2
- package/dist/agent-src/templates/contexts/tenant-boundaries.md +2 -2
- package/dist/agent-src/templates/contexts.md +1 -1
- package/dist/agent-src/templates/features.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +125 -116
- package/dist/agent-src/templates/rule.md +2 -1
- package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/dist/agent-src/templates/scripts/tier_usage_report.ts +2 -2
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +30 -30
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +88 -33
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +22 -2
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +21 -2
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +179 -0
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +155 -4
- package/dist/agent-src/templates/scripts/work_engine/state.ts +21 -4
- package/dist/agent-src/user-types/README.md +8 -8
- package/dist/agent-src/user-types/galabau-field-crew.md +34 -33
- package/dist/agent-src/user-types/metalworking-shop.md +35 -34
- package/dist/agent-src/user-types/truck-driver.md +22 -20
- package/dist/cli/initRouting.js +74 -11
- package/dist/cli/initRouting.js.map +1 -1
- package/dist/cli/main.js +14 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/python/workspace_roles.js +2 -2
- package/dist/cli/python/workspace_roles.js.map +1 -1
- package/dist/cli-delegate/chunk-4SV3XGFA.js +6910 -0
- package/dist/cli-delegate/chunk-736JCWLM.js +1104 -0
- package/dist/cli-delegate/chunk-7DSAMZFU.js +356 -0
- package/dist/cli-delegate/chunk-7HQ52DHU.js +74 -0
- package/dist/cli-delegate/chunk-BJGXZNPM.js +266 -0
- package/dist/cli-delegate/chunk-FTAISGDQ.js +117 -0
- package/dist/cli-delegate/chunk-GME3Q44L.js +82 -0
- package/dist/cli-delegate/chunk-GRRPEPRN.js +336 -0
- package/dist/cli-delegate/chunk-HJ6DAJHR.js +502 -0
- package/dist/cli-delegate/chunk-IR7P7JWA.js +872 -0
- package/dist/cli-delegate/chunk-J55WI3RR.js +47 -0
- package/dist/cli-delegate/chunk-MCJYCQPF.js +35 -0
- package/dist/cli-delegate/chunk-NDJLNC6Q.js +169 -0
- package/dist/cli-delegate/chunk-OMIVVCG2.js +26 -0
- package/dist/cli-delegate/chunk-OY53J6II.js +7336 -0
- package/dist/cli-delegate/chunk-RDGRHAAB.js +259 -0
- package/dist/cli-delegate/chunk-TFG57JJM.js +1969 -0
- package/dist/cli-delegate/chunk-XX6TOPD7.js +715 -0
- package/dist/cli-delegate/chunk-YMFO6FDN.js +10603 -0
- package/dist/cli-delegate/cmd_analyze_session.js +294 -0
- package/dist/cli-delegate/cmd_conformance.js +646 -0
- package/dist/cli-delegate/cmd_converge.js +326 -0
- package/dist/cli-delegate/cmd_doctor.js +144 -0
- package/dist/cli-delegate/cmd_explain.js +2508 -0
- package/dist/cli-delegate/cmd_export.js +296 -0
- package/dist/cli-delegate/cmd_fleet.js +332 -0
- package/dist/cli-delegate/cmd_memory_get.js +3878 -0
- package/dist/cli-delegate/cmd_migrate.js +11 -0
- package/dist/cli-delegate/cmd_preflight.js +270 -0
- package/dist/cli-delegate/cmd_prune.js +444 -0
- package/dist/cli-delegate/cmd_refresh.js +28 -0
- package/dist/cli-delegate/cmd_settings_check.js +574 -0
- package/dist/cli-delegate/cmd_settings_migrate.js +223 -0
- package/dist/cli-delegate/cmd_sync.js +264 -0
- package/dist/cli-delegate/cmd_uninstall.js +656 -0
- package/dist/cli-delegate/cmd_update.js +425 -0
- package/dist/cli-delegate/cmd_upgrade.js +444 -0
- package/dist/cli-delegate/cmd_validate.js +305 -0
- package/dist/cli-delegate/cmd_versions.js +370 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +100 -67
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +16 -10
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +7 -5
- package/dist/hooks/dispatch.js +186 -12
- package/dist/install/emit_host_rules_cli.js +2 -1
- package/dist/install/emit_host_rules_cli.js.map +1 -1
- package/dist/install/install.mjs +418 -378
- package/dist/install/rule_scope.js +5 -1
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/install/toolDetection.js +40 -12
- package/dist/install/toolDetection.js.map +1 -1
- package/dist/install/wizard-plan.js +2 -2
- package/dist/install/wizard-plan.js.map +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +2194 -1003
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/compile_time_toggles.js +48 -0
- package/dist/scripts/_lib/compile_time_toggles.js.map +1 -0
- package/dist/scripts/condense.js +234 -217
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/shared/userMd/utils.js +30 -0
- package/dist/shared/userMd/utils.js.map +1 -1
- package/dist/ui/assets/index-BpSQt5vm.js.map +1 -1
- package/docs/guidelines/agent-infra/api-cost-levers.md +56 -5
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +93 -33
- package/package.json +4 -2
- package/src/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/src/agent-src/templates/scripts/tier_usage_report.ts +2 -2
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +30 -30
- package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +88 -33
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +22 -2
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +21 -2
- package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +179 -0
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +155 -4
- package/src/agent-src/templates/scripts/work_engine/state.ts +21 -4
- package/src/config/agent-settings.template.yml +32 -2
- package/src/config/ci-local-parity.yml +142 -0
- package/src/config/discovery/packs.yml +7 -0
- package/src/config/evaluator-budgets.json +1 -1
- package/src/config/gate-coverage.yml +127 -0
- package/src/config/pack-size-budget.json +27 -0
- package/src/config/preamble-payload-budget.json +44 -0
- package/src/install/emit_host_rules_cli.ts +2 -1
- package/src/install/rule_scope.ts +5 -1
- package/src/install/toolDetection.ts +39 -8
- package/src/install/wizard-plan.ts +2 -2
- package/src/scripts/_cli/cmd_conformance.ts +2 -1
- package/src/scripts/_cli/cmd_converge.ts +2 -1
- package/src/scripts/_cli/cmd_doctor.ts +292 -15
- package/src/scripts/_cli/cmd_export.ts +2 -1
- package/src/scripts/_cli/cmd_fleet.ts +2 -1
- package/src/scripts/_cli/cmd_migrate.ts +2 -1
- package/src/scripts/_cli/cmd_preflight.ts +2 -1
- package/src/scripts/_cli/cmd_refresh.ts +2 -1
- package/src/scripts/_cli/cmd_update.ts +2 -1
- package/src/scripts/_cli/cmd_upgrade.ts +2 -1
- package/src/scripts/_cli/cmd_versions.ts +2 -1
- package/src/scripts/_cli/detection_report.ts +480 -0
- package/src/scripts/_dispatch.bash +52 -14
- package/src/scripts/_lib/agent_user_profile.ts +381 -0
- package/src/scripts/_lib/agents_overlay.ts +9 -0
- package/src/scripts/_lib/anchor_eval.ts +311 -0
- package/src/scripts/_lib/cc_transcript.ts +316 -0
- package/src/scripts/_lib/changelog_eras.ts +103 -9
- package/src/scripts/_lib/compile_time_toggles.ts +79 -0
- package/src/scripts/_lib/confusables.ts +101 -0
- package/src/scripts/_lib/duplicate_scope_census.ts +77 -0
- package/src/scripts/_lib/environment_detector.ts +441 -0
- package/src/scripts/_lib/managed_agents_folder.ts +181 -0
- package/src/scripts/_lib/package_root.ts +72 -0
- package/src/scripts/_lib/payload_hash_drift.ts +126 -0
- package/src/scripts/_lib/preservation_migration.ts +291 -0
- package/src/scripts/_lib/retrieval_sanitize.ts +166 -2
- package/src/scripts/_lib/scan_scope.ts +115 -0
- package/src/scripts/_lib/user_global_memory_audit.ts +187 -0
- package/src/scripts/_lib/user_global_observations.ts +830 -0
- package/src/scripts/_lib/user_global_revocations.ts +110 -0
- package/src/scripts/_lib/user_memory_gate_counters.ts +291 -0
- package/src/scripts/ai_council/blind_review.ts +0 -0
- package/src/scripts/ai_council/budget_guard.ts +90 -11
- package/src/scripts/ai_council/bundler.ts +2 -2
- package/src/scripts/ai_council/clients.ts +59 -3
- package/src/scripts/ai_council/config.ts +53 -7
- package/src/scripts/ai_council/modes.ts +68 -2
- package/src/scripts/ai_council/orchestrator.ts +54 -9
- package/src/scripts/ai_council/transport_resolver.ts +331 -0
- package/src/scripts/ai_team/team_dispatch.ts +17 -6
- package/src/scripts/anchor_eval_falsify.ts +198 -0
- package/src/scripts/anchor_scoring_run.ts +239 -0
- package/src/scripts/annotate_discovery.ts +1 -65
- package/src/scripts/bench_quality_run.ts +168 -4
- package/src/scripts/cache_realization_report.ts +782 -0
- package/src/scripts/check_artefact_count_messaging.ts +5 -1
- package/src/scripts/check_augment_description_cap.ts +15 -4
- package/src/scripts/check_bundle_path_leakage.ts +10 -4
- package/src/scripts/check_ci_local_parity.ts +317 -0
- package/src/scripts/check_condensation.ts +96 -191
- package/src/scripts/check_context_paths.ts +38 -9
- package/src/scripts/check_dependency_floors.ts +153 -0
- package/src/scripts/check_gate_coverage.ts +299 -0
- package/src/scripts/check_iron_law_prominence.ts +22 -1
- package/src/scripts/check_kernel_prefix_stability.ts +0 -0
- package/src/scripts/check_no_new_legacy_path.ts +16 -6
- package/src/scripts/check_no_roadmap_refs.ts +22 -9
- package/src/scripts/check_originality_freshness.ts +167 -0
- package/src/scripts/check_pack_size.ts +188 -0
- package/src/scripts/check_preamble_payload_budget.ts +130 -0
- package/src/scripts/check_proposal.ts +0 -0
- package/src/scripts/check_references.ts +0 -1
- package/src/scripts/check_safety_floor_untouched.ts +171 -24
- package/src/scripts/check_site_links.ts +62 -3
- package/src/scripts/ci_status.ts +0 -0
- package/src/scripts/cluster_near_miss_patterns.ts +0 -0
- package/src/scripts/code_graph/build.ts +0 -0
- package/src/scripts/command_suggester/types.ts +0 -0
- package/src/scripts/compile_router.ts +10 -14
- package/src/scripts/condense.sh +3 -4
- package/src/scripts/condense.ts +247 -228
- package/src/scripts/cost/track.mjs +168 -33
- package/src/scripts/cost_summary.ts +33 -1
- package/src/scripts/council_cli.ts +51 -5
- package/src/scripts/discovery_graph.ts +0 -0
- package/src/scripts/encoding_corpus.ts +500 -0
- package/src/scripts/encoding_corpus_report.ts +216 -0
- package/src/scripts/evaluator_umbrella.sh +34 -1
- package/src/scripts/generate_index.ts +19 -2
- package/src/scripts/install-hooks.sh +2 -2
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_confusables.ts +10 -72
- package/src/scripts/lint_eval_fixture_citations.ts +113 -0
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_hidden_unicode.ts +208 -0
- package/src/scripts/lint_load_context.ts +17 -5
- package/src/scripts/lint_new_skill_gate.ts +9 -3
- package/src/scripts/lint_no_python_twin_rationale.ts +17 -2
- package/src/scripts/lint_originality.ts +1 -1
- package/src/scripts/lint_skill_originality.ts +1 -1
- package/src/scripts/lint_ticket_buildable.ts +1 -1
- package/src/scripts/lint_ui_stack_bundles.ts +170 -0
- package/src/scripts/mcp_server/tools.ts +4 -4
- package/src/scripts/measure_scope_dedup.ts +224 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/mine_session.ts +98 -0
- package/src/scripts/orchestration_payload_hash_drift.ts +145 -0
- package/src/scripts/preamble_byte_census.ts +574 -0
- package/src/scripts/probe_skill_registration.ts +2 -2
- package/src/scripts/redact_hook_capture.ts +13 -0
- package/src/scripts/release.ts +65 -10
- package/src/scripts/router_telemetry.ts +1 -1
- package/src/scripts/second_brain_retrieval.ts +14 -4
- package/src/scripts/skill_linter.ts +5 -0
- package/src/scripts/surface-tiers.yml +2 -0
- package/src/scripts/validate_pack_yaml.ts +0 -0
- package/src/server/schemas/settings.ts +8 -0
- package/src/shared/userMd/utils.ts +31 -0
- package/dist/agent-src/rules/telegraph-speak.md +0 -87
|
@@ -109,18 +109,69 @@ different model.
|
|
|
109
109
|
|
|
110
110
|
## Claude Code note
|
|
111
111
|
|
|
112
|
-
In Claude Code, prompt caching is automatic
|
|
113
|
-
is cheap, so keeping a stable prefix pays off without
|
|
114
|
-
`cache_control`. The session-level hygiene levers are `/clear`
|
|
115
|
-
shed accumulated context, plus subagent delegation for
|
|
116
|
-
never lands in the main context window.
|
|
112
|
+
In Claude Code, prompt caching is automatic for the **main loop** — resending
|
|
113
|
+
the same context prefix is cheap, so keeping a stable prefix pays off without
|
|
114
|
+
any explicit `cache_control`. The session-level hygiene levers are `/clear`
|
|
115
|
+
and `/compact` to shed accumulated context, plus subagent delegation for
|
|
116
|
+
verbose output so it never lands in the main context window.
|
|
117
|
+
|
|
118
|
+
**Subagents and forks pay a different cache economy — verified against host
|
|
119
|
+
version 2.1.220 (2026-07-30), re-check on drift:**
|
|
120
|
+
|
|
121
|
+
- A **named subagent** starts its own conversation with its own system
|
|
122
|
+
prompt and tool set. It builds its own cache from scratch, so its **first
|
|
123
|
+
call has no cache hit** — the entire per-spawn preamble (rules, tools,
|
|
124
|
+
dispatch prompt) is a cold write. Subagents use the **five-minute TTL**
|
|
125
|
+
even on a subscription; there is no per-agent setting to change that (see
|
|
126
|
+
`## Known upstream costs` below).
|
|
127
|
+
- A **fork** inherits the parent's system prompt, tools, and conversation
|
|
128
|
+
history exactly, so its first request **reads the parent's cache** instead
|
|
129
|
+
of writing a fresh one — the only documented mechanism that shares a cache
|
|
130
|
+
across a dispatch boundary. Forking forces background mode, which changes
|
|
131
|
+
the tool set and therefore invalidates the very prefix that motivated the
|
|
132
|
+
fork; weigh that cost before reaching for it — see the fork-vs-subagent
|
|
133
|
+
ordering rule in See also.
|
|
134
|
+
- Either way, the **cold-start preamble is re-written on every spawn** — the
|
|
135
|
+
always-loaded rule set, the tool definitions, and the dispatch prompt are
|
|
136
|
+
not shared across separate subagent instances. Fan-out (many subagents
|
|
137
|
+
from one parent) multiplies this cost by cohort size; see
|
|
138
|
+
`## Known upstream costs` below for the fan-out re-prefill issue this
|
|
139
|
+
package cannot fix.
|
|
140
|
+
|
|
141
|
+
## Known upstream costs
|
|
142
|
+
|
|
143
|
+
Host-controlled behaviour this package has confirmed but cannot change at
|
|
144
|
+
any layer. Each entry carries the host version observed and the command to
|
|
145
|
+
re-verify it — a stale entry degrades into a dated observation, never a
|
|
146
|
+
false promise, when Anthropic changes the behaviour underneath it.
|
|
147
|
+
|
|
148
|
+
| Cost | Observed on | Re-verify |
|
|
149
|
+
|---|---|---|
|
|
150
|
+
| Fan-out (`do-in-parallel`-shaped dispatch) re-prefills the parent-accumulated context **per child** — the waste scales linearly with fan-out width, worst exactly where fan-out is most valuable (anthropics/claude-code#81389, open). No fix at any layer. | Claude Code 2.1.220, 2026-07-30 | `claude --version`; re-check the linked issue for a status change |
|
|
151
|
+
| Host-dispatched subagents are pinned to the **five-minute** cache TTL regardless of subscription tier or any environment variable; `ENABLE_PROMPT_CACHING_1H` does not apply to them. | Claude Code 2.1.220, 2026-07-30 | `claude --version`; re-check the official caching docs for a subagent-TTL setting |
|
|
152
|
+
|
|
153
|
+
Neither entry implies a package-side fix exists or is planned — both are
|
|
154
|
+
request-construction facts inside the host binary, outside this package's
|
|
155
|
+
reach. This package's own scope is measurement and payload size (what it
|
|
156
|
+
authors), never subagent request construction (what the host authors).
|
|
117
157
|
|
|
118
158
|
## See also
|
|
119
159
|
|
|
160
|
+
- [`cache-economy-refusals`](../../../agents/settings/contexts/cache-economy-refusals.md) —
|
|
161
|
+
the measured cache figures behind the Claude Code note above, plus the
|
|
162
|
+
refusals (no interception proxy, no blanket 1h TTL, no cache-hit auto-tuning)
|
|
163
|
+
recorded so they are not rebuilt.
|
|
164
|
+
|
|
120
165
|
- [`model-recommendation.md`](model-recommendation.md) — tier routing (the
|
|
121
166
|
capability band behind lever 3).
|
|
122
167
|
- [`size-and-scope.md`](size-and-scope.md) — token discipline for the artifacts
|
|
123
168
|
that become the cached prefix.
|
|
169
|
+
- [`subagent-orchestration/prompts/README.md`](../../../src/skills/subagent-orchestration/prompts/README.md)
|
|
170
|
+
§ Prompt-cache discipline — sibling-uniformity rules and the
|
|
171
|
+
fork-vs-subagent dispatch ordering that follow from this cache economy.
|
|
172
|
+
- [`docs/contracts/ai-council-config.md`](../../contracts/ai-council-config.md)
|
|
173
|
+
§ `prompt_cache.ttl` — the one surface where this package DOES control a
|
|
174
|
+
cache-control TTL (the council's own Anthropic calls, never host subagents).
|
|
124
175
|
- The Claude Code `claude-api` plugin skill (external, not vendored here) — the
|
|
125
176
|
authoritative, versioned API reference these figures derive from; re-check it
|
|
126
177
|
when Anthropic pricing or the caching/batch surface changes.
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
demo_for: minimal-safe-diff, think-before-action
|
|
3
|
+
layer: pattern-memory
|
|
4
|
+
prose_delta:
|
|
5
|
+
rule_chars_before: 5927
|
|
6
|
+
rule_chars_after: 6903
|
|
7
|
+
measured_at: lint-examples-shape-conformance-pass
|
|
8
|
+
note: "Counts are of THIS demo file, measured with wc -c before and after the pass. The delta is frontmatter plus the Demo / Wrong shape / Right shape / Failure mode / Why it works headings required by lint_examples — no prose was migrated out of a rule and none was removed; every code block is byte-identical."
|
|
9
|
+
---
|
|
10
|
+
|
|
1
11
|
# Simplicity and Goal Discipline — wrong/right demos
|
|
2
12
|
|
|
3
13
|
Recognition surface for [`minimal-safe-diff § Anti-over-engineering`](../../src/rules/minimal-safe-diff.md)
|
|
@@ -7,11 +17,13 @@ execution clause in `think-before-action`. Per council convergence
|
|
|
7
17
|
the violation cannot recognize it, no matter how crisp the checklist question.
|
|
8
18
|
Match your diff against the *right* column before presenting.
|
|
9
19
|
|
|
10
|
-
## 1
|
|
20
|
+
## Demo 1 — Over-abstraction vs. one function
|
|
11
21
|
|
|
12
22
|
**Ask:** "Add a function to calculate a percentage discount."
|
|
13
23
|
|
|
14
|
-
|
|
24
|
+
### Wrong shape
|
|
25
|
+
|
|
26
|
+
Strategy pattern for a single caller (PHP):
|
|
15
27
|
|
|
16
28
|
```php
|
|
17
29
|
interface DiscountStrategy { public function calculate(float $amount): float; }
|
|
@@ -21,7 +33,13 @@ final readonly class DiscountConfig { /* strategy, minPurchase, maxDiscount */ }
|
|
|
21
33
|
final class DiscountCalculator { /* 30+ lines of orchestration */ }
|
|
22
34
|
```
|
|
23
35
|
|
|
24
|
-
**
|
|
36
|
+
**Failure mode:** the wrong version is not "bad code" — it is *premature*
|
|
37
|
+
code: harder to read, more surface to test, and speculative until the
|
|
38
|
+
requirement exists.
|
|
39
|
+
|
|
40
|
+
### Right shape
|
|
41
|
+
|
|
42
|
+
One function until the second discount type is real:
|
|
25
43
|
|
|
26
44
|
```php
|
|
27
45
|
function calculateDiscount(float $amount, float $percent): float
|
|
@@ -30,17 +48,19 @@ function calculateDiscount(float $amount, float $percent): float
|
|
|
30
48
|
}
|
|
31
49
|
```
|
|
32
50
|
|
|
33
|
-
|
|
51
|
+
### Why it works
|
|
52
|
+
|
|
53
|
+
No second caller, no second strategy → no abstraction. When the
|
|
34
54
|
second type genuinely arrives, refactor then (`prefer-enums-over-literals` /
|
|
35
|
-
Strategy sniff test governs that moment).
|
|
36
|
-
code" — it is *premature* code: harder to read, more surface to test, and
|
|
37
|
-
speculative until the requirement exists.
|
|
55
|
+
Strategy sniff test governs that moment).
|
|
38
56
|
|
|
39
|
-
## 2
|
|
57
|
+
## Demo 2 — Speculative features vs. just-what-was-asked
|
|
40
58
|
|
|
41
59
|
**Ask:** "Save user preferences to the database."
|
|
42
60
|
|
|
43
|
-
|
|
61
|
+
### Wrong shape
|
|
62
|
+
|
|
63
|
+
Options nobody requested (TypeScript):
|
|
44
64
|
|
|
45
65
|
```ts
|
|
46
66
|
class PreferenceManager {
|
|
@@ -52,7 +72,13 @@ class PreferenceManager {
|
|
|
52
72
|
}
|
|
53
73
|
```
|
|
54
74
|
|
|
55
|
-
**
|
|
75
|
+
**Failure mode:** every optional parameter with one call site, every
|
|
76
|
+
"flexibility" flag, and every handler for a scenario that cannot occur is
|
|
77
|
+
speculative complexity.
|
|
78
|
+
|
|
79
|
+
### Right shape
|
|
80
|
+
|
|
81
|
+
The ask, nothing else:
|
|
56
82
|
|
|
57
83
|
```ts
|
|
58
84
|
async function savePreferences(db: Db, userId: number, prefs: Prefs) {
|
|
@@ -61,66 +87,94 @@ async function savePreferences(db: Db, userId: number, prefs: Prefs) {
|
|
|
61
87
|
}
|
|
62
88
|
```
|
|
63
89
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
90
|
+
### Why it works
|
|
91
|
+
|
|
92
|
+
Add caching when performance data demands it, validation when bad
|
|
67
93
|
data appears, merging when the requirement lands.
|
|
68
94
|
|
|
69
|
-
## 3
|
|
95
|
+
## Demo 3 — Drive-by refactor vs. surgical diff
|
|
70
96
|
|
|
71
97
|
**Ask:** "Fix the bug where an empty email crashes the validator."
|
|
72
98
|
|
|
73
|
-
|
|
99
|
+
### Wrong shape
|
|
100
|
+
|
|
101
|
+
The fix PLUS improved email regex, new username length checks,
|
|
74
102
|
rewritten comments, and a fresh docstring — four changes, one was asked.
|
|
75
103
|
|
|
76
|
-
**
|
|
104
|
+
**Failure mode:** the "improvements" belong in a follow-up proposed via
|
|
105
|
+
`active-remediation`'s note-and-ask ladder — not smuggled into the bug fix.
|
|
106
|
+
|
|
107
|
+
### Right shape
|
|
108
|
+
|
|
109
|
+
Only the lines that make the empty-email case safe change; every
|
|
77
110
|
other line of the function is byte-identical.
|
|
78
111
|
|
|
79
|
-
|
|
80
|
-
(`minimal-safe-diff`). The "improvements" belong in a follow-up proposed via
|
|
81
|
-
`active-remediation`'s note-and-ask ladder — not smuggled into the bug fix.
|
|
112
|
+
### Why it works
|
|
82
113
|
|
|
83
|
-
|
|
114
|
+
Every changed line must trace to the stated task
|
|
115
|
+
(`minimal-safe-diff`).
|
|
116
|
+
|
|
117
|
+
## Demo 4 — Style drift vs. match-existing-style
|
|
84
118
|
|
|
85
119
|
**Ask:** "Add logging to the upload function."
|
|
86
120
|
|
|
87
|
-
|
|
121
|
+
### Wrong shape
|
|
122
|
+
|
|
123
|
+
The diff adds logging AND flips quote style, adds type hints,
|
|
88
124
|
reshapes the boolean return, reflows whitespace — the reviewer can no longer
|
|
89
125
|
see the logging change.
|
|
90
126
|
|
|
91
|
-
**
|
|
127
|
+
**Failure mode:** a diff that reformats while changing behavior hides the
|
|
128
|
+
behavior change.
|
|
129
|
+
|
|
130
|
+
### Right shape
|
|
131
|
+
|
|
132
|
+
Logger import + three log lines, inserted in the file's existing
|
|
92
133
|
style (its quoting, its spacing, its return pattern), even where you would
|
|
93
134
|
personally write it differently.
|
|
94
135
|
|
|
95
|
-
|
|
96
|
-
A diff that reformats while changing behavior hides the behavior change.
|
|
136
|
+
### Why it works
|
|
97
137
|
|
|
98
|
-
|
|
138
|
+
Style consistency is a repo property, not a per-diff taste decision.
|
|
139
|
+
|
|
140
|
+
## Demo 5 — Own-orphan vs. pre-existing dead code
|
|
99
141
|
|
|
100
142
|
**Ask:** "Replace the legacy formatter call in `processA` with the new one."
|
|
101
143
|
|
|
102
|
-
|
|
144
|
+
### Wrong shape
|
|
145
|
+
|
|
146
|
+
**Too little:** `processA` no longer calls `legacyFormat()`, but the
|
|
103
147
|
now-unused import and the helper it alone referenced stay behind — the diff
|
|
104
148
|
shipped its own litter.
|
|
105
149
|
|
|
106
|
-
**
|
|
150
|
+
**Too much:** while in the file, the agent also deletes
|
|
107
151
|
`oldHelper()`, which `processB` — untouched by this diff — still references
|
|
108
152
|
in another module, or which was already orphaned *before* this task.
|
|
109
153
|
|
|
110
|
-
**
|
|
154
|
+
**Failure mode:** two directions of the same error — the diff shipped its own
|
|
155
|
+
litter (too little), or it deleted code that untouched files still reference,
|
|
156
|
+
or that was already orphaned before this task (too much).
|
|
157
|
+
|
|
158
|
+
### Right shape
|
|
159
|
+
|
|
160
|
+
Remove exactly the imports/variables/functions whose **last
|
|
111
161
|
reference disappeared in a file this diff touched**; anything still
|
|
112
162
|
referenced from untouched files — or orphaned before the task — is
|
|
113
163
|
pre-existing debt: mention it, don't delete it.
|
|
114
164
|
|
|
115
|
-
|
|
165
|
+
### Why it works
|
|
166
|
+
|
|
167
|
+
The boundary is mechanical (grep after editing), so there is no
|
|
116
168
|
judgment call to rationalize — see
|
|
117
169
|
[`minimal-safe-diff § Own-orphan cleanup`](../../src/rules/minimal-safe-diff.md#own-orphan-cleanup).
|
|
118
170
|
|
|
119
|
-
## 6
|
|
171
|
+
## Demo 6 — Vague plan vs. verifiable per-step plan
|
|
120
172
|
|
|
121
173
|
**Ask:** "Add rate limiting to the API."
|
|
122
174
|
|
|
123
|
-
|
|
175
|
+
### Wrong shape
|
|
176
|
+
|
|
177
|
+
Unverifiable narration:
|
|
124
178
|
|
|
125
179
|
```
|
|
126
180
|
1. Review the code
|
|
@@ -129,7 +183,11 @@ judgment call to rationalize — see
|
|
|
129
183
|
4. Test the changes
|
|
130
184
|
```
|
|
131
185
|
|
|
132
|
-
**
|
|
186
|
+
**Failure mode:** a step without a `verify:` is an assumption.
|
|
187
|
+
|
|
188
|
+
### Right shape
|
|
189
|
+
|
|
190
|
+
Every step carries its check:
|
|
133
191
|
|
|
134
192
|
```
|
|
135
193
|
1. In-memory limit on one endpoint → verify: 11th request in a minute → 429 (test)
|
|
@@ -137,7 +195,9 @@ judgment call to rationalize — see
|
|
|
137
195
|
3. Shared store backend → verify: counter survives app restart; two instances share the count
|
|
138
196
|
```
|
|
139
197
|
|
|
140
|
-
|
|
198
|
+
### Why it works
|
|
199
|
+
|
|
200
|
+
Strong criteria let the
|
|
141
201
|
loop run independently (`verify-before-complete` then has something to
|
|
142
202
|
check); "make it work" guarantees clarification churn after the fact instead
|
|
143
203
|
of before.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
3
|
"mcpName": "io.github.event4u-app/agent-config",
|
|
4
|
-
"version": "9.
|
|
4
|
+
"version": "9.11.0",
|
|
5
5
|
"description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including \"zero runtime daemon\".",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"private": false,
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
".augment-plugin/",
|
|
35
35
|
".claude-plugin/",
|
|
36
36
|
"src/config/",
|
|
37
|
+
"agents/templates/",
|
|
37
38
|
"dist/",
|
|
38
39
|
"docs/guidelines/",
|
|
39
40
|
"docs/contracts/persona-schema.md",
|
|
@@ -65,13 +66,14 @@
|
|
|
65
66
|
"build:install-bundle": "esbuild src/scripts/install.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/install/install.mjs --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
|
|
66
67
|
"build:hooks": "esbuild src/scripts/hooks/dispatch_entry.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/hooks/dispatch.js --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url); const __acPath = require('node:path'); const __acFs = require('node:fs'); const __acUrl = require('node:url'); const __acReal = (p) => { try { return __acFs.realpathSync(p); } catch { return p; } }; const __acSelf = __acReal(__acUrl.fileURLToPath(import.meta.url)); if (process.argv[1] !== undefined && __acReal(__acPath.resolve(process.argv[1])) === __acSelf) { globalThis.__AC_HOOKS_BUNDLE_DIRECT = true; process.argv = [process.argv[0], __acSelf + '.__direct__', ...process.argv.slice(2)]; }\"",
|
|
67
68
|
"build:mcp-bundle": "esbuild src/scripts/mcp_server/__main__.ts --bundle --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outfile=dist/mcp/server.mjs --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url); const __acPath = require('node:path'); const __acFs = require('node:fs'); const __acUrl = require('node:url'); const __acReal = (p) => { try { return __acFs.realpathSync(p); } catch { return p; } }; const __acSelf = __acReal(__acUrl.fileURLToPath(import.meta.url)); if (process.argv[1] !== undefined && __acReal(__acPath.resolve(process.argv[1])) === __acSelf) { globalThis.__AC_MCP_BUNDLE_DIRECT = true; process.argv = [process.argv[0], __acSelf + '.__direct__', ...process.argv.slice(2)]; }\"",
|
|
69
|
+
"build:cli-delegate": "esbuild src/scripts/_cli/cmd_*.ts --bundle --splitting --platform=node --format=esm --target=node20 --define:__AGENT_CONFIG_BUNDLE__=true --outdir=dist/cli-delegate --banner:js=\"import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);\"",
|
|
68
70
|
"build:ui": "vite build",
|
|
69
71
|
"tokens:build": "node tokens/build-ac.mjs && node tokens/build-as.mjs",
|
|
70
72
|
"tokens:check": "node tokens/build-ac.mjs --check && node tokens/build-as.mjs --check && node tokens/check-contrast.mjs",
|
|
71
73
|
"build:discovery": "./scripts-run src/scripts/build_discovery_manifest --write --strict",
|
|
72
74
|
"build:mcp-manifest": "./scripts-run src/scripts/build_mcp_registry_manifest --write --strict",
|
|
73
75
|
"build:mcp-catalog": "./scripts-run src/scripts/build_mcp_catalog --write --strict",
|
|
74
|
-
"build": "npm run build:cli && npm run build:install-bundle && npm run build:hooks && npm run build:mcp-bundle && npm run build:ui",
|
|
76
|
+
"build": "npm run build:cli && npm run build:install-bundle && npm run build:hooks && npm run build:mcp-bundle && npm run build:cli-delegate && npm run build:ui",
|
|
75
77
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.scripts.json",
|
|
76
78
|
"lint:ts": "eslint 'src/**/*.ts'",
|
|
77
79
|
"test:ts": "vitest run",
|
|
Binary file
|
|
Binary file
|
|
@@ -234,7 +234,7 @@ function _within_window(ts_bucket: string, window_days: number | null): boolean
|
|
|
234
234
|
return ms >= Date.now() - window_days * 24 * 60 * 60 * 1000;
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
type BucketKey = string; // `${tier}
|
|
237
|
+
type BucketKey = string; // `${tier}\0${command}` — composite (tier, command) key.
|
|
238
238
|
interface RowStats {
|
|
239
239
|
count: number;
|
|
240
240
|
distinct_users: number;
|
|
@@ -274,7 +274,7 @@ function aggregate(log_path: string, window_days: number): AggregateResult {
|
|
|
274
274
|
}
|
|
275
275
|
kept += 1;
|
|
276
276
|
const tier = Math.trunc(rec.tier);
|
|
277
|
-
const key = `${tier}
|
|
277
|
+
const key = `${tier}\0${rec.command}`;
|
|
278
278
|
if (!keyMeta.has(key)) {
|
|
279
279
|
keyMeta.set(key, { tier, command: rec.command });
|
|
280
280
|
counts.set(key, 0);
|
|
@@ -17,14 +17,25 @@ import {
|
|
|
17
17
|
StepResult,
|
|
18
18
|
agent_directive,
|
|
19
19
|
} from '../../delivery_state.js';
|
|
20
|
-
import {
|
|
20
|
+
import { placeholder_paths } from './design.js';
|
|
21
|
+
import {
|
|
22
|
+
UNSUPPORTED_LANE,
|
|
23
|
+
bundle_line,
|
|
24
|
+
unsupported_stack_questions,
|
|
25
|
+
} from './stack_bundles.js';
|
|
21
26
|
|
|
22
27
|
/** Map `state.stack.frontend` → agent-directive skill name. */
|
|
23
28
|
export const STACK_DIRECTIVES: Record<string, string> = {
|
|
24
29
|
'blade-livewire-flux': 'ui-apply-blade-livewire-flux',
|
|
30
|
+
'blade-livewire': 'ui-apply-blade-livewire',
|
|
31
|
+
filament: 'ui-apply-filament',
|
|
25
32
|
'react-shadcn': 'ui-apply-react-shadcn',
|
|
33
|
+
react: 'ui-apply-react',
|
|
26
34
|
vue: 'ui-apply-vue',
|
|
27
35
|
plain: 'ui-apply-plain',
|
|
36
|
+
// Present so the `keys == KNOWN_STACKS` invariant holds. Never emitted —
|
|
37
|
+
// the step intercepts this lane and refuses instead of dispatching.
|
|
38
|
+
unknown: 'ui-apply-unsupported',
|
|
28
39
|
};
|
|
29
40
|
|
|
30
41
|
/** Fallback directive when `state.stack` is missing or malformed. */
|
|
@@ -104,47 +115,36 @@ function _resolve_directive(state: DeliveryState): string {
|
|
|
104
115
|
return DEFAULT_DIRECTIVE;
|
|
105
116
|
}
|
|
106
117
|
|
|
107
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* Return paths into `envelope['rendered']` whose text matches a pattern.
|
|
120
|
+
*
|
|
121
|
+
* Delegates to the walker shared with `design`, so the producer-side and
|
|
122
|
+
* consumer-side gates cannot drift apart. They previously held
|
|
123
|
+
* byte-identical copies of the same array-blind recursion, which meant the
|
|
124
|
+
* contract's "defense-in-depth" framing described two layers that failed on
|
|
125
|
+
* exactly the same inputs.
|
|
126
|
+
*/
|
|
108
127
|
function _placeholder_violations_in_output(envelope: Record<string, Any>): string[] {
|
|
109
|
-
|
|
110
|
-
if (!_isDict(rendered)) {
|
|
111
|
-
return [];
|
|
112
|
-
}
|
|
113
|
-
const violations: string[] = [];
|
|
114
|
-
_walk_rendered(rendered, '', violations);
|
|
115
|
-
return violations;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function _walk_rendered(node: Record<string, Any>, prefix: string, violations: string[]): void {
|
|
119
|
-
for (const key of Object.keys(node)) {
|
|
120
|
-
const value = node[key];
|
|
121
|
-
const path = prefix ? `${prefix}.${key}` : String(key);
|
|
122
|
-
if (_isDict(value)) {
|
|
123
|
-
_walk_rendered(value, path, violations);
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
if (typeof value !== 'string') {
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
const lowered = value.toLowerCase();
|
|
130
|
-
for (const pattern of PLACEHOLDER_PATTERNS) {
|
|
131
|
-
if (lowered.includes(pattern)) {
|
|
132
|
-
violations.push(path);
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
128
|
+
return placeholder_paths(envelope['rendered']);
|
|
137
129
|
}
|
|
138
130
|
|
|
139
131
|
/** First-pass halt — emit the stack-specific apply directive. */
|
|
140
132
|
function _delegate_to_stack_skill(state: DeliveryState): StepResult {
|
|
141
133
|
const directive = _resolve_directive(state);
|
|
142
134
|
const stack_label = _stack_label(state);
|
|
135
|
+
if (stack_label === UNSUPPORTED_LANE) {
|
|
136
|
+
return new StepResult({
|
|
137
|
+
outcome: Outcome.BLOCKED,
|
|
138
|
+
questions: unsupported_stack_questions('apply'),
|
|
139
|
+
message: 'UI apply refused: frontend framework not modelled by any lane.',
|
|
140
|
+
});
|
|
141
|
+
}
|
|
143
142
|
return new StepResult({
|
|
144
143
|
outcome: Outcome.BLOCKED,
|
|
145
144
|
questions: [
|
|
146
145
|
agent_directive(directive),
|
|
147
146
|
`> Stack: \`${stack_label}\`. Implementing the locked design brief.`,
|
|
147
|
+
bundle_line(stack_label, 'build'),
|
|
148
148
|
'> Microcopy is locked — every button label, empty-state ' +
|
|
149
149
|
'message, and validation message must come verbatim from ' +
|
|
150
150
|
'`state.ui_design.microcopy`.',
|
|
@@ -146,7 +146,17 @@ function _missing_required_keys(design: Record<string, Any>): string[] {
|
|
|
146
146
|
missing.push(key);
|
|
147
147
|
continue;
|
|
148
148
|
}
|
|
149
|
-
if (key === 'states'
|
|
149
|
+
if (key === 'states') {
|
|
150
|
+
// A non-object `states` (a string, a list) used to skip the
|
|
151
|
+
// per-state loop entirely, so `states: "n/a"` satisfied the gate
|
|
152
|
+
// without covering a single state. Report every required key
|
|
153
|
+
// instead — the author gets the same actionable list either way.
|
|
154
|
+
if (!_isDict(value)) {
|
|
155
|
+
for (const state_key of REQUIRED_STATE_KEYS) {
|
|
156
|
+
missing.push(`states.${state_key}`);
|
|
157
|
+
}
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
150
160
|
for (const state_key of REQUIRED_STATE_KEYS) {
|
|
151
161
|
if (!_pyTruthy(value[state_key])) {
|
|
152
162
|
missing.push(`states.${state_key}`);
|
|
@@ -157,37 +167,74 @@ function _missing_required_keys(design: Record<string, Any>): string[] {
|
|
|
157
167
|
return missing;
|
|
158
168
|
}
|
|
159
169
|
|
|
160
|
-
/**
|
|
170
|
+
/**
|
|
171
|
+
* Return brief paths whose values match a placeholder pattern.
|
|
172
|
+
*
|
|
173
|
+
* Covers `microcopy` **and** `states`. The five required states were checked
|
|
174
|
+
* for truthiness only, so `states.error: "TBD"` satisfied the gate — the brief
|
|
175
|
+
* looked complete while covering nothing. Both slots carry strings the user
|
|
176
|
+
* signs off on, so both are held to the same bar.
|
|
177
|
+
*
|
|
178
|
+
* An explicit `"n/a"` stays legitimate: a static landing page genuinely has no
|
|
179
|
+
* error or disabled state, and *declaring* that is the opposite of inventing
|
|
180
|
+
* filler. That is why the gate demands all five keys rather than branching on
|
|
181
|
+
* page type — the author states the answer instead of the engine guessing which
|
|
182
|
+
* states a surface ought to have.
|
|
183
|
+
*/
|
|
161
184
|
function _placeholder_violations(design: Record<string, Any>): string[] {
|
|
162
|
-
|
|
163
|
-
|
|
185
|
+
return [
|
|
186
|
+
...placeholder_paths(design['microcopy'], 'microcopy'),
|
|
187
|
+
...placeholder_paths(design['states'], 'states'),
|
|
188
|
+
];
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Return every path under `node` whose leaf string carries a placeholder.
|
|
193
|
+
*
|
|
194
|
+
* Traverses objects **and arrays**. The array arm is load-bearing, not
|
|
195
|
+
* defensive: a list is the natural shape for the most common microcopy
|
|
196
|
+
* (`nav_items`, `menu`, `steps`) and for a rendered file split into lines,
|
|
197
|
+
* and a walker that recursed into objects only let
|
|
198
|
+
* `{ nav_items: ["Home", "TODO: Link"] }` through both the brief lock and
|
|
199
|
+
* the rendered-output gate.
|
|
200
|
+
*
|
|
201
|
+
* Array elements are addressed `key[i]` so the halt names the exact element
|
|
202
|
+
* the author has to fix, not just the list.
|
|
203
|
+
*
|
|
204
|
+
* Shared by `design` (producer side, on `microcopy`) and `apply` (consumer
|
|
205
|
+
* side, on the rendered envelope). One implementation on purpose: the two
|
|
206
|
+
* call sites previously carried byte-identical copies of the same bug, so
|
|
207
|
+
* duplicating them bought no independence — see
|
|
208
|
+
* `docs/contracts/ui-track-flow.md` § implement → apply.
|
|
209
|
+
*/
|
|
210
|
+
export function placeholder_paths(node: Any, prefix = ''): string[] {
|
|
164
211
|
const violations: string[] = [];
|
|
165
|
-
|
|
212
|
+
_walk_placeholders(node, prefix, violations);
|
|
166
213
|
return violations;
|
|
167
214
|
}
|
|
168
215
|
|
|
169
|
-
function
|
|
170
|
-
node
|
|
171
|
-
|
|
172
|
-
violations: string[],
|
|
173
|
-
): void {
|
|
174
|
-
for (const key of Object.keys(node)) {
|
|
175
|
-
const value = node[key];
|
|
176
|
-
const path = prefix ? `${prefix}.${key}` : String(key);
|
|
177
|
-
if (_isDict(value)) {
|
|
178
|
-
_walk_microcopy(value, path, violations);
|
|
179
|
-
continue;
|
|
180
|
-
}
|
|
181
|
-
if (typeof value !== 'string') {
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
const lowered = value.toLowerCase();
|
|
216
|
+
function _walk_placeholders(node: Any, prefix: string, violations: string[]): void {
|
|
217
|
+
if (typeof node === 'string') {
|
|
218
|
+
const lowered = node.toLowerCase();
|
|
185
219
|
for (const pattern of PLACEHOLDER_PATTERNS) {
|
|
186
220
|
if (lowered.includes(pattern)) {
|
|
187
|
-
violations.push(
|
|
188
|
-
|
|
221
|
+
violations.push(prefix);
|
|
222
|
+
return;
|
|
189
223
|
}
|
|
190
224
|
}
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (Array.isArray(node)) {
|
|
228
|
+
node.forEach((value, index) => {
|
|
229
|
+
_walk_placeholders(value, `${prefix}[${index}]`, violations);
|
|
230
|
+
});
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (_isDict(node)) {
|
|
234
|
+
for (const key of Object.keys(node)) {
|
|
235
|
+
const path = prefix ? `${prefix}.${key}` : String(key);
|
|
236
|
+
_walk_placeholders(node[key], path, violations);
|
|
237
|
+
}
|
|
191
238
|
}
|
|
192
239
|
}
|
|
193
240
|
|
|
@@ -311,15 +358,23 @@ function _halt_unconfirmed(state: DeliveryState, design: Record<string, Any>): S
|
|
|
311
358
|
});
|
|
312
359
|
}
|
|
313
360
|
|
|
314
|
-
/**
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
361
|
+
/**
|
|
362
|
+
* Count leaf string entries in `microcopy` (recursive, arrays included).
|
|
363
|
+
*
|
|
364
|
+
* The count is shown in the sign-off the user confirms, so it has to agree
|
|
365
|
+
* with what the placeholder walker inspects — an object-only count reported
|
|
366
|
+
* fewer locked strings than were actually locked.
|
|
367
|
+
*/
|
|
368
|
+
function _count_microcopy(microcopy: Any): number {
|
|
369
|
+
if (typeof microcopy === 'string') return 1;
|
|
370
|
+
if (Array.isArray(microcopy)) {
|
|
371
|
+
return microcopy.reduce((total: number, value) => total + _count_microcopy(value), 0);
|
|
372
|
+
}
|
|
373
|
+
if (_isDict(microcopy)) {
|
|
374
|
+
return Object.values(microcopy).reduce(
|
|
375
|
+
(total: number, value) => total + _count_microcopy(value),
|
|
376
|
+
0,
|
|
377
|
+
);
|
|
323
378
|
}
|
|
324
|
-
return
|
|
379
|
+
return 0;
|
|
325
380
|
}
|