@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
@@ -3,17 +3,22 @@ name: multi-tenancy
3
3
  description: "Use when working with the multi-tenant architecture — customer DB switching, FQDN routing, tenant isolation, or cross-tenant operations."
4
4
  source: package
5
5
  domain: engineering
6
+ framework: laravel
6
7
  ---
7
8
 
9
+ <!-- Framework scope: Laravel only. Uses Eloquent model conventions,
10
+ Laravel Context, and Artisan traits — concepts not portable across
11
+ frameworks. Other stacks need a stack-native multi-tenancy skill. -->
12
+
8
13
  # multi-tenancy
9
14
 
10
15
  ## When to use
11
16
 
12
- Use this skill when working with tenant-specific data, customer database connections, or any code that touches the dual-DB architecture.
17
+ Use this skill when working with tenant-specific data, customer database connections, or any code that touches the dual-database architecture.
13
18
 
14
19
 
15
20
  Do NOT use when:
16
- - Single-DB applications
21
+ - Single-database applications
17
22
  - Frontend-only changes
18
23
 
19
24
  ## Procedure: Work with multi-tenancy
@@ -33,7 +38,7 @@ Request → Identify Tenant (JWT / subdomain / API key)
33
38
  → All tenant queries use tenant connection
34
39
  ```
35
40
 
36
- ### Dual-DB pattern
41
+ ### Dual-database pattern
37
42
 
38
43
  | Connection type | Purpose | Scope |
39
44
  |---|---|---|
@@ -49,12 +54,14 @@ Projects may have additional connections for admin operations, provisioning, or
49
54
 
50
55
  ## Core tenant switching service
51
56
 
57
+ **Scope**: Laravel-specific (see frontmatter). For non-Laravel multi-tenant systems, the concepts below still apply but the implementation differs — consult the framework's connection / session / DI conventions.
58
+
52
59
  Search the codebase for the service responsible for tenant switching. Typical responsibilities:
53
60
 
54
61
  1. Store tenant context (e.g., in Laravel Context or a singleton)
55
62
  2. Load tenant configuration
56
63
  3. Set monitoring context (tenant ID, name, domain)
57
- 4. Reconfigure the DB connection with tenant credentials
64
+ 4. Reconfigure the database connection with tenant credentials
58
65
  5. Bind tenant-specific services via the container
59
66
 
60
67
  ## Model conventions
@@ -90,7 +97,7 @@ Check the project for the actual connection names and namespace conventions.
90
97
  ## Testing with tenants
91
98
 
92
99
  - Tests use dedicated tenant seeders (check `agents/docs/` for seeder conventions).
93
- - The testing DB may consolidate multiple connections into a single DB for simplicity.
100
+ - The testing database may consolidate multiple connections into a single DB for simplicity.
94
101
  - Use `RefreshDatabase` or manual seeding — never assume a specific tenant state from previous tests.
95
102
 
96
103
  ## Common pitfalls
@@ -112,19 +119,19 @@ Check the project for the actual connection names and namespace conventions.
112
119
 
113
120
  - multi-tenant
114
121
  - tenant isolation
115
- - customer DB
122
+ - customer database
116
123
  - FQDN routing
117
124
 
118
125
  ## Gotcha
119
126
 
120
- - Always verify which DB connection is active before running queries — cross-tenant data leaks are critical bugs.
127
+ - Always verify which database connection is active before running queries — cross-tenant data leaks are critical bugs.
121
128
  - The model forgets to switch back to the main connection after tenant operations.
122
129
  - Queue jobs serialize the connection state — ensure the tenant context is restored when the job runs.
123
130
  - Don't use `DB::connection()` directly — use the tenant switching helpers.
124
131
 
125
132
  ## Do NOT
126
133
 
127
- - Do NOT hardcode DB names — always use connection names.
134
+ - Do NOT hardcode database names — always use connection names.
128
135
  - Do NOT assume `customer_database` is available in service providers or early boot.
129
136
  - Do NOT access tenant data in global middleware that runs before customer identification.
130
137
  - Do NOT store tenant DB credentials in code — they come from the `customer_databases` table.
@@ -283,6 +283,24 @@ When generating Pest tests:
283
283
  - keep tests readable, isolated, and maintainable
284
284
 
285
285
 
286
+ ### Filter Pest output
287
+
288
+ When triaging a verbose run, narrow the output with `--filter` (Pest)
289
+ plus targeted `grep`/`rg` instead of re-running the whole suite or
290
+ echoing all logs:
291
+
292
+ ```bash
293
+ # Only run failing tests in one file
294
+ vendor/bin/pest tests/Feature/InvoiceTest.php --filter='creates invoice'
295
+
296
+ # Scan the test log for failures only
297
+ rg --color=never '^FAIL|Tests:' storage/logs/pest.log
298
+
299
+ # Inspect JSON output from data-driven tests
300
+ vendor/bin/pest --log-junit=pest.xml && rg '<failure' pest.xml
301
+ ```
302
+
303
+
286
304
  ## Output format
287
305
 
288
306
  1. Pest test file with descriptive test names and clear assertions
@@ -130,6 +130,20 @@ make console-xdebug # Enter Xdebug container
130
130
  php artisan your:command # Xdebug connects to IDE automatically
131
131
  ```
