@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
@@ -37,68 +37,73 @@ Use this skill when:
37
37
 
38
38
  ## Review checklist
39
39
 
40
+ The checks below are stack-agnostic. For framework-specific conventions (PSR-12 + `declare(strict_types=1)`, FormRequest, single-action `__invoke`, API Resources, Pest, Blade escaping, Eloquent N+1) defer to the carve-outs:
41
+ - PHP / Laravel → [`laravel`](../laravel/SKILL.md), [`laravel-validation`](../laravel-validation/SKILL.md), [`eloquent`](../eloquent/SKILL.md), [`pest-testing`](../pest-testing/SKILL.md), [`blade-ui`](../blade-ui/SKILL.md), [`php-coder`](../php-coder/SKILL.md)
42
+ - Symfony → [`symfony-workflow`](../symfony-workflow/SKILL.md)
43
+ - Next.js / TS → [`nextjs-patterns`](../nextjs-patterns/SKILL.md), [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md)
44
+
40
45
  ### Code quality
41
46
 
42
47
  | Check | What to look for |
43
48
  |---|---|
44
- | **Strict types** | `declare(strict_types=1)` in new files, typed properties/params/returns |
45
- | **PSR-12** | Coding style, line length ≤120, trailing commas, Yoda comparisons |
46
- | **Naming** | Clear, descriptive names. `camelCase` vars, `snake_case` array keys, `UPPER_SNAKE` constants |
49
+ | **Type discipline** | New code is fully typed in the project's idiom (PHP typed properties + `declare(strict_types=1)`, TS strict, Python type hints, Go / Rust by construction). |
50
+ | **Style conformance** | Matches the project's formatter / linter output — no reformatting battles, no out-of-band style. |
51
+ | **Naming** | Clear, descriptive names; matches the dominant casing in the surrounding code (camelCase / snake_case / PascalCase per the language's idiom). |
47
52
  | **Early returns** | No deep nesting. Guard clauses at the top. |
48
- | **Single responsibility** | Each class/method does one thing. Controllers are thin. |
49
- | **No magic** | No magic properties on models (use getters/setters). No `$request->input()` without FormRequest. |
50
- | **PHPDoc** | Only where type hints are insufficient (generics, complex arrays). No redundant docblocks. |
53
+ | **Single responsibility** | Each class / module / function does one thing. HTTP handlers stay thin. |
54
+ | **No magic** | No reach-through to globals (`app()`, `$_GET`, ambient context). No untyped data shapes leaking out of the I/O boundary. |
55
+ | **Doc comments** | Only where the type system is insufficient (generics, complex shapes). No redundant docblocks. |
51
56
 
52
57
  ### Architecture
53
58
 
54
59
  | Check | What to look for |
55
60
  |---|---|
56
- | **Layer separation** | Business logic in services, not controllers. Models have no business logic. |
57
- | **Single-action controllers** | New controllers use `__invoke()`. No multi-action controllers. |
58
- | **FormRequest** | Every controller has a dedicated FormRequest. No inline `$request->validate()`. |
59
- | **API Resources** | Controllers return Resources, never raw models or `response()->json()`. |
60
- | **DTOs** | Structured data transfer between layers, not raw arrays. |
61
- | **Dependency injection** | Constructor injection, no `new Service()` or `app()` calls in business logic. |
61
+ | **Layer separation** | Business logic in services / use-cases, not in HTTP handlers. Domain models stay I/O-free. |
62
+ | **Handler shape** | New handlers follow the framework's recommended shape (Laravel single-action `__invoke`, Next.js route handler, Express handler-per-route). See the stack carve-out. |
63
+ | **Input validation** | Validated at the request boundary via the framework's primitive (Laravel `FormRequest`, Zod / class-validator, Pydantic, struct-tag validators). No ad-hoc inline `if` checks. |
64
+ | **Response shaping** | Returns through a transformer / serializer / DTO. Never returns raw ORM entities. |
65
+ | **DTOs / value objects** | Structured data between layers, not raw associative arrays / `any` / `dict[str, Any]`. |
66
+ | **Dependency injection** | Constructor injection (or framework-idiomatic equivalent). No service-locator calls in business logic. |
62
67
 
63
68
  ### Database & Performance
64
69
 
65
70
  | Check | What to look for |
66
71
  |---|---|
67
- | **N+1 queries** | Relationship access in loops without eager loading |
68
- | **Missing indexes** | New columns used in WHERE/JOIN without index |
69
- | **Unbounded queries** | `Model::all()` or queries without pagination/limit |
70
- | **Raw SQL** | Parameterized queries only. No string concatenation with user input. |
71
- | **Migrations** | Reversible (has `down()`). Correct connection. Correct table prefix. |
72
- | **Money** | Uses `decimal` or `Math` helper, never `float` |
72
+ | **N+1 queries** | Relationship / association access in loops without eager / batch loading. |
73
+ | **Missing indexes** | New columns used in `WHERE` / `JOIN` without a supporting index. |
74
+ | **Unbounded queries** | Full-table reads (`Model::all()`, `SELECT *` without `LIMIT`, unpaged list endpoints). |
75
+ | **Raw SQL** | Parameterised queries only. No string concatenation with user input. |
76
+ | **Migrations** | Reversible. Targets the right connection / schema. Idempotent where the platform supports it. |
77
+ | **Money / precision** | Uses an exact-precision type (PHP `decimal` / `Math` helper, TS bigint / decimal lib, Python `Decimal`), never `float`. |
73
78
 
74
79
  ### Security
75
80
 
76
81
  | Check | What to look for |
77
82
  |---|---|
78
- | **Authorization** | Policy check in FormRequest or middleware. No unprotected endpoints. |
79
- | **Input validation** | All user input validated via FormRequest rules. |
80
- | **Mass assignment** | No `$model->fill($request->all())` without `$fillable`/`$guarded`. |
81
- | **SQL injection** | No raw queries with unescaped user input. |
82
- | **XSS** | Blade output escaped (`{{ }}` not `{!! !!}`) unless intentional. |
83
- | **Sensitive data** | No secrets, tokens, or passwords in code or logs. |
83
+ | **Authorization** | Authz check at every state-changing endpoint (Laravel Policy, Symfony voter, NestJS guard, framework middleware). No unprotected mutating routes. |
84
+ | **Input validation** | All user input validated at the boundary via the framework's primitive. |
85
+ | **Mass assignment** | No bulk-binding raw request payloads to ORM entities without an explicit allow-list (`$fillable` / `$guarded` in Laravel, DTO mapping in TS / Python). |
86
+ | **Injection** | No raw queries / command lines / template strings with unescaped user input. |
87
+ | **Output encoding** | Template output is escaped by default; raw / unescaped output is intentional and reviewed (Blade `{{ }}` vs `{!! !!}`, React `dangerouslySetInnerHTML`, Jinja `\|safe`). |
88
+ | **Sensitive data** | No secrets, tokens, or passwords in code, logs, or error responses. |
84
89
 
85
90
  ### Tests
86
91
 
87
92
  | Check | What to look for |
88
93
  |---|---|
89
- | **Coverage** | New code paths have tests. Bug fixes have regression tests. |
90
- | **Test quality** | Tests verify behavior, not implementation details. |
91
- | **Pest syntax** | Correct Pest conventions. No `readonly`/`final` on test classes. |
92
- | **Seeders** | Test data via seeders (or factories where allowed). |
94
+ | **Coverage** | New code paths have tests. Bug fixes have regression tests (RED → GREEN). |
95
+ | **Test quality** | Tests verify behaviour, not implementation details. |
96
+ | **Framework idiom** | Correct conventions for the project's test framework (Pest / PHPUnit, Jest / Vitest, pytest, `go test`, `cargo test`) — see the stack carve-out for specifics. |
97
+ | **Test data** | Provisioned via the project's idiom (seeders, factories, fixtures, builders). |
93
98
  | **Assertions** | Meaningful assertions. Not just "no exception thrown". |
94
- | **Flaky risks** | Time-dependent tests use `travel()`. No reliance on execution speed. |
99
+ | **Flaky risks** | Time-dependent tests freeze the clock (`travel()`, `jest.useFakeTimers()`, `freezegun`). No reliance on execution speed. |
95
100
 
96
101
  ## Before creating a PR
97
102
 
98
- 1. Run quality pipeline: PHPStan Rector ECS PHPStan (see `quality-tools` skill for commands)
99
- 2. Run tests: `make test` (or project equivalent)
103
+ 1. Run the project's quality pipeline (see the stack carve-out for the exact commands — PHP: `quality-tools`).
104
+ 2. Run tests via the project's runner (`make test`, `npm test`, `pytest`, `go test ./...`, or the project's wrapper script).
100
105
  3. Ensure CI passes on the branch.
