@event4u/agent-config 9.12.0 → 9.14.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.
Files changed (146) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +110 -238
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/optimize/deep.md +147 -0
  5. package/dist/agent-src/commands/optimize.md +12 -6
  6. package/dist/agent-src/rules/active-remediation.md +0 -2
  7. package/dist/agent-src/rules/architecture.md +0 -1
  8. package/dist/agent-src/rules/artifact-drafting-protocol.md +0 -4
  9. package/dist/agent-src/rules/autonomous-execution.md +1 -2
  10. package/dist/agent-src/rules/broken-access-control.md +0 -2
  11. package/dist/agent-src/rules/code-comment-discipline.md +0 -3
  12. package/dist/agent-src/rules/code-provenance.md +0 -3
  13. package/dist/agent-src/rules/communication-through-line.md +2 -3
  14. package/dist/agent-src/rules/content-quoting-floor.md +0 -2
  15. package/dist/agent-src/rules/context-hygiene.md +1 -3
  16. package/dist/agent-src/rules/decision-revisit-gate.md +0 -2
  17. package/dist/agent-src/rules/design-fidelity.md +29 -0
  18. package/dist/agent-src/rules/domain-adoption-policy.md +0 -3
  19. package/dist/agent-src/rules/downstream-changes.md +10 -1
  20. package/dist/agent-src/rules/external-reference-deep-dive.md +0 -7
  21. package/dist/agent-src/rules/fast-path-marker-visibility.md +0 -1
  22. package/dist/agent-src/rules/git-history-discipline.md +0 -7
  23. package/dist/agent-src/rules/guidelines.md +0 -2
  24. package/dist/agent-src/rules/improve-before-implement.md +4 -2
  25. package/dist/agent-src/rules/invite-challenge.md +0 -4
  26. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -2
  27. package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
  28. package/dist/agent-src/rules/minimal-safe-diff.md +2 -2
  29. package/dist/agent-src/rules/missing-tool-handling.md +0 -1
  30. package/dist/agent-src/rules/no-attribution-footers.md +0 -3
  31. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +8 -5
  32. package/dist/agent-src/rules/no-pr-progress-comments.md +1 -3
  33. package/dist/agent-src/rules/no-roadmap-references.md +0 -2
  34. package/dist/agent-src/rules/output-discipline.md +0 -1
  35. package/dist/agent-src/rules/prefer-enums-over-literals.md +0 -2
  36. package/dist/agent-src/rules/preservation-guard.md +0 -3
  37. package/dist/agent-src/rules/role-mode-adherence.md +0 -1
  38. package/dist/agent-src/rules/secret-vcs-guard.md +0 -2
  39. package/dist/agent-src/rules/senior-engineering-discipline.md +0 -2
  40. package/dist/agent-src/rules/session-canary.md +0 -2
  41. package/dist/agent-src/rules/size-enforcement.md +0 -5
  42. package/dist/agent-src/rules/source-confidentiality.md +0 -3
  43. package/dist/agent-src/rules/source-discovery-gate.md +0 -2
  44. package/dist/agent-src/rules/think-before-action.md +3 -3
  45. package/dist/agent-src/rules/token-budget-discipline.md +0 -1
  46. package/dist/agent-src/rules/token-efficiency.md +1 -2
  47. package/dist/agent-src/rules/tool-safety.md +0 -1
  48. package/dist/agent-src/rules/user-interaction.md +0 -3
  49. package/dist/agent-src/rules/user-interrupt-priority.md +0 -1
  50. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +8 -0
  51. package/dist/agent-src/skills/analysis-skill-router/SKILL.md +55 -86
  52. package/dist/agent-src/skills/character-consistency/SKILL.md +7 -4
  53. package/dist/agent-src/skills/decision-record/SKILL.md +8 -0
  54. package/dist/agent-src/skills/design-review/SKILL.md +11 -0
  55. package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +8 -0
  56. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +34 -3
  57. package/dist/agent-src/skills/fe-design/SKILL.md +10 -0
  58. package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -4
  59. package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +201 -0
  60. package/dist/agent-src/skills/performance/SKILL.md +14 -0
  61. package/dist/agent-src/skills/pixar-storyteller/SKILL.md +8 -5
  62. package/dist/agent-src/skills/scene-expander/SKILL.md +9 -6
  63. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +10 -0
  64. package/dist/agent-src/skills/universal-project-analysis/SKILL.md +14 -37
  65. package/dist/agent-src/skills/video-director/SKILL.md +9 -6
  66. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  67. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +154 -13
  68. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +118 -0
  69. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +40 -0
  70. package/dist/agent-src/templates/scripts/work_engine/state.ts +55 -0
  71. package/dist/cli-delegate/{chunk-QFKQLQ7X.js → chunk-GCVFLBP2.js} +399 -365
  72. package/dist/cli-delegate/cmd_export.js +1 -1
  73. package/dist/cli-delegate/cmd_prune.js +1 -1
  74. package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
  75. package/dist/cli-delegate/cmd_sync.js +1 -1
  76. package/dist/cli-delegate/cmd_uninstall.js +1 -1
  77. package/dist/cli-delegate/cmd_validate.js +1 -1
  78. package/dist/discovery/deprecation-report.md +1 -1
  79. package/dist/discovery/discovery-manifest.json +123 -73
  80. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  81. package/dist/discovery/discovery-manifest.summary.md +4 -4
  82. package/dist/discovery/orphan-report.md +1 -1
  83. package/dist/discovery/packs.json +10 -8
  84. package/dist/discovery/trust-report.md +3 -3
  85. package/dist/discovery/workspaces.json +8 -6
  86. package/dist/hooks/dispatch.js +174 -13
  87. package/dist/install/install.mjs +648 -614
  88. package/dist/mcp/registry-manifest.json +3 -3
  89. package/dist/mcp/server.json +2 -2
  90. package/dist/mcp/server.mjs +783 -507
  91. package/dist/router.json +1 -1
  92. package/dist/scripts/condense.js +2 -2
  93. package/docs/MIGRATION.md +1 -1
  94. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +71 -0
  95. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +24 -1
  96. package/docs/guidelines/code-clarity.md +9 -2
  97. package/docs/guidelines/design-fidelity-mechanics.md +44 -0
  98. package/llms.txt +63 -27
  99. package/package.json +4 -4
  100. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +154 -13
  101. package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +118 -0
  102. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +40 -0
  103. package/src/agent-src/templates/scripts/work_engine/state.ts +55 -0
  104. package/src/config/agent-settings.template.yml +8 -0
  105. package/src/scripts/_lib/counted_probe.ts +142 -0
  106. package/src/scripts/_lib/exec_evidence.ts +5 -0
  107. package/src/scripts/_lib/overbuild_lens_contract.ts +196 -0
  108. package/src/scripts/_lib/release_scope.ts +207 -0
  109. package/src/scripts/_lib/scoped_projection.ts +212 -0
  110. package/src/scripts/ai_council/stance_tally.ts +37 -2
  111. package/src/scripts/audit_auto_rules.ts +9 -9
  112. package/src/scripts/audit_likelihood.ts +3 -3
  113. package/src/scripts/audit_overlap.ts +2 -2
  114. package/src/scripts/audit_skill_overlap.ts +233 -95
  115. package/src/scripts/audit_skill_overlap_allowlist.json +4 -0
  116. package/src/scripts/build_proof.ts +15 -1
  117. package/src/scripts/check_artefact_count_messaging.ts +128 -15
  118. package/src/scripts/check_dependency_floors.ts +16 -6
  119. package/src/scripts/check_gate_coverage.ts +6 -6
  120. package/src/scripts/check_kernel_rule_bundle.ts +5 -4
  121. package/src/scripts/check_token_quality_golden.ts +0 -18
  122. package/src/scripts/code_graph/loader.ts +35 -6
  123. package/src/scripts/compile_router.ts +3 -8
  124. package/src/scripts/condense.ts +2 -2
  125. package/src/scripts/count_scoped_projection.ts +104 -0
  126. package/src/scripts/explain_run.ts +0 -1
  127. package/src/scripts/generate_pack_manifests.ts +3 -20
  128. package/src/scripts/hooks/block_kernel_rule_writes.ts +145 -10
  129. package/src/scripts/hooks/block_no_verify.ts +101 -0
  130. package/src/scripts/install.ts +13 -90
  131. package/src/scripts/lint_agent_security.ts +5 -4
  132. package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
  133. package/src/scripts/lint_regression.ts +92 -1
  134. package/src/scripts/lint_skill_descriptions.ts +93 -5
  135. package/src/scripts/project_thin_rules.ts +2 -2
  136. package/src/scripts/release.ts +107 -3
  137. package/src/scripts/resolve_lint_scope.ts +53 -0
  138. package/src/scripts/router_telemetry.ts +0 -5
  139. package/src/scripts/runtime_dispatcher.ts +40 -0
  140. package/src/scripts/schemas/pack.schema.json +1 -5
  141. package/src/scripts/schemas/rule.schema.json +1 -2
  142. package/src/scripts/self_review_gate.ts +15 -73
  143. package/src/scripts/skill_linter.ts +160 -11
  144. package/src/scripts/sweep_dead_scan_roots.ts +550 -0
  145. package/src/scripts/trigger_coverage.ts +11 -37
  146. package/src/scripts/update_counts.ts +90 -11