132
132
 
133
+ ### Verifying CLI fixes
134
+
135
+ After a fix, verify the command without re-attaching the debugger:
136
+
137
+ ```bash
138
+ # Run the command, capture exit code + command output
139
+ php artisan your:command; echo "exit code: $?"
140
+
141
+ # Pest CLI assertion — expectsOutput / artisan test
142
+ vendor/bin/pest --filter='ProcessInvoicesCommand'
143
+ ```
144
+
145
+ Assert on the **exit code** and **command output**; never trust "looks fine" from breakpoint inspection alone.
146
+
133
147
  ## Troubleshooting
134
148
 
135
149
  | Problem | Solution |
@@ -151,6 +165,20 @@ make rebuild-php-xdebug # Rebuild Xdebug container only
151
165
  make rebuild-php-all # Rebuild both PHP containers
152
166
  ```
153
167
 
168
+ ### Filter noisy debug output
169
+
170
+ `tail -f /tmp/xdebug.log` and `docker logs` produce far too much
171
+ data to read line-by-line. Filter with `rg`/`grep` for the relevant
172
+ event:
173
+
174
+ ```bash
175
+ # Only connection / breakpoint events
176
+ rg --color=never 'Connect|Step|breakpoint' /tmp/xdebug.log
177
+
178
+ # Only this request's frames in the laravel log
179
+ docker compose logs php-xdebug | rg --color=never "$REQUEST_ID"
180
+ ```
181
+
154
182
  ## What NOT to do
155
183
 
156
184
  - Do not leave Xdebug enabled in production containers.
@@ -13,7 +13,7 @@ Use when creating a new service, extracting business logic from a controller, or
13
13
 
14
14
  Do NOT use when:
15
15
  - Controllers (use `laravel` skill)
16
- - DTOs (use `dto-creator` skill)
16
+ - DTOs (use `laravel-dto` skill for Laravel/PHP; framework-native skill for other stacks)
17
17
  - Models (use `eloquent` skill)
18
18
 
19
19
  ## When to create a service
@@ -39,7 +39,7 @@ Do NOT use when:
39
39
  1. Location: `app/Services/{Domain}/` or `app/Modules/{Module}/App/Services/`.
40
40
  2. `declare(strict_types=1)`, proper namespace.
41
41
  3. Constructor inject dependencies (repositories, other services).
42
- 4. Max 4 constructor deps — if more, split the service.
42
+ 4. Max 4 constructor dependencies — if more, split the service.
43
43
 
44
44
  ### Step 2: Implement methods
45
45
 
@@ -70,7 +70,7 @@ public function __invoke(
70
70
 
71
71
  - Run PHPStan on the service — must pass at level 9.
72
72
  - Verify single responsibility: service does one thing, no mixed concerns.
73
- - Confirm all deps are constructor-injected (no `app()` or facades in service).
73
+ - Confirm all dependencies are constructor-injected (no `app()` or facades in service).
74
74
  - Run affected tests — must pass.
75
75
 
76
76
  ## Output format
@@ -1,18 +1,19 @@
1
1
  ---
2
2
  name: pixar-storyteller
3
3
  description: "Use when turning an idea into a Pixar-style animation prompt — character sheet, scene, image, video — anchored in emotional beat, want, obstacle. Triggers 'Pixar prompt', 'animated scene'."
4
- personas:
5
- - pixar-storyboard-artist
6
4
  source: package
7
5
  domain: product
8
6
  ---
9
7
 
10
8
  # pixar-storyteller
11
9
 
12
- > Turn an animation beat into the **four-block storyboard** the
13
- > `pixar-storyboard-artist` persona ships: CHARACTER SHEET · SCENE
14
- > PROMPT · IMAGE PROMPT · VIDEO PROMPT. Output is provider-agnostic;
15
- > provider tuning is [`motion-choreographer`](../motion-choreographer/SKILL.md).
10
+ > Turn an animation beat into the **four-block storyboard**:
11
+ > CHARACTER SHEET · SCENE PROMPT · IMAGE PROMPT · VIDEO PROMPT.
12
+ > Output is provider-agnostic; provider tuning is
13
+ > [`motion-choreographer`](../motion-choreographer/SKILL.md).
14
+ >
15
+ > The acting / storyboard lens is enforced inline by the procedure
16
+ > and self-review below.
16
17
 
17
18
  ## When to use
18
19
 
@@ -105,3 +106,15 @@ Any "no" → revise that block.
105
106
  - Do NOT emit provider-specific tokens — that is `motion-choreographer`.
106
107
  - Do NOT cite "Pixar-style" without a specific film + year.
107
108
  - Do NOT compound emotional beats ("sad but hopeful and tired").
109
+
110
+ ## Policies
111
+
112
+ The Pixar-storyteller skill anchors prompts to named films and studios by design — the policy surface is the largest in the video cluster:
113
+
114
+ - [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — naming a film + year as the *primary* anchor crosses the "in the style of [STUDIO]" trigger; surface and refuse without a transformative-intent rationale.
115
+ - [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — when a beat references a named animator's signature character (real-person extension of style).
116
+ - [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — when the storyteller's character is a recognised public figure rendered in Pixar shape.
117
+ - [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every Pixar-style output ships with the AI-generation disclosure; parody / commentary cases are flagged for human review.
118
+
119
+ Refuse-and-surface when style ⇒ primary signature, not one influence among several.
120
+
@@ -18,7 +18,6 @@ Use this skill when:
18
18
  - Configuring Playwright for CI/CD
19
19
 
20
20
  **Guideline:** `../../../docs/guidelines/e2e/playwright.md` — full conventions, config templates, CI setup.
21
- **Rule:** `.augment/rules/e2e-testing.md` — constraints enforced during E2E test work.
22
21
  **Mobile:** for native iOS/Android or React Native E2E, do NOT reuse Playwright — see the `mobile-e2e-strategy` skill for framework selection.
23
22
 
24
23
  ## Procedure: Write Playwright tests
@@ -164,6 +163,22 @@ npx playwright show-report
164
163
  npx playwright test -g "should login"
165
164
  ```