101
- 4. Self-review the diff: `git diff origin/main..HEAD`
106
+ 4. Self-review the diff: `git diff origin/main..HEAD`.
102
107
 
103
108
  ## Receiving feedback
104
109
 
@@ -114,7 +119,7 @@ When receiving code review feedback, follow this sequence:
114
119
  6. **IMPLEMENT** — One item at a time, test each.
115
120
 
116
121
  If **any item is unclear**, STOP — do not implement anything yet. Items may be related;
117
- partial understanding wrong impl.
122
+ partial understanding leads to wrong implementation.
118
123
 
119
124
  ### No performative agreement
120
125
 
@@ -132,7 +137,7 @@ partial understanding → wrong impl.
132
137
  **External / Copilot / bot feedback** (less context):
133
138
  - Check: Technically correct for THIS codebase?
134
139
  - Check: Does it break existing functionality?
135
- - Check: Is there a reason for the current impl?
140
+ - Check: Is there a reason for the current implementation?
136
141
  - Check: Does the reviewer understand the full context?
137
142
  - **YAGNI check:** If the reviewer suggests "implementing properly", grep the codebase
138
143
  for actual usage. If unused → suggest removing (YAGNI).
@@ -181,7 +186,7 @@ Description and suggested improvement.
181
186
  Description.