@@ -4,8 +4,6 @@ tier: "2b"
4
4
  alwaysApply: false
5
5
  description: "Writing/generating code — generalize (no overfit/tautological tests), supply the invisible cross-cutting controls, never invent an API/field/package"
6
6
  triggers:
7
- - intent: "writing or generating code"
8
- - intent: "implementing a feature"
9
7
  - keyword: "implement"
10
8
  - keyword: "endpoint"
11
9
  - keyword: "query"
@@ -4,8 +4,6 @@ tier: "2a"
4
4
  description: "personal.canary_name set — open every new task by name (liveness canary); keep the reply-close markers alive (ONE end-summary, PR URL last)"
5
5
  alwaysApply: false
6
6
  triggers:
7
- - intent: "starting a new task or a new conversation"
8
- - intent: "opening the first reply to a request"
9
7
  - keyword: "canary"
10
8
  - keyword: "canary_name"
11
9
  - phrase: "session canary"
@@ -3,11 +3,6 @@ type: "manual"
3
3
  tier: "mechanical-already"
4
4
  description: "Creating or editing rules, skills, commands, guidelines, AGENTS.md, or copilot-instructions.md — enforce size and scope limits"
5
5
  alwaysApply: false
6
- triggers:
7
- - intent: "create rule"
8
- - intent: "create skill"
9
- - intent: "create command"
10
- - intent: "create guideline"
11
6
  workspaces: [agent-config-maintainer]