166
165
 
166
+ ### Filter noisy Playwright output
167
+
168
+ Use `--grep`, `--reporter=json`, plus `jq`/`rg` to keep diagnosis scoped:
169
+
170
+ ```bash
171
+ # Targeted run — only matching specs
172
+ npx playwright test --grep '@smoke'
173
+
174
+ # JSON report, narrowed to failures via jq
175
+ npx playwright test --reporter=json > pw.json
176
+ jq '.suites[].specs[] | select(.tests[].results[].status=="failed")' pw.json
177
+
178
+ # Scan trace logs for one selector
179
+ rg --color=never 'getByRole.*Submit' test-results/
180
+ ```
181
+
167
182
  ## Avoiding flaky tests
168
183
 
169
184
  | Problem | Solution |
@@ -171,47 +171,73 @@ Each module gets its own file in `agents/analysis/modules/`. Format:
171
171
 
172
172
  ## Detection checklist
173
173
 
174
- ### Framework & language
175
-
176
- | Check | How to detect |
177
- |-----------------------|-----------------------------------------------|
178
- | PHP version | `composer.json` → `require.php` |
179
- | Laravel version | `composer.json` `require.laravel/framework` |
180
- | Laravel or standalone | `artisan` file exists Laravel |
181
- | Node.js | `package.json` exists |
182
- | Frontend framework | `package.json` → Vue, React, etc. |
183
- | TypeScript | `tsconfig.json` exists |
174
+ ### Framework & language (multi-stack)
175
+
176
+ | Check | How to detect |
177
+ |------------------------|------------------------------------------------------------------------------|
178
+ | PHP runtime + version | `composer.json` → `require.php` |
179
+ | Laravel application | `artisan` file at repo root + `laravel/framework` in `composer.json` |
180
+ | Symfony application | `bin/console` + `symfony/framework-bundle` in `composer.json` |
181
+ | Composer package | `composer.json` without `artisan` / `bin/console` |
182
+ | Node.js runtime | `package.json` exists |
183
+ | TypeScript | `tsconfig.json` exists |
184
+ | Frontend framework | `package.json` → `react`, `vue`, `svelte`, `solid`, `astro`, `@angular/core` |
185
+ | Meta-framework | `package.json` → `next`, `nuxt`, `remix`, `sveltekit`, `astro` |
186
+ | Python runtime | `pyproject.toml`, `requirements.txt`, `setup.py`, or `Pipfile` |
187
+ | Python framework | `pyproject.toml` / `requirements.txt` → `django`, `fastapi`, `flask` |
188
+ | Go module | `go.mod` exists |
189
+ | Rust crate / workspace | `Cargo.toml` exists |
190
+ | Ruby app | `Gemfile` → `rails`, `sinatra` |
191
+ | .NET project | `*.csproj`, `*.fsproj`, or `global.json` |
192
+ | Java / Kotlin | `pom.xml`, `build.gradle`, or `build.gradle.kts` |
193
+
194
+ After detecting **any** match, record the stack in the analysis output and select the matching `project-analysis-*` sub-skill (Laravel, Symfony, Next.js, React, Node/Express, Zend/Laminas) — fall back to `project-analysis-core` if no framework-specific sub-skill applies.
184
195
 