182
187
  ```
183
188
 
184
- Group related findings. Don't repeat what linters/PHPStan already catch — focus on
189
+ Group related findings. Don't repeat what the project's linter / type-checker already catches — focus on
185
190
  logic, architecture, and things tools can't detect.
186
191
 
187
192
  ## Adversarial review
@@ -211,5 +216,5 @@ Focus on the "Code changes / Refactoring" attack questions.
211
216
  - Do NOT approve without actually reading the code.
212
217
  - Do NOT agree with review comments without verifying them against the codebase.
213
218
  - Do NOT use performative language when responding to feedback ("Great point!", "Excellent catch!").
214
- - Do NOT nitpick style issues that ECS/Rector handle automatically.
219
+ - Do NOT nitpick style issues the project's formatter / auto-refactor (ECS, Prettier, Ruff, gofmt) handles automatically.
215
220
  - Do NOT merge without CI passing and quality checks green.
@@ -71,7 +71,7 @@ source when the user is unsure.
71
71
  |---|---|
72
72
  | `auth-model.md` | Policy classes, Gate definitions, permission seeders, role enums, `@can` directives, middleware |
73
73
  | `tenant-boundaries.md` | Base query scopes, connection-switching middleware, tenant-resolution service, global scopes, `.env` vars like `TENANT_*` |
74
- | `data-sensitivity.md` | Eloquent `$hidden` / `$casts`, Sentry `beforeSend`, logging helpers, API resources, export commands |
74
+ | `data-sensitivity.md` | ORM hidden-field config (Eloquent `$hidden` / `$casts`, Symfony `#[Ignore]`, Prisma `select` defaults, SQLAlchemy `__init__` filters), Sentry `beforeSend`, logging redaction helpers, API serialisers / resources, export commands |
75
75
  | `deployment-order.md` | `database/migrations/`, feature-flag config (Pennant / LaunchDarkly), deploy scripts, CI workflow, rollback runbooks in `docs/` |
76
76
  | `observability.md` | `config/logging.php`, Sentry init, dashboard links in READMEs, alert rules in Terraform/Grafana dashboards |
77
77
 
@@ -4,8 +4,7 @@ description: "Use when designing monitoring dashboards — visualization selecti
4
4
  source: package
5
5
  domain: devops
6
6
  recommended_for_user_types: [ops, gtm]
7
-
8
-
7
+ framework: laravel
9
8
  ---
10
9
 
11
10
  # dashboard-design
@@ -14,8 +14,8 @@ domain: engineering
14
14
  Use when designing schemas, optimizing queries, adding indexes, or troubleshooting database performance.
15
15
 
16
16
  Do NOT use when:
17
- - Writing Eloquent models (use `eloquent` skill)
18
- - Creating migrations only (use `migration-creator` skill)
17
+ - Writing framework-specific ORM models (use the matching skill — e.g. `eloquent` for Laravel, `symfony-workflow` for Doctrine, framework-native skill for Prisma / TypeORM / SQLAlchemy / GORM / Diesel)
18
+ - Creating migrations only use the framework-specific migration skill (`laravel-migration` for Laravel, framework-native for others)
19
19
 