12
7
  packs: [meta]
13
8
  ---
@@ -10,9 +10,6 @@ triggers:
10
10
  - path_prefix: "docs/"
11
11
  - path_prefix: "agents/evidence/"
12
12
  - path_prefix: "agents/roadmaps/"
13
- - intent: "adopt or harvest from an external repo"
14
- - intent: "compare against another package"
15
- - intent: "attribute an idea to an external source"
16
13
  validator_ignore:
17
14
  - type: "substring"
18
15
  pattern: "external_sources_denylist"
@@ -7,8 +7,6 @@ load_context:
7
7
  - ../contexts/execution/evidence-discipline.md
8
8
  - ../contexts/execution/project-intelligence.md
9
9
  triggers:
10
- - intent: "before coding"
11
- - intent: "DB-driven work"
12
10
  - keyword: "schema"
13
11
  - keyword: "endpoint"
14
12
  - phrase: "new API"
@@ -6,9 +6,9 @@ alwaysApply: false
6
6
  load_context:
7
7
  - ../contexts/communication/rules-auto/think-before-action-mechanics.md
8
8
  triggers:
9
- - intent: "before coding"
10
- - intent: "before debugging"
11
- - intent: "before modifying"
9
+ - phrase: "before coding"
10
+ - phrase: "before debugging"
11
+ - phrase: "before modifying"
12
12
  - keyword: "implement"
13
13
  - keyword: "debug"
14
14
  - keyword: "refactor"
@@ -5,7 +5,6 @@ description: "rich-class skills are exempt from telegraph + thin-projector trims
5
5
  triggers:
6
6
  - keyword: "token_budget_class"
7
7
  - keyword: "rich skill"
8
- - intent: "editing a rich-tagged skill"
9
8
  workspaces: [agent-config-maintainer]
10
9
  packs: [meta]
11
10
  ---
@@ -6,9 +6,8 @@ alwaysApply: false
6
6
  load_context:
7
7
  - ../contexts/communication/rules-auto/token-efficiency-mechanics.md
8
8
  triggers:
9
- - intent: "verbose CLI output"
10
- - intent: "fetching logs"
11
9
  - keyword: "minimize tool calls"
10
+ - phrase: "fetching logs"
12
11
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
13
12
  packs: [meta]
14
13
  ---
@@ -5,7 +5,6 @@ description: "Skill uses external tools — enforce allowlist, deny-by-default,
5
5
  triggers:
6
6
  - keyword: "allowed_tools"
7
7
  - keyword: "tool registry"
8
- - intent: "external API"
9
8
  workspaces: [agent-config-maintainer, engineering]
10
9
  packs: [meta]
11
10
  enforced_by:
@@ -6,9 +6,6 @@ alwaysApply: false
6
6
  load_context:
7
7
  - ../contexts/communication/rules-auto/user-interaction-mechanics.md
8
8
  triggers:
9
- - intent: "ask user a question"
10
- - intent: "numbered options"
11
- - intent: "summarizing progress"
12
9
  - keyword: "option"
13
10
  - keyword: "recommendation"
14
11
  - phrase: "what do you recommend"
@@ -4,7 +4,6 @@ tier: "2a"
4
4
  description: "New user instruction mid-flight — STOP the current task, run the new one in full, ASK before resuming"
5
5
  alwaysApply: false
6
6
  triggers:
7
- - intent: "new instruction while a task is running"
8
7
  - keyword: "weiter"
9
8
  - keyword: "resume"
10
9
  - keyword: "continue"
@@ -237,6 +237,14 @@ numbered options; do NOT auto-rewrite prose without the user's knowledge:
237
237
  - Do NOT duplicate content that's already in `AGENTS.md` or `.github/copilot-instructions.md`.
238
238
  - Do NOT write docs just to document what you did — only document things others need to know.
239
239
  - If unsure whether a doc needs updating, **ask the user**.
240
+ - **Sibling-routing sentences are edited as a set, never alone.** When a skill's
241
+ `description:` carries a routing clause naming an overlapping sibling
242
+ (`Animated → pixar-storyteller`), editing it obliges re-reading every sibling
243
+ it names and every sibling that names it, so no user phrase ends up routed to
244
+ two skills and none ends up routed to neither. One-sided edits are how a
245
+ cluster's descriptions drift back into ambiguity between sweeps;
246
+ `lint_skill_descriptions` catches a *missing* clause, not an *inconsistent*
247
+ one.
240
248
 
241
249
  ## Output format
242
250
 
@@ -11,6 +11,11 @@ packs:
11
11
 
12
12
  # analysis-skill-router
13
13
 
14
+ A chooser, not a worker. It answers exactly one question — *which skill* — and
15
+ then gets out of the way. How to actually carry out the work belongs to
16
+ whichever skill this picks; a chooser that also explains the work reads like
17
+ its own fallback target, which is the defect this file was cut back from.
18
+
14
19
  ## When to use
15
20
 
16
21
  Use this skill when:
@@ -29,111 +34,75 @@ Do NOT use when:
29
34
 
30
35
  ## Procedure
31
36
 
32
- ### 1. Identify request scope
33
-
34
- Classify the request as one of:
35
-
36
- * full project analysis
37
- * architecture review
38
- * broad multi-layer debugging
39
- * framework-specific deep analysis
40
- * narrow root-cause analysis
41
- * performance/security specialist analysis
42
- * simple local code issue
43
-
44
- ### 2. Check whether deep analysis is justified
45
-
46
- Use deep analysis only if at least one is true:
47
-
48
- * the user explicitly asks for broad analysis
49
- * the system is unclear or unknown
50
- * the issue spans multiple layers
51
- * architecture reconstruction is required
52
- * the cause is not local and not obvious
53
-
54
- If none apply → do NOT route to a broad analysis skill.
55
-
56
- ### 3. Detect framework or system type
57
-
58
- Check whether the request clearly targets:
59
-
60
- * Laravel, Symfony, Zend/Laminas, Node/Express, React, Next.js
61
- * unknown / mixed stack
62
-
63
- ### 4. Route to the correct skill
37
+ ### 1. Classify the scope
64
38
 
65
- #### Broad / unknown system
39
+ Pick one: full project · architecture review · broad multi-layer debugging ·
40
+ framework-specific deep dive · narrow root cause · performance/security
41
+ specialist · simple local issue.
66
42
 
67
- * full project analysis or unclear stack → `universal-project-analysis`
68
- * unknown system, discovery-focused → `project-analysis-core`
43
+ **Broad scope requires a reason.** At least one must hold, or the answer is a
44
+ narrow specialist: the user asked for breadth · the system is unknown · the
45
+ issue spans layers · architecture must be reconstructed · the cause is
46
+ non-local.
69
47
 
70
- #### Root-cause analysis
48
+ ### 2. Detect the framework
71
49
 