185
196
  ### Project type
186
197
 
187
- | Signal | Type |
188
- |------------------------------------|--------------------------------|
189
- | `artisan` + `laravel/framework` | Laravel application |
190
- | `composer.json` without `artisan` | Composer package or legacy PHP |
191
- | Module system (`app/Modules/`) | Modular Laravel |
192
- | Multi-tenant (`customer_database`) | Multi-tenant SaaS |
193
-
194
- ### Legacy indicators
195
-
196
- | Signal | Meaning |
197
- |--------------------------------------------|---------------------------|
198
- | No `declare(strict_types=1)` in most files | Legacy codebase |
199
- | No typed properties / return types | Legacy PHP (< 7.4) |
200
- | `var_dump()` / `print_r()` in code | Legacy debugging patterns |
201
- | No tests or very few tests | Low test coverage |
202
- | No PHPStan / Rector config | No static analysis |
203
- | Mixed naming conventions | Inconsistent standards |
204
-
205
- ### Build & tooling
206
-
207
- | Check | How to detect |
208
- |---------------|-----------------------------------------------------------|
209
- | Task runner | `Makefile` or `Taskfile.yml` |
210
- | Docker | `docker-compose.yml` or `compose.yaml` |
211
- | CI/CD | `.github/workflows/` |
212
- | Quality tools | `phpstan.neon`, `ecs.php`, `rector.php`, or `config-dev/` |
213
- | Editor config | `.editorconfig` |
214
- | Code review | `CODEOWNERS`, PR templates |
198
+ | Signal | Type |
199
+ |-----------------------------------------------------------------------|---------------------------------------|
200
+ | `artisan` + `laravel/framework` | Laravel application |
201
+ | `bin/console` + `symfony/framework-bundle` | Symfony application |
202
+ | `composer.json` without `artisan` / `bin/console` | Composer package or legacy PHP |
203
+ | `package.json` with `next` / `nuxt` / `remix` / `sveltekit` / `astro` | Meta-framework SSR/SSG app |
204
+ | `package.json` with `express` / `fastify` / `koa` / `hapi` | Node HTTP service |
205
+ | `package.json` with `@nestjs/core` | NestJS application |
206
+ | `pyproject.toml` with `django` / `fastapi` / `flask` | Python web app |
207
+ | `go.mod` with `gin-gonic/gin` / `labstack/echo` / `gofiber/fiber` | Go HTTP service |
208
+ | Module system (`app/Modules/`, `src/modules/`, `packages/*`) | Modular monolith / monorepo |
209
+ | Multi-tenant signal (`customer_database`, tenant middleware, `RLS`) | Multi-tenant SaaS |
210
+ | `apps/*` + `packages/*` + `turbo.json` / `nx.json` / `pnpm-workspace` | Monorepo |
211
+
212
+ ### Legacy indicators (stack-aware)
213
+
214
+ | Signal | Meaning |
215
+ |------------------------------------------------------------------------------|-------------------------------|
216
+ | PHP: no `declare(strict_types=1)` in most files | Pre-modern PHP style |
217
+ | PHP: no typed properties / return types | Legacy PHP (< 7.4) |
218
+ | PHP: no `phpstan.neon` / `rector.php` | No static analysis |
219
+ | TS: `// @ts-ignore` / `// @ts-nocheck` density; `any` widespread | Untyped TypeScript |
220
+ | TS: no `tsconfig.json` `strict: true` | Loose TypeScript |
221
+ | JS: no ESLint config or `eslint.config.*` | No linting |
222
+ | Python: no type hints in most signatures; no `py.typed` | Untyped Python |
223
+ | Python: no `mypy.ini` / `pyrightconfig.json` / `ruff.toml` | No static analysis |
224
+ | Go: no `golangci.yml` | No lint pipeline |
225
+ | Rust: no `clippy.toml` and warnings ignored | No lint hygiene |
226
+ | `var_dump()` / `console.log()` / `print()` / `fmt.Println()` left in code | Legacy debugging patterns |
227
+ | No tests or very few tests | Low test coverage |
228
+ | Mixed naming conventions across the same module | Inconsistent standards |
229
+
230
+ ### Build & tooling (stack-agnostic)
231
+
232
+ | Check | How to detect |
233
+ |---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
234
+ | Task runner | `Makefile`, `Taskfile.yml`, `justfile`, `package.json scripts`, `composer.json scripts` |
235
+ | Docker | `docker-compose.yml`, `compose.yaml`, `Dockerfile` |
236
+ | CI/CD | `.github/workflows/`, `.gitlab-ci.yml`, `.circleci/config.yml`, `azure-pipelines.yml` |
237
+ | Quality tools | PHP: `phpstan.neon`, `ecs.php`, `rector.php`. TS/JS: `eslint.config.*`, `.prettierrc*`, `tsconfig.json`. Python: `ruff.toml`, `mypy.ini`. Go: `.golangci.yml`. Rust: `clippy.toml` |
238
+ | Editor config | `.editorconfig` |
239
+ | Code review | `CODEOWNERS`, PR templates (`.github/pull_request_template.md`) |
240
+ | Dependencies | Lockfile presence: `composer.lock`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `poetry.lock`, `uv.lock`, `go.sum`, `Cargo.lock` |
215
241
 