20
20
  ## Procedure: Optimize a query
21
21
 
@@ -52,7 +52,12 @@ Re-run `EXPLAIN` and confirm improved plan.
52
52
 
53
53
  1. **Read migrations** — source of truth
54
54
  2. **Read models** — `$table`, `$connection`, `$fillable`, `$casts`, relationships
55
- 3. **Run schema queries** — `php artisan tinker --execute="Schema::getColumnListing('table')"`
55
+ 3. **Run schema queries** — use the project's REPL or a raw introspection query:
56
+ - Laravel: `php artisan tinker --execute="Schema::getColumnListing('table')"`
57
+ - Symfony / Doctrine: `bin/console doctrine:mapping:info`
58
+ - Rails: `bin/rails runner "p ActiveRecord::Base.connection.columns('table').map(&:name)"`
59
+ - Prisma: `npx prisma db pull --print | grep -A20 "model Table"`
60
+ - Generic SQL: `psql -d mydb -c "\d table"` / `mysql -e "DESCRIBE table"`
56
61
  4. **Check project docs** — `agents/docs/` for conventions
57
62
 
58
63
  | Trap | Reality |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: dependency-upgrade
3
- description: "Use when upgrading dependencies — "update Laravel", "bump PHP version", or "upgrade packages". Covers changelog review, breaking change detection, and verification."
3
+ description: "Use when upgrading dependencies — 'update framework X', 'bump runtime version', or 'upgrade packages'. Covers changelog review, breaking-change detection, and verification. Stack-agnostic."
4
4
  source: package
5
5
  domain: engineering
6
6
  ---
@@ -9,10 +9,10 @@ domain: engineering
9
9
 
10
10
  ## When to use
11
11
 
12
- Use this skill when upgrading Composer packages, npm packages, or any project dependency.
12
+ Use this skill when upgrading project dependencies on any stack — Composer (PHP), npm / pnpm / yarn (JS/TS), pip / poetry / uv (Python), go.mod (Go), Cargo (Rust), or any other language-level package manager.
13
13
 
14
14
  Do NOT use when:
15
- - Installing new deps for the first time
15
+ - Installing new dependencies for the first time
16
16
  - Routine code changes unrelated to package versions
17
17
 
18
18
  ## Procedure: Upgrade a dependency
@@ -25,7 +25,7 @@ Before upgrading:
25
25
  - **Identify breaking changes** — look for "BREAKING", "BC break", major version bumps.
26
26
  - **Check deprecation notices** — code using deprecated APIs needs updating.
27
27
  - **Review upgrade guides** — many packages provide migration docs.
28
- - **Check PHP/Node version requirements** — does the new version need a newer runtime?
28
+ - **Check runtime version requirements** — does the new version need a newer PHP / Node / Python / Go / Rust toolchain?
29
29
 
30
30
  ### 2. Plan
31
31
 
@@ -73,23 +73,69 @@ npm install package-name@latest
73
73
  npm audit
74
74
  ```
75
75
 
76
- ### 4. Verify
76
+ #### pip / poetry / uv (Python)
77
+
78
+ ```bash
79
+ # Check outdated packages
80
+ pip list --outdated # pip
81
+ poetry show --outdated # poetry
82
+ uv pip list --outdated # uv
83
+
84
+ # Upgrade a specific package
85
+ pip install --upgrade package-name
86
+ poetry update package-name
87
+ uv pip install --upgrade package-name
77
88
 
78
- After upgrading, run the full verification pipeline:
89
+ # Check for vulnerabilities
90
+ pip-audit # via pip-audit
91
+ safety check # via safety
92
+ ```
93
+
94
+ #### go.mod (Go)
79
95
 
80
96
  ```bash
