@event4u/agent-config 2.24.0 → 2.26.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 (161) hide show
  1. package/.agent-src/commands/bug-fix.md +1 -0
  2. package/.agent-src/commands/create-pr/description-only.md +39 -11
  3. package/.agent-src/commands/create-pr.md +59 -5
  4. package/.agent-src/commands/feature/roadmap.md +2 -2
  5. package/.agent-src/commands/fix/seeder.md +3 -2
  6. package/.agent-src/commands/memory/add.md +3 -3
  7. package/.agent-src/commands/module/create.md +1 -0
  8. package/.agent-src/commands/module/explore.md +10 -6
  9. package/.agent-src/commands/onboard.md +9 -1
  10. package/.agent-src/commands/optimize/augmentignore.md +52 -20
  11. package/.agent-src/commands/optimize/rtk.md +56 -30
  12. package/.agent-src/commands/package-test.md +86 -10
  13. package/.agent-src/commands/quality-fix.md +49 -27
  14. package/.agent-src/commands/update-form-request-messages.md +2 -1
  15. package/.agent-src/commands/video/from-script.md +5 -5
  16. package/.agent-src/commands/video/storyboard.md +1 -1
  17. package/.agent-src/contexts/augment-infrastructure.md +4 -7
  18. package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -1
  19. package/.agent-src/contexts/contracts/research-schema.md +1 -1
  20. package/.agent-src/contexts/execution/interrupt-examples.md +34 -0
  21. package/.agent-src/contexts/execution/roadmap-process-loop.md +69 -14
  22. package/.agent-src/contexts/skills-and-commands.md +2 -2
  23. package/.agent-src/personas/README.md +3 -2
  24. package/.agent-src/personas/ai-video-technical-director.md +2 -2
  25. package/.agent-src/personas/hollywood-director.md +3 -3
  26. package/.agent-src/profiles/content_creator.yml +5 -0
  27. package/.agent-src/rules/architecture.md +24 -10
  28. package/.agent-src/rules/artifact-drafting-protocol.md +6 -0
  29. package/.agent-src/rules/augment-edit-discipline.md +28 -0
  30. package/.agent-src/rules/augment-source-of-truth.md +2 -2
  31. package/.agent-src/rules/autonomous-execution.md +31 -0
  32. package/.agent-src/rules/context-hygiene.md +1 -1
  33. package/.agent-src/rules/domain-adoption-policy.md +4 -5
  34. package/.agent-src/rules/domain-safety-disclaimer.md +114 -0
  35. package/.agent-src/rules/domain-safety-pii.md +142 -0
  36. package/.agent-src/rules/domain-safety-retention.md +86 -0
  37. package/.agent-src/rules/downstream-changes.md +4 -4
  38. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +130 -0
  39. package/.agent-src/rules/git-history-discipline.md +99 -0
  40. package/.agent-src/rules/media-governance-routing.md +82 -0
  41. package/.agent-src/rules/minimal-safe-diff.md +6 -0
  42. package/.agent-src/rules/no-roadmap-references.md +4 -2
  43. package/.agent-src/rules/persona-governance.md +90 -0
  44. package/.agent-src/rules/provider-lifecycle-discipline.md +75 -0
  45. package/.agent-src/rules/roadmap-ci-steps-policy.md +145 -0
  46. package/.agent-src/rules/roadmap-progress-sync.md +11 -5
  47. package/.agent-src/rules/user-interrupt-priority.md +46 -0
  48. package/.agent-src/rules/verify-before-complete.md +11 -2
  49. package/.agent-src/skills/adversarial-review/SKILL.md +1 -1
  50. package/.agent-src/skills/ai-council/SKILL.md +1 -0
  51. package/.agent-src/skills/api-endpoint/SKILL.md +58 -154
  52. package/.agent-src/skills/api-testing/SKILL.md +11 -0
  53. package/.agent-src/skills/character-consistency/SKILL.md +12 -1
  54. package/.agent-src/skills/code-refactoring/SKILL.md +36 -30
  55. package/.agent-src/skills/code-review/SKILL.md +41 -36
  56. package/.agent-src/skills/context-authoring/SKILL.md +1 -1
  57. package/.agent-src/skills/dashboard-design/SKILL.md +1 -2
  58. package/.agent-src/skills/database/SKILL.md +8 -3
  59. package/.agent-src/skills/dependency-upgrade/SKILL.md +65 -19
  60. package/.agent-src/skills/developer-like-execution/SKILL.md +25 -14
  61. package/.agent-src/skills/eloquent/SKILL.md +1 -1
  62. package/.agent-src/skills/feature-planning/SKILL.md +1 -1
  63. package/.agent-src/skills/file-editor/SKILL.md +45 -19
  64. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  65. package/.agent-src/skills/git-workflow/SKILL.md +135 -2
  66. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +187 -0
  67. package/.agent-src/skills/{dto-creator → laravel-dto}/SKILL.md +5 -4
  68. package/.agent-src/skills/{migration-creator → laravel-migration}/SKILL.md +11 -10
  69. package/.agent-src/skills/laravel-reverb/SKILL.md +3 -3
  70. package/.agent-src/skills/{websocket → laravel-websocket}/SKILL.md +4 -3
  71. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -1
  72. package/.agent-src/skills/merge-conflicts/SKILL.md +49 -17
  73. package/.agent-src/skills/migration-architect/SKILL.md +6 -6
  74. package/.agent-src/skills/module-management/SKILL.md +1 -0
  75. package/.agent-src/skills/motion-choreographer/SKILL.md +12 -0
  76. package/.agent-src/skills/multi-tenancy/SKILL.md +15 -8
  77. package/.agent-src/skills/pest-testing/SKILL.md +18 -0
  78. package/.agent-src/skills/php-debugging/SKILL.md +28 -0
  79. package/.agent-src/skills/php-service/SKILL.md +3 -3
  80. package/.agent-src/skills/pixar-storyteller/SKILL.md +19 -6
  81. package/.agent-src/skills/playwright-testing/SKILL.md +16 -1
  82. package/.agent-src/skills/project-analyzer/SKILL.md +68 -42
  83. package/.agent-src/skills/readme-writing-package/SKILL.md +94 -23
  84. package/.agent-src/skills/roadmap-management/SKILL.md +1 -1
  85. package/.agent-src/skills/roadmap-writing/SKILL.md +10 -0
  86. package/.agent-src/skills/rtk-output-filtering/SKILL.md +23 -8
  87. package/.agent-src/skills/rule-refactor/SKILL.md +145 -0
  88. package/.agent-src/skills/rule-writing/SKILL.md +34 -8
  89. package/.agent-src/skills/scene-expander/SKILL.md +22 -7
  90. package/.agent-src/skills/security/SKILL.md +38 -29
  91. package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
  92. package/.agent-src/skills/test-driven-development/SKILL.md +4 -4
  93. package/.agent-src/skills/test-performance/SKILL.md +6 -5
  94. package/.agent-src/skills/verify-completion-evidence/SKILL.md +24 -27
  95. package/.agent-src/skills/video-director/SKILL.md +13 -0
  96. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  97. package/.agent-src/templates/copilot-instructions.md +2 -2
  98. package/.agent-src/templates/roadmaps.md +16 -0
  99. package/.agent-src/templates/rule.md +2 -2
  100. package/.claude-plugin/marketplace.json +6 -4
  101. package/AGENTS.md +1 -1
  102. package/CHANGELOG.md +80 -133
  103. package/README.md +6 -4
  104. package/config/agent-settings.template.yml +26 -0
  105. package/docs/architecture.md +2 -2
  106. package/docs/archive/CHANGELOG-pre-2.25.0.md +191 -0
  107. package/docs/catalog.md +20 -12
  108. package/docs/contracts/file-ownership-matrix.json +588 -90
  109. package/docs/contracts/kernel-membership.md +17 -0
  110. package/docs/contracts/provider-lifecycle.md +122 -0
  111. package/docs/contracts/smoke-contracts.md +8 -8
  112. package/docs/decisions/ADR-011-domain-pack-readiness.md +213 -0
  113. package/docs/decisions/INDEX.md +1 -0
  114. package/docs/getting-started-by-role.md +10 -0
  115. package/docs/getting-started.md +1 -1
  116. package/docs/guidelines/php/api-design.md +1 -1
  117. package/docs/guidelines/php/controllers.md +1 -1
  118. package/docs/guidelines/php/resources.md +1 -1
  119. package/docs/guidelines/php/validations.md +1 -1
  120. package/docs/personas.md +73 -26
  121. package/docs/profiles.md +9 -4
  122. package/package.json +1 -1
  123. package/scripts/_tmp_scan_framework_leakage.py +119 -0
  124. package/scripts/ai-video/adapters/gemini-veo.sh +5 -0
  125. package/scripts/ai-video/adapters/higgsfield.sh +6 -0
  126. package/scripts/ai-video/adapters/kling.sh +5 -0
  127. package/scripts/ai-video/adapters/openai-images.sh +5 -0
  128. package/scripts/ai-video/adapters/sora.sh +6 -0
  129. package/scripts/build_linear_digest.py +0 -1
  130. package/scripts/check_portability.py +6 -0
  131. package/scripts/lint_framework_leakage.py +348 -0
  132. package/scripts/lint_framework_leakage_allowlist.json +476 -0
  133. package/scripts/lint_media_policy_linkage.py +140 -0
  134. package/scripts/lint_persona_governance.py +164 -0
  135. package/scripts/lint_roadmap_ci_steps.py +182 -0
  136. package/scripts/measure_augment_budget.py +6 -0
  137. package/scripts/schemas/command.schema.json +5 -0
  138. package/scripts/schemas/skill.schema.json +5 -0
  139. package/scripts/skill_linter.py +60 -7
  140. package/scripts/smoke/kernel.sh +4 -4
  141. package/scripts/smoke/router.sh +2 -2
  142. package/scripts/smoke/schema.sh +1 -1
  143. package/.agent-src/personas/pixar-storyboard-artist.md +0 -98
  144. package/.agent-src/rules/agent-docs.md +0 -20
  145. package/.agent-src/rules/augment-portability.md +0 -23
  146. package/.agent-src/rules/capture-learnings.md +0 -19
  147. package/.agent-src/rules/docs-sync.md +0 -20
  148. package/.agent-src/rules/domain-safety-disclaimer-consulting.md +0 -52
  149. package/.agent-src/rules/domain-safety-disclaimer-financial.md +0 -54
  150. package/.agent-src/rules/domain-safety-disclaimer-legal.md +0 -49
  151. package/.agent-src/rules/domain-safety-disclaimer-medical.md +0 -56
  152. package/.agent-src/rules/domain-safety-export-redact.md +0 -65
  153. package/.agent-src/rules/domain-safety-logging-pii-floor.md +0 -55
  154. package/.agent-src/rules/domain-safety-pii-finance.md +0 -57
  155. package/.agent-src/rules/domain-safety-pii-marketing.md +0 -60
  156. package/.agent-src/rules/domain-safety-pii-recruiting.md +0 -56
  157. package/.agent-src/rules/domain-safety-pii-support.md +0 -57
  158. package/.agent-src/rules/domain-safety-retention-finance.md +0 -48
  159. package/.agent-src/rules/domain-safety-retention-support.md +0 -55
  160. package/.agent-src/rules/e2e-testing.md +0 -19
  161. package/.agent-src/rules/no-unsolicited-rebase.md +0 -107