216
242
  ## Analysis phases
217
243
 
@@ -234,7 +260,7 @@ Each module gets its own file in `agents/analysis/modules/`. Format:
234
260
  ### Phase 3: Data layer
235
261
 
236
262
  - List all models with their connections, tables, and key relationships
237
- - Map DB schema: tables, foreign keys, indexes
263
+ - Map database schema: tables, foreign keys, indexes
238
264
  - Document multi-tenant split (which tables in which DB)
239
265
  - **Output:** `agents/analysis/models/api-database.md`, `customer-database.md`
240
266
 
@@ -243,7 +269,7 @@ Each module gets its own file in `agents/analysis/modules/`. Format:
243
269
  - Identify domains from models, services, routes, and directory structure
244
270
  - For each domain: map models → services → controllers → jobs → events
245
271
  - Document business rules and data flows
246
- - Document inter-domain deps
272
+ - Document inter-domain dependencies
247
273
  - **Output:** `agents/analysis/domains/{domain}.md` (one per domain)
248
274
 
249
275
  ### Phase 5: API surface
@@ -255,7 +281,7 @@ Each module gets its own file in `agents/analysis/modules/`. Format:
255
281
 
256
282
  ### Phase 6: Service map
257
283
 
258
- - List all services with purpose, key methods, and deps
284
+ - List all services with purpose, key methods, and dependencies
259
285
  - Map service → repository → model relationships