72
- * concrete multi-cause problem → `project-analysis-hypothesis-driven`
73
- * bug-focused but not full-project → `bug-analyzer`
50
+ Laravel · Symfony · Zend/Laminas · Node/Express · React · Next.js · unknown or
51
+ mixed.
74
52
 
75
- #### Backend framework analysis
53
+ ### 3. Read the decision table
76
54
 
77
- * Laravel → `project-analysis-laravel`
78
- * Symfony → `project-analysis-symfony`
79
- * Zend/Laminas → `project-analysis-zend-laminas`
80
- * Node/Express → `project-analysis-node-express`
55
+ | Signal | Route to |
56
+ |---|---|
57
+ | Full audit, or unclear stack | `universal-project-analysis` |
58
+ | Unknown system, discovery-focused | `project-analysis-core` |
59
+ | Concrete problem, several plausible causes | `project-analysis-hypothesis-driven` |
60
+ | Bug-focused, not full-project | `bug-analyzer` |
61
+ | Laravel | `project-analysis-laravel` |
62
+ | Symfony | `project-analysis-symfony` |
63
+ | Zend/Laminas | `project-analysis-zend-laminas` |
64
+ | Node/Express | `project-analysis-node-express` |
65
+ | React state / render / hooks | `project-analysis-react` |
66
+ | Next.js SSR / cache / hydration | `project-analysis-nextjs` |
67
+ | Bottleneck | `performance-analysis` |
68
+ | Security concern | `security-audit` |
81
69
 
82
- #### Frontend / rendering analysis
83
-
84
- * React state/render/hooks issues → `project-analysis-react`
85
- * Next.js SSR/client/cache/hydration issues → `project-analysis-nextjs`
86
-
87
- #### Specialist follow-up routing
88
-
89
- * performance bottleneck → `performance-analysis`
90
- * security concern → `security-audit`
91
-
92
- ### 5. Validate routing quality
93
-
94
- Check:
95
-
96
- * the chosen skill is narrower than the broadest possible option
97
- * full-project analysis is actually justified if selected
98
- * framework-specific skill matches the explicit framework
99
- * no simpler specialist skill was skipped
70
+ Tie-break: **the narrowest row that still covers the request wins.**
100
71
 
101
72
  ## Output format
102
73
 
103
- 1. Selected skill
104
- 2. Reason for selection
105
- 3. Why broader alternatives were not chosen
106
- 4. Optional chained specialist skills
107
-
108
- ## Routing heuristics
109
-
110
- **Choose `universal-project-analysis` only if:** user explicitly wants full audit, architecture must be reconstructed, stack is unclear, multiple subsystems involved.
111
-
112
- **Choose `project-analysis-core` if:** broad discovery needed, framework deep-dive not yet justified.
113
-
114
- **Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple causes plausible, main job is explanation not discovery.
115
-
116
- **Choose framework-specific analysis if:** framework is explicit, failure pattern is framework-shaped.
74
+ 1. The selected skill.
75
+ 2. The signal from step 1–2 that selected it.
76
+ 3. Why the next-broader row lost, when one was plausible.
77
+ 4. Any skill to chain afterwards — or "none".
117
78
 
118
- **Do NOT route broadly if:** one component or file is enough, fix is obvious and local, task is implementation not investigation.
79
+ One or two lines total. A routing verdict longer than the request it routes is
80
+ itself a routing failure.
119
81
 
120
82
  ## Examples
121
83
 
122
- **"Analyze this whole Laravel project"** → `universal-project-analysis` → chain `project-analysis-laravel`
123
- **"Hydration mismatch in Next.js"** → `project-analysis-nextjs` (no full-project needed)
124
- **"Bug could be cache, queue, or version mismatch"** → `project-analysis-hypothesis-driven`
125
- **"Change one React component"** → no analysis skill, use implementation skill
84
+ | Request | Route |
85
+ |---|---|
86
+ | "Analyze this whole Laravel project" | `universal-project-analysis`, chain `project-analysis-laravel` |
87
+ | "Hydration mismatch in Next.js" | `project-analysis-nextjs` — no full-project step |
88
+ | "Could be cache, queue, or a version mismatch" | `project-analysis-hypothesis-driven` |
89
+ | "Change one React component" | none — implementation skill |
126
90
 
127
91
  ## Gotcha
128
92
 