@@ -0,0 +1,145 @@
1
+ ---
2
+ name: rule-refactor
3
+ description: "Use when the rule set is over the Augment budget, when a new rule would breach it, or when asked to audit / merge / prune rules — runs the audit pipeline and proposes a verdict per rule."
4
+ source: package
5
+ domain: process
6
+ ---
7
+
8
+ <!-- cloud_safe: degrade -->
9
+
10
+ # rule-refactor
11
+
12
+ ## When to use
13
+
14
+ * `measure_augment_budget --check` fails (utilisation ≥ 0.95)
15
+ * A new rule would push the budget over 0.95 — caught by the budget
16
+ gate in [`rule-writing`](../rule-writing/SKILL.md)
17
+ * User says "audit rules", "rule cleanup", "rules over budget",
18
+ "prune rules", "merge rules", "rule system review"
19
+ * Periodic governance pass after a batch of rule additions
20
+
21
+ Do NOT use this skill for:
22
+
23
+ * Editing a single rule's content → [`rule-writing`](../rule-writing/SKILL.md)
24
+ * Picking always vs auto for one new rule → [`rule-writing`](../rule-writing/SKILL.md)
25
+
26
+ ## Iron Law
27
+
28
+ **Threshold-lift is forbidden.** When the budget breaches, the
29
+ content must shrink — not the gate. Loosening `FAIL_THRESHOLD` in
30
+ `scripts/measure_augment_budget.py` to make CI pass is an explicit
31
+ anti-pattern. The only valid budget-growth move is an ADR that
32
+ raises `TOTAL_CAP`.
33
+
34
+ ## Procedure
35
+
36
+ ### 1. Inspect the current budget state
37
+
38
+ ```bash
39
+ python3 scripts/measure_augment_budget.py --json > /tmp/budget-before.json
40
+ python3 scripts/measure_rule_budget.py --json > /tmp/rule-budget-before.json
41
+ ```
42
+
43
+ ### 2. Run the audit pipeline
44
+
45
+ The audit infrastructure already exists — compose it:
46
+
47
+ ```bash
48
+ python3 scripts/audit_auto_rules.py # → agents/reports/auto-rules-audit.{json,md}
49
+ python3 scripts/audit_overlap.py # → appends overlap pairs to the MD
50
+ python3 scripts/audit_likelihood.py # → agents/reports/auto-rules-likelihood.json
51
+ ```
52
+
53
+ Then read `agents/reports/auto-rules-audit.md` end-to-end.
54
+
55
+ ### 3. Categorise every flagged rule
56
+
57
+ For each rule the audit surfaces (overlap pair, low-likelihood, oversized,
58
+ or the new addition that triggered this skill), assign exactly one verdict:
59
+
60
+ | Verdict | Test |
61
+ |---|---|
62
+ | **keep** | Iron-Law / always-on safety net, no overlap, fires often |
63
+ | **merge** | ≥ 2 rules same domain, near-identical triggers, overlap ≥ 0.4 |
64
+ | **delete** | Never fires (low-likelihood + no path/keyword hit in 30 days), or fully subsumed by a skill |
65
+ | **move-to-context** | Body is reference material (tables, mechanics, examples) — the obligation is short, the rest is lookup |
66
+ | **promote-to-skill** | Body has numbered steps / a workflow — not a constraint |
67
+
68
+ ### 4. Present the verdict table to the user
69
+
70
+ One Markdown table, one row per flagged rule, **before** any file
71
+ change. User approves the list. No silent edits.
72
+
73
+ ### 5. Apply approved changes
74
+
75
+ For each approved verdict:
76
+
77
+ * **merge** → rewrite the surviving rule to cover both domains;
78
+ delete the absorbed one; update any `routes_to:` references.
79
+ * **delete** → remove the file from `.agent-src.uncompressed/rules/`
80
+ and the corresponding `.agent-src/rules/` projection.
81
+ * **move-to-context** → extract the body into
82
+ `.agent-src.uncompressed/contexts/<area>/<name>.md`, replace the
83
+ rule body with the obligation + a `load_context:` pointer.
84
+ * **promote-to-skill** → create
85
+ `.agent-src.uncompressed/skills/<name>/SKILL.md`, replace the rule
86
+ with an auto-trigger stub that routes to it (or delete the rule
87
+ entirely if the skill's own trigger suffices).
88
+
89
+ ### 6. Re-validate
90
+
91
+ ```bash
92
+ bash scripts/compress.sh --sync
93
+ python3 scripts/compress.py --generate-tools
94
+ python3 scripts/measure_augment_budget.py --check # must exit 0
95
+ python3 scripts/skill_linter.py --all # 0 FAIL
96
+ ```
97
+
98
+ Then run your package's full CI pipeline (see `Taskfile.yml` for the
99
+ canonical sequence) before pushing.
100
+
101
+ ### 7. Record the delta
102
+
103
+ Append a snapshot to `agents/.augment-budget-history.jsonl`:
104
+
105
+ ```bash
106
+ python3 scripts/measure_augment_budget.py --trend-append
107
+ ```
108
+
109
+ Commit the cleanup as a separate chunk from any rule-add commits so
110
+ the history shows "added X" + "cleaned up Y" as distinct steps.
111
+
112
+ ## Output format
113
+
114
+ 1. Verdict table (approved by user) at the top of the cleanup PR description
115
+ 2. Per-verdict commits (one per merge / delete / move / promote group)
116
+ 3. Final `measure_augment_budget --check` output showing utilisation < 0.95
117
+ 4. Trend snapshot recorded
118
+
119
+ ## Gotchas
120
+
121
+ * Do NOT raise `FAIL_THRESHOLD` to dodge the audit
122
+ * Do NOT delete a rule that has a `routes_to:` pointer without
123
+ updating the pointer's source
124
+ * Do NOT merge rules across tier boundaries (e.g. tier-1 always
125
+ with a tier-3 stub) without surfacing the tier collapse to the user
126
+ * Do NOT skip the trend-append — the history is what tells future
127
+ agents how the cap was managed
128
+
129
+ ## Do NOT
130
+
131
+ * Do NOT loosen the budget gate
132
+ * Do NOT touch the cap (`TOTAL_CAP`) without an ADR
133
+ * Do NOT apply changes before user approves the verdict table
134
+ * Do NOT delete the rule-refactor audit reports — they're the
135
+ artifact reviewers cite
136
+
137
+ ## Cloud Behavior
138
+
139
+ On cloud surfaces, the audit scripts are not reachable. The skill
140
+ still applies — prose-only:
141
+
142
+ * Inspect the rule list (frontmatter + descriptions) and propose the
143
+ verdict table from reading alone.
144
+ * Tell the user to run the audit scripts locally before applying.
145
+ * Do not attempt to call any script.
@@ -129,12 +129,38 @@ the PR or split by responsibility.
129
129
  * Run the full CI pipeline locally (see `Taskfile.yml` in this repo for
130
130
  the script list) — must exit 0 except for tolerated warnings.