260
286
  - Identify God services (too many responsibilities)
261
287
  - **Output:** `agents/analysis/services/service-map.md`
@@ -316,7 +342,7 @@ Each module gets its own file in `agents/analysis/modules/`. Format:
316
342
  ## Output format
317
343
 
318
344
  1. Structured analysis document in agents/analysis/
319
- 2. Tech stack inventory with versions and deps
345
+ 2. Tech stack inventory with versions and dependencies
320
346
  3. Architecture diagram or module map
321
347
 
322
348
  ## Auto-trigger keywords
@@ -53,7 +53,7 @@ what it does, whether it fits their stack, how to install it, and how to use it.
53
53
 
54
54
  Read files that define actual package behavior:
55
55
 
56
- - `composer.json` / `package.json` — name, description, requirements, scripts
56
+ - Manifest: `composer.json`, `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, or `*.gemspec` — name, description, requirements, scripts
57
57
  - Source entrypoints — public API surface, main classes/functions
58
58
  - Config files — publishable configs, defaults
59
59
  - CI workflows — what gets tested, supported versions matrix
@@ -83,32 +83,103 @@ Skip sections that have no real content. Never pad.
83
83
 
84
84
  ### 4. Write requirements and compatibility
85
85
 
86
- State only what is tested and supported:
86
+ State only what is tested and supported. Pull the values from the package's manifest, not from memory. Examples per stack:
87
87
 
88
88
  ```
89
- ## Requirements
89
+ ## Requirements (PHP)
90
90
 
91
91
  - PHP ^8.2
92
- - Laravel 11.x
92
+ - Laravel 11.x (optional integration)
93
93
  - ext-json
94
94
  ```
95
95
 
96
- Do NOT imply broad compatibility if only tested in narrow range.
97
- Include framework version, language version, required extensions, services.
96
+ ```
97
+ ## Requirements (JS / TS)
98
+
99
+ - Node.js >= 20
100
+ - TypeScript >= 5.4 (for typed consumers)
101
+ - npm / pnpm / yarn / bun
102
+ ```
103
+
104
+ ```
105
+ ## Requirements (Python)
106
+
107
+ - Python >= 3.11
108
+ - pip / poetry / uv
109
+ - Optional: `fastapi >= 0.110` for the FastAPI integration
110
+ ```
111
+
112
+ ```
113
+ ## Requirements (Go)
114
+
115
+ - Go >= 1.22
116
+ ```
117
+
118
+ ```
119
+ ## Requirements (Rust)
120
+
121
+ - Rust >= 1.78 (stable)
122
+ - `cargo` workspace member or standalone crate
123
+ ```
124
+
125
+ ```
126
+ ## Requirements (Ruby)
127
+
128
+ - Ruby >= 3.2
129
+ - Bundler >= 2.5
130
+ - Optional: Rails 7.1+ for the Rails integration
131
+ ```
132
+
133
+ Do NOT imply broad compatibility if only tested in a narrow range.
134
+ Include language version, framework version, required extensions, and services.
98
135
 
99
136
  ### 5. Write installation that actually works
100
137
 
101
- Document the exact install command and any required follow-up:
138
+ Document the exact install command and any required follow-up. Use the
139
+ package manager native to the stack — never edit manifests by hand.
102
140
 
103
141
  ```bash
142
+ # PHP / Composer
104
143
  composer require vendor/package
105
-
106
- # If framework integration needed:
144
+ # Optional Laravel integration:
107
145
  php artisan vendor:publish --tag=package-config
