@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
|
@@ -129,31 +129,33 @@ Output the structured payload (below). The user — or
|
|
|
129
129
|
## Weighted-matrix mode (quantitative)
|
|
130
130
|
|
|
131
131
|
Optional numeric variant of step 3. **Gate — fire only when ALL hold:**
|
|
132
|
-
≥ 3 options · no single dominant criterion · costly / hard-to-reverse
|
|
133
|
-
commensurable criteria (no values conflict). 2-option or
|
|
134
|
-
one-line redirect: just decide, or
|
|
135
|
-
anchors, worked example:
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
132
|
+
≥ 3 options · no single dominant criterion · costly / hard-to-reverse
|
|
133
|
+
decision · commensurable criteria (no values conflict). A 2-option or
|
|
134
|
+
reversible choice gets a one-line redirect: just decide, or use the
|
|
135
|
+
qualitative matrix above. Full procedure, anchors, worked example:
|
|
136
|
+
[`references/weighted-matrix.md`](references/weighted-matrix.md).
|
|
137
|
+
|
|
138
|
+
1. User states the decision + options.
|
|
139
|
+
2. **User lists criteria and weights (1-10) BEFORE any scoring** — the AI
|
|
140
|
+
may append missed criteria afterward, each labeled `(AI-suggested)`.
|
|
141
|
+
Never propose criteria first (anchoring).
|
|
141
142
|
3. Criteria hygiene: cap 4-8, merge near-synonyms (double-counting check).
|
|
142
143
|
4. Score options 1-10 against **fixed anchors** (each criterion declares
|
|
143
144
|
what 1 and what 10 mean — never relative-to-best-in-set).
|
|
144
|
-
5. Weighted sums, then **sensitivity block — the load-bearing gate**:
|
|
145
|
+
5. Weighted sums, then the **sensitivity block — the load-bearing gate**:
|
|
145
146
|
close-call margin (< 10 % = "no clear winner — decide on unquantified
|
|
146
147
|
factors"), smallest weight change that flips the winner, ±1-score flip
|
|
147
|
-
test.
|
|
148
|
-
|
|
148
|
+
test. A fragile winner is reported as fragile, never as "the rational
|
|
149
|
+
choice".
|
|
150
|
+
6. Delegate the argue-against pass to
|
|
149
151
|
[`adversarial-review`](../adversarial-review/SKILL.md), scoped: "attack
|
|
150
|
-
the winner, using the losing options' strongest criteria" (
|
|
151
|
-
delegation pattern — never reimplemented inline).
|
|
152
|
+
the winner, using the losing options' strongest criteria" (the
|
|
153
|
+
`premortem` delegation pattern — never reimplemented inline).
|
|
152
154
|
|
|
153
|
-
Output appends matrix + sensitivity block + attack summary + intuition
|
|
155
|
+
Output appends matrix + sensitivity block + attack summary + the intuition
|
|
154
156
|
caveat (resistance to the result signals a wrong weight or unquantified
|
|
155
157
|
information — surface it, don't ignore it). **The score is a structured
|
|
156
|
-
argument, not a verdict.** Hand-off to `adr-create` unchanged.
|
|
158
|
+
argument, not a verdict.** Hand-off to `adr-create` is unchanged.
|
|
157
159
|
|
|
158
160
|
## Related Skills
|
|
159
161
|
|
|
@@ -189,8 +191,8 @@ argument, not a verdict.** Hand-off to `adr-create` unchanged.
|
|
|
189
191
|
- "Wir müssen ein ADR draus machen."
|
|
190
192
|
- "Trade-off-Matrix für X vs Y."
|
|
191
193
|
- "Diese Entscheidung überschreibt das alte ADR-NN."
|
|
192
|
-
- "Weighted decision matrix für die Optionen" / "score my options
|
|
193
|
-
|
|
194
|
+
- "Weighted decision matrix für die Optionen" / "score my options against
|
|
195
|
+
my criteria" — fires the weighted-matrix mode (gate permitting).
|
|
194
196
|
|
|
195
197
|
## Output
|
|
196
198
|
|
|
@@ -139,10 +139,10 @@ Dials persist in `DESIGN.md`; the stack executors (`tailwind-engineer`,
|
|
|
139
139
|
design direction, cross-check your first impulse against the current-generation
|
|
140
140
|
tells in [`design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
|
|
141
141
|
(§ Current-generation tells — the warm-editorial C5+T2+T7 signature and the
|
|
142
|
-
previous-generation C1/C2 gradient) plus the L1/L2 layout defaults. If a tell
|
|
143
|
-
your first reach, name a different direction or explicitly justify why this
|
|
144
|
-
genuinely calls for it. (The finalization cross-check against the full
|
|
145
|
-
under *Anti-slop discipline* below.)
|
|
142
|
+
previous-generation C1/C2 gradient) plus the L1/L2 layout defaults. If a tell
|
|
143
|
+
was your first reach, name a different direction or explicitly justify why this
|
|
144
|
+
brief genuinely calls for it. (The finalization cross-check against the full
|
|
145
|
+
catalog is under *Anti-slop discipline* below.)
|
|
146
146
|
|
|
147
147
|
## Honesty / real-system grounding
|
|
148
148
|
|
|
@@ -58,19 +58,19 @@ A **live preview URL** is required for testing.
|
|
|
58
58
|
### Phase 1: Interaction
|
|
59
59
|
|
|
60
60
|
- Test user flows end-to-end.
|
|
61
|
-
- **Six interaction states — every interactive element asserts each one** (
|
|
62
|
-
canonical states checklist; no other review phase repeats it):
|
|
63
|
-
1. **default** — resting state is a deliberate style, not the browser default.
|
|
64
|
-
2. **hover** — pointer feedback present (not the *only* affordance — see focus).
|
|
61
|
+
- **Six interaction states — every interactive element asserts each one** (this
|
|
62
|
+
is the single canonical states checklist; no other review phase repeats it):
|
|
63
|
+
1. **default** — the resting state is a deliberate style, not the browser default.
|
|
64
|
+
2. **hover** — pointer feedback present (and not the *only* affordance — see focus).
|
|
65
65
|
3. **active** — pressed/engaged state visibly distinct from hover.
|
|
66
|
-
4. **disabled** —
|
|
67
|
-
as "disabled" is a WCAG 1.4.1 failure — see `accessibility-auditor`).
|
|
68
|
-
5. **focus** — visible `:focus-visible` indicator (Q6 floor, `lint_design_quality`).
|
|
69
|
-
6. **loading** — explicit pending state (skeleton/spinner/disabled-submit), never a dead frozen control.
|
|
66
|
+
4. **disabled** — visually unmistakable as non-interactive (a contrast dip alone
|
|
67
|
+
that a user cannot read as "disabled" is a WCAG 1.4.1 failure — see `accessibility-auditor`).
|
|
68
|
+
5. **focus** — a visible `:focus-visible` indicator (Q6 floor, `lint_design_quality`).
|
|
69
|
+
6. **loading** — an explicit pending state (skeleton/spinner/disabled-submit), never a dead frozen control.
|
|
70
70
|
- **Transition timing** between these states follows the motion bands in
|
|
71
71
|
[`fe-design`](../fe-design/SKILL.md) § Motion (micro-feedback ~100–200 ms;
|
|
72
72
|
structural open/close ~200–500 ms) — the timing source of truth; do not restate
|
|
73
|
-
a competing band set here. Every animated transition carries a
|
|
73
|
+
a competing band set here. Every animated transition also carries a
|
|
74
74
|
`prefers-reduced-motion` alternative (M5 / Q4).
|
|
75
75
|
- Test keyboard navigation (Tab, Enter, Escape, Arrow keys).
|
|
76
76
|
- Verify form submission and error recovery.
|
|
@@ -312,11 +312,12 @@ and position it against [`verify-repair-loop`](../verify-repair-loop/SKILL.md)
|
|
|
312
312
|
**Why the audit passes stay serial (not a parallel-4 fan-out).** A fan-out of
|
|
313
313
|
a11y + slop + hierarchy + states across four subagents was evaluated and
|
|
314
314
|
deferred: the passes share one live browser/navigation session and later phases
|
|
315
|
-
build on state established by earlier ones
|
|
316
|
-
expensive part
|
|
317
|
-
verifier above, which captures the fan-out's main win without
|
|
318
|
-
views. Reconsider only when `design-review` runs as a standalone
|
|
319
|
-
many *independent* surfaces, where per-surface
|
|
315
|
+
build on state established by earlier ones, so they are not cleanly independent;
|
|
316
|
+
and the expensive part — browser probing / screenshots — is already offloaded by
|
|
317
|
+
the async verifier above, which captures the fan-out's main win without spinning
|
|
318
|
+
up four separate views. Reconsider only when `design-review` runs as a standalone
|
|
319
|
+
heavy batch over many *independent* surfaces, where per-surface
|
|
320
|
+
`do-in-parallel` genuinely pays.
|
|
320
321
|
|
|
321
322
|
## Gotcha
|
|
322
323
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# `design-system.json` — import contract
|
|
2
2
|
|
|
3
3
|
> Lazy-loaded by `design-system-capture` ONLY when importing an extracted design
|
|
4
|
-
> system. Not
|
|
5
|
-
> external static-extraction tool (URL / git repo / local dir
|
|
6
|
-
> the skill READS it to seed/merge `DESIGN.md`. We
|
|
7
|
-
> crawler (council 2026-06-28).
|
|
4
|
+
> system. Not part of the always-on skill body. This is the **consumer-side
|
|
5
|
+
> contract**: any external static-extraction tool (URL / git repo / local dir
|
|
6
|
+
> crawler) emits this shape; the skill READS it to seed/merge `DESIGN.md`. We
|
|
7
|
+
> own the contract, not the crawler (council 2026-06-28).
|
|
8
8
|
|
|
9
9
|
## Shape
|
|
10
10
|
|
|
@@ -31,32 +31,35 @@
|
|
|
31
31
|
## Field rules
|
|
32
32
|
|
|
33
33
|
- **Map to DTCG where it maps cleanly.** `colors` / `typography` / `spacing` /
|
|
34
|
-
`radius` / `shadow`
|
|
35
|
-
`brand-to-tokens` already author — reuse it;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
`radius` / `shadow` correspond to the DTCG `.tokens.json` shape that
|
|
35
|
+
`design-tokens` / `brand-to-tokens` already author — reuse it; do **not**
|
|
36
|
+
invent a parallel token format.
|
|
37
|
+
- **Mark extraction-only metadata.** Anything that is *observation*, not a
|
|
38
|
+
token decision, lives under a `_meta` key (e.g. `motion._meta.detected_libs`,
|
|
39
|
+
`components[].observed`). It informs the human; it never becomes a token.
|
|
40
|
+
- **`source` is mandatory** — `kind` + `ref` + `captured_at`. An artifact with
|
|
41
|
+
no provenance is rejected (you cannot confirm what you cannot trace).
|
|
42
|
+
- **`bundled_local`** on a font family is a flag, not an instruction: the
|
|
43
|
+
package never downloads or bundles fonts (out of scope) — it records that the
|
|
44
|
+
source did.
|
|
43
45
|
|
|
44
46
|
## Trust posture (mandatory)
|
|
45
47
|
|
|
46
|
-
An
|
|
47
|
-
evidence vs. authoritative). It seeds `DESIGN.md` as a
|
|
48
|
-
confirms per field** — never a silent write. A field
|
|
49
|
-
registered brand value (confirmed `.tokens.json` / brand
|
|
50
|
-
never auto-applied** (`brand-source-of-truth
|
|
51
|
-
|
|
48
|
+
An imported artifact is **observed, not authoritative** (mirrors
|
|
49
|
+
`source-discovery`: evidence vs. authoritative). It seeds `DESIGN.md` as a
|
|
50
|
+
**proposal the human confirms per field** — never a silent write. A field that
|
|
51
|
+
conflicts with a registered brand value (a confirmed `.tokens.json` / brand
|
|
52
|
+
token) is **flagged, never auto-applied** (`brand-source-of-truth`: consumer
|
|
53
|
+
brand wins). Precedence on import: registered brand tokens > confirmed
|
|
54
|
+
`DESIGN.md` > imported observation.
|
|
52
55
|
|
|
53
56
|
## Two sources, one shape
|
|
54
57
|
|
|
55
|
-
- **External target** (a site/repo you
|
|
56
|
-
emits `design-system.json`; hand it to `design-system-capture`.
|
|
58
|
+
- **External target** (a site/repo you do not own) → an external standalone
|
|
59
|
+
tool emits `design-system.json`; hand it to `design-system-capture`.
|
|
57
60
|
- **Current repo** → prefer [`existing-ui-audit`](../../existing-ui-audit/SKILL.md):
|
|
58
|
-
it inventories the codebase and
|
|
59
|
-
identical either way.
|
|
61
|
+
it already inventories the codebase's components/tokens and can emit the same
|
|
62
|
+
`design-system.json` shape, so the import path is identical either way.
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
runtime, or a font-bundler.
|
|
64
|
+
The package **owns this contract**; it does **not** ship the crawler, the
|
|
65
|
+
Playwright runtime, or a font-bundler.
|
|
@@ -23,7 +23,7 @@ Do NOT use when:
|
|
|
23
23
|
|
|
24
24
|
1. **Gather context** — read `.devcontainer/devcontainer.json`, check `.devcontainer/` for env files and docs, check `agents/overrides/skills/devcontainer.md` for project-specific overrides.
|
|
25
25
|
2. **Identify change type** — classify: image change, feature addition, secret addition, extension change, or env var change.
|
|
26
|
-
3. **Make the change** — edit `devcontainer.json` (or related files). Follow conventions below for secrets, features, and
|
|
26
|
+
3. **Make the change** — edit `devcontainer.json` (or related files). Follow conventions below for secrets, features, and environment variables.
|
|
27
27
|
4. **Build and verify** — run `devcontainer build` to confirm the container builds. Check that extensions load and ports forward correctly.
|
|
28
28
|
5. **Document** — if adding a new secret or dependency, update the onboarding docs in `.devcontainer/`.
|
|
29
29
|
|
|
@@ -97,7 +97,7 @@ Read `devcontainer.json` for the actual secret definitions and requirements.
|
|
|
97
97
|
|
|
98
98
|
- DevContainer
|
|
99
99
|
- Codespaces
|
|
100
|
-
- dev
|
|
100
|
+
- dev environment
|
|
101
101
|
- container setup
|
|
102
102
|
|
|
103
103
|
### Validate
|
|
@@ -242,7 +242,7 @@ RUN --mount=type=cache,target=/root/.npm \
|
|
|
242
242
|
|
|
243
243
|
- All PHP commands (artisan, composer, phpunit) must run INSIDE the PHP container — never on the host.
|
|
244
244
|
- The fast container and Xdebug container share the same codebase but have different PHP configs — don't confuse them.
|
|
245
|
-
- `docker compose down -v` destroys volumes including the
|
|
245
|
+
- `docker compose down -v` destroys volumes including the database — use `down` without `-v` unless you mean it.
|
|
246
246
|
- The model forgets to use `docker compose exec -T` (no TTY) when running in scripts or CI.
|
|
247
247
|
|
|
248
248
|
## Do NOT
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "docx-authoring",
|
|
3
|
+
"last_eval": "2026-07-30",
|
|
4
|
+
"description": "5 should-trigger + 5 should-not-trigger queries. Should-trigger covers DE + EN phrasings for WRITING a Word .docx — create from content, fill a supplied template, surgical body-XML edit. Should-not-trigger covers the near-miss neighbours (docx→Markdown reading, PDF authoring, spreadsheets, slide decks, prose co-authoring) whose vocabulary overlaps.",
|
|
5
|
+
"queries": [
|
|
6
|
+
{
|
|
7
|
+
"q": "generate a .docx report from this content",
|
|
8
|
+
"trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"q": "fill this Word template with these values and save a copy",
|
|
12
|
+
"trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"q": "edit the heading and one table cell inside this existing .docx",
|
|
16
|
+
"trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"q": "erzeuge daraus ein Word-Dokument mit A4-Seitenformat und einer Tabelle",
|
|
20
|
+
"trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"q": "produce the contract as a Word file, not a PDF",
|
|
24
|
+
"trigger": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"q": "extract the text of this .docx into Markdown so I can read it here",
|
|
28
|
+
"trigger": false,
|
|
29
|
+
"note": "reading a docx into the conversation, not writing one → markitdown"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"q": "merge these PDFs and fill the PDF form fields",
|
|
33
|
+
"trigger": false,
|
|
34
|
+
"note": "PDF authoring surface, different library-per-task path → pdf-tools"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"q": "build me a budget model with formulas in a spreadsheet",
|
|
38
|
+
"trigger": false,
|
|
39
|
+
"note": "spreadsheet/model authoring, not an OOXML text document → spreadsheet-authoring"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"q": "turn this into a slide deck for the pitch tomorrow",
|
|
43
|
+
"trigger": false,
|
|
44
|
+
"note": "presentation surface; pptx is gated, decks go to → html-deck"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"q": "help me write the PRD itself — structure the sections and stress-test the reader test",
|
|
48
|
+
"trigger": false,
|
|
49
|
+
"note": "authoring the prose/content of a spec, not producing the .docx container → doc-coauthoring"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -97,7 +97,7 @@ Apply this floor **before** marking any ticket `lite`:
|
|
|
97
97
|
- Any miss → split the ticket further, or escalate to `medium`
|
|
98
98
|
- Architectural / multi-module → `high` (use `adr-create` first)
|
|
99
99
|
|
|
100
|
-
**Gate:** run `./scripts-run src/scripts/lint_ticket_buildable agents/tickets/{slug}/`
|
|
100
|
+
**Gate:** run `./scripts-run src/scripts/lint_ticket_buildable.ts agents/tickets/{slug}/`
|
|
101
101
|
and fix all errors before declaring any ticket `lite`. This is the only
|
|
102
102
|
authoritative check — do not skip it.
|
|
103
103
|
|
|
@@ -154,7 +154,7 @@ If the file does not exist, create it with the `bundles:` root.
|
|
|
154
154
|
### §8 — Run the buildability gate
|
|
155
155
|
|
|
156
156
|
```bash
|
|
157
|
-
./scripts-run src/scripts/lint_ticket_buildable agents/tickets/{slug}/
|
|
157
|
+
./scripts-run src/scripts/lint_ticket_buildable.ts agents/tickets/{slug}/
|
|
158
158
|
```
|
|
159
159
|
|
|
160
160
|
Fix every reported error. Re-run until exit code 0. Max 3 attempts; if still
|
|
@@ -126,7 +126,7 @@ Exactly **one** layer translates internal errors to the egress format (HTTP stat
|
|
|
126
126
|
|
|
127
127
|
## Provenance
|
|
128
128
|
|
|
129
|
-
- Adopted from: an external reference (
|
|
129
|
+
- Adopted from: an external reference (internal provenance, redacted) — **Sunset Policy applied**: a large source reduced to a ~150-line decision framework; language catalogues externalized to the upstream resources below.
|
|
130
130
|
- Externalized catalogues:
|
|
131
131
|
- Python: https://docs.python.org/3/tutorial/errors.html · https://docs.python.org/3/library/exceptions.html
|
|
132
132
|
- PHP / Laravel: https://laravel.com/docs/errors · https://www.php.net/manual/en/language.exceptions.php
|
|
@@ -74,7 +74,7 @@ Before producing numbers, check:
|
|
|
74
74
|
- Is there a rollback plan implied?
|
|
75
75
|
|
|
76
76
|
If the ticket scores low on estimability (vague AC, no out-of-scope,
|
|
77
|
-
no mention of
|
|
77
|
+
no mention of dependencies), set `uncertainty = Underspecified` and
|
|
78
78
|
emit a single-line redirect to `/refine-ticket` at the top of the output.
|
|
79
79
|
|
|
80
80
|
A **cross-source discrepancy** (per [`cross-source-consistency`](../../rules/cross-source-consistency.md), gated by `consistency.cross_source`) — ticket text contradicting an attached mockup, or a clearly-needed-but-unstated behavior (weekend/holiday shift) — is not estimable as-is: it hides an open scope decision. Raise `uncertainty` and name the discrepancy in the redirect rather than sizing over a contradiction.
|
|
@@ -177,7 +177,7 @@ copy-paste instructions if missing.
|
|
|
177
177
|
- Estimators default to optimism. Every size must cite evidence for at least one of the four axes — not "feels like M".
|
|
178
178
|
- `Underspecified` is not a safe default. Use it only when estimability actually fails; otherwise pick a size and state the risk.
|
|
179
179
|
- `Split: Yes` without concrete split points is useless. Name the slices or drop the recommendation.
|
|
180
|
-
- Persona voices drift into general feedback. Each sentence must be about **sizing** — developer talks
|
|
180
|
+
- Persona voices drift into general feedback. Each sentence must be about **sizing** — developer talks implementation size, stakeholder talks timeline fit, etc.
|
|
181
181
|
- Story-point mapping (`S=2 / M=3 / L=5 / XL=8`) is the default; projects may override — do NOT hardcode their scale into this skill.
|
|
182
182
|
|
|
183
183
|
## Do NOT
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
model_tier: high
|
|
3
3
|
name: evaluate-llm-feature
|
|
4
4
|
description: "Black-box evaluation of a shipped LLM feature — adversarial probes for hallucination, prompt-injection, and cost-runaway vs stated expectations. Not RAG/embedding. Triggers 'review my chatbot'."
|
|
5
|
-
source: package
|
|
6
5
|
personas:
|
|
7
6
|
- security-engineer
|
|
8
7
|
domain: quality
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "evaluate-llm-feature",
|
|
3
|
+
"last_eval": "2026-07-30",
|
|
4
|
+
"description": "5 should-trigger + 5 should-not-trigger queries. Should-trigger covers DE + EN phrasings for black-box evaluation of a SHIPPED consumer LLM feature — hallucination, prompt-injection and cost-runaway probes against stated expectations. Should-not-trigger covers the near-miss neighbours (this suite's own agent config red-team, LLM app-building/RAG, prompt authoring, the single-response injection judge, code security audit) whose vocabulary overlaps.",
|
|
5
|
+
"queries": [
|
|
6
|
+
{
|
|
7
|
+
"q": "review my support chatbot before launch — does it hallucinate or leak its system prompt?",
|
|
8
|
+
"trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"q": "is my summariser safe to ship? probe it for prompt injection through the documents it retrieves",
|
|
12
|
+
"trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"q": "evaluate my deployed AI assistant against what it claims to do and its token budget",
|
|
16
|
+
"trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"q": "teste meinen ausgelieferten KI-Assistenten adversarial auf Halluzinationen und Kosten-Runaway",
|
|
20
|
+
"trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"q": "our doc-QA feature invents API names — run adversarial probes and give me a ship / do-not-ship verdict",
|
|
24
|
+
"trigger": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"q": "red-team my own agent setup — my CLAUDE.md, hooks and MCP servers",
|
|
28
|
+
"trigger": false,
|
|
29
|
+
"note": "config-layer red/blue review of this suite's agents, not a shipped consumer feature → agent-security-review"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"q": "what chunk size and embedding model should I use for my RAG pipeline?",
|
|
33
|
+
"trigger": false,
|
|
34
|
+
"note": "building an LLM app (explicitly out of mission for this skill); provider facts → llm-provider-knowledge, prompt design → prompt-engineering-patterns"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"q": "make this system prompt better — add few-shot examples and self-verification",
|
|
38
|
+
"trigger": false,
|
|
39
|
+
"note": "authoring/optimising a prompt, not evaluating a running feature → prompt-engineering-patterns / prompt-optimizer"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"q": "score whether this single agent response resisted the injected instruction",
|
|
43
|
+
"trigger": false,
|
|
44
|
+
"note": "one-response injection-resistance scoring on an axis, not a feature-wide probe campaign → judge-injection-defense"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"q": "audit the source code of our chat backend for vulnerabilities",
|
|
48
|
+
"trigger": false,
|
|
49
|
+
"note": "white-box code vulnerability hunt; this skill is black-box only → security-audit"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -31,7 +31,7 @@ Use this skill when:
|
|
|
31
31
|
Do NOT use when:
|
|
32
32
|
- `directive_set="ui-trivial"` — the trivial path bypasses audit by precondition (≤1 file, ≤5 lines, no new component, no new state, no new dep)
|
|
33
33
|
- `directive_set="backend"` — no UI surface to inventory
|
|
34
|
-
- The audit findings already exist in `state.ui_audit` for this state-file
|
|
34
|
+
- The audit findings already exist in `state.ui_audit` for this state-file — the gate round-trips through SUCCESS once `audit_path` is set, and does **not** re-run for the life of that state-file (see Gotchas for what that does and does not cover)
|
|
35
35
|
|
|
36
36
|
## Resource-first context gate (design fidelity)
|
|
37
37
|
|
|
@@ -229,11 +229,12 @@ violations will surface as new findings on every run.
|
|
|
229
229
|
7. **`state.ui_audit.greenfield`** — boolean; when true, `greenfield_decision` MUST also be set before the dispatcher advances
|
|
230
230
|
8. **`state.ui_audit.a11y_baseline`** *(optional)* — array of `{rule, selector, severity?}` entries documenting pre-existing a11y violations the review gate should treat as informational. Omit the key entirely when no baseline applies; do not write `[]` for "I checked and there are none" — that disables the gate's filter for every future run.
|
|
231
231
|
|
|
232
|
-
**Design-system export (current-repo source):**
|
|
233
|
-
repo, emit the inventory as a `design-system.json`
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
232
|
+
**Design-system export (current-repo source):** when the goal is to seed
|
|
233
|
+
`DESIGN.md` from *this* repo, emit the inventory as a `design-system.json`
|
|
234
|
+
artifact (the import contract in
|
|
235
|
+
[`design-system-capture`](../design-system-capture/reference/design-system-json.md))
|
|
236
|
+
and hand it to `design-system-capture` — the same shape an external extraction
|
|
237
|
+
tool produces, so the import path is uniform.
|
|
237
238
|
|
|
238
239
|
## Gotcha
|
|
239
240
|
|
|
@@ -242,7 +243,20 @@ so the import path is uniform.
|
|
|
242
243
|
- Don't assume a Radix-only `package.json` means shadcn — shadcn requires `components.json` at repo root.
|
|
243
244
|
- `state.ui_audit.shadcn_inventory.version` is often missing; the shadcn CLI does not always pin itself in `package.json`. Record `null` rather than guessing.
|
|
244
245
|
- Greenfield is detected, not assumed — a project with one Blade layout and no components is still greenfield only if tokens AND design system markers AND components are all empty.
|
|
245
|
-
-
|
|
246
|
+
- **There is no mtime cache.** An earlier revision told you to cache by
|
|
247
|
+
`(composer.json mtime, package.json mtime)` and re-audit when either changed.
|
|
248
|
+
No code implemented it, and the key was the wrong one anyway: `apply` adds
|
|
249
|
+
components without touching a manifest, so a manifest-keyed cache never
|
|
250
|
+
invalidates on the change that matters. What the engine does is simpler and
|
|
251
|
+
stricter — `audit.ts` returns SUCCESS unconditionally once `audit_path` is
|
|
252
|
+
`high_confidence` or `ambiguous`, so the inventory is computed **once per
|
|
253
|
+
state-file** and never refreshed.
|
|
254
|
+
- **What that means in practice.** A single request is one pass, so the
|
|
255
|
+
inventory is fresh where it matters. The bounded gap is a run that reuses one
|
|
256
|
+
state-file across several component additions: components written earlier in
|
|
257
|
+
that run are absent from the inventory the later ones are checked against.
|
|
258
|
+
Adding a second component in the same run → re-read the component directories
|
|
259
|
+
directly rather than trusting `state.ui_audit.components_found`.
|
|
246
260
|
|
|
247
261
|
## Anti-slop cross-reference
|
|
248
262
|
|
|
@@ -63,6 +63,16 @@ where the corpus reports an evidence gap or the audit already pins a
|
|
|
63
63
|
project pattern. Stack-specific choices come from the dispatched
|
|
64
64
|
implementation skill, not from here.
|
|
65
65
|
|
|
66
|
+
> **When the corpus is not installed.** `design-intelligence` ships in the
|
|
67
|
+
> `frontend-design` pack; this skill ships in `engineering-base`. A consumer
|
|
68
|
+
> who installed only `laravel` or only `react` therefore has this skill and
|
|
69
|
+
> **not** the corpus. Fall back to the heuristics here and say so in the
|
|
70
|
+
> result — "selected from heuristics; `frontend-design` not installed, so no
|
|
71
|
+
> corpus grounding". The evidence-gap fallback above is about a corpus that
|
|
72
|
+
> answered "nothing here"; this is about a corpus that is absent. Never
|
|
73
|
+
> present an ungrounded pick as grounded, and never record a missing pack as
|
|
74
|
+
> an evidence gap.
|
|
75
|
+
|
|
66
76
|
## Component Architecture
|
|
67
77
|
|
|
68
78
|
### Page structure (universal shape)
|
|
@@ -167,7 +167,7 @@ complexity: lightweight # default — skips bite-sized granularity
|
|
|
167
167
|
---
|
|
168
168
|
```
|
|
169
169
|
|
|
170
|
-
Source: adapted from an external reference
|
|
170
|
+
Source: adapted from an external reference; complexity-gating is our addition (Council Round 1, Q4 — mitigates UX pushback for senior engineers on well-scoped work).
|
|
171
171
|
|
|
172
172
|
## Self-review (3-scan checklist)
|
|
173
173
|
|
|
@@ -179,7 +179,7 @@ Before presenting any plan, run these three scans in order. Each is a fast pass
|
|
|
179
179
|
|
|
180
180
|
This scan is **separate from** adversarial-review (below). Self-review catches mechanical gaps (missing AC, leftover placeholders, mis-shaped types); adversarial-review challenges the plan's reasoning.
|
|
181
181
|
|
|
182
|
-
Source: adapted from an external reference
|
|
182
|
+
Source: adapted from an external reference.
|
|
183
183
|
|
|
184
184
|
## Adversarial self-review
|
|
185
185
|
|
|
@@ -63,10 +63,10 @@ or [`fix-pr-comments`](../../commands/fix-pr-comments.md) instead.
|
|
|
63
63
|
Run the end-of-work gate before presenting any options — see
|
|
64
64
|
[`verify-before-complete`](../verify-before-complete/SKILL.md).
|
|
65
65
|
Steps 1–3 run only when `quality.local_auto_run: true`; under the
|
|
66
|
-
default (`false` / missing) skip them without asking — user runs
|
|
66
|
+
default (`false` / missing) skip them without asking — the user runs
|
|
67
67
|
quality tools manually, remote CI on the PR is the authoritative gate,
|
|
68
|
-
readiness report says *"quality gates delegated to remote CI"*
|
|
69
|
-
of claiming them green:
|
|
68
|
+
and the readiness report says *"quality gates delegated to remote CI"*
|
|
69
|
+
instead of claiming them green:
|
|
70
70
|
|
|
71
71
|
1. Targeted tests green
|
|
72
72
|
2. Full test suite green
|
|
@@ -115,7 +115,7 @@ current state on the next polish round.
|
|
|
115
115
|
|
|
116
116
|
## Taste Dials
|
|
117
117
|
|
|
118
|
-
`DESIGN.md` `## Taste Dials
|
|
118
|
+
When `DESIGN.md` declares `## Taste Dials`, honour them: Variance → layout-family spread + asymmetry tolerance; Motion → animation budget + reduced-motion posture; Density → spacing scale + information-per-viewport. Absent → follow the design brief's inferred dials.
|
|
119
119
|
|
|
120
120
|
## Do NOT
|
|
121
121
|
|
|
@@ -11,15 +11,15 @@ packs:
|
|
|
11
11
|
|
|
12
12
|
# frontend-render-security
|
|
13
13
|
|
|
14
|
-
AI optimizes for the shortest code
|
|
14
|
+
AI optimizes for the shortest code that produces the requested visible behavior and omits the invisible defensive layer — the sanitizer, the origin check, the server-side gate, the security header. Large samples put XSS in a majority of AI frontend code and ~2.74× more XSS than human code; every agent in the Tenzai benchmark shipped client-side flaws. These are high-precision, grep-catchable patterns — stop them at authoring time.
|
|
15
15
|
|
|
16
16
|
## When to use
|
|
17
17
|
|
|
18
|
-
- Writing
|
|
18
|
+
- Writing or modifying a component, template, or client-side script that renders data, calls an API, handles auth, or reads the URL / `postMessage`.
|
|
19
19
|
- Reviewing an AI-authored frontend diff.
|
|
20
20
|
- Editing `.tsx` / `.jsx` / `.vue` / `.svelte` / `.html` or client-side `.js` / `.ts`.
|
|
21
21
|
|
|
22
|
-
Do NOT use when: change is server-only, CLI, or non-UI — route to `security` / `security-sensitive-stop`.
|
|
22
|
+
Do NOT use when: the change is server-only, CLI, or non-UI — route to `security` / `security-sensitive-stop`.
|
|
23
23
|
|
|
24
24
|
## The Iron Law
|
|
25
25
|
|
|
@@ -38,15 +38,15 @@ NO SECRET, PRIVILEGED KEY, OR SESSION TOKEN LIVES IN CLIENT CODE OR localStorage
|
|
|
38
38
|
|
|
39
39
|
## The patterns AI ships by default
|
|
40
40
|
|
|
41
|
-
| Pattern | Why dangerous | Do instead |
|
|
41
|
+
| Pattern | Why it's dangerous | Do instead |
|
|
42
42
|
|---|---|---|
|
|
43
|
-
| `dangerouslySetInnerHTML` / `v-html` / `.innerHTML =` on non-constant value | Stored/DOM XSS (CWE-79) | render as text, or sanitize (DOMPurify) if HTML required |
|
|
44
|
-
| Secret / API key inline or in `NEXT_PUBLIC_*` / `VITE_*` | Bundler inlines it into shipped JS (CWE-798) | call third party via backend-for-frontend proxy; only truly-public values get a public prefix |
|
|
45
|
-
| Client-side-only auth / role / validation | Bypassable
|
|
43
|
+
| `dangerouslySetInnerHTML` / `v-html` / `.innerHTML =` on non-constant value | Stored/DOM XSS (CWE-79) | render as text, or sanitize (DOMPurify) if HTML is required |
|
|
44
|
+
| Secret / API key inline or in `NEXT_PUBLIC_*` / `VITE_*` | Bundler inlines it into shipped JS (CWE-798) | call the third party via a backend-for-frontend proxy; only truly-public values get a public prefix |
|
|
45
|
+
| Client-side-only auth / role / validation | Bypassable with dev tools or a proxy (CWE-602) | client gate is UX only; enforce the same check server-side |
|
|
46
46
|
| `location.*` / query param → HTML or JS sink | DOM XSS (CWE-79) | `textContent`; never pass URL data into an HTML/exec sink |
|
|
47
47
|
| CORS `origin: '*'` (esp. with credentials) | Any site reads authenticated responses (CWE-942) | explicit origin allow-list; never reflect `Origin` on credentialed routes |
|
|
48
48
|
| Token / JWT in `localStorage` / `sessionStorage` | XSS-exfiltratable (CWE-522) | `HttpOnly; Secure; SameSite` cookie |
|
|
49
|
-
| `addEventListener('message', …)` without `event.origin` check | Any embedder drives the handler (CWE-346) | strict-equality `event.origin`
|
|
49
|
+
| `addEventListener('message', …)` without `event.origin` check | Any embedder drives the handler (CWE-346) | strict-equality check `event.origin` against an allow-list first |
|
|
50
50
|
| `redirect` / `next` param → `location` / `router.push` | Open redirect / phishing (CWE-601) | relative-path or allow-listed-host only; reject external / non-http schemes |
|
|
51
51
|
| `eval` / `new Function` / string-`setTimeout` on input | Eval injection / RCE (CWE-95) | a parser or explicit allow-list |
|
|
52
52
|
| `target="_blank"` without `rel="noopener"` | Reverse tabnabbing (CWE-1022) | add `rel="noopener noreferrer"` |
|
|
@@ -54,7 +54,7 @@ NO SECRET, PRIVILEGED KEY, OR SESSION TOKEN LIVES IN CLIENT CODE OR localStorage
|
|
|
54
54
|
|
|
55
55
|
## Backstop greps
|
|
56
56
|
|
|
57
|
-
Run before committing frontend changes; each
|
|
57
|
+
Run before committing frontend changes; each should return zero (or every hit is read and justified):
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
60
|
# Insecure render + eval sinks
|
|
@@ -70,16 +70,16 @@ rg -n 'target=["'\'']_blank["'\'']' # then confirm rel="noopener" present
|
|
|
70
70
|
|
|
71
71
|
## Output format
|
|
72
72
|
|
|
73
|
-
1. A per-diff verdict listing each pattern class checked
|
|
73
|
+
1. A per-diff verdict listing each pattern class checked and its result (`clean` / `hit at file:line → fixed by <change>`).
|
|
74
74
|
2. The backstop greps run, with results.
|
|
75
|
-
3. For any client gate added, file:line of its **server-side twin** (or an explicit note the server check already exists
|
|
75
|
+
3. For any client gate added, the file:line of its **server-side twin** (or an explicit note that the server check already exists and where).
|
|
76
76
|
|
|
77
77
|
## Gotcha
|
|
78
78
|
|
|
79
|
-
- Modern browsers default `_blank` to `noopener`, but legacy/embedded webviews
|
|
79
|
+
- Modern browsers default `_blank` to `noopener`, but legacy/embedded webviews do not — keep the `rel` for portability.
|
|
80
80
|
- `NEXT_PUBLIC_`/`VITE_` on a *genuinely* public value (a publishable analytics ID) is fine; the violation is a *sensitive* name behind that prefix. Read the name, don't blanket-block the prefix.
|
|
81
81
|
- A sanitizer (DOMPurify) is the fix only when HTML output is actually required; if plain text suffices, render text and skip the dependency.
|
|
82
|
-
- Client-side validation
|
|
82
|
+
- Client-side validation is not wrong — it is wrong *as the only* enforcement. Keep it for UX; add the server twin.
|
|
83
83
|
|
|
84
84
|
## Do NOT
|
|
85
85
|
|