131
131
 
132
+ ### 5b. Budget-discipline gate — hard stop
133
+
134
+ After validation, before declaring the rule done, run:
135
+
136
+ ```bash
137
+ python3 scripts/measure_augment_budget.py --check
138
+ ```
139
+
140
+ If utilisation is `≥ 0.95` (or the check exits non-zero), **STOP** and
141
+ invoke [`rule-refactor`](../rule-refactor/SKILL.md). Do NOT:
142
+
143
+ * Trim the new rule further to "just fit" — if it needs that body to
144
+ do its job, the rule is right and the rule set around it is wrong.
145
+ * Raise `FAIL_THRESHOLD` in `scripts/measure_augment_budget.py` —
146
+ threshold-lift is explicitly forbidden (see the
147
+ [`validation-budget`](../../rules/validation-budget.md) rule and
148
+ the `rule-refactor` Iron Law).
149
+ * Promote an always-rule to auto to dodge the cap if the rule's
150
+ semantics require always-on visibility — that breaks the rule, not
151
+ the budget.
152
+
153
+ The discipline: budget pressure is the signal that the rule **set**
154
+ needs a cleanup pass, not that the new rule needs to be smaller. The
155
+ `rule-refactor` skill runs the audit and proposes merge / delete /
156
+ move-to-context / promote-to-skill so the new rule earns its space.
157
+
132
158
  ### 6. Governance baseline (when introducing a new linter check)