108
146
  ```
109
147
 
148
+ ```bash
149
+ # JS / TS — pick whichever the consumer uses
150
+ npm install <package>
151
+ pnpm add <package>
152
+ yarn add <package>
153
+ bun add <package>
154
+ ```
155
+
156
+ ```bash
157
+ # Python
158
+ pip install <package>
159
+ poetry add <package>
160
+ uv add <package>
161
+ ```
162
+
163
+ ```bash
164
+ # Go
165
+ go get github.com/<owner>/<package>@latest
166
+ ```
167
+
168
+ ```bash
169
+ # Rust
170
+ cargo add <package>
171
+ ```
172
+
173
+ ```bash
174
+ # Ruby
175
+ bundle add <package>
176
+ # or, for a standalone gem:
177
+ gem install <package>
178
+ ```
179
+
110
180
  Validate each step against the actual codebase.
111
- Include post-install steps (publish, register, env setup) if required.
181
+ Include post-install steps (config publish, service / module / provider
182
+ registration, env vars, codegen, migrations) if the package requires them.
112
183
 
113
184
  ### 6. Write the minimal working example
114
185
 
@@ -148,10 +219,10 @@ splitting, duplication between README and `/docs/`).
148
219
 
149
220
  #### Per-AI catalog pattern (multi-platform AI / CLI packages)
150
221
 
151
- For packages targeting many AI assistants or platforms (CLI installers,
152
- agent-config tools, language SDKs with 10+ targets), prefer flat per-AI
153
- catalog over giant matrix. One line per target, install command on left,
154
- aligned trailing comment naming platform:
222
+ For packages that target many AI assistants or platforms (CLI installers,
223
+ agent-config tools, language SDKs with 10+ targets), prefer a flat per-AI
224
+ catalog over a giant matrix. One line per target, install command on the
225
+ left, aligned trailing comment naming the platform:
155
226
 
156
227
  ```bash
157
228
  npx <package> init --tools=claude-code # Claude Code
@@ -160,22 +231,22 @@ npx <package> init --tools=windsurf # Windsurf
160
231
  # ... one line per supported target
161
232
  ```
162
233
 
163
- Pair catalog with separate "Global install" subsection (same flags plus
164
- `--global`) and "Other commands" subsection. Reference example:
234
+ Pair the catalog with a separate "Global install" subsection (same flags
235
+ plus `--global`) and an "Other commands" subsection. Reference example:
165
236
  [`README.md § Pick specific AIs`](../../../README.md#pick-specific-ais) in
166
- this repo. Inspiration:
237
+ this repository. Inspiration:
167
238
  [`ui-ux-pro-max-skill § Installation`](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill#installation).
168
239
 
169
- Use catalog when package's primary install action varies by platform; use
170
- matrix table (Tool / Rules / Skills / Commands) for capability comparison.
171
- Different jobs — install vs. coverage.
240
+ Use the catalog when the package's primary install action varies by
241
+ platform; use a matrix table (Tool / Rules / Skills / Commands) for
242
+ capability comparison. They serve different jobs — install vs. coverage.
172
243
 
173
244
  README = enough to adopt. Docs = enough to master.
174
245
 
175
246
  ### 8. Validate
176
247
 
177
248
  - [ ] Install command is correct and complete
178
- - [ ] Compatibility/requirements match `composer.json` / `package.json` / CI matrix
249
+ - [ ] Compatibility/requirements match the manifest (`composer.json`, `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `*.gemspec`) and the CI matrix
179
250
  - [ ] First example matches real API (verified against source code)
180
251
  - [ ] All documented commands exist in repo
181
252
  - [ ] No invented features or capabilities
@@ -199,8 +270,8 @@ README = enough to adopt. Docs = enough to master.
199
270
  - Model tends to invent compatibility claims or setup steps
200
271
  - First example is often too large, too abstract, or uses pseudo-code
201
272
  - Model over-explains internals before showing how to use the package