129
- * The most expensive skill is often not the best skill.
130
- * Broad analysis feels safe but reduces sharpness when the problem is already localized.
131
- * Framework-specific routing should happen as early as possible once the framework is explicit.
93
+ * **Size adjectives read as scope.** "Our *whole* Laravel app is slow" picks the
94
+ broad row on the word "whole", and the audit then spends its passes
95
+ rediscovering a stack the request already named. The step-2 framework signal
96
+ outranks size words — those are how frustration sounds, not scope.
97
+ * **Breadth feels safe and costs sharpness.** The most expensive choice is
98
+ rarely the best one once the problem is already localised.
99
+ * **Steps 1 and 2 disagreeing is a question, not a tie-break.** Ask which the
100
+ user meant instead of picking the broader row to be safe.
132
101
 
133
102
  ## Do NOT
134
103
 
135
104
  * Do NOT default to `universal-project-analysis`
136
- * Do NOT use full-project analysis for normal feature work
137
- * Do NOT choose a generic skill when a framework-specific one clearly fits
138
- * Do NOT route to deep analysis when a simple specialist skill is enough
105
+ * Do NOT choose a generic skill when a framework-specific row fits
139
106
  * Do NOT confuse discovery with root-cause investigation
107
+ * Do NOT re-import procedure, validation checklists, or output contracts from
108
+ the skills in the table — that is what this file was cut back from
@@ -181,12 +181,15 @@ Worked example — `creature`:
181
181
 
182
182
  ## Policies
183
183
 
184
+ Paths, enforcement model, and the full set: the
185
+ [media policy preamble](../../../agents/settings/policies/media/README.md).
186
+
184
187
  When a character lock would identify or render a real person, consult before emitting the JSON:
185
188
 
186
- - [`agents/settings/policies/media/likeness.md`](../../../agents/settings/policies/media/likeness.md) — real-person identity tokens require a cited likeness release.
187
- - [`agents/settings/policies/media/public-figures.md`](../../../agents/settings/policies/media/public-figures.md) — recognised public figures carry the harder gate (publicity rights + transformative-intent).
188
- - [`agents/settings/policies/media/voice-cloning.md`](../../../agents/settings/policies/media/voice-cloning.md) — when `voice_note` references a real person's voice.
189
- - [`agents/settings/policies/media/disclosure.md`](../../../agents/settings/policies/media/disclosure.md) — outputs carrying a real-person lock require the non-removable AI-generation disclosure downstream.
189
+ - **`likeness`** — real-person identity tokens require a cited likeness release.
190
+ - **`public-figures`** — recognised public figures carry the harder gate (publicity rights + transformative-intent).
191
+ - **`voice-cloning`** — when `voice_note` references a real person's voice.
192
+ - **`disclosure`** — outputs carrying a real-person lock require the non-removable AI-generation disclosure downstream.
190
193
 
191
194
  Refuse-and-surface the file path; do not silently sanitise the prompt.
192
195
 
@@ -58,6 +58,14 @@ Do NOT use when:
58
58
  get a one-page record; one-way doors get the full options +
59
59
  consequences + supersession chain. The reversibility row of the
60
60
  matrix decides which template fires. See `mental-models.md` § 10.
61
+ **Corollary — a shortcut through a one-way door is a decision, not a
62
+ defer.** The cheap-and-simple option is *preferred* where the choice can
63
+ be walked back later. Where it cannot — a public API shape, a DB schema,
64
+ a migration, a wire format, a published identifier — "we can simplify
65
+ this later" is false, so it never ships as a deferred note; it lands
66
+ here as a recorded decision with its consequences named. The one-way
67
+ categories are enumerated so the call is not left to a judgement about
68
+ what feels important.
61
69
  - **Team context-spine slot.** Read the **team** slot of the
62
70
  [context-spine](../../../docs/contracts/context-spine.md) to