133
159
 
134
160
  **Advisory, reviewer-checked — no CI gate.** When the same PR adds a
135
- new check to `scripts/skill_linter.py` (or strengthens an existing one)
136
- such that previously-clean rules now warn, the PR body MUST record the
137
- pre-existing violations on `main` in a Markdown table:
161
+ new check to `scripts/skill_linter.py` (or strengthens an existing
162
+ one) such that previously-clean rules now warn, the PR body MUST
163
+ record the pre-existing violations on `main` in a Markdown table:
138
164
 
139
165
  ```markdown
140
166
  ### Pre-existing baseline (informational)
@@ -144,11 +170,11 @@ pre-existing violations on `main` in a Markdown table:
144
170
  | {new_code} | N | (a) genuine fix · (b) accept · (c) check too aggressive |
145
171
  ```
146
172
 
147
- Forward-only: the new check applies to **the rule under review** and to
148
- **future** edits. The baseline table is informational so reviewers can
149
- distinguish genuine debt from acceptable carry-overs without diffing the
150
- full lint output. See `agents/analysis/lint-warning-triage.md` for the
151
- 3-bucket reference.
173
+ Forward-only: the new check applies to **the rule under review** and
174
+ to **future** edits. The baseline table is informational so reviewers
175
+ can distinguish genuine debt from acceptable carry-overs without
176
+ diffing the full lint output. See
177
+ `agents/analysis/lint-warning-triage.md` for the 3-bucket reference.
152
178
 
153
179
  ## Frontmatter shape
154
180
 
@@ -3,7 +3,6 @@ name: scene-expander
3
3
  description: "Use when expanding a one-line idea into the 12-block Cinematic Scene Blueprint — provider-agnostic, includes optional dialogue + ambient. Triggers 'expand this scene', 'blueprint for X'."
4
4
  personas:
5
5
  - hollywood-director
6
- - pixar-storyboard-artist
7
6
  source: package
8
7
  domain: product
9
8
  ---
@@ -13,9 +12,10 @@ domain: product
13
12
  > Expand a one-line idea or script line into the **Cinematic Scene
14
13
  > Blueprint** — 12 labeled blocks consumed by
15
14
  > [`parse-blueprint.sh`](./scene-blueprint.schema.yaml). Picks
16
- > `hollywood-director` for live-action and `pixar-storyboard-artist`
17
- > for animated beats. Output is provider-agnostic — provider tuning
18
- > is [`motion-choreographer`](../motion-choreographer/SKILL.md).
15
+ > `hollywood-director` for live-action; hands off animated beats to
16
+ > [`pixar-storyteller`](../pixar-storyteller/SKILL.md). Output is
17
+ > provider-agnostic — provider tuning is
18
+ > [`motion-choreographer`](../motion-choreographer/SKILL.md).
19
19
 
20
20
  ## When to use
21
21
 
@@ -38,9 +38,11 @@ Do NOT use when:
38
38
 
39
39
  1. Read the input line. Classify as **live-action / photoreal** or
40
40
  **animated / stylized**.
41
- 2. Live-action → load `hollywood-director` voice. Animated → load
42
- `pixar-storyboard-artist`. Hybrid (live-action with VFX)
43
- `hollywood-director`; record VFX intent in ENVIRONMENT.
41
+ 2. Live-action → load `hollywood-director` voice. Animated → hand
42
+ off to [`pixar-storyteller`](../pixar-storyteller/SKILL.md) (its
43
+ procedure carries the acting / beat-decomposition lens). Hybrid
44
+ (live-action with VFX) → `hollywood-director`; record VFX intent
45
+ in ENVIRONMENT.
44
46
  3. Check for an existing `character.json` lock under
45
47
  `agents/ai-video/<project>/characters/`.
46
48
 
@@ -120,3 +122,16 @@ Any "no" → revise that block.
120
122
  - Do NOT paraphrase identity tokens when a lock exists.
121
123
  - Do NOT mix live-action LENS prescriptions with animated STYLE
122
124
  anchors in the same scene — pick one mode.
