@event4u/agent-config 14.23.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +198 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/agent-handoff.md +8 -7
- package/dist/agent-src/commands/agents/init.md +1 -1
- package/dist/agent-src/commands/agents/user/accept.md +4 -4
- package/dist/agent-src/commands/agents/user/delete.md +2 -2
- package/dist/agent-src/commands/agents/user/init.md +3 -3
- package/dist/agent-src/commands/agents/user/review.md +3 -3
- package/dist/agent-src/commands/agents/user/show.md +3 -3
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +6 -6
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +2 -2
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/inbox.md +5 -5
- package/dist/agent-src/commands/analyze/incident.md +3 -3
- package/dist/agent-src/commands/analyze/near-miss.md +3 -3
- package/dist/agent-src/commands/analyze/postmortem.md +4 -4
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/analyze.md +2 -2
- package/dist/agent-src/commands/bug/fix.md +1 -1
- package/dist/agent-src/commands/bug/investigate.md +2 -2
- package/dist/agent-src/commands/cost/profile.md +3 -3
- package/dist/agent-src/commands/design.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +2 -2
- package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/show.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +9 -9
- package/dist/agent-src/commands/humanize.md +6 -6
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/judge/solo.md +1 -1
- package/dist/agent-src/commands/judge.md +1 -1
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +2 -2
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/add.md +3 -3
- package/dist/agent-src/commands/memory/load.md +4 -4
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +4 -4
- package/dist/agent-src/commands/memory/propose.md +2 -2
- package/dist/agent-src/commands/mode.md +5 -5
- package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
- package/dist/agent-src/commands/post-as/me.md +7 -7
- package/dist/agent-src/commands/pr/create.md +1 -1
- package/dist/agent-src/commands/pr/merge.md +1 -1
- package/dist/agent-src/commands/profile/activate.md +1 -1
- package/dist/agent-src/commands/profile/show.md +1 -1
- package/dist/agent-src/commands/research/deep.md +2 -2
- package/dist/agent-src/commands/research/report.md +2 -2
- package/dist/agent-src/commands/review/changes.md +1 -1
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +2 -2
- package/dist/agent-src/commands/roadmap/next.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +2 -2
- package/dist/agent-src/commands/security-audit-config.md +3 -3
- package/dist/agent-src/commands/skill/preview.md +1 -1
- package/dist/agent-src/commands/skills/discover.md +1 -1
- package/dist/agent-src/commands/sync/agent-settings.md +2 -2
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
- package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
- package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
- package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
- package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
- package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
- package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
- package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
- package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
- package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
- package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
- package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
- package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
- package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
- package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
- package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
- package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
- package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
- package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
- package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
- package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
- package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
- package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
- package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
- package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
- package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
- package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
- package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
- package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
- package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
- package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
- package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
- package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
- package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
- package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
- package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
- package/dist/agent-src/guidelines/code-clarity.md +350 -0
- package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
- package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
- package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
- package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
- package/dist/agent-src/guidelines/design-canon.md +63 -0
- package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
- package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
- package/dist/agent-src/guidelines/design-modes.md +143 -0
- package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
- package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
- package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
- package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
- package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
- package/dist/agent-src/guidelines/php/api-design.md +115 -0
- package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
- package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
- package/dist/agent-src/guidelines/php/controllers.md +90 -0
- package/dist/agent-src/guidelines/php/database.md +194 -0
- package/dist/agent-src/guidelines/php/eloquent.md +208 -0
- package/dist/agent-src/guidelines/php/flux.md +80 -0
- package/dist/agent-src/guidelines/php/general.md +207 -0
- package/dist/agent-src/guidelines/php/git.md +164 -0
- package/dist/agent-src/guidelines/php/jobs.md +111 -0
- package/dist/agent-src/guidelines/php/livewire.md +71 -0
- package/dist/agent-src/guidelines/php/logging.md +79 -0
- package/dist/agent-src/guidelines/php/naming.md +89 -0
- package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
- package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
- package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
- package/dist/agent-src/guidelines/php/patterns.md +28 -0
- package/dist/agent-src/guidelines/php/performance.md +92 -0
- package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
- package/dist/agent-src/guidelines/php/resources.md +100 -0
- package/dist/agent-src/guidelines/php/security.md +110 -0
- package/dist/agent-src/guidelines/php/sql.md +97 -0
- package/dist/agent-src/guidelines/php/validations.md +119 -0
- package/dist/agent-src/guidelines/php/websocket.md +100 -0
- package/dist/agent-src/guidelines/prompt-templates.md +189 -0
- package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
- package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
- package/dist/agent-src/personas/README.md +1 -1
- package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
- package/dist/agent-src/personas/product-owner.md +1 -1
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
- package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
- package/dist/agent-src/rules/code-comment-discipline.md +2 -2
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/content-quoting-floor.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +5 -5
- package/dist/agent-src/rules/cross-source-consistency.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +36 -46
- package/dist/agent-src/rules/direct-answers.md +2 -2
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/icon-consistency.md +5 -1
- package/dist/agent-src/rules/improve-before-implement.md +1 -1
- package/dist/agent-src/rules/language-and-tone.md +3 -3
- package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +2 -2
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/role-mode-adherence.md +2 -2
- package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
- package/dist/agent-src/rules/size-enforcement.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +2 -2
- package/dist/agent-src/rules/think-before-action.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +7 -5
- package/dist/agent-src/rules/ui-audit-gate.md +3 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
- package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
- package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
- package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
- package/dist/agent-src/skills/code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
- package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
- package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
- package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
- package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
- package/dist/agent-src/skills/design-review/SKILL.md +4 -4
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
- package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
- package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
- package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
- package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
- package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
- package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
- package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
- package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
- package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +3 -3
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
- package/dist/agent-src/skills/org-design/SKILL.md +1 -1
- package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
- package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
- package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
- package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +11 -5
- package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
- package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
- package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
- package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +6 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +2 -2
- package/dist/agent-src/user-types/_template/user-type.md +1 -1
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
- package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -6
- package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
- package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
- package/dist/cli-delegate/{chunk-KCNTUSPI.js → chunk-AK6HODNQ.js} +4 -4
- package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
- package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
- package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
- package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +4 -4
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +3 -3
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +1 -1
- package/dist/cli-delegate/cmd_settings_get.js +15 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +41 -11
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +22 -75
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +5 -7
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +4 -6
- package/dist/hooks/dispatch.js +8607 -8930
- package/dist/install/install.mjs +35 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1433 -1342
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +73 -0
- package/dist/scripts/_lib/agent_src.js +20 -0
- package/dist/scripts/_lib/guidelines_lane.js +158 -0
- package/dist/scripts/condense.js +2 -5
- package/dist/server/io/yamlIO.js +125 -17
- package/dist/server/schemas/settings.js +18 -4
- package/dist/shared/settingsSurface.js +6 -1
- package/docs/contracts/settings-classes.md +18 -9
- package/docs/guidelines/abstraction-thresholds.md +35 -0
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
- package/docs/guidelines/agent-infra/false-green.md +2 -2
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
- package/docs/guidelines/design-fidelity-mechanics.md +4 -0
- package/docs/guidelines/design-fidelity-routing.md +78 -0
- package/docs/guidelines/design-reconciliation.md +172 -0
- package/docs/guidelines/gtm-handoff.md +2 -2
- package/docs/guidelines/wing4-handoff.md +2 -2
- package/package.json +7 -3
- package/src/config/agent-settings.template.yml +55 -8
- package/src/config/ci-local-parity.yml +34 -0
- package/src/config/continuity-surface.json +4 -32
- package/src/config/gate-coverage.yml +31 -8
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +3 -3
- package/src/config/hook-token-budget.json +1 -1
- package/src/config/host-injection-effect.json +2 -2
- package/src/config/pack-size-budget.json +55 -4
- package/src/config/platform-anchor.json +47 -0
- package/src/config/preamble-payload-budget.json +2 -3
- package/src/config/publish-surface.json +4 -2
- package/src/config/ratification-policy.json +7 -0
- package/src/config/rule-stub-ceilings.json +16 -9
- package/src/scripts/_cli/cmd_settings_get.ts +22 -7
- package/src/scripts/_lib/agent_settings.ts +85 -0
- package/src/scripts/_lib/agent_src.ts +21 -0
- package/src/scripts/_lib/artifact_maturity.ts +242 -0
- package/src/scripts/_lib/conformance_report.ts +403 -0
- package/src/scripts/_lib/continuity_writer.ts +72 -13
- package/src/scripts/_lib/design_system_import.ts +20 -0
- package/src/scripts/_lib/design_tolerance.ts +281 -0
- package/src/scripts/_lib/guidelines_lane.ts +164 -0
- package/src/scripts/_lib/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/security_lint.ts +23 -2
- package/src/scripts/_lib/self_repair.ts +21 -0
- package/src/scripts/_lib/session_index_trust.ts +42 -1
- package/src/scripts/_lib/standing_bound_ratchet.ts +103 -37
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
- package/src/scripts/autonomy_friction_traffic.ts +379 -0
- package/src/scripts/check_kernel_edit_ratified.ts +462 -0
- package/src/scripts/check_loss_class_declared.ts +793 -46
- package/src/scripts/check_platform_anchor.ts +390 -0
- package/src/scripts/check_preamble_payload_budget.ts +292 -4
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/code_graph/cli.ts +6 -0
- package/src/scripts/condense.ts +2 -6
- package/src/scripts/generate_host_cost_table.ts +354 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +35 -27
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/session_eol_hook.ts +68 -154
- package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
- package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
- package/src/scripts/hot_context_hook.ts +41 -401
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/session_memory_index.ts +5 -0
- package/src/scripts/sync_agent_settings.ts +270 -10
- package/src/server/io/yamlIO.ts +127 -17
- package/src/server/schemas/settings.ts +25 -5
- package/src/shared/settingsSurface.ts +13 -2
- package/src/templates/compact-instructions.md +8 -3
- package/dist/agent-src/commands/chat-history/import.md +0 -170
- package/dist/agent-src/commands/chat-history.md +0 -63
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Cross-Role Handoff
|
|
2
|
+
|
|
3
|
+
Wing-specific prose for senior-tier skills handing off across role
|
|
4
|
+
boundaries. The mechanical contract — initiator → delegated(input) →
|
|
5
|
+
output, lint rules, worktree boundary — lives in
|
|
6
|
+
[`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md).
|
|
7
|
+
This guideline covers **when a role hands off to another role**,
|
|
8
|
+
**how to phrase the routing**, and the **L4 / C8 boundary**.
|
|
9
|
+
|
|
10
|
+
## Wings at a glance
|
|
11
|
+
|
|
12
|
+
The senior catalog spans four wings. Each wing owns a cognition
|
|
13
|
+
cluster and emits artifacts the other wings can consume.
|
|
14
|
+
|
|
15
|
+
| Wing | Cluster | Senior skills (anchor examples) |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| **1. Engineering** | Code, architecture, debugging, review | `architecture-review-lens`, `bug-analyzer`, `judge-bug-hunter`, `blast-radius-analyzer` |
|
|
18
|
+
| **2. Product + Foundation** | Discovery, refinement, decisions | `po-discovery`, `refine-ticket`, `decision-record`, `rice-prioritization` |
|
|
19
|
+
| **3. GTM + Growth** | Customers, comms, funnel, channels | `customer-research` (L1), `release-comms` (L2), `funnel-analysis` |
|
|
20
|
+
| **4. Money + Strategy + Ops** | Unit economics, OKRs, capacity, risk | `unit-economics-modeling`, `okr-tree-modeling`, `dcf-modeling`, `risk-officer` |
|
|
21
|
+
|
|
22
|
+
A handoff is **cross-role** when the initiator and the delegate live
|
|
23
|
+
in different wings (or in different cognition clusters within the
|
|
24
|
+
same wing). Same-cluster delegation is normal composition and does
|
|
25
|
+
not need this guideline.
|
|
26
|
+
|
|
27
|
+
## When to hand off
|
|
28
|
+
|
|
29
|
+
A senior skill SHOULD hand off — not absorb — when any of the four
|
|
30
|
+
fires:
|
|
31
|
+
|
|
32
|
+
1. **Different cognition cluster.** The downstream step needs a
|
|
33
|
+
different mode of thinking (numbers vs. narrative; user vs.
|
|
34
|
+
system; risk vs. design). Absorbing it dilutes the skill.
|
|
35
|
+
2. **Different artifact owner.** The output naturally lives under a
|
|
36
|
+
different role's catalog (e.g. `forecast-band.json` belongs to
|
|
37
|
+
Wing-4, not Wing-2).
|
|
38
|
+
3. **Tier-mismatch risk.** Inlining the step would require
|
|
39
|
+
downgrading to a non-senior delegate; the cross-wing-handoff
|
|
40
|
+
linter blocks tier mismatches.
|
|
41
|
+
4. **Re-use evidence.** The step is already cited by ≥ 2 other
|
|
42
|
+
senior skills; absorbing it duplicates cognition.
|
|
43
|
+
|
|
44
|
+
If none fire, keep the step inline. Cross-role plumbing is not free.
|
|
45
|
+
|
|
46
|
+
## How to phrase the handoff
|
|
47
|
+
|
|
48
|
+
Two surfaces in the senior-skill template carry routing:
|
|
49
|
+
|
|
50
|
+
- **`## Related Skills` § *WHEN NOT to use this*** — the routing
|
|
51
|
+
list. One bullet per peer that owns the cognition the user might
|
|
52
|
+
expect from this skill but is wrong to ask here. Format:
|
|
53
|
+
*"X is the actual question — route to [`<peer>`](../<peer>/SKILL.md)"*.
|
|
54
|
+
- **`## Procedure` Composes line** — when the skill **does** call
|
|
55
|
+
another skill mid-procedure, declare it on a line beginning with
|
|
56
|
+
`Composes [`<peer>`](...)` so the linter can match the call site
|
|
57
|
+
to the delegate's `## Input` block.
|
|
58
|
+
|
|
59
|
+
The delegated skill's `## Input` block names the fields the initiator
|
|
60
|
+
must pass. Drift between the two is the failure the contract catches.
|
|
61
|
+
|
|
62
|
+
## Decision tree
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Need a downstream cognition step?
|
|
66
|
+
├── Same wing + same cluster? → keep inline (normal composition).
|
|
67
|
+
├── Different cluster, but no shipped senior peer?
|
|
68
|
+
│ └── Implement inline; flag for next plate's audit (the cluster
|
|
69
|
+
│ might need its own senior).
|
|
70
|
+
├── Different cluster + shipped senior peer + ≥ 2 reuse citations?
|
|
71
|
+
│ └── HAND OFF: declare in WHEN NOT block + Composes line.
|
|
72
|
+
└── Cross-wing chain (≥ 3 senior steps, ≥ 30 min each)?
|
|
73
|
+
└── Use `subagent-orchestration` mode 6 (worktrees) per
|
|
74
|
+
cross-wing-handoff.md § 3.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## L4 / C8 composition boundary
|
|
78
|
+
|
|
79
|
+
Council Q3 (2026-05-05) locks the disambiguation between L4
|
|
80
|
+
`stakeholder-tradeoff` and the sibling C8 `code-review-multi-lens`:
|
|
81
|
+
|
|
82
|
+
- **L4 fires** when a request crosses two stakeholder lenses
|
|
83
|
+
(engineering ↔ PO, PO ↔ ops, ops ↔ infra) and the trade-off is
|
|
84
|
+
**not yet code**. Output is a trade-off matrix + recommendation +
|
|
85
|
+
dissent log; the artifact is consumable by a roadmap or PR
|
|
86
|
+
description, not by a diff.
|
|
87
|
+
- **C8 fires** when the request **is already code** — PR open, draft
|
|
88
|
+
branch under review, or a diff supplied as input. Output is a
|
|
89
|
+
multi-lens code review (security · architecture · tests · quality)
|
|
90
|
+
bound to file:line spans.
|
|
91
|
+
- **C8 → L4 escalation.** A C8 verdict that surfaces a stakeholder
|
|
92
|
+
conflict — e.g. test-coverage judge fails but PO insists on
|
|
93
|
+
shipping — becomes **input to L4**. The escalation is one-way:
|
|
94
|
+
L4 produces the dissent log that decides whether C8's verdict
|
|
95
|
+
is overridden, with the override recorded in
|
|
96
|
+
[`decision-record`](../skills/decision-record/SKILL.md).
|
|
97
|
+
|
|
98
|
+
The boundary keeps the two skills sharp — neither absorbs the other —
|
|
99
|
+
and gives the agent a deterministic rule for which one to load when
|
|
100
|
+
both look applicable.
|
|
101
|
+
|
|
102
|
+
## Worked example
|
|
103
|
+
|
|
104
|
+
A PO refining a ticket (Wing-2) hits a sentence like *"the cheapest
|
|
105
|
+
acquisition channel is paid search, but only if CAC payback < 6 months"*:
|
|
106
|
+
|
|
107
|
+
1. Wing-2 is the initiator (`refine-ticket`).
|
|
108
|
+
2. The CAC question is Wing-4 cognition — `unit-economics-modeling`.
|
|
109
|
+
3. `refine-ticket` hands off via:
|
|
110
|
+
- WHEN NOT entry: *"CAC / payback questions — route to
|
|
111
|
+
[`unit-economics-modeling`](../skills/unit-economics-modeling/SKILL.md)"*.
|
|
112
|
+
- Composes line in the procedure step that needs the answer.
|
|
113
|
+
4. The delegate's `## Input` block lists the fields (channel,
|
|
114
|
+
cohort, time horizon); `refine-ticket` passes them.
|
|
115
|
+
5. The output (`payback-band.md`) feeds the AC of the original ticket.
|
|
116
|
+
|
|
117
|
+
No cluster collision, no tier mismatch, no untyped drift.
|
|
118
|
+
|
|
119
|
+
## See also
|
|
120
|
+
|
|
121
|
+
- [`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md)
|
|
122
|
+
— the mechanical contract this guideline cites.
|
|
123
|
+
- [`docs/contracts/context-spine.md`](../contracts/context-spine.md)
|
|
124
|
+
— orthogonal context-slot mechanism, often used together with a
|
|
125
|
+
handoff (e.g. delegate reads `team` slot the initiator opted in to).
|
|
126
|
+
- `.agent-src.uncondensed/skills/subagent-orchestration/SKILL.md` § mode 6
|
|
127
|
+
— when the chain runs in fresh worktrees.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Routing eval for design-antipatterns guideline: should an agent pull this catalog for a given task?",
|
|
3
|
+
"should_pull": [
|
|
4
|
+
"Design a landing page for a new SaaS product",
|
|
5
|
+
"Review this UI mockup for AI-slop patterns",
|
|
6
|
+
"Create a feature card section with icons and descriptions",
|
|
7
|
+
"Generate a hero section with a big metric and supporting stats",
|
|
8
|
+
"The design looks generic — how do I make it more distinctive?",
|
|
9
|
+
"Remove the rocket emojis from the hero buttons — it looks AI-generated"
|
|
10
|
+
],
|
|
11
|
+
"should_not_pull": [
|
|
12
|
+
"Fix the authentication bug in the login controller",
|
|
13
|
+
"Write a migration to add the user_id column to the orders table",
|
|
14
|
+
"Set up the CI pipeline for the monorepo",
|
|
15
|
+
"Draft a customer email reply for a billing issue",
|
|
16
|
+
"Analyze the test coverage for the payment module"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Design Anti-Patterns — AI-Slop Catalog
|
|
2
|
+
|
|
3
|
+
> Lazy-loaded reference guideline. Pull this before proposing, generating, or
|
|
4
|
+
> reviewing any UI. Used by `design-intelligence`, `fe-design`, `design-review`,
|
|
5
|
+
> `existing-ui-audit`.
|
|
6
|
+
|
|
7
|
+
This catalog enumerates patterns that make AI-generated UI **recognizably
|
|
8
|
+
AI-generated**. Every entry carries a concrete override condition — the goal is
|
|
9
|
+
not prohibition but deliberateness. A pattern on this list used *knowingly* for
|
|
10
|
+
a specific brief is a design decision; used *reflexively* from a default, it is
|
|
11
|
+
slop.
|
|
12
|
+
|
|
13
|
+
**How to use:** Before generating UI, scan the applicable category. Flag any
|
|
14
|
+
pattern you were about to reach for. Either (a) choose a different approach, or
|
|
15
|
+
(b) invoke the override condition and state the reason explicitly in the brief.
|
|
16
|
+
|
|
17
|
+
**Agent self-check principle:** These are guidance rules, not linter rules. The
|
|
18
|
+
agent reads the brief, checks its first impulse against this catalog, and adjusts
|
|
19
|
+
or overrides. The enforceable subset (contrast ratio, font-size, heading
|
|
20
|
+
hierarchy, reduced-motion, focus indicator) is in `lint_design_quality`
|
|
21
|
+
(Phase 5).
|
|
22
|
+
|
|
23
|
+
**Who owns what (boundary — avoid drift):**
|
|
24
|
+
|
|
25
|
+
| Layer | Owns | Artifact |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| **Guidance** | Subjective taste — Visual / Typography / Color / Layout / Copy patterns, override judgment, the originality self-test | this catalog |
|
|
28
|
+
| **Enforcement** | Objective floors — Q1–Q6 (WCAG contrast, font-size, line-length, reduced-motion, heading hierarchy, focus indicator) as exit-code-2 CI | `lint_design_quality` |
|
|
29
|
+
| **Detection** | Deterministic *aesthetic-tell* flags (P0–P3, rebuttable via DESIGN.md) — the pattern-detectable subset of the entries below | `lint_design_slop` |
|
|
30
|
+
| **Audit method** | HOW to test WCAG (keyboard nav, ARIA, screen-reader procedures) | `accessibility-auditor` |
|
|
31
|
+
| **Stack manifestation** | Concrete Tailwind class / hex bans, shadcn defaults | `tailwind-engineer`, `react-shadcn-ui` (per `framework-neutrality-in-generic-skills`) |
|
|
32
|
+
| **Register** | Brand mode vs product mode — which patterns apply | `docs/guidelines/design-modes.md` |
|
|
33
|
+
|
|
34
|
+
This catalog is the canonical *index*; it states the pattern stack-agnostically.
|
|
35
|
+
The stack-specific bans live in the apply skills and link back here by entry ID.
|
|
36
|
+
The objective floors are cited from the linter, never re-eyeballed by an agent.
|
|
37
|
+
|
|
38
|
+
**Deterministic detector backing** (`lint_design_slop`, dependency-free, zero
|
|
39
|
+
runtime token cost): a pattern-detectable subset of these entries has a
|
|
40
|
+
deterministic rule that `design-review` cites instead of re-deriving (rule ids
|
|
41
|
+
`slop-<id>-*`, registry in `src/scripts/design_slop_rules.ts`). These are
|
|
42
|
+
**flags / rebuttable presumptions**, never hard blocks — a consumer `DESIGN.md`
|
|
43
|
+
that declares the pattern as intentional suppresses the flag.
|
|
44
|
+
|
|
45
|
+
Which entries those are is **not** enumerated here. The enumeration lives in
|
|
46
|
+
[§ Detector status](#detector-status) below, where every entry carries exactly
|
|
47
|
+
one status and `lint_design_antipattern_parity` checks the `backed` rows against
|
|
48
|
+
the registry on every run. A second hand-maintained list in this paragraph is
|
|
49
|
+
precisely the drift the gate exists to prevent, so there is only one.
|
|
50
|
+
|
|
51
|
+
## Current-generation tells (generation-dated — review 2026-Q4)
|
|
52
|
+
|
|
53
|
+
Default-template signatures rotate as model defaults rotate; naming the
|
|
54
|
+
*current* one is more actionable than a timeless list. The entries below stay
|
|
55
|
+
in their own categories — this section only tracks which combination reads as
|
|
56
|
+
*this year's* generated default, so the first-impulse check has one dated
|
|
57
|
+
pointer instead of a scattered mental list. As of **2026-07**:
|
|
58
|
+
|
|
59
|
+
- **This generation — "warm editorial":** cream/sand background + serif display
|
|
60
|
+
+ brass/clay/terracotta accent (catalog **C5** + **T2** + **T7** Instrument
|
|
61
|
+
Serif). This is now the reflexive "sophisticated / premium" reach — exactly
|
|
62
|
+
the role the purple/cyan gradient played for the previous generation.
|
|
63
|
+
- **Previous generation — "gradient dark":** purple/violet + cyan-on-dark with
|
|
64
|
+
gradient text (**C1** + **C2**). Still a tell, now dated rather than current.
|
|
65
|
+
|
|
66
|
+
**Review trigger:** re-confirm this section whenever a new frontier-model
|
|
67
|
+
generation ships a visibly different default aesthetic. It is a *when-does-it-
|
|
68
|
+
rotate* note, not a new pattern — never add a tell here that lacks a catalog
|
|
69
|
+
entry in the sections below.
|
|
70
|
+
|
|
71
|
+
### The three census columns — class, remediation, verification
|
|
72
|
+
|
|
73
|
+
`Class` says what KIND of rule an entry is; **status** (§ Detector status) says
|
|
74
|
+
how its enforcement is wired. The two axes are independent, and a reader who
|
|
75
|
+
conflates them draws the wrong conclusion in both directions: a `floor` may be
|
|
76
|
+
`judgment-only` because nothing can detect it yet, and a `style-preference` may
|
|
77
|
+
be `backed` because it happens to be trivially greppable. Detectability is not
|
|
78
|
+
authority.
|
|
79
|
+
|
|
80
|
+
- **Class** — one of `floor` (an objective threshold, accessibility or
|
|
81
|
+
correctness) · `invariant` (a structural rule that must hold) ·
|
|
82
|
+
`craft-presumption` (a default a competent designer usually follows,
|
|
83
|
+
overridable on evidence) · `style-preference` (taste) ·
|
|
84
|
+
`reference-constraint` (bound to a supplied reference, brand, or `DESIGN.md`).
|
|
85
|
+
The two soft classes lose to a supplied reference artifact, a coherent
|
|
86
|
+
incumbent, and a project `DESIGN.md` — asserted on the resolver in
|
|
87
|
+
`src/scripts/_lib/ui_authority.ts` rather than stated here as prose.
|
|
88
|
+
- **Remediation** — the order to try, worst-first: `delete` before `reduce`
|
|
89
|
+
before `retune`, with `replace` where the pattern has a direct substitute.
|
|
90
|
+
- **Verification** — how a fix is checked: `static` (readable from the source)
|
|
91
|
+
· `render` (needs the rendered surface) · `feel` (perceptual, per the `feel`
|
|
92
|
+
evidence type in `docs/contracts/evidence-artifact-types.md`) · `judgment`.
|
|
93
|
+
|
|
94
|
+
### Consistency Locks & layout caps (taste-dials roadmap)
|
|
95
|
+
|
|
96
|
+
Within-project invariants + repetition caps. Override = declare the value in
|
|
97
|
+
`DESIGN.md` (`## Consistency Locks` / a brutalist or uniform-grid style note).
|
|
98
|
+
|
|
99
|
+
| # | Pattern | Why it reads as AI-generated | Override condition | Class | Remediation | Verification |
|
|
100
|
+
|---|---|---|---|---|---|---|
|
|
101
|
+
| V8 | Shape Lock — ≥ 4 distinct corner-radius scales in one surface | A fragmented radius system reads as no shape decision | Declare the radius scale in `DESIGN.md`; a genuine multi-tier scale documents each tier | invariant | reduce → retune | static |
|
|
102
|
+
| C6 | Colour Lock — ≥ 3 distinct saturated accent hue families | No single accent identity; reads as default-palette sprawl | Brand genuinely uses a multi-accent system, declared in `DESIGN.md` / `brand-to-tokens` | invariant | reduce → retune | static |
|
|
103
|
+
| C7 | Theme inversion — a light island mid-dark surface (or vice versa) not driven by the theme system | Mid-surface inversion breaks the theme rhythm | Intentional inverted callout with a documented reason — **judgment-only**, design-review calls it (deterministic detection is unreliable) | craft-presumption | delete → retune | judgment |
|
|
104
|
+
| L9 | Section monotony — ≥ 8 sections, < 4 distinct layout families | Uniform section rhythm collapses scannability | Deliberately uniform grid (e.g. a gallery), declared as such | craft-presumption | retune | render |
|
|
105
|
+
| L10 | Zigzag — > 2 consecutive image-left/text-right two-column sections | The alternating-zigzag landing-page tell | A genuinely sequenced walkthrough where alternation aids comprehension | craft-presumption | delete → retune | static |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Visual
|
|
110
|
+
|
|
111
|
+
| # | Pattern | Why it reads as AI-generated | Override condition | Class | Remediation | Verification |
|
|
112
|
+
|---|---|---|---|---|---|---|
|
|
113
|
+
| V1 | A colored accent border above 1px — the side stripe (`border-left` / `border-right`), a fully colored border on all four sides, or a gradient `border-image` | The single most recognizable AI-UI signature; every scaffold-default card uses it. Widened 2026-09-03: the side stripe was the 2024 form, the four-sided colored or gradient card border is the current one, and the entry as written reached only the first | Brand token explicitly defines the accent border; document the decision in the design brief. A 1px neutral border, a `border-color`-only focus treatment, and `transparent` / `currentColor` at any width are not accents and do not flag | craft-presumption | delete → retune | static |
|
|
114
|
+
| V2 | Glassmorphism as decoration (`backdrop-blur` + `bg-white/10`) with no functional depth hierarchy | Model defaults to it for "premium feel"; result looks like 2021 Material You clip-art | Element genuinely sits above a complex, blurred background layer; use sparingly and only for top-level floating surfaces | craft-presumption | delete → reduce | static |
|
|
115
|
+
| V3 | Ghost card: `border: 1px solid` + box-shadow ≥ 16px spread together | The combination creates visual noise — the ghost card signals no confident decision about depth | Choose either border OR shadow to indicate depth; never both on the same surface | invariant | delete → reduce | static |
|
|
116
|
+
| V4 | Over-rounded small cards or badges: `border-radius` > 16px on elements < 200px wide | Excessive rounding on small surfaces looks toy-ish; standard cap is 12–16px | Pill shape (`border-radius: 9999px`) is intentional on single-line tags/chips only | craft-presumption | retune | static |
|
|
117
|
+
| V5 | Hand-drawn or illustrated SVG icons mixed with crisp icon-system icons | Visual register collision; instantly reads as "generated asset" | Intentional illustrative section (hero illustration, empty-state art); isolate from the icon system | invariant | replace | render |
|
|
118
|
+
| V6 | Repeating diagonal stripes as a background texture | A cliché background default; reads as generated CSS art | Brand explicitly uses pattern backgrounds (e.g., a textile brand); document the stripe definition | style-preference | delete | static |
|
|
119
|
+
| V7 | Nested cards: a card inside a card inside a card | Depth hierarchy collapses; user cannot parse elevation intent | A truly three-level hierarchy (e.g., project → board → card); ensure each level has distinct visual weight | invariant | delete → reduce | render |
|
|
120
|
+
| V9 | Noise or grain texture laid over a gradient as a "premium" surface default | The visual sibling of V6's diagonal stripes — a generated-CSS-art texture reached for to make a flat gradient look considered, applied because it is available rather than because the surface needed a texture | The texture is part of a documented brand surface treatment (a print-inspired or analog-photographic identity) with the grain opacity defined as a token, not chosen per surface | style-preference | delete | render |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Typography
|
|
125
|
+
|
|
126
|
+
| # | Pattern | Why it reads as AI-generated | Override condition | Class | Remediation | Verification |
|
|
127
|
+
|---|---|---|---|---|---|---|
|
|
128
|
+
| T1 | Flat type hierarchy: body and headings use the same optical weight and nearly the same size | Type hierarchy is invisible; user cannot scan the page | Deliberately minimal aesthetic where all text is body-weight; must be an explicit brand decision | craft-presumption | retune | render |
|
|
129
|
+
| T2 | Oversized italic serif as the primary hero headline | The "AI startup landing page" template; seen on ~60% of AI-generated marketing pages | Brand adopts editorial-magazine aesthetic with a documented italic serif rationale | style-preference | replace | render |
|
|
130
|
+
| T3 | Icon tile (small rounded-square container) above heading | The universal AI feature-card template; reads as scaffold | Listed features genuinely benefit from visual-icon-then-title affordance AND the icons are custom, not library defaults | style-preference | delete | static |
|
|
131
|
+
| T4 | Eyebrow / ALL-CAPS label above every section heading | Overuse collapses the emphasis; maximum is 1 eyebrow per 3 sections (countable: grep tracking classes) | Used for genuine section-type differentiation with meaningful vocabulary (not just "FEATURES", "PRICING") | craft-presumption | delete → reduce | static |
|
|
132
|
+
| T5 | Repeated section kickers ("Our mission", "What we offer", "Why choose us") | Filler vocabulary; every AI-generated page has the same three section titles | Every kicker is substantive and uses brand-specific vocabulary, not generic marketing speak | craft-presumption | replace | judgment |
|
|
133
|
+
| T6 | Crushed letter-spacing on display text (`letter-spacing` < −0.04em) | Below −0.04em glyphs collide optically; reads as "designer-ish effect" with no grounding | Intentional tight display treatment with a documented minimum floor; verify at the actual render size | floor | retune | static |
|
|
134
|
+
| T7 | Overused fonts without a stated reason: Inter, Roboto, DM Sans, Geist, Space Grotesk, Instrument Serif | These are the default AI-coding-tool font picks; every generated UI uses one of them | **Register-scoped.** In the **brand** register: the brand has explicitly adopted one of these AND there is a documented reason. In the **product** register: a single reliable family is the sanctioned strategy ([`design-modes`](design-modes.md) § The two registers), so one of these is legitimate on a **stated** product-register choice — the register itself is the reason, and it must be stated (DESIGN.md, the surface brief, or `design-slop-disable`). Neither register admits an *undeclared* pick. | reference-constraint | replace | judgment |
|
|
135
|
+
| T8 | Single typeface for everything | Missed typographic contrast opportunity; in the **brand** register an unexamined single family reads as "I did not think about fonts" | **Register-scoped like T7.** Intentional mono-typeface aesthetic (e.g., terminal-inspired), stated in the brief — *or* the **product** register, where one reliable family is the sanctioned strategy ([`design-modes`](design-modes.md) § The two registers) and contrast is carried by weight and scale rather than by a second family. | reference-constraint | retune | judgment |
|
|
136
|
+
| T9 | All-caps body paragraphs or field labels | Reduces legibility below WCAG AA for sustained reading; reads as flair over function | Short UI labels (e.g., button text in a brutalist layout); never for body paragraphs | floor | delete → retune | static |
|
|
137
|
+
| T10 | Wide letter-spacing on body text (`letter-spacing` > 0.05em) | Reduces readability for sustained reading; reserved for display use | Display text (headlines, pull quotes) where intentional tracking is a brand element | craft-presumption | retune | static |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Color
|
|
142
|
+
|
|
143
|
+
| # | Pattern | Why it reads as AI-generated | Override condition | Class | Remediation | Verification |
|
|
144
|
+
|---|---|---|---|---|---|---|
|
|
145
|
+
| C1 | Purple/violet + cyan-on-dark palette as the primary scheme | The most recognizable AI-UI color combination in 2024–2026; instantly signals "generated" | Brand color system genuinely defines a violet primary; must come from `brand-to-tokens`, not from model defaults | style-preference | replace | static |
|
|
146
|
+
| C2 | Gradient text via `background-clip: text` as a primary accent | Overused to the point of invisibility; also has rendering edge cases on some platforms | Headline treatment in a brand that explicitly uses gradient identity (e.g., a product whose logo is a gradient) | style-preference | delete | static |
|
|
147
|
+
| C3 | Glowing colored accents on dark mode (bright neon `box-shadow` or `text-shadow`) | Looks like a 2020 gaming UI; reads as an AI attempt at "moody" | Brand explicitly defines neon accents with a documented usage rule (e.g., error or alert states in a security product) | style-preference | delete → reduce | static |
|
|
148
|
+
| C4 | Gray text on colored background without WCAG AA check | Muted gray chosen for "elegance" often fails 4.5:1 contrast; the failure is invisible until audited | Any use — always verify the contrast ratio; if it fails, either darken the text or lighten/darken the background | floor | retune | static |
|
|
149
|
+
| C5 | Cream/sand body background (OKLCH L 0.84–0.97, C < 0.06) with brass/clay/oxblood accents | The 2025 "premium-consumer" AI palette; every generated "sophisticated" product uses this exact combination | Brand has an explicit warm-neutral design language documented in `brand-to-tokens`; the palette is first-party, not a default reach | style-preference | replace | static |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Layout
|
|
154
|
+
|
|
155
|
+
| # | Pattern | Why it reads as AI-generated | Override condition | Class | Remediation | Verification |
|
|
156
|
+
|---|---|---|---|---|---|---|
|
|
157
|
+
| L1 | Hero metric template: giant number, small label, 3–4 stats in a row, gradient | The default SaaS dashboard hero; appears on ~70% of AI-generated dashboard screens | Data storytelling genuinely requires a primary metric with supporting context; must vary the arrangement | craft-presumption | retune | render |
|
|
158
|
+
| L2 | Three identical feature cards in a grid with the same visual weight | The scaffold-default; no visual rhythm, no hierarchy among features | Product genuinely has three equally weighted features; must still vary padding, or use a different composition | craft-presumption | retune | render |
|
|
159
|
+
| L3 | Monotonous spacing: one spacing value (usually 24px) used for everything | Spacing is rhythm; uniform spacing collapses the hierarchy of proximity | Intentional grid where every element has equal weight; must document the grid definition | craft-presumption | retune | static |
|
|
160
|
+
| L4 | Numbered section markers (01 / 02 / 03) as a primary section-order device | Universal AI-generated marketing page tell; seen on virtually every generated landing page | A genuinely numbered process or sequenced guide where the step number carries meaning beyond decoration | style-preference | delete | static |
|
|
161
|
+
| L5 | Line length > 80ch in body copy without column constraint | Reduces readability; WCAG recommends 45–75 characters; beyond 80 the eye struggles to track | Data-dense dashboards where column width is driven by tabular data, not narrative text | floor | retune | render |
|
|
162
|
+
| L6 | `position: absolute` dropdown inside `overflow: hidden` container | Dropdown clips; a common AI-generated layout bug | Refactor: use `<dialog>`, the Popover API, or `position: fixed` / portal to escape the stacking context | invariant | replace | render |
|
|
163
|
+
| L7 | Content that overflows its container | Text truncation or reflow failures at non-default viewport widths; reads as untested | Never acceptable in production output; test at 320px, 768px, 1280px minimally | invariant | retune | render |
|
|
164
|
+
| L8 | Z-index values of 99, 999, 9999 without a semantic z-index scale | Magic numbers; the first time two elements compete, the scale breaks | Establish a named semantic z-index scale (`--z-modal: 400`, `--z-toast: 500`, etc.) and use it | invariant | replace | static |
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Motion
|
|
169
|
+
|
|
170
|
+
| # | Pattern | Why it reads as AI-generated | Override condition | Class | Remediation | Verification |
|
|
171
|
+
|---|---|---|---|---|---|---|
|
|
172
|
+
| M1 | Bounce or elastic easing curves on UI elements | Bounce draws attention to the animation itself; UI motion should serve the action, not perform | Intentional playful affordance (game UI, onboarding celebration state); must be brief and non-repeating | invariant | replace | feel |
|
|
173
|
+
| M2 | Animating layout properties (width, height, top, left, padding) | Triggers browser layout recalculation; janky on mid-range devices; always solvable with `transform` | Never — use `transform: scaleX()` for width-like effects, `transform: translateY()` for position | floor | replace | static |
|
|
174
|
+
| M3 | Animating `<img>` element on hover (scale, filter, transform) | Triggers composite + image decode; often causes content shift | Animate the card's background, border, or shadow instead; leave the image static | invariant | replace | render |
|
|
175
|
+
| M4 | `transition: all` shorthand | Animates every property including layout, color, opacity simultaneously; unpredictable and expensive | Enumerate only the properties that should animate: `transition: transform 200ms ease-out, opacity 200ms` | invariant | replace | static |
|
|
176
|
+
| M5 | Missing `@media (prefers-reduced-motion: reduce)` alternative for any animation | Accessibility violation; vestibular disorders make animated UI unusable | Never acceptable; always add a `prefers-reduced-motion` variant — gentler animation (reduced distance/opacity) is preferred over `display: none` | floor | delete → retune | static |
|
|
177
|
+
| M6 | Every section fading and rising into view on scroll | The most recognisable interaction tell of the current generation; a reveal applied per section carries no information — the reader has already scrolled to the content, so the animation delays what they asked for | The reveal carries meaning: a stepped narrative where each beat must land before the next, or a long-form article using position to signal progress. A reveal on *every* section is a default, not a decision | craft-presumption | delete → reduce | feel |
|
|
178
|
+
| M7 | A radial highlight tracking the pointer across a dark hero | A `mousemove` handler feeding a radial gradient; it draws the eye to the cursor, which is the one thing on the page the user already knows the position of | The spotlight is the interaction — a genuine reveal mechanic, a canvas inspection tool, an accessibility magnifier. Ambience is not a purpose | style-preference | delete | feel |
|
|
179
|
+
| M8 | An interactive control that reduces its own opacity on hover | Reads as the element retreating from the pointer rather than responding to it, and a fade is the one hover treatment that *reduces* legibility at the moment the user is committing to the target — see the six interaction states in [`design-review`](../skills/design-review/SKILL.md) | The fade communicates a real state change (an item being dismissed, a layer being peeled back). Hover must stay legible; brightness, background or border carry hover without spending contrast | craft-presumption | retune | feel |
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Copy
|
|
184
|
+
|
|
185
|
+
| # | Pattern | Why it reads as AI-generated | Override condition | Class | Remediation | Verification |
|
|
186
|
+
|---|---|---|---|---|---|---|
|
|
187
|
+
| CP1 | Em-dash (`—`) overuse | The #1 syntactic LLM signature; appears in AI copy at 3–5× the frequency of human editorial copy; maximum 2 per 500 words | Specific editorial voice that uses em-dashes deliberately; count them before shipping | craft-presumption | delete → reduce | static |
|
|
188
|
+
| CP2 | Marketing buzzwords: streamline, empower, supercharge, world-class, enterprise-grade, seamlessly, robust, leverage | These words carry no information; an AI-slop test: replace each with nothing — the sentence still communicates the same thing | No override; if a word can be deleted without loss, delete it | craft-presumption | delete | static |
|
|
189
|
+
| CP3 | Aphoristic manufactured contrast ("We don't do X. We do Y." / "Not just A, but B.") | A generated sentence rhythm that sounds like brand writing but carries no specificity | Aphoristic copy is legitimate when the contrast reveals a genuine product distinction; test by asking whether the Y side says something concrete | style-preference | delete → replace | judgment |
|
|
190
|
+
| CP4 | "Theater" framing — copy that announces what the product does without saying how or why | "The platform for modern teams." communicates nothing; it is content-shaped noise | Every tagline must pass the "so what" test: can a skeptic follow it with "but how?" and get a concrete answer? | craft-presumption | replace | judgment |
|
|
191
|
+
| CP5 | Emoji-decoration in UI markup — 🚀/✅/🎉 prepending headings, buttons, list items, or CTAs (`🚀 Get Started`) | Performative-enthusiasm coating; the default-startup-template tell. No emoji is better than decorative emoji | Brand/`DESIGN.md` declares a systematic emoji strategy, or the emoji is functional (status indicator, category marker tied to real meaning) | craft-presumption | delete | static |
|
|
192
|
+
| CP6 | Stock render subject named instead of the product's own subject matter — "floating abstract shapes", "gradient mesh", "glowing orb", "particle field", "futuristic HUD" | These name the default thing a render becomes when nobody decided what it is about; same delete-test as CP2, applied to art direction — swap the phrase for what the product actually shows and the brief says more | The subject IS abstract by decision (a generative-art surface, a data-driven field whose data is named), and the brief says which decision and why | craft-presumption | replace | judgment |
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Quality floors — measurable thresholds
|
|
197
|
+
|
|
198
|
+
These are not stylistic — they are objective quality failures detectable without
|
|
199
|
+
aesthetic judgment. The `lint_design_quality` CI linter enforces a subset of
|
|
200
|
+
these. The rest are agent self-checks.
|
|
201
|
+
|
|
202
|
+
| # | Threshold | Measurement | CI-enforced? |
|
|
203
|
+
|---|---|---|---|
|
|
204
|
+
| Q1 | Text contrast ≥ 4.5:1 normal / ≥ 3:1 large text (WCAG AA) | `contrastRatio(text, bg) < threshold` | Yes (`lint_design_quality`) |
|
|
205
|
+
| Q2 | Body `font-size` ≥ 14px (floor); ≥ 16px strongly preferred | Computed `font-size` on `p`, `li`, `td` | Yes |
|
|
206
|
+
| Q3 | Line length ≤ 75 characters (prose) | Character count before soft wrap | Yes |
|
|
207
|
+
| Q4 | All `@keyframes` / `animation` have a `prefers-reduced-motion` alternative | CSS `@media` check | Yes |
|
|
208
|
+
| Q5 | Heading levels not skipped (h1→h3 direct, not h1→h4) | DOM heading sequence | Yes |
|
|
209
|
+
| Q6 | All interactive elements have a `:focus-visible` indicator | CSS rule check | Yes |
|
|
210
|
+
| Q7 | Display `letter-spacing` floor: ≥ −0.04em (tighter reads cramped) | Computed tracking | Agent self-check |
|
|
211
|
+
| Q8 | `line-height` ≥ 1.3 on body text | Computed `line-height` | Agent self-check |
|
|
212
|
+
| Q9 | Small-card `border-radius` cap: 12–16px (not 24px+) | Computed `border-radius` on elements < 200px | Agent self-check |
|
|
213
|
+
| Q10 | Body background: avoid OKLCH L 0.84–0.97, C < 0.06 (cream/sand) unless brand-defined | Color space calculation | Agent self-check |
|
|
214
|
+
| Q11 | Padding floors: ≥ 8px (inline elements), ≥ 16px (card/panel bodies) | Computed padding | Agent self-check |
|
|
215
|
+
| Q12 | Justified text only with CSS hyphenation (`hyphens: auto`) | Presence of `text-align: justify` without `hyphens` | Agent self-check |
|
|
216
|
+
| Q13 | Outward-artifact hygiene: no system internals — absolute workspace paths, skill/tool names, generator traces, config keys — in comments, metadata, or EXIF of deliverables that leave the workspace (HTML decks, prototypes, exports), unless the user asks for build provenance | Comment/metadata scan of the emitted artifact | Agent self-check |
|
|
217
|
+
|
|
218
|
+
Q13 is **output hygiene only** — it never restricts chat-side transparency to
|
|
219
|
+
the operator (what skills/tools ran stays fully answerable in conversation).
|
|
220
|
+
Converged via council (claude-sonnet-4-5 + gpt-4o, 2026-07-06): shared floor
|
|
221
|
+
here, referenced by artifact-producing skills, deliberately not a PII-rule
|
|
222
|
+
extension. Deterministic detection in `lint_design_slop` (path/trace grep) is
|
|
223
|
+
possible but deferred until a real incident.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Detector status
|
|
228
|
+
|
|
229
|
+
Every catalog entry above carries exactly one status. This table is the single
|
|
230
|
+
enumeration of what the deterministic detector covers, and
|
|
231
|
+
`src/scripts/lint_design_antipattern_parity.ts` checks it on every CI run: a
|
|
232
|
+
`backed` row whose id is not in the registry fails, a registry rule whose
|
|
233
|
+
`catalogId` is not `backed` here fails, and an entry missing from this table
|
|
234
|
+
fails. `Q*` floors are excluded — they are owned by `lint_design_quality` and
|
|
235
|
+
are listed in § Quality floors.
|
|
236
|
+
|
|
237
|
+
| Status | Meaning |
|
|
238
|
+
|---|---|
|
|
239
|
+
| `backed` | a deterministic rule exists in `design_slop_rules.ts` |
|
|
240
|
+
| `floor` | measurable and enforced, but as a `Q*` objective floor in `lint_design_quality`, not as an aesthetic tell |
|
|
241
|
+
| `judgment-only` | needs structural or aesthetic judgment a text pass cannot make; `design-review` decides it |
|
|
242
|
+
| `deferred` | pattern-detectable but a design-system opinion rather than a floor; deliberately not shipped |
|
|
243
|
+
| `candidate` | a numeric threshold stated in the entry, not yet detected — a status that must resolve to `backed` or `judgment-only`, never persist |
|
|
244
|
+
|
|
245
|
+
| Entry | Status | Note |
|
|
246
|
+
|---|---|---|
|
|
247
|
+
| V1 | backed | |
|
|
248
|
+
| V2 | judgment-only | decoration-vs-intent is the tell; a text pass cannot read intent |
|
|
249
|
+
| V3 | backed | |
|
|
250
|
+
| V4 | backed | |
|
|
251
|
+
| V5 | judgment-only | icon register collision is a visual-style comparison |
|
|
252
|
+
| V6 | backed | |
|
|
253
|
+
| V7 | judgment-only | DOM-structure nesting depth, measured too false-positive-prone |
|
|
254
|
+
| V8 | backed | |
|
|
255
|
+
| V9 | judgment-only | texture-over-gradient is a compositional judgment, and the pre-registered clean corpus contains no grain-over-gradient near-miss, so an M1 = 0 for a detector here would be a vacuous pass rather than measured precision |
|
|
256
|
+
| C1 | judgment-only | the tell is the combination *as the primary scheme*; which colours are primary is a judgment |
|
|
257
|
+
| C2 | backed | |
|
|
258
|
+
| C3 | backed | |
|
|
259
|
+
| C4 | floor | WCAG contrast, Q1 |
|
|
260
|
+
| C5 | backed | |
|
|
261
|
+
| C6 | judgment-only | demoted 2026-08-13 at M1 = 4 of 32 clean files; the rule counted every saturated hue, so one accent plus a semantic danger colour reached its threshold — which is correct design, not the tell this entry describes |
|
|
262
|
+
| C7 | judgment-only | theme inversion may be deliberate emphasis |
|
|
263
|
+
| T1 | judgment-only | requires comparing optical weight across the document |
|
|
264
|
+
| T2 | judgment-only | requires knowing which element is the hero |
|
|
265
|
+
| T3 | judgment-only | icon-tile stack; DOM-structure analysis, too false-positive-prone |
|
|
266
|
+
| T4 | backed | |
|
|
267
|
+
| T5 | judgment-only | copy phrase-list; that mechanism is council-rejected |
|
|
268
|
+
| T6 | backed | |
|
|
269
|
+
| T7 | backed | |
|
|
270
|
+
| T8 | deferred | typeface count is a design-system opinion, not a floor |
|
|
271
|
+
| T9 | backed | |
|
|
272
|
+
| T10 | backed | |
|
|
273
|
+
| L1 | judgment-only | composite structural template |
|
|
274
|
+
| L2 | judgment-only | three-identical-card grid; DOM-structure analysis |
|
|
275
|
+
| L3 | deferred | spacing-multiple uniformity is a design-system opinion |
|
|
276
|
+
| L4 | backed | |
|
|
277
|
+
| L5 | floor | line length, Q3 |
|
|
278
|
+
| L6 | judgment-only | requires an ancestor relation a flat text pass cannot establish |
|
|
279
|
+
| L7 | judgment-only | requires a render |
|
|
280
|
+
| L8 | backed | |
|
|
281
|
+
| L9 | backed | |
|
|
282
|
+
| L10 | backed | |
|
|
283
|
+
| M1 | backed | |
|
|
284
|
+
| M2 | backed | |
|
|
285
|
+
| M3 | backed | |
|
|
286
|
+
| M4 | backed | |
|
|
287
|
+
| M5 | floor | reduced-motion alternative, Q4 |
|
|
288
|
+
| M6 | judgment-only | two independent reasons, both measured: the scanner classifies no engine for plain `.ts` / `.js` (`lint_design_slop.ts` § enginesForExt), which is where a reveal hook normally lives; and the clean corpus contains zero `IntersectionObserver`, so an M1 = 0 would measure nothing. Promotion needs both closed first: a corpus carrying a legitimate near-miss for the signal, and a recorded decision on whether the scanner reaches `.ts` / `.js` |
|
|
289
|
+
| M7 | judgment-only | same two reasons as M6: no engine for `.ts` / `.js`, and zero `mousemove` and zero `radial-gradient` in the clean corpus |
|
|
290
|
+
| M8 | judgment-only | the corpus carries no `:hover { opacity }` at all, and its only `opacity` occurrences sit inside a `@keyframes` block, so it cannot separate a hover fade from a legitimate transition |
|
|
291
|
+
| CP1 | backed | |
|
|
292
|
+
| CP2 | backed | |
|
|
293
|
+
| CP3 | judgment-only | copy phrase-list; that mechanism is council-rejected |
|
|
294
|
+
| CP4 | judgment-only | copy phrase-list; that mechanism is council-rejected |
|
|
295
|
+
| CP5 | backed | |
|
|
296
|
+
| CP6 | backed | copy-engine phrase list, same mechanism as CP2; a CSS engine cannot see subject matter |
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## The AI-slop originality self-test
|
|
301
|
+
|
|
302
|
+
Before finalizing any UI design, run this two-tier check:
|
|
303
|
+
|
|
304
|
+
1. **Category test:** Could someone guess the aesthetic from the product
|
|
305
|
+
category alone? (e.g., "SaaS → dark mode + purple gradient" /
|
|
306
|
+
"fintech → navy + gold" / "health → teal + rounded sans"). If yes,
|
|
307
|
+
rework the concept.
|
|
308
|
+
|
|
309
|
+
2. **Anti-reference test:** Could someone still guess it after knowing the
|
|
310
|
+
category AND having seen 3 references you explicitly avoided? If yes,
|
|
311
|
+
dig deeper. A direction that is merely "not the worst cliché" is still
|
|
312
|
+
a cliché.
|
|
313
|
+
|
|
314
|
+
The bar: a visitor should ask "how was this made?", not "which AI made this?"
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## See also
|
|
319
|
+
|
|
320
|
+
- `design-intelligence` — corpus-grounded style/color/typography selection
|
|
321
|
+
- `fe-design` — stack-agnostic heuristics (form, table, responsive, a11y)
|
|
322
|
+
- `design-review` — structured UI/UX review methodology
|
|
323
|
+
- `existing-ui-audit` — mandatory pre-step: inventory before designing
|
|
324
|
+
- `fe-design` § Motion — animation heuristics (should-it, which-easing, how-long), and the home of the interaction-layer guidance M6 and M8 name. Corrected 2026-09-03: this line used to point at `motion-choreographer`, which is a text-to-video prompt builder (`packs: [ai-video]`) and carries none of what the line described
|
|
325
|
+
- `typography-system` — modular-scale construction and pairing
|
|
326
|
+
- `accessibility-auditor` — WCAG audit method
|
|
327
|
+
- `brand-to-tokens` — first-party brand token extraction (the legitimate override source for most anti-patterns above)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Design Assets & Imagery — ownership, delivery, honesty
|
|
2
|
+
|
|
3
|
+
> What a visual artifact may ship as an asset, who delivers it, and what counts as fabricated evidence
|
|
4
|
+
|
|
5
|
+
_Split out of [`design-fidelity-mechanics`](design-fidelity-mechanics.md) § Asset & imagery discipline, which carries the obligation surface and routes here. The split is the per-file depth ceiling doing its job, exactly as it was for [`design-handover-extraction`](design-handover-extraction.md): the mechanics file crossed 16k when the artefact-maturity axis was migrated into it, and compressing this material to fit would have cost the ownership sentence ADR-205 rests on and the fixture ids that make each bullet falsifiable._
|
|
6
|
+
|
|
7
|
+
Visual artifacts carry **real assets or honest placeholders — never fabricated
|
|
8
|
+
brand evidence**. The design-surface instance of the no-invented-facts floor.
|
|
9
|
+
|
|
10
|
+
- **Copy owned assets through the project's accepted path.** Reference or copy
|
|
11
|
+
project-owned assets (logos, icons, fonts, images) via the target project's
|
|
12
|
+
asset directory/pipeline — never hotlink a design-system's internal URL, never
|
|
13
|
+
bulk-copy a huge source folder. (fixtures: `daf-missing-asset`, `daf-external-asset-url`.)
|
|
14
|
+
- **Third-party asset delivery is self-hosted by default — this section owns that
|
|
15
|
+
decision.** An asset whose delivery path crosses a third party (a webfont from
|
|
16
|
+
a font CDN, an icon set from a CDN, a hosted stylesheet) transmits the
|
|
17
|
+
**visitor's IP address** to that third party on every page view. Deliver it
|
|
18
|
+
through the target project's own route instead — the framework's font/asset
|
|
19
|
+
primitive, a bundled package, or a locally-served file. A third-party hotlink
|
|
20
|
+
is emitted **only** on an explicit consumer opt-in, and the opt-in is stated
|
|
21
|
+
with what it transmits — never chosen silently because it is the shorter line.
|
|
22
|
+
A discovery URL is not a delivery URL: keeping a font's browse/share link as
|
|
23
|
+
*where to find it* is fine. Ownership: this bullet is the single owner of the
|
|
24
|
+
third-party delivery decision ([`ADR-205`](../decisions/ADR-205-webfont-delivery-ownership.md));
|
|
25
|
+
emitters (`typography-system`, UI-apply directives, brand-asset paths) are
|
|
26
|
+
consumers and point here rather than restating it. (fixture:
|
|
27
|
+
`daf-webfont-delivery`.)
|
|
28
|
+
- **Real imagery where inspection matters.** On visual pages/decks, use actual
|
|
29
|
+
product / place / object / state imagery where the image IS the proof (a
|
|
30
|
+
product screenshot, a real dashboard state). Decorative atmosphere is not proof
|
|
31
|
+
— never pass a stock-like or invented image off as the real product. An
|
|
32
|
+
invented product screenshot is fabricated evidence. (fixture: `daf-invented-screenshot`.)
|
|
33
|
+
- **Icons follow the iconography floor** — no emoji-as-icon in serious UI, no
|
|
34
|
+
hand-rolled icon when a set exists; see the `iconography` skill § Iconography floor.
|
|
35
|
+
- **Ask before adding material — no unrequested filler.** Never generate copy,
|
|
36
|
+
placeholder sections, or decorative blocks the user did not ask for to "complete"
|
|
37
|
+
a design. Brief silent on a region → surface the gap (`ask-when-uncertain`)
|
|
38
|
+
or leave an honest placeholder; never invent filler to fill space.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Design Canon — named-systems grounding index
|
|
2
|
+
|
|
3
|
+
> Lazy-loaded reference. Pull this when a brief names (or a project's
|
|
4
|
+
> `components.json`/deps signal) a published design system, type, or colour
|
|
5
|
+
> reference — so the design is **grounded in named canon**, not improvised.
|
|
6
|
+
> Used by `design-intelligence`; cross-linked from `typography-system`,
|
|
7
|
+
> `iconography`, `design-tokens`, `brand-to-tokens`, `icon-consistency`.
|
|
8
|
+
|
|
9
|
+
This is a thin **index** — names, one-line summaries, and a "pull this when"
|
|
10
|
+
trigger. It deliberately does **not** bundle the multi-megabyte specs; fetch
|
|
11
|
+
the live spec only when the trigger fires (the canonical URLs below are the
|
|
12
|
+
fetch targets). Precedence (per `brand-source-of-truth`): **consumer brand
|
|
13
|
+
tokens > confirmed session decisions > named canon (this index) > generated
|
|
14
|
+
corpus.** Canon is a gap-filler, never an override of a registered brand value.
|
|
15
|
+
|
|
16
|
+
## Design systems
|
|
17
|
+
|
|
18
|
+
| System | Signature traits (one-line) | Pull this when |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| **Material 3** (Google) | Dynamic colour from a seed (HCT), tonal palettes, elevation by tint not shadow, expressive motion (emphasized easing). | brief says "Material" / "Android"; deps `@mui/material`, `@angular/material`, `react-native-paper`. Spec: m3.material.io |
|
|
21
|
+
| **Apple HIG** | Platform-native clarity/deference/depth, SF type + Dynamic Type, system materials/vibrancy, restrained motion, large touch targets. | brief targets iOS/iPadOS/macOS/visionOS, "native Apple feel". Spec: developer.apple.com/design |
|
|
22
|
+
| **Fluent 2** (Microsoft) | Neutral-forward, acrylic/reveal materials, Segoe/Fluent type ramp, depth via subtle shadow, enterprise density. | brief says "Fluent"/"Windows"/"Office"; deps `@fluentui/*`. Spec: fluent2.microsoft.design |
|
|
23
|
+
| **Carbon** (IBM) | 2px grid, IBM Plex type, strong data-viz system, productive vs expressive themes, accessibility-first. | brief says "Carbon"/"IBM"/data-heavy enterprise; deps `@carbon/*`. Spec: carbondesignsystem.com |
|
|
24
|
+
| **Ant Design** | Dense enterprise/admin, comprehensive component set, token-based theming (v5), wireframe-driven. | brief says "Ant"/admin console/CRUD-heavy; deps `antd`. Spec: ant.design |
|
|
25
|
+
| **Atlassian** | Product-suite consistency, ADS tokens, calm neutral + bold primary, strong empty/loading patterns. | brief says "Atlassian"/Jira-like; deps `@atlaskit/*`. Spec: atlassian.design |
|
|
26
|
+
|
|
27
|
+
Grounding rule: surface the matching one-liner, then **offer to pull the live
|
|
28
|
+
spec** before committing to the system's conventions. Never reproduce a brand
|
|
29
|
+
book's marks; ground against the *system's* documented principles.
|
|
30
|
+
|
|
31
|
+
## Typography craft (foundry + theory)
|
|
32
|
+
|
|
33
|
+
A one-line index — point `typography-system` here; do not inline the content.
|
|
34
|
+
|
|
35
|
+
- **Theory:** Butterick's *Practical Typography* (practicaltypography.com — line-length, measure, hierarchy rules), *Thinking with Type*.
|
|
36
|
+
- **Calibration / "in use":** Typewolf, Fonts In Use (real pairings, not defaults).
|
|
37
|
+
- **Quality foundries** (beyond the AI-default fonts the anti-slop catalog T7 flags): Klim, Lineto, Colophon, Commercial Type, Grilli Type; libre: League of Movable Type, Google Fonts (chosen deliberately, not reflexively).
|
|
38
|
+
- Pull when: a brief calls for a distinctive type voice, or to escape the Inter/Roboto/Geist default.
|
|
39
|
+
|
|
40
|
+
## Colour references
|
|
41
|
+
|
|
42
|
+
Names + when-to-use — not the palettes themselves.
|
|
43
|
+
|
|
44
|
+
- **Accessibility / contrast:** WCAG contrast checkers (e.g. APCA, WebAIM) — verify text/non-text contrast (ties to `lint_design_quality` Q1 + anti-slop C4). Pull on any colour decision that must clear AA.
|
|
45
|
+
- **Culturally-specific palettes:** Nippon Colors (traditional Japanese), Chinese Colors — pull when the brand/audience is culturally situated and a Western default palette would read as generic.
|
|
46
|
+
- **Systematic palette tools:** the design systems above ship their own token palettes — prefer the system's palette over an ad-hoc picker when a system is in play.
|
|
47
|
+
|
|
48
|
+
## Icon systems
|
|
49
|
+
|
|
50
|
+
Each design system ships a matching icon set — prefer it when that system is in
|
|
51
|
+
play (consistency over novelty, per `icon-consistency`): **Material Symbols**
|
|
52
|
+
(Material 3, variable weight/fill/grade), **SF Symbols** (Apple HIG, weight-
|
|
53
|
+
matched to SF text), **Fluent UI System Icons** (Fluent), **Carbon icons**
|
|
54
|
+
(Carbon). Outside a named system, the `iconography` skill resolves a single
|
|
55
|
+
Iconify set (Lucide / Phosphor / Heroicons / Tabler) — pick one and stay in it.
|
|
56
|
+
Pull when: choosing or auditing an icon library.
|
|
57
|
+
|
|
58
|
+
## See also
|
|
59
|
+
|
|
60
|
+
- `docs/guidelines/design-antipatterns.md` — the anti-slop catalog (T7 default-font tell, C1/C5 palette tells) this canon helps you escape.
|
|
61
|
+
- `brand-source-of-truth` / `brand-consistency` — the precedence this index obeys.
|
|
62
|
+
- `design-intelligence` — the consumer that surfaces these on a brief signal.
|
|
63
|
+
- **Reference, don't vendor** (`domain-adoption-policy`): palette hex tables, font-width CSVs, easing/motion constant libraries, print-CSS recipes, and device-frame recipes are **referenced from maintained upstreams, never forked** into this suite — a vendored data table rots, fork-drifts, and couples the suite to one aesthetic. Corpus assets (palettes, easing tables, device frames) stay upstream references, not forks.
|