63
71
  capture who is bound by the decision (review groups, on-call
@@ -352,6 +352,17 @@ structured review phases, add an explicit **Anti-Slop Check** section:
352
352
  3. Run the AI-slop originality self-test on the overall aesthetic direction.
353
353
  Report the result (pass / flag / fail) with one sentence of evidence — this
354
354
  is the human judgment the detector deliberately does not make.
355
+ 4. **Mark the findings a provided artifact already answers.** When the run is a
356
+ port (`state.ui_design.provided_artifact` is set), a finding about a
357
+ decision the artifact makes is correct about the pattern and wrong about the
358
+ action. Keep it in the output, cite it as **"matches provided spec"**, and
359
+ set `artifact_covered: true` on it — the polish gate drops those from the
360
+ round-driving set, so an unmarked finding will send a round at the user's
361
+ own design. The flag is scoped to decisions the artifact actually covers;
362
+ anything it leaves open (a state it never showed) is generative work and
363
+ keeps the full scan. Precedence + scope:
364
+ [`design-fidelity-mechanics`](../../../docs/guidelines/design-fidelity-mechanics.md)
365
+ § Provided-artifact precedence. Regression witness: `daf-slop-vs-provided`.
355
366
 
356
367
  For the **objective quality floors** (WCAG contrast, font-size, line-length,
357
368
  reduced-motion, heading hierarchy, focus indicator), do NOT eyeball them —
@@ -42,6 +42,14 @@
42
42
  - **`bundled_local`** on a font family is a flag, not an instruction: the
43
43
  package never downloads or bundles fonts (out of scope) — it records that the
44
44
  source did.
45
+ - **`motion` has a consumer.** It sits outside the DTCG mapping above, and for
46
+ a long time that meant nothing read it at all: the block was written by
47
+ capture and consumed by nobody, so easing and duration were re-derived from
48
+ taste on every port. On the **Port a provided artifact** branch
49
+ ([`design-artifact-lifecycle`](../../../../../docs/contracts/design-artifact-lifecycle.md))
50
+ the audit reads `motion.durations` and `motion.easings` as the answer. The
51
+ extraction-only marking above still holds: `motion._meta.detected_libs`
52
+ informs the human and never becomes a token.
45
53
 
46
54
  ## Trust posture (mandatory)
47
55
 
@@ -104,9 +104,25 @@ Write into `state.ui_audit.design_tokens` (object, never null — empty object i
104
104
  | `:root { --... }` blocks in `resources/css/`, `app/globals.css`, `src/app/globals.css` | every `--token-name: value` pair |
105
105
  | `theme.json` / `tokens.json` (any depth) | flat or nested token tree |
106
106
  | `app/css/variables.css`, `assets/scss/_tokens.scss` | SCSS `$var: value` and CSS custom properties |
107
+ | **A supplied `design-system.json`** (handed over with a provided artifact) | `colors`, `typography`, `spacing`, `radius`, `shadow`, **and `motion`** (`durations`, `easings`) — read as the answer, never re-derived |
108
+ | **A supplied artifact's own `:root { --… }` / inline `<style>`** (the handover file itself, e.g. `design.html`) | every `--token-name: value` pair, when no `design-system.json` accompanies it |
107
109
 
108
110
  Group output by category: `colors`, `spacing`, `radius`, `font`, `shadow`, `breakpoint`, `other`.
109
111
 
112
+ **Artifact-sourced tokens stay distinguishable from project tokens.** Every
113
+ group carries a `source` — `project` for the first four rows, `artifact` for the
114
+ last two — because the mapping between them is the thing a port has to keep
115
+ visible. Collapsing them loses the answer to "did this value come from what the
116
+ user handed me, or from what the repo already had?", and that is exactly the
117
+ question the apply coverage report has to answer per item. The two sets may
118
+ disagree; when they do, surface the conflict rather than merging it (a supplied
119
+ spec outranks house taste, but not a registered brand token — see
120
+ [`brand-source-of-truth`](../../rules/brand-source-of-truth.md)).
121
+
122
+ `motion` is new here: the block has existed in the `design-system.json` schema
123
+ since capture shipped and **nothing consumed it**. On the port branch it is
124
+ read, so easing and duration stop being values the brief silently regenerates.
125
+
110
126
  ### 4. Detect shadcn inventory (only when `state.stack.frontend == "react-shadcn"`)
111
127
 
112
128
  Read `components.json` for the registered style + base color, then read `package.json` for `@radix-ui/*` and any locally vendored `components/ui/*.tsx` files. Write into `state.ui_audit.shadcn_inventory`:
@@ -265,9 +281,24 @@ scheme, border-radius convention, motion patterns), cross-check the findings
265
281
  against
266
282
  [`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md).
267
283
  If the existing UI already uses a listed anti-pattern, surface it as a design-debt
268
- finding (separate from the reuse inventory) — flag by entry ID and severity. The
269
- next design step can then decide whether to continue the existing pattern (for
270
- consistency) or introduce a corrective direction change.
284
+ finding (separate from the reuse inventory) — flag by entry ID and severity.
285
+
286
+ **What the design step may then do depends on whose aesthetic it is.** These
287
+ are two different situations and the sentence that used to cover both was
288
+ wrong about one of them:
289
+
290
+ | The anti-pattern lives in… | The design step may… |
291
+ |---|---|
292
+ | **The consumer's own legacy UI** (inventoried from the repo) | continue it for consistency, **or** propose a corrective direction change. Both are legitimate; it is their codebase and their debt. |
293
+ | **A supplied spec** (a handed-over artifact, a `design-system.json`, a registered brand token) | **neither.** Build it as given. The finding is recorded as informational, marked `artifact_covered`, and no polish round acts on it. |
294
+
295
+ A corrective direction change against a supplied spec is not a design
296
+ improvement, it is overriding a decision the user already made — the failure
297
+ [`design-fidelity`](../../rules/design-fidelity.md) exists to prevent, arriving
298
+ through the audit's side door. Precedence and its exact scope:
299
+ [`design-fidelity-mechanics`](../../../docs/guidelines/design-fidelity-mechanics.md)
300
+ § Provided-artifact precedence. Where the two sources disagree, surface the
301
+ conflict rather than picking (fixture `daf-slop-vs-provided`).
271
302
 
272
303
  ## Do NOT
273
304
 
@@ -340,6 +340,16 @@ If a tell was the first impulse, choose a different approach or explicitly
340
340
  justify why this brief calls for it. (The full pre-proposal scan is under
341
341
  *Anti-slop discipline* below.)
342
342
 
343
+ **Carve-out — a supplied artifact is the spec, not a first impulse.** This
344
+ discipline governs what *you* reach for. When the user hands over a finished
345
+ artifact, the choices it makes are not your impulses and the justify-or-change
346
+ burden does not apply to them: build them as given. The carve-out is scoped to
347
+ decisions the artifact actually covers — anything it leaves open (a state it
348
+ never shows, a surface it never had) is your first impulse again and gets the
349
+ full scan. See
350
+ [`design-fidelity-mechanics`](../../../docs/guidelines/design-fidelity-mechanics.md)
351
+ § Provided-artifact precedence.
352
+
343
353
  ## Aesthetic direction
344
354
 
345
355
  Audit-pinned tokens and components always take precedence (see `existing-ui-audit`). When the audit pins an aesthetic, honor it without deviation. When the audit shows **no pinned aesthetic** — greenfield surface, marketing landing page, brand-new feature without design-system precedent — the design brief is allowed (and expected) to commit to a deliberate direction instead of defaulting to safe centered hero + 3-column features + CTA.
@@ -186,12 +186,15 @@ stdin shape. The orchestrator pipes this into the video adapter's
186
186
 
187
187
  ## Policies
188
188
 
189
+ Paths, enforcement model, and the full set: the
190
+ [media policy preamble](../../../agents/settings/policies/media/README.md).
191
+
189
192
  Motion prompts inherit every constraint the upstream blueprint carries. Before emitting provider-tuned prose:
190
193
 
191
- - [`agents/settings/policies/media/disclosure.md`](../../../agents/settings/policies/media/disclosure.md) — every distributed clip carries the non-removable AI-generation disclosure; refuse adapter flags that would suppress it.
192
- - [`agents/settings/policies/media/transparency.md`](../../../agents/settings/policies/media/transparency.md) — provider provenance (C2PA / SynthID) is preserved; refuse re-encode flags whose effect is to strip provenance.
193
- - [`agents/settings/policies/media/voice-cloning.md`](../../../agents/settings/policies/media/voice-cloning.md) — when the motion prompt requests `audio: native` narration in a named voice.
194
- - [`agents/settings/policies/media/brand-impersonation.md`](../../../agents/settings/policies/media/brand-impersonation.md) — when the motion prompt copies a recognised brand's chyron / mascot / signature transition.
194
+ - **`disclosure`** — every distributed clip carries the non-removable AI-generation disclosure; refuse adapter flags that would suppress it.
195
+ - **`transparency`** — provider provenance (C2PA / SynthID) is preserved; refuse re-encode flags whose effect is to strip provenance.
196
+ - **`voice-cloning`** — when the motion prompt requests `audio: native` narration in a named voice.
197
+ - **`brand-impersonation`** — when the motion prompt copies a recognised brand's chyron / mascot / signature transition.
195
198
 
196
199
  Refuse-and-surface; the motion prompt cannot launder a policy gap upstream skills should have caught.
197
200