125
+
126
+ ## Policies
127
+
128
+ The 12-block Cinematic Scene Blueprint is the policy choke point — every downstream skill (`motion-choreographer`, `video-director`) inherits whatever the blueprint encodes. Before emitting:
129
+
130
+ - [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — when the SUBJECT block names or visually identifies a real person.
131
+ - [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — when the SUBJECT block is a recognised public figure.
132
+ - [`agents/policies/media/brand-impersonation.md`](../../../agents/policies/media/brand-impersonation.md) — when STYLE / ENVIRONMENT references a recognised brand's visual identity.
133
+ - [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — when STYLE anchors to a named living artist or studio as the primary signature.
134
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every distributed blueprint output carries the AI-generation disclosure downstream.
135
+
136
+ Refuse-and-surface at the blueprint layer; do not push policy questions down to the adapter.
137
+
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: security
3
- description: "Use when applying security best practices — authentication, authorization via Policies, CSRF protection, input sanitization, rate limiting, or secure coding."
3
+ description: "Use when applying security best practices — authentication, authorization, CSRF protection, input sanitization, rate limiting, or secure coding — stack-agnostic."
4
4
  source: package
5
5
  domain: quality
6
6
  ---
@@ -13,65 +13,74 @@ Use when implementing authentication, authorization, or any security-sensitive f
13
13
 
14
14
  Do NOT use when:
15
15
 
16
- * Validation logic only — route to [`laravel-validation`](../laravel-validation/SKILL.md)
17
- * Full security audit — route to [`security-audit`](../security-audit/SKILL.md)
18
- * You need a pre-implementation threat model — route to
19
- [`threat-modeling`](../threat-modeling/SKILL.md)
20
- * You need end-to-end authorization analysis — route to
21
- [`authz-review`](../authz-review/SKILL.md)
16
+ * Validation logic only — route to the project's validation carve-out ([`laravel-validation`](../laravel-validation/SKILL.md) for Laravel; otherwise the framework-native primitive — Zod / class-validator, Pydantic, struct-tag validators).
17
+ * Full security audit — route to [`security-audit`](../security-audit/SKILL.md).
18
+ * You need a pre-implementation threat model — route to [`threat-modeling`](../threat-modeling/SKILL.md).
19
+ * You need end-to-end authorization analysis — route to [`authz-review`](../authz-review/SKILL.md).
22
20
 
23
- ## Procedure: Implement security for a feature
21
+ ## Stack-specific carve-outs
22
+
23
+ The procedure below is stack-agnostic. For framework-specific primitives (Laravel Policies / Gates / FormRequests, Symfony voters, NestJS guards, Next.js middleware), defer to:
24
+
25
+ | Stack | Carve-out |
26
+ |---|---|
27
+ | Laravel | [`laravel`](../laravel/SKILL.md), [`laravel-validation`](../laravel-validation/SKILL.md), [`laravel-middleware`](../laravel-middleware/SKILL.md) |
28
+ | Symfony | [`symfony-workflow`](../symfony-workflow/SKILL.md) |
29
+ | Next.js / TS | [`nextjs-patterns`](../nextjs-patterns/SKILL.md) |
30
+
31
+ ## Procedure: Implement security for a feature (stack-neutral)
24
32
 
25
33
  ### Step 0: Inspect
26
34
 
27
- 1. Read `agents/authentication.md` for auth flow.
28
- 2. Read `agents/gates.md` for gate/policy patterns.
29
- 3. Check existing policies in `app/Policies/`.
35
+ 1. Read the project's auth doc (`agents/authentication.md`, `docs/auth.md`, or framework docs).
36
+ 2. Read the project's authorization doc (gates / policies / voters / guards).
37
+ 3. Locate existing authorization rules in the project's idiomatic location (Laravel `app/Policies/`, Symfony `src/Security/Voter/`, NestJS `*.guard.ts`).
30
38
 
31
39
  ### Step 1: Authentication
32
40
 
33
- - Check auth setup: `tymon/jwt-auth` or `laravel/sanctum`.
34
- - Check `config/auth.php` for guards and providers.
35
- - Customer identification happens after auth — see `multi-tenancy` skill.
41
+ - Identify the auth mechanism in use (session, JWT, OAuth, API token) — read the framework's auth config (`config/auth.php`, `next-auth.config.ts`, Symfony `security.yaml`, FastAPI dependency).
42
+ - Check guard / strategy / provider configuration.
43
+ - Multi-tenant identification happens **after** authentication — see [`multi-tenancy`](../multi-tenancy/SKILL.md).
36
44
 
37
45
  ### Step 2: Authorization
38
46
 
39
- 1. Create policy in `app/Policies/` if needed.
40
- 2. Use in FormRequest `authorize()` or controller `$this->authorize()`.
41
- 3. Check `agents/gates.md` for non-model gates.
47
+ 1. Create / locate the authz rule in the framework's idiomatic primitive (Policy, voter, guard, middleware, route dependency).
48
+ 2. Apply it at the request boundary (FormRequest `authorize()`, controller / route-handler dependency, middleware chain).
49
+ 3. Cover non-model gates (cross-aggregate rules) — keep them centralised, not scattered across handlers.
42
50
 
43
51
  ### Step 3: Review for adversarial
44
52
 
45
- For security-sensitive changes, run `adversarial-review` skill.
53
+ For security-sensitive changes, run [`adversarial-review`](../adversarial-review/SKILL.md).
46
54
  Focus on: attack surface, trusting user input, authorization gaps.
47
55
 
48
56
  ## Conventions
49
57
 
50
- See guideline `php/security.md` for auth, SQL injection, XSS, CSRF, headers, session, mass assignment.
58
+ For PHP / Laravel specifics (auth helpers, mass assignment, Blade escaping, CSRF middleware): see guideline `docs/guidelines/php/security.md`.
59
+ → For other stacks, follow the framework's hardening guide and the carve-outs above.
51
60
 
52
61
  ### Validate
53
62
 
54
- - Verify all user input is validated via FormRequest before use.
55
- - Confirm authorization check exists (Policy or Gate) for every state-changing action.
56
- - Check that no raw user input reaches SQL, HTML output, or shell commands.
57
- - Run PHPStan — must pass (catches type-safety issues that enable injection).
63
+ - Verify all user input is validated at the boundary via the framework's primitive — never trust raw request data.
64
+ - Confirm an authorization check exists for every state-changing action.
65
+ - Check that no raw user input reaches SQL, HTML output, shell commands, or template renderers without escaping.
66
+ - Run the project's type-checker — must pass (catches type-safety issues that enable injection).
58
67
 
59
68
  ## Output format
60
69
 
61
- 1. Security-hardened code with auth, validation, and sanitization
62
- 2. Policy class for authorization if needed
70
+ 1. Security-hardened code with auth, input validation at the boundary, and output encoding.
71
+ 2. Authorization rule (Policy / voter / guard / middleware) co-located with the route.
63
72
 
64
73
  ## Gotcha
65
74
 
66
75
  - Validation ensures format, not intent — don't trust input after validation alone.
67
- - `Gate::authorize()` throws, `Gate::allows()` returns bool choose based on error handling.
68
- - Rate limiting: ALL public endpoints, not just login.
76
+ - "Throw" vs "boolean" authz APIs behave differently (`Gate::authorize()` throws vs `Gate::allows()` returns bool in Laravel; `CanActivate` in NestJS throws; FastAPI dependencies throw `HTTPException`). Pick based on how the framework expects failure to surface.
77
+ - Rate-limit ALL public endpoints, not just login.
69
78
  - Never log passwords, tokens, or API keys.
70
79
 
71
80
  ## Do NOT
72
81
 
73
- - Do NOT bypass FormRequest validation in controllers.
74
- - Do NOT use `$request->all()` for mass assignment use `$request->validated()`.
82
+ - Do NOT bypass the framework's request-validation primitive inside handlers.
83
+ - Do NOT bulk-bind raw request payloads to ORM entities without an explicit allow-list (`$fillable` / `$guarded`, DTO mapping, Pydantic model).
75
84
  - Do NOT store plaintext passwords or secrets in the database.
76
85
  - Do NOT expose internal error details in production API responses.
77
86
 
@@ -193,7 +193,7 @@ Before scoring the 5 Killers, verify structure:
193
193
  ```markdown
194
194
  | Skill | K1 Desc | K2 Over | K3 Obvious | K4 Gotcha | K5 Size | K6 Pointer | K7 Analysis | Verdict |
195
195
  |---|---|---|---|---|---|---|---|---|
196
- | dto-creator | ❌ | ✅ | ✅ | ⚠️ | ✅ | ✅ | ✅ | Fix description |
196
+ | laravel-dto | ❌ | ✅ | ✅ | ⚠️ | ✅ | ✅ | ✅ | Fix description |
197
197
  ```
198
198
 
199
199
  ## Output format
@@ -172,7 +172,7 @@ For mock-isolation failure modes (separate concern), see
172
172
 
173
173
  ## Examples
174
174
 
175
- ### PHP / Pest
175
+ ### Example A — PHP / Pest
176
176
 
177
177
  ```php
178
178
  // tests/Unit/EmailValidatorTest.php — RED
@@ -203,7 +203,7 @@ final class EmailValidator
203
203
  Run the filter again → passes. No additional rules (format, MX, length)
204
204
  until a next failing test drives them.
205
205
 
206
- ### JS / Vitest
206
+ ### Example B — TypeScript / Vitest
207
207
 
208
208
  ```ts
209
209
  // src/retry.test.ts — RED
@@ -270,8 +270,8 @@ wait for their own failing tests.
270
270
 
271
271
  ## When to hand over to another skill
272
272
 
273
- * Quality tools, PHPStan, ECS, Rector → [`quality-tools`](../quality-tools/SKILL.md)
274
- * Full Pest conventions, Laravel testing helpers → [`pest-testing`](../pest-testing/SKILL.md)
273
+ * Project type-checker / linter / formatter (PHPStan, ECS, Rector for PHP — tsc / eslint / prettier for TS — ruff / mypy for Python) → [`quality-tools`](../quality-tools/SKILL.md)
274
+ * Full Pest conventions and Laravel test helpers → [`pest-testing`](../pest-testing/SKILL.md)
275
275
  * Running tests inside Docker → [`tests-execute`](../tests-execute/SKILL.md)
276
276
  * Investigating why a test is failing for non-obvious reasons →
277
277
  [`systematic-debugging`](../systematic-debugging/SKILL.md)
@@ -3,6 +3,7 @@ name: test-performance
3
3
  description: "Use when optimizing test suite performance — database setup, seeder optimization, parallel testing, CI pipeline efficiency, or RefreshDatabase alternatives."
4
4
  source: package
5
5
  domain: quality
6
+ framework: laravel
6
7
  ---
7
8
 
8
9
  # test-performance
@@ -16,7 +17,7 @@ Use this skill when:
16
17
  - Parallel testing needs optimization
17
18
  - Seeders need performance analysis
18
19
  - CI pipeline test jobs need to be faster
19
- - Investigating flaky tests caused by DB state
20
+ - Investigating flaky tests caused by database state
20
21
 
21
22
  ## Procedure: Analyze test performance
22
23
 
@@ -56,7 +57,7 @@ Check these areas in order of typical impact:
56
57
  | **Migration count** | How many CREATE TABLE statements? | High if >20 |
57
58
  | **Schema dump** | Is `database/schema/` used? | High if missing |
58
59
  | **Seeder INSERT method** | Individual `save()` vs bulk insert? | Medium |
59
- | **Truncation** | Per-seeder truncate vs centralized? | Low (but correctness issues) |
60
+ | **Truncation** | Per-seeder truncate vs centralized? | Low (but causes correctness issues) |
60
61
  | **Connection discovery** | Dynamic `getPdo()` probing? | Low |
61
62
  | **Parallel worker setup** | Does each worker re-migrate? | High |
62
63
 
@@ -77,7 +78,7 @@ php artisan schema:dump --database=api_database
77
78
  #### B. Template DB Cloning (high ROI for parallel tests)
78
79
 
79
80
  Instead of each parallel worker running migrate+seed independently:
80
- 1. Prepare ONE template DB (migrate + seed)
81
+ 1. Prepare ONE template database (migrate + seed)
81
82
  2. Clone template for each worker via mysqldump
82
83
 
83
84
  ```bash
@@ -93,7 +94,7 @@ mysqldump template_db | mysql worker_db_test_1
93
94
 
94
95
  #### C. Skip Migrate+Seed Flag (high ROI for local dev)
95
96
 
96
- Add a config flag to skip DB setup when DB is already prepared:
97
+ Add a config flag to skip database setup when DB is already prepared:
97
98
 
98
99
  ```php
99
100
  // config/testing.php
@@ -159,7 +160,7 @@ Replace dynamic `getPdo()` probing with explicit config:
159
160
  ## Gotcha
160
161
 
161
162
  - Don't use RefreshDatabase when DatabaseTransactions suffices — full refresh is 10x slower.
162
- - The model forgets that parallel tests share the DB — use unique identifiers in test data.
163
+ - The model forgets that parallel tests share the database — use unique identifiers in test data.
163
164
  - Seeder optimization has the highest ROI — a 2s seeder running 100 times = 200s wasted.
164
165
  - Don't add indexes to test databases just for test performance — the real fix is better test design.
165
166
 
@@ -50,9 +50,9 @@ mapping before running anything:
50
50
  | Claim | Evidence command |
51
51
  |---|---|
52
52
  | "tests pass" | full or targeted test suite |
53
- | "no static errors" | PHPStan / TypeScript / mypy on changed scope |
54
- | "style is clean" | ECS / Prettier / ESLint |
55
- | "no automated refactor pending" | Rector --dry-run clean |
53
+ | "no static errors" | project's type-checker on changed scope (PHPStan, `tsc --noEmit`, mypy / pyright, `go vet`, `cargo check`) |
54
+ | "style is clean" | project's linter + formatter (ECS / Prettier / ESLint / Ruff / Black / gofmt / rustfmt) |
55
+ | "no automated refactor pending" | project's auto-refactor dry-run if one exists (Rector for PHP — otherwise skip this row) |
56
56
  | "endpoint works" | curl / Postman / integration test output |
57
57
  | "UI renders" | Playwright snapshot or manual browser check |
58
58
  | "bug is fixed" | regression test passes |
@@ -60,8 +60,7 @@ mapping before running anything:
60
60
  ### 2. Run the command fresh
61
61
 
62
62
  * Run against the current working tree, not a cached summary.
63
- * For PHP projects inside Docker: run inside the container (see
64
- [`docker`](../docker/SKILL.md) and [`tests-execute`](../tests-execute/SKILL.md)).
63
+ * If the project runs commands inside a container or VM (Docker, Devcontainer, Vagrant), run them there — not on the host. See [`docker`](../docker/SKILL.md) and [`tests-execute`](../tests-execute/SKILL.md).
65
64
  * Use targeted runs during iteration (`--filter=`, `--testNamePattern`).
66
65
  Run the full suite only in the final verification pass.
67
66
 
@@ -77,40 +76,38 @@ mapping before running anything:
77
76
  Ask: *"Does this output actually support what I am about to say?"*
78
77
 
79
78
  * 248/250 tests passed with 2 skipped → do not say "all green"; name the skips.
80
- * PHPStan exit 0 but only analyzed one file → do not say "no static
79
+ * Type-checker exit 0 but only analyzed one file → do not say "no static
81
80
  errors"; name the scope that was checked.
82
81
  * `curl` returned 200 → check the body, not just the status.
83
82
 
84
83
  ### 5. Only then make the claim
85
84
 
86
- Reference the evidence: *"Tests: 250/250 passed. PHPStan: level 8, 0
87
- errors on `app/Services/`."* — not *"everything looks good"*.
85
+ Reference the evidence: *"Tests: 250/250 passed. Type-checker: 0 errors
86
+ on the changed scope."* — not *"everything looks good"*.
88
87
 
89
- ## The end-of-work sequence (PHP projects)
88
+ ## The end-of-work sequence
90
89
 
91
90
  When all code changes are done and you are ready to report completion:
92
91
 
93
- 1. **Targeted tests** — the test(s) covering the changed code pass
94
- 2. **Full test suite** — only after targeted pass is green
95
- 3. **PHPStan** → **Rector --dry-run****ECS****PHPStan** (second pass
96
- catches issues Rector / ECS may have introduced)
97
- 4. Fix any output from steps 1–3 and restart the sequence
98
- 5. Only then: claim completion or suggest `/commit`, push, or PR
92
+ 1. **Targeted tests** — the test(s) covering the changed code pass.
93
+ 2. **Full test suite** — only after targeted pass is green.
94
+ 3. **Static analysis pipeline** — run the project's type-checker auto-refactor dry-run (if any) linter / formatter type-checker (second pass catches issues the refactor / formatter may have introduced).
95
+ 4. Fix any output from steps 1–3 and restart the sequence.
96
+ 5. Only then: claim completion or suggest `/commit`, push, or PR.
99
97
 
100
- Do not run the full quality pipeline between intermediate edits — it
101
- burns time and tokens. Use it once, at the end.
98
+ Do not run the full quality pipeline between intermediate edits — it burns time and tokens. Use it once, at the end.
102
99
 
103
- See [`quality-tools`](../quality-tools/SKILL.md) for the exact commands
104
- per tool.
100
+ For the **exact PHP commands** (PHPStan → Rector → ECS → PHPStan): see [`quality-tools`](../quality-tools/SKILL.md).
101
+ For TS / JS, Python, Go, Rust pipelines: the project's `Taskfile.yml` / `package.json scripts` / `Makefile` is the source of truth — read it before improvising.
105
102
 
106
103
  ## Minimum evidence per task type
107
104
 
108
105
  | Task type | Required evidence |
109
106
  |---|---|
110
- | Code change (logic) | Targeted tests + PHPStan on changed scope |
111
- | New feature | Tests (new + suite) + PHPStan + smoke check (curl/UI) |
107
+ | Code change (logic) | Targeted tests + project's type-checker on changed scope |
108
+ | New feature | Tests (new + suite) + type-checker + smoke check (curl / UI / integration probe) |
112
109
  | Bug fix | Regression test (RED → GREEN) + full suite |
113
- | Refactoring | Full suite + PHPStan + Rector dry-run |
110
+ | Refactoring | Full suite + type-checker + auto-refactor dry-run if available |
114
111
  | Config / env change | Relevant command or service output (not just file diff) |
115
112
  | Migration | Migration run output + rollback dry-run + tests |
116
113
  | API endpoint | HTTP response body + status + content-type |
@@ -140,7 +137,7 @@ When reporting completion to the user:
140
137
 
141
138
  * A "no output" result from a linter is not proof it ran — check the
142
139
  exit code and the analyzed-file count.
143
- * Silencing a warning with `@phpstan-ignore-next-line` or `// @ts-expect-error`
140
+ * Silencing a warning with `@phpstan-ignore-next-line`, `// @ts-expect-error`, `# type: ignore`, or `//nolint`
144
141
  without a reason code passes the linter but defers the real problem.
145
142
  * Running tests with `--stop-on-failure` then reporting "passed" — it
146
143
  only ran until the first failure; the green streak after it is
@@ -150,7 +147,7 @@ When reporting completion to the user:
150
147
  change is large.
151
148
  * Running the test suite on the wrong branch (forgot to switch or
152
149
  rebase) — verify `git status` and `git log -1` before the final gate.
153
- * A previously green PHPStan run in the same conversation is stale as
150
+ * A previously green static-analysis run in the same conversation is stale as
154
151
  soon as any edit lands. Run it again.
155
152
 
156
153
  ## Red flags — STOP and run the gate
@@ -159,7 +156,7 @@ When reporting completion to the user:
159
156
  command-output reference in the same message
160
157
  * About to suggest `/commit` / push / PR without a verification block
161
158
  * Relying on an earlier-in-conversation test run
162
- * Partial evidence (tests green, PHPStan not run — or vice versa)
159
+ * Partial evidence (tests green, type-checker / linter not run — or vice versa)
163
160
  * "The failing test is unrelated, let me skip it" — verify first, then
164
161
  decide
165
162
  * Reporting a green run by paraphrasing instead of quoting exit code
@@ -177,8 +174,8 @@ When reporting completion to the user:
177
174
 
178
175
  ## When to hand over to another skill
179
176
 
180
- * Exact PHPStan / Rector / ECS commands → [`quality-tools`](../quality-tools/SKILL.md)
181
- * Running tests inside Docker → [`tests-execute`](../tests-execute/SKILL.md)
177
+ * Exact PHP quality commands (PHPStan / Rector / ECS) → [`quality-tools`](../quality-tools/SKILL.md)
178
+ * Running tests inside a container / VM → [`tests-execute`](../tests-execute/SKILL.md)
182
179
  * Writing the regression test that the gate requires →
183
180
  [`test-driven-development`](../test-driven-development/SKILL.md)
184
181
  * Diagnosing why the gate failed → [`systematic-debugging`](../systematic-debugging/SKILL.md)
@@ -111,3 +111,16 @@ Any "no" → revise that block before handing off.
111
111
  - Do NOT collapse anticipation / action / reaction into one verb.
112
112
  - Do NOT use "cinematic" without lens + lighting + camera move.
113
113
  - Do NOT invent character details when a `character.json` exists.
114
+
115
+ ## Policies
116
+
117
+ 11-block cinematic prompt is live-action shape — real-person + brand-impersonation risks highest in cluster. Before emitting:
118
+
119
+ - [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — prompt names / visually identifies real person on camera.
120
+ - [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — subject is recognised public figure.
121
+ - [`agents/policies/media/brand-impersonation.md`](../../../agents/policies/media/brand-impersonation.md) — prompt copies journalism / broadcaster / regulated-industry visual identity.
122
+ - [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — LIGHT / LENS anchored to named living cinematographer's signature.
123
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every distributed live-action AI clip carries non-removable AI-generation disclosure.
124
+
125
+ Refuse-and-surface at directorial layer; live-action realism amplifies every downstream policy gap.
126
+
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.py (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "2.23.0"
42
+ agent_config_version: "2.25.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -119,8 +119,8 @@ resolve at agent runtime. The patterns below are correct by design:
119
119
  - **`path_prefix:` triggers containing `.agent-src.uncompressed/`**
120
120
  in YAML frontmatter. This is a literal match pattern for the
121
121
  host's router, **not** a file reference — source-of-truth meta-rules
122
- (`augment-source-of-truth`, `augment-portability`, `skill-quality`,
123
- `docs-sync`, `rule-type-governance`) legitimately match against the
122
+ (`augment-source-of-truth`, `augment-edit-discipline`, `skill-quality`,
123
+ `rule-type-governance`) legitimately match against the
124
124
  authoring tree.
125
125
  - **Symlinked rule / skill / command files** under `.claude/`,
126
126
  `.cursor/`, `.clinerules/`. Targets resolve into `.augment/rules/`,
@@ -84,6 +84,22 @@ php artisan test # Tests (or: vendor/bin/phpunit)
84
84
 
85
85
  Check `AGENTS.md` or `Makefile` / `Taskfile.yml` for the exact commands.
86
86
 
87
+ ### CI-step gate (when `quality.local_auto_run: false`)
88
+
89
+ Roadmaps **must not** schedule full-pipeline literals (`task ci`,
90
+ `task ci-fast`, `task ci-strict`, `make ci`, `make test`,
91
+ `npm/pnpm run check`, `yarn check`, `composer test`, whole-suite
92
+ `vendor/bin/phpunit`, whole-suite `php artisan test`) as checkbox
93
+ steps when `quality.local_auto_run` is `false` in
94
+ `.agent-settings.yml` — `task lint-roadmap-ci-steps` blocks them.
95
+ Reword as narrow verifications (`vendor/bin/phpstan analyse
96
+ app/Modules/X`, `php artisan test --filter=…`) or mark with
97
+ `<!-- carve-out: new-gate-verification -->` when the step verifies a
98
+ **new** gate this roadmap introduces. At execution,
99
+ `/roadmap:process-*` flips matching steps to `[-]` with reason and
100
+ skips them. Full contract:
101
+ [`roadmap-ci-steps-policy`](../rules/roadmap-ci-steps-policy.md).
102
+
87
103
  ---
88
104
 
89
105
  ## Template