81
- # PHP/Laravel
82
- vendor/bin/phpstan analyse # Check for type errors
83
- vendor/bin/rector process # Auto-fix refactoring
84
- vendor/bin/ecs check --fix # Auto-fix code style
85
- php artisan test # Run all tests
86
-
87
- # JavaScript
88
- npm run build # Check build succeeds
89
- npm test # Run all tests
90
- npm run lint # Check code style
97
+ # List available updates
98
+ go list -u -m all
99
+
100
+ # Upgrade a specific module
101
+ go get example.com/pkg@latest
102
+ go get example.com/pkg@v1.2.3
103
+
104
+ # Tidy after upgrade
105
+ go mod tidy
106
+
107
+ # Check for known vulnerabilities
108
+ govulncheck ./...
91
109
  ```
92
110
 
111
+ #### Cargo (Rust)
112
+
113
+ ```bash
114
+ # Check outdated
115
+ cargo outdated # requires cargo-outdated
116
+
117
+ # Upgrade
118
+ cargo update -p crate-name
119
+ cargo add crate-name@1.2 # edition-aware add
120
+
121
+ # Audit
122
+ cargo audit # requires cargo-audit
123
+ ```
124
+
125
+ ### 4. Verify
126
+
127
+ After upgrading, run the project's full verification pipeline. The exact commands depend on the stack — resolve via the project's `Taskfile.yml`, `package.json scripts`, `composer.json scripts`, `Makefile`, or the `quality-tools` skill.
128
+
129
+ | Stack | Type-check | Lint / autofix | Tests |
130
+ |---|---|---|---|
131
+ | PHP / Laravel | `vendor/bin/phpstan analyse` | `vendor/bin/rector process` + `vendor/bin/ecs check --fix` | `php artisan test` (or `vendor/bin/pest`) |
132
+ | TypeScript | `tsc --noEmit` | `eslint --fix` + `prettier --write` | `pnpm test` (or `vitest run`, `jest`) |
133
+ | Python | `mypy` / `pyright` | `ruff check --fix` + `ruff format` | `pytest` |
134
+ | Go | `go vet ./...` | `golangci-lint run --fix` | `go test ./...` |
135
+ | Rust | `cargo check` | `cargo clippy --fix` + `cargo fmt` | `cargo test` |
136
+
137
+ Re-run the type-checker after any auto-fixer that can rewrite types (Rector for PHP, `eslint --fix` for TS).
138
+
93
139
  ### 5. Document
94
140
 
95
141
  - Note the upgrade in the commit message: `chore: upgrade vendor/package from 2.x to 3.x`
@@ -100,7 +146,7 @@ npm run lint # Check code style
100
146
  When upgrading multiple packages:
101
147
 
102
148
  - **Upgrade one at a time** — easier to identify which upgrade broke something.
103
- - **Exception:** Tightly coupled packages (e.g., `laravel/framework` + `laravel/*`) can be upgraded together.
149
+ - **Exception:** Tightly coupled packages can be upgraded together (e.g., `laravel/framework` + `laravel/*`; `@nestjs/core` + `@nestjs/*`; `react` + `react-dom`; `next` + `@next/*`).
104
150
  - **Run tests after each upgrade** — don't batch upgrades and test once at the end.
105
151
 
106
152
  ## Common pitfalls
@@ -111,7 +157,7 @@ When upgrading multiple packages:
111
157
  | Upgrading all packages at once | One package at a time (or tightly coupled groups) |
112
158
  | Trusting `composer update` blindly | Use `--dry-run` first, review changes |
113
159
  | Ignoring deprecation warnings | Fix deprecations before they become errors |
114
- | Skipping tests after upgrade | Full test suite + PHPStan after every upgrade |
160
+ | Skipping tests after upgrade | Full test suite + project type-checker (PHPStan / tsc / mypy / `go vet` / `cargo check`) after every upgrade |
115
161
  | Lock file conflicts | Coordinate upgrades with the team |
116
162
 
117
163
  ## Version constraint guidelines
@@ -165,7 +211,7 @@ npm audit
165
211
  |---|---|---|
166
212
  | **Known CVEs** | `composer audit` / `npm audit` | Direct vulnerabilities |
167
213
  | **Maintenance status** | GitHub: last commit, open issues | Abandoned packages are a risk |
168
- | **Dependency tree** | `composer show -t vendor/pkg` / `npm ls new-package` | Transitive deps may conflict |
214
+ | **Dependency tree** | `composer show -t vendor/pkg` / `npm ls new-package` | Transitive dependencies may conflict |
169
215
  | **License compatibility** | `composer licenses` / check `package.json` | Legal compliance |
170
216
  | **Bundle size** (npm) | `npx bundlephobia new-package` | Impact on frontend bundle |
171
217
 
@@ -84,8 +84,8 @@ When UI changes are involved:
84
84
  - `rg`, `grep` for text: specific patterns, not full files
85
85
  - `head`, `tail`, `cut`, `sort`, `uniq` for narrowing results
86
86
  - `--filter`, `--json`, `--format` flags on CLI tools — always use them
87
- - Laravel: `route:list --json | jq '.[] | select(.uri | test("users"))'`
88
- - Logs: `rg "request_id=abc123" storage/logs` — never `cat storage/logs/laravel.log`
87
+ - Route lookup — Laravel `php artisan route:list --json | jq '…'`, Rails `bin/rails routes | grep users`, Express `console.log(app._router.stack)`, FastAPI `app.routes`, Symfony `bin/console debug:router`.
88
+ - Logs `rg "request_id=abc123" <log-dir>` — never `cat <log-file>`. Log dirs by stack: Laravel `storage/logs/`, Rails `log/`, Node `./logs/` or `journalctl`, Python `./logs/` or `journalctl`, Docker `docker compose logs <svc> --since 5m`.
89
89
 
90
90
  ### Avoid large output by default
91
91
 
@@ -156,22 +156,33 @@ If full TDD is not practical: at least write down the expected output before cod
156
156
  #### Backend examples
157
157
 
158
158
  ```bash
159
- # Laravel route lookup — targeted, not full dump
160
- php artisan route:list --json | jq '.[] | select(.uri == "api/users") | {method, uri, name, action, middleware}'
161
-
162
- # Config/debug
163
- php artisan config:show app | grep env
159
+ # Route lookup — pick the project's framework
160
+ php artisan route:list --json | jq '.[] | select(.uri == "api/users") | {method, uri, name, action, middleware}' # Laravel
161
+ bin/console debug:router --format=json | jq '.[] | select(.path == "/api/users")' # Symfony
162
+ bin/rails routes -g users # Rails
163
+ curl -s http://localhost:3000/__routes | jq '.[] | select(.path == "/api/users")' # Express custom-introspection
164
+ curl -s http://localhost:8000/openapi.json | jq '.paths["/api/users"]' # FastAPI
165
+
166
+ # Config inspection
167
+ php artisan config:show app | grep env # Laravel
168
+ bin/console debug:config framework # Symfony
169
+ bin/rails runner 'puts Rails.application.config_for(:database)' # Rails
164
170
 
165
171
  # API inspection — extract only what you need
166
172
  curl -s http://localhost/api/users | jq '.[0] | {id, email, status}'
167
173
  curl -s http://localhost/api/users/1 | jq '{id, name, roles: [.roles[].name]}'
168
174
 
169
- # Logsscoped by request ID, timestamp, or error type
170
- rg "request_id=abc123|OrderFailed" storage/logs
171
- tail -n 200 storage/logs/laravel.log | rg "payment|timeout"
172
-
173
- # Database targeted queries, not full table dumps
174
- php artisan tinker --execute="User::where('email', 'test@example.com')->first(['id','email','status'])"
175
+ # Recent logs targeted, not full dump
176
+ tail -n 200 storage/logs/laravel.log | rg "payment|timeout" # Laravel
177
+ tail -n 200 log/development.log | rg "payment|timeout" # Rails
178
+ docker compose logs api --since 5m --no-color | rg "payment|timeout" # any container stack
179
+ journalctl -u myapp --since "5 min ago" | rg "payment|timeout" # systemd
180
+
181
+ # DB-state probe — targeted single record, not full table
182
+ php artisan tinker --execute="User::where('email','x@y')->first(['id','email','status'])" # Laravel
183
+ bin/rails runner "p User.where(email: 'x@y').first&.slice(:id,:email,:status)" # Rails
184
+ bin/console doctrine:query:sql "SELECT id,email,status FROM users WHERE email='x@y' LIMIT 1" # Symfony
185
+ psql -d mydb -c "SELECT id,email,status FROM users WHERE email='x@y' LIMIT 1" # raw SQL fallback
175
186
  ```
176
187
 
177
188
  #### Debugging with Xdebug
@@ -218,7 +229,7 @@ Never load full output into context when a filter gives you the answer.
218
229
 
219
230
  Tests are mandatory when behavior changes or bugs are fixed.
220
231
 
221
- Prefer: failing test first → impl → passing test.
232
+ Prefer: failing test first → implementation → passing test.
222
233
 
223
234
  Test types: unit (isolated logic), feature/integration (behavior), UI (frontend), regression (bugs).
224
235
 
@@ -15,7 +15,7 @@ Use when creating/modifying Eloquent models, relationships, scopes, or writing d
15
15
 
16
16
  Do NOT use when:
17
17
  - Schema design or query optimization (use `database` skill)
18
- - Creating migrations only (use `migration-creator` skill)
18
+ - Creating migrations only (use `laravel-migration` skill)
19
19
 
20
20
  ## Procedure: Create or modify a model
21
21
 
@@ -145,7 +145,7 @@ Structural roadmap tasks must include:
145
145
 
146
146
  1. **Exact file path** — `app/Modules/Auth/Services/LoginService.php`, never *"the login service"*.
147
147
  2. **Complete code** — every method body, import, and signature ready to paste; no `// existing code` ellipses, no `…`.
148
- 3. **Exact command** — `php artisan migrate --path=database/migrations/2026_05_09_create_logins.php`, never *"run the migration"*.
148
+ 3. **Exact command** — the precise CLI invocation, never *"run the migration"*. Examples: `php artisan migrate --path=database/migrations/2026_05_09_create_logins.php` (Laravel), `bin/console doctrine:migrations:migrate --no-interaction` (Symfony), `bin/rails db:migrate VERSION=20260509…` (Rails), `npx prisma migrate deploy` (Prisma), `alembic upgrade +1` (Python / Alembic), `sqlx migrate run` (Rust).
149
149
  4. **Expected output** — what success looks like (`Migrated: 2026_05_09_create_logins`) and the exit code.
150
150
  5. **No placeholders** — angle-bracket placeholders, `TODO`, `FIXME`, `tbd`, and `???` are blockers; resolve before the task ships.
151
151
 
@@ -40,7 +40,7 @@ Relevant settings for this skill:
40
40
 
41
41
  | Key | Values | Default | Description |
42
42
  |---|---|---|---|
43
- | `personal.ide` | `code`, `phpstorm` | _(empty)_ | CLI command to open files |
43
+ | `personal.ide` | `code`, `cursor`, `windsurf`, `phpstorm`, `webstorm`, `idea`, `goland`, `rubymine`, `pycharm`, `rider`, `subl`, `vim`, `nvim`, `emacs`, `zed` | _(empty)_ | CLI command to open files |
44
44
  | `personal.open_edited_files` | `true`, `false` | `false` | Whether to auto-open edited files |
45
45
 
46
46
  ## Behavior
@@ -62,31 +62,49 @@ cat .agent-settings.yml 2>/dev/null
62
62
  After editing one or more files, open them using the `ide` setting.
63
63
  **Always jump to the first edited line.** The syntax depends on the IDE:
64
64
 
65
- **PhpStorm** (`personal.ide: phpstorm`):
65
+ **JetBrains IDEs** (`personal.ide: phpstorm` / `webstorm` / `idea` / `pycharm` / `goland` / `rubymine` / `rider`):
66
66
  ```bash
67
- phpstorm --line {line} {file}
67
+ phpstorm --line {line} {file} # PHP
68
+ webstorm --line {line} {file} # JS / TS
69
+ idea --line {line} {file} # Java / Kotlin / general
70
+ pycharm --line {line} {file} # Python
71
+ goland --line {line} {file} # Go
68
72
  ```
69
73
 
70
- **VS Code** (`personal.ide: code`):
74
+ **VS Code-family** (`personal.ide: code` / `cursor` / `windsurf`):
71
75
  ```bash
72
- code -g {file}:{line}
76
+ code --goto {file}:{line}
77
+ cursor --goto {file}:{line}
78
+ windsurf --goto {file}:{line}
73
79
  ```
74
80
 
75
- For multiple files, run one command per file:
81
+ **Zed** (`personal.ide: zed`):
76
82
  ```bash
77
- # PhpStorm
78
- phpstorm --line 42 app/Models/User.php
79
- phpstorm --line 15 app/Services/UserService.php
83
+ zed {file}:{line}
84
+ ```
80
85
 
81
- # VS Code
82
- code -g app/Models/User.php:42
83
- code -g app/Services/UserService.php:15
86
+ **Terminal editors** (`personal.ide: vim` / `nvim` / `emacs`):
87
+ ```bash
88
+ vim +{line} {file}
89
+ nvim +{line} {file}
90
+ emacs +{line} {file}
84
91
  ```
85
92
 
86
- If the line number is unknown (e.g. new file), omit the line parameter:
93
+ For multiple files, run one command per file:
87
94
  ```bash
88
- phpstorm app/Models/User.php
89
- code app/Models/User.php
95
+ # JetBrains (PhpStorm / WebStorm / GoLand / PyCharm)
96
+ phpstorm --line 42 src/Services/UserService.php
97
+ webstorm --line 15 src/services/user-service.ts
98
+ goland --line 27 internal/user/service.go
99
+ pycharm --line 88 app/services/user_service.py
100
+
101
+ # VS Code-family
102
+ code --goto src/services/user-service.ts:15
103
+ cursor --goto app/services/user_service.py:88
104
+
105
+ # Open file without jumping to a line
106
+ code src/services/user-service.ts
107
+ phpstorm src/Services/UserService.php
90
108
  ```
91
109
 
92
110
  ### Rules
@@ -102,8 +120,16 @@ code app/Models/User.php
102
120
 
103
121
  | IDE | Command | Install |
104
122
  |---|---|---|
105
- | VS Code | `code {file}` | Shell Command: Install 'code' in PATH |
106
- | PhpStorm | `phpstorm {file}` | JetBrains Toolbox CLI or `Create command-line launcher` in PhpStorm |
123
+ | VS Code | `code {file}` | Shell Command: Install 'code' in PATH |
124
+ | Cursor | `cursor {file}` | Settings "Install 'cursor' shell command" |
125
+ | Windsurf | `windsurf {file}` | Settings → "Install 'windsurf' shell command" |
126
+ | Zed | `zed {file}` | Settings → "Install CLI" (creates `zed` in PATH) |
127
+ | PhpStorm | `phpstorm {file}` | JetBrains Toolbox CLI or *Tools → Create command-line launcher* in PhpStorm |
128
+ | WebStorm | `webstorm {file}` | JetBrains Toolbox CLI or *Tools → Create command-line launcher* in WebStorm |
129
+ | IntelliJ IDEA | `idea {file}` | JetBrains Toolbox CLI or *Tools → Create command-line launcher* in IDEA |
130
+ | PyCharm | `pycharm {file}` | JetBrains Toolbox CLI or *Tools → Create command-line launcher* in PyCharm |
131
+ | GoLand | `goland {file}` | JetBrains Toolbox CLI or *Tools → Create command-line launcher* in GoLand |
132
+ | Vim / Neovim | `vim {file}` / `nvim {file}` | Bundled with most distros |
107
133
 
108
134
  ## Output format
109
135
 
@@ -121,8 +147,8 @@ code app/Models/User.php
121
147
  ## Gotcha
122
148
 
123
149
  - Check `.agent-settings.yml` for `personal.open_edited_files` before opening anything — the user may have disabled it.
124
- - Don't open files during batch operations (e.g., fixing 20 PHPStan errors) — only open when specifically relevant.
125
- - PHPStorm sometimes locks files when opening — wait briefly before editing the same file.
150
+ - Don't open files during batch operations (e.g., fixing 20 type-checker errors across PHPStan / tsc / mypy / `cargo check`) — only open when specifically relevant.
151
+ - JetBrains IDEs (PhpStorm, WebStorm, IDEA, PyCharm, GoLand, RubyMine, Rider) sometimes briefly lock a file on open — wait a moment before editing the same file.
126
152
 
127
153
  ## Do NOT
128
154
 
@@ -61,7 +61,7 @@ Run the full end-of-work gate before presenting any options — see
61
61
 
62
62
  1. Targeted tests green
63
63
  2. Full test suite green
64
- 3. Quality pipeline (PHPStanRector dry-run → ECS → PHPStan) green
64
+ 3. Quality pipeline green — the project's full sequence (type-checkerauto-fixer dry-run → linter → type-checker; e.g. PHPStan → Rector → ECS → PHPStan for Laravel-PHP, tsc → eslint --fix → eslint → tsc for TS, mypy → ruff --fix → ruff → mypy for Python)
65
65
  4. `git status` clean — nothing unstaged, no stray files
66
66
  5. Branch is pushed or explicitly marked local-only
67
67
 
@@ -102,7 +102,7 @@ a different sub-procedure (steps 5a–5d).
102
102
  1. Ensure the branch is up to date with the base →
103
103
  [`prepare-for-review`](../../commands/prepare-for-review.md)
104
104
  2. Self-review the full diff → [`review-changes`](../../commands/review-changes.md)
105
- 3. Write the PR description → [`create-pr-description`](../../commands/create-pr-description.md)
105
+ 3. Write the PR description → [`create-pr-description`](../../commands/create-pr/description-only.md)
106
106
  4. Open the PR → [`create-pr`](../../commands/create-pr.md)
107
107
  5. Confirm the PR opened green, not red
108
108