202
- - Existing README may be outdated — verify against actual `composer.json` / source, not old text
203
- - Model forgets post-install steps (config publish, service provider, env vars)
273
+ - Existing README may be outdated — verify against the actual manifest (`composer.json`, `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `*.gemspec`) and source, not the old prose
274
+ - Model forgets post-install steps (config publish, service / module / provider registration, env vars, codegen, migrations) — list whichever the stack requires
204
275
 
205
276
  ## Frugality Standards
206
277
 
@@ -93,7 +93,7 @@ Every roadmap follows this structure:
93
93
  ## Acceptance Criteria
94
94
 
95
95
  - [ ] {Observable, testable criterion}
96
- - [ ] All quality gates pass (PHPStan, Rector, tests)
96
+ - [ ] All quality gates pass — the project's type-checker, auto-fixer, linter, and full test suite (see the `quality-tools` skill for stack-specific invocations)
97
97
 
98
98
  ## Notes
99
99
 
@@ -137,6 +137,16 @@ to every roadmap you author.
137
137
  user (`commit-policy` Iron Law). A roadmap is "implementation-complete"
138
138
  once its checkboxes are ticked and verification has been run — merge
139
139
  timing is tracked outside the roadmap.
140
+ * Schedule full-pipeline CI literals (`task ci`, `task ci-fast`,
141
+ `task ci-strict`, `make ci`, `make test`, `npm/pnpm run check`,
142
+ `yarn check`, `composer test`, whole-suite `vendor/bin/phpunit`,
143
+ whole-suite `php artisan test`) as checkbox steps when
144
+ `quality.local_auto_run: false` — blocked by
145
+ `task lint-roadmap-ci-steps` per
146
+ [`roadmap-ci-steps-policy`](../../rules/roadmap-ci-steps-policy.md).
147
+ Reword as narrow verifications, or mark with
148
+ `<!-- carve-out: new-gate-verification -->` when it verifies a NEW
149
+ gate this roadmap introduces.
140
150
  * Use ALL-CAPS Iron-Law fenced blocks — those belong in
141
151
  [`kernel-membership`](../../../docs/contracts/kernel-membership.md)-listed
142
152
  rules, not roadmaps.
@@ -37,12 +37,22 @@ rtk npm test # same for JS/TS
37
37
  rtk docker compose ps # compact container status
38
38
  ```
39
39
 
40
- ## Procedure: Wrap commands with rtk
40
+ ## Procedure: Analyze, then wrap commands with rtk
41
41
 
42
- 1. Read `personal.rtk_installed` from `.agent-settings.yml`.
43
- 2. **If `true`** → prefix commands with `rtk` when output >30 lines expected.
44
- 3. **If `false` or missing** → use plain commands. Do not prompt the user.
45
- 4. After wrapping: verify output is useful (not truncated on completeness-critical commands).
42
+ ### 1. Analyze the current setup
43
+
44
+ - Read `personal.rtk_installed` from `.agent-settings.yml`.
45
+ - Review the command about to run: estimated output size, whether
46
+ completeness matters (e.g. diff review), and whether a project-local
47
+ filter exists in `.rtk/filters.toml`.
48
+
49
+ ### 2. Wrap (or skip)
50
+
51
+ 1. **If `personal.rtk_installed: true`** → prefix commands with `rtk`
52
+ when output >30 lines expected.
53
+ 2. **If `false` or missing** → use plain commands. Do not prompt the user.
54
+ 3. After wrapping: verify output is useful (not truncated on
55
+ completeness-critical commands).
46
56
 
47
57
  Installation and one-time setup are owned by
48
58
  [`/onboard`](../../commands/onboard.md). If the user asks to install rtk
@@ -153,10 +163,15 @@ When debugging or reviewing diffs, **always run the raw command** without rtk.
153
163
 
154
164
  ## Project-Local Filters
155
165
 
156
- Custom filters for the project's PHP/Laravel toolchain live in `.rtk/filters.toml`
157
- (project root, versioned in Git). These override global filters for matching commands.
166
+ Project-local custom filters live in `.rtk/filters.toml` (project root, versioned in Git). These override global filters for matching commands. Add entries for whatever tools the project actually runs.
158
167
 
159
- Covered: PHPStan, Pest, ECS, Rector, Docker Compose, Artisan, Composer.
168
+ Coverage shipped with this package (extend per project):
169
+ - PHP / Laravel: PHPStan, Pest, PHPUnit, ECS, Rector, Composer, Artisan
170
+ - JS / TS: tsc, eslint, prettier, vitest, jest, playwright, pnpm/npm/yarn install + run
171
+ - Python: ruff, mypy, pyright, pytest, pip / poetry / uv
172
+ - Go: `go test`, `go build`, `go vet`, `golangci-lint`
173
+ - Rust: `cargo build`, `cargo test`, `cargo clippy`, `cargo fmt`
174
+ - Infra / runtime: Docker Compose, Terraform, kubectl
160
175
 
161
176
  To generate or update project-local filters → use the `/optimize-rtk-filters` command.
162
177