@event4u/agent-config 2.25.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 (122) hide show
  1. package/.agent-src/commands/bug-fix.md +1 -0
  2. package/.agent-src/commands/feature/roadmap.md +2 -2
  3. package/.agent-src/commands/fix/seeder.md +3 -2
  4. package/.agent-src/commands/memory/add.md +3 -3
  5. package/.agent-src/commands/module/create.md +1 -0
  6. package/.agent-src/commands/module/explore.md +10 -6
  7. package/.agent-src/commands/onboard.md +9 -1
  8. package/.agent-src/commands/optimize/augmentignore.md +52 -20
  9. package/.agent-src/commands/optimize/rtk.md +56 -30
  10. package/.agent-src/commands/package-test.md +86 -10
  11. package/.agent-src/commands/quality-fix.md +49 -27
  12. package/.agent-src/commands/update-form-request-messages.md +2 -1
  13. package/.agent-src/contexts/augment-infrastructure.md +4 -7
  14. package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -1
  15. package/.agent-src/contexts/contracts/research-schema.md +1 -1
  16. package/.agent-src/contexts/execution/interrupt-examples.md +34 -0
  17. package/.agent-src/contexts/skills-and-commands.md +2 -2
  18. package/.agent-src/rules/architecture.md +24 -10
  19. package/.agent-src/rules/artifact-drafting-protocol.md +6 -0
  20. package/.agent-src/rules/augment-edit-discipline.md +28 -0
  21. package/.agent-src/rules/augment-source-of-truth.md +2 -2
  22. package/.agent-src/rules/autonomous-execution.md +31 -0
  23. package/.agent-src/rules/context-hygiene.md +1 -1
  24. package/.agent-src/rules/domain-adoption-policy.md +4 -5
  25. package/.agent-src/rules/domain-safety-disclaimer.md +114 -0
  26. package/.agent-src/rules/domain-safety-pii.md +142 -0
  27. package/.agent-src/rules/domain-safety-retention.md +86 -0
  28. package/.agent-src/rules/downstream-changes.md +4 -4
  29. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +130 -0
  30. package/.agent-src/rules/git-history-discipline.md +99 -0
  31. package/.agent-src/rules/minimal-safe-diff.md +6 -0
  32. package/.agent-src/rules/no-roadmap-references.md +4 -2
  33. package/.agent-src/rules/user-interrupt-priority.md +46 -0
  34. package/.agent-src/rules/verify-before-complete.md +11 -2
  35. package/.agent-src/skills/adversarial-review/SKILL.md +1 -1
  36. package/.agent-src/skills/ai-council/SKILL.md +1 -0
  37. package/.agent-src/skills/api-endpoint/SKILL.md +58 -154
  38. package/.agent-src/skills/api-testing/SKILL.md +11 -0
  39. package/.agent-src/skills/code-refactoring/SKILL.md +36 -30
  40. package/.agent-src/skills/code-review/SKILL.md +41 -36
  41. package/.agent-src/skills/context-authoring/SKILL.md +1 -1
  42. package/.agent-src/skills/dashboard-design/SKILL.md +1 -2
  43. package/.agent-src/skills/database/SKILL.md +8 -3
  44. package/.agent-src/skills/dependency-upgrade/SKILL.md +65 -19
  45. package/.agent-src/skills/developer-like-execution/SKILL.md +25 -14
  46. package/.agent-src/skills/eloquent/SKILL.md +1 -1
  47. package/.agent-src/skills/feature-planning/SKILL.md +1 -1
  48. package/.agent-src/skills/file-editor/SKILL.md +45 -19
  49. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  50. package/.agent-src/skills/git-workflow/SKILL.md +4 -4
  51. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +187 -0
  52. package/.agent-src/skills/{dto-creator → laravel-dto}/SKILL.md +5 -4
  53. package/.agent-src/skills/{migration-creator → laravel-migration}/SKILL.md +11 -10
  54. package/.agent-src/skills/laravel-reverb/SKILL.md +3 -3
  55. package/.agent-src/skills/{websocket → laravel-websocket}/SKILL.md +4 -3
  56. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -1
  57. package/.agent-src/skills/merge-conflicts/SKILL.md +49 -17
  58. package/.agent-src/skills/migration-architect/SKILL.md +6 -6
  59. package/.agent-src/skills/module-management/SKILL.md +1 -0
  60. package/.agent-src/skills/multi-tenancy/SKILL.md +15 -8
  61. package/.agent-src/skills/pest-testing/SKILL.md +18 -0
  62. package/.agent-src/skills/php-debugging/SKILL.md +28 -0
  63. package/.agent-src/skills/php-service/SKILL.md +3 -3
  64. package/.agent-src/skills/playwright-testing/SKILL.md +16 -1
  65. package/.agent-src/skills/project-analyzer/SKILL.md +68 -42
  66. package/.agent-src/skills/readme-writing-package/SKILL.md +94 -23
  67. package/.agent-src/skills/roadmap-management/SKILL.md +1 -1
  68. package/.agent-src/skills/rtk-output-filtering/SKILL.md +23 -8
  69. package/.agent-src/skills/rule-refactor/SKILL.md +145 -0
  70. package/.agent-src/skills/rule-writing/SKILL.md +34 -8
  71. package/.agent-src/skills/security/SKILL.md +38 -29
  72. package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
  73. package/.agent-src/skills/test-driven-development/SKILL.md +4 -4
  74. package/.agent-src/skills/test-performance/SKILL.md +6 -5
  75. package/.agent-src/skills/verify-completion-evidence/SKILL.md +24 -27
  76. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  77. package/.agent-src/templates/copilot-instructions.md +2 -2
  78. package/.agent-src/templates/rule.md +2 -2
  79. package/.claude-plugin/marketplace.json +6 -4
  80. package/AGENTS.md +1 -1
  81. package/CHANGELOG.md +74 -170
  82. package/README.md +2 -2
  83. package/docs/architecture.md +2 -2
  84. package/docs/archive/CHANGELOG-pre-2.25.0.md +191 -0
  85. package/docs/catalog.md +17 -12
  86. package/docs/contracts/file-ownership-matrix.json +473 -43
  87. package/docs/contracts/kernel-membership.md +17 -0
  88. package/docs/contracts/smoke-contracts.md +8 -8
  89. package/docs/getting-started.md +1 -1
  90. package/docs/guidelines/php/api-design.md +1 -1
  91. package/docs/guidelines/php/controllers.md +1 -1
  92. package/docs/guidelines/php/resources.md +1 -1
  93. package/docs/guidelines/php/validations.md +1 -1
  94. package/package.json +1 -1
  95. package/scripts/build_linear_digest.py +0 -1
  96. package/scripts/lint_framework_leakage.py +348 -0
  97. package/scripts/lint_framework_leakage_allowlist.json +476 -0
  98. package/scripts/measure_augment_budget.py +6 -0
  99. package/scripts/schemas/command.schema.json +5 -0
  100. package/scripts/schemas/skill.schema.json +5 -0
  101. package/scripts/skill_linter.py +60 -7
  102. package/scripts/smoke/kernel.sh +4 -4
  103. package/scripts/smoke/router.sh +2 -2
  104. package/.agent-src/rules/agent-docs.md +0 -20
  105. package/.agent-src/rules/augment-portability.md +0 -23
  106. package/.agent-src/rules/capture-learnings.md +0 -19
  107. package/.agent-src/rules/docs-sync.md +0 -20
  108. package/.agent-src/rules/domain-safety-disclaimer-consulting.md +0 -52
  109. package/.agent-src/rules/domain-safety-disclaimer-financial.md +0 -54
  110. package/.agent-src/rules/domain-safety-disclaimer-legal.md +0 -49
  111. package/.agent-src/rules/domain-safety-disclaimer-medical.md +0 -56
  112. package/.agent-src/rules/domain-safety-export-redact.md +0 -65
  113. package/.agent-src/rules/domain-safety-logging-pii-floor.md +0 -55
  114. package/.agent-src/rules/domain-safety-pii-finance.md +0 -57
  115. package/.agent-src/rules/domain-safety-pii-marketing.md +0 -60
  116. package/.agent-src/rules/domain-safety-pii-recruiting.md +0 -56
  117. package/.agent-src/rules/domain-safety-pii-support.md +0 -57
  118. package/.agent-src/rules/domain-safety-retention-finance.md +0 -48
  119. package/.agent-src/rules/domain-safety-retention-support.md +0 -55
  120. package/.agent-src/rules/e2e-testing.md +0 -19
  121. package/.agent-src/rules/no-unsolicited-rebase.md +0 -107
  122. package/.agent-src/rules/post-push-rewrite-discipline.md +0 -70
@@ -9,6 +9,7 @@ suggestion:
9
9
  eligible: true
10
10
  trigger_description: "fix this bug, patch the issue, resolve this error"
11
11
  trigger_context: "branch name matches fix/* or bug/*"
12
+ framework: laravel
12
13
  ---
13
14
 
14
15
  # bug-fix
@@ -97,7 +97,7 @@ For each roadmap, work through the phases interactively:
97
97
  - [ ] {concrete task with file reference}
98
98
  - [ ] {concrete task}
99
99
  - [ ] Tests: {what to test}
100
- - [ ] Quality: PHPStan + Rector
100
+ - [ ] Quality: project's type-checker + auto-fixer (see `quality-tools` skill — e.g. PHPStan + Rector for PHP, tsc + eslint --fix for TS, mypy + ruff for Python)
101
101
  ```
102
102
 
103
103
  ### 4. Generate the roadmap(s)
@@ -206,7 +206,7 @@ What's next?
206
206
  - **Always link roadmaps back to the feature** and vice versa.
207
207
  - **Use the roadmap template** at `.augment/templates/roadmaps.md`.
208
208
  - **Reference specific files** in roadmap tasks — not vague descriptions.
209
- - **Include quality gates** (PHPStan, Rector, tests) in every phase.
209
+ - **Include quality gates** in every phase — the project's type-checker, auto-fixer, and full test run. Look up the actual commands via `quality-tools` instead of hardcoding stack-specific tool names in the roadmap.
210
210
  - **Research the codebase** to make tasks concrete and realistic.
211
211
 
212
212
  ## See also
@@ -10,6 +10,7 @@ suggestion:
10
10
  eligible: true
11
11
  trigger_description: "the seeder is broken, foreign key errors in seeders"
12
12
  trigger_context: "seeder error output or recent edits in database/seeders/"
13
+ framework: laravel
13
14
  ---
14
15
 
15
16
  # /fix seeder
@@ -64,9 +65,9 @@ where the seeder class is NOT the owner of the data file.
64
65
 
65
66
  ### Known Exceptions
66
67
 
67
- Currently there are **no exceptions**. All circular deps have been resolved.
68
+ Currently there are **no exceptions**. All circular dependencies have been resolved.
68
69
 
69
- **Pattern for resolving circular deps:** Use two-phase seeding. The data file seeds
70
+ **Pattern for resolving circular dependencies:** Use two-phase seeding. The data file seeds
70
71
  records with placeholder values (e.g., empty arrays). The Seeder's `run()` method then updates
71
72
  records with the real values using `getReference()`. Since `run()` is called after all seeders
72
73
  are initialized, the circular dependency is broken.
@@ -137,6 +137,6 @@ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
137
137
 
138
138
  - [`engineering-memory-data-format`](../../docs/guidelines/agent-infra/engineering-memory-data-format.md)
139
139
  — full schema
140
- - [`capture-learnings`](../rules/capture-learnings.md) — when a
141
- learning is better captured as an `incident-learnings` entry vs a
142
- rule/skill proposal
140
+ - [`skill:learning-to-rule-or-skill`](../skills/learning-to-rule-or-skill/SKILL.md) —
141
+ when a learning is better captured as an `incident-learnings` entry vs
142
+ a rule/skill proposal
@@ -10,6 +10,7 @@ suggestion:
10
10
  eligible: true
11
11
  trigger_description: "create a new module, scaffold a module for X"
12
12
  trigger_context: "prompt mentions a new domain area without an existing module"
13
+ framework: laravel
13
14
  ---
14
15
 
15
16
  # /module create
@@ -3,7 +3,7 @@ name: module:explore
3
3
  tier: 2
4
4
  cluster: module
5
5
  sub: explore
6
- skills: [laravel]
6
+ skills: [laravel, symfony-workflow, php-coder]
7
7
  description: Explore a module — load its structure, docs, and context into the current conversation
8
8
  disable-model-invocation: true
9
9
  suggestion:
@@ -17,17 +17,21 @@ suggestion:
17
17
 
18
18
  ### 1. Check for modules
19
19
 
20
- - **Laravel projects**: Check if `app/Modules/` exists.
21
- - **Composer projects / packages**: Check `./agents/` or `src/` for domain directories.
22
- - If neither exists:
20
+ - **Laravel HMVC**: Check `app/Modules/`.
21
+ - **Symfony / DDD-lite**: Check `src/<Domain>/` or `src/Module/<Domain>/`.
22
+ - **Composer packages / libraries**: Check `./agents/` or `src/` for domain directories.
23
+ - **Node / TS monorepo**: Check `packages/`, `apps/`, or `modules/`.
24
+ - **Python**: Check top-level package dirs under `src/<package>/` or flat `<package>/`.
25
+ - **Go**: Check `internal/<domain>/` or `cmd/<service>/`.
26
+ - If none of the above exists:
23
27
  ```
24
- ⚠️ No module system found (no app/Modules/ directory).
28
+ ⚠️ No module system found (no Modules/, src/<Domain>/, packages/, internal/, or equivalent directory).
25
29
  ```
26
30
  Stop.
27
31
 
28
32
  ### 2. List available modules
29
33
 
30
- Scan `app/Modules/` and show all modules (skip `.module-template` and hidden dirs):
34
+ Scan the detected modules directory (see step 1) and show all modules. Skip `.module-template`, `.example`, and hidden dirs:
31
35
 
32
36
  ```
33
37
  📦 Available modules:
@@ -217,7 +217,15 @@ no network call, file-existence only:
217
217
 
218
218
  ```bash
219
219
  stacks=()
220
- [ -f composer.json ] && stacks+=("php")
220
+ if [ -f composer.json ]; then
221
+ if grep -q '"laravel/framework"' composer.json 2>/dev/null; then
222
+ stacks+=("php-laravel")
223
+ elif grep -q '"symfony/framework-bundle"' composer.json 2>/dev/null; then
224
+ stacks+=("php-symfony")
225
+ else
226
+ stacks+=("php")
227
+ fi
228
+ fi
221
229
  [ -f package.json ] && stacks+=("node")
222
230
  [ -f Cargo.toml ] && stacks+=("rust")
223
231
  [ -f go.mod ] && stacks+=("go")
@@ -31,11 +31,24 @@ and creates/updates `.augmentignore` accordingly. Also identifies irrelevant
31
31
  | `go.mod` exists | `go.sum` |
32
32
  | `.idea/` exists | `.idea/` |
33
33
  | `.vscode/` exists | `.vscode/` |
34
- | `_ide_helper.php` exists | `_ide_helper.php`, `_ide_helper_models.php`, `.phpstorm.meta.php` |
34
+ | `_ide_helper.php` exists (Laravel `barryvdh/laravel-ide-helper`) | `_ide_helper.php`, `_ide_helper_models.php`, `.phpstorm.meta.php` |
35
35
  | `public/build/` exists | `public/build/` |
36
- | `storage/` exists (Laravel) | `storage/logs/`, `storage/framework/cache/`, `storage/framework/sessions/`, `storage/framework/views/` |
36
+ | `storage/` exists AND `artisan` exists (Laravel) | `storage/logs/`, `storage/framework/cache/`, `storage/framework/sessions/`, `storage/framework/views/` |
37
37
  | `docker-compose.yml` exists | `.storage/`, `.composer/` |
38
38
  | `.env` exists | `.env`, `.env.*` |
39
+ | `pyproject.toml` exists | `__pycache__/`, `*.pyc`, `*.pyo`, `.pytest_cache/`, `.mypy_cache/`, `.ruff_cache/`, `.tox/`, `.nox/`, `dist/`, `build/`, `*.egg-info/` |
40
+ | `Pipfile` or `Pipfile.lock` exists | `Pipfile.lock` |
41
+ | `poetry.lock` exists | `poetry.lock` |
42
+ | `Cargo.toml` exists | `target/`, `Cargo.lock` (binaries only — keep for libraries) |
43
+ | `go.mod` exists | `go.sum`, `vendor/` (if `go mod vendor` is used) |
44
+ | `Gemfile` exists | `.bundle/`, `vendor/bundle/`, `Gemfile.lock` (apps only — keep for gems) |
45
+ | `next.config.js` / `next.config.mjs` / `next.config.ts` exists | `.next/`, `out/` |
46
+ | `nuxt.config.ts` / `nuxt.config.js` exists | `.nuxt/`, `.output/` |
47
+ | `vite.config.*` exists | `dist/`, `.vite/` |
48
+ | `astro.config.*` exists | `.astro/`, `dist/` |
49
+ | `svelte.config.*` exists | `.svelte-kit/`, `build/` |
50
+ | `tsconfig.json` exists | `*.tsbuildinfo`, `.tscache/` |
51
+ | `.terraform/` exists | `.terraform/`, `*.tfstate`, `*.tfstate.backup`, `.terraform.lock.hcl` (debatable — keep if collaborating) |
39
52
 
40
53
  ### 2. Find large files polluting the index
41
54
 
@@ -62,7 +75,9 @@ For each large file, decide: is this **source code** (keep) or **generated/fixtu
62
75
  | `**/.docker/**/*.json` | Generated dashboard/config JSONs (Grafana, etc.) |
63
76
  | `.github/workflows/` | CI YAML — large, rarely relevant for code context |
64
77
  | `.github/actions/` | CI actions — same reason |
65
- | `lang/*/validation.php` | Translation files — huge, static, rarely needed |
78
+ | `lang/*/validation.php` (Laravel) | Translation files — huge, static, rarely needed |
79
+ | `locales/**/*.json` (i18next / next-intl / vue-i18n) | Translation bundles — large, mostly static |
80
+ | `messages/**/*.{json,po,properties}` (gettext / Java-style) | Same reason |
66
81
 
67
82
  ### 3. Find duplicate content
68
83
 
@@ -88,21 +103,33 @@ If many exist in specific dirs, add the directory pattern.
88
103
 
89
104
  ### 6. Whitelist own packages
90
105
 
91
- Check `composer.json` for the project's own organization namespace:
92
- - Look at `name` field (e.g., `your-org/project-name` org is `your-org`)
93
- - Look at `repositories` for private packages from the same org
94
- - Add negation pattern: `!vendor/{org}/` to keep own packages in the retrieval index
106
+ Detect the project's own organization namespace from whichever manifest is present.
107
+ Add a negation pattern after the broad ignore so the agent can still index
108
+ first-party packages via `codebase-retrieval`:
95
109
 
96
- This ensures the agent can find code in own packages via `codebase-retrieval`,
97
- while still excluding the thousands of third-party vendor files.
110
+ | Manifest | Where the org lives | Negation pattern |
111
+ |------------------|-------------------------------------------------------------|-------------------------------------------|
112
+ | `composer.json` | `name` (`vendor/pkg`) + `repositories[]` for private repos | `!vendor/{org}/` |
113
+ | `package.json` | `name` (`@scope/pkg`) — derive `@scope` | `!node_modules/@{scope}/` |
114
+ | `pyproject.toml` | `[project].name` + `[tool.poetry].repositories` | `!**/site-packages/{org}*/` (rare — most Python projects don't vendor) |
115
+ | `go.mod` | `module example.com/{org}/{repo}` — derive `example.com/{org}` | `!vendor/example.com/{org}/` (only if `go mod vendor` is used) |
116
+ | `Cargo.toml` | `[package].name` / workspace members | Not applicable — Cargo does not vendor by default; skip |
117
+ | `Gemfile` | Git source URLs pointing to the org | `!vendor/bundle/ruby/*/gems/{org-prefix}*/` |
118
+
119
+ Effect: the broad ignore (`vendor/` / `node_modules/` / `vendor/bundle/`) excludes
120
+ thousands of third-party files; the negation keeps first-party packages indexed.
98
121
 
99
122
  ### 7. Cross-reference with .gitignore
100
123
 
101
124
  Read `.gitignore` — most entries there should also be in `.augmentignore`.
102
- But `.augmentignore` should ALSO include:
103
- - Lock files (`composer.lock`, `package-lock.json`) tracked in Git but useless for retrieval.
104
- - IDE helpers (`_ide_helper.php`) tracked in Git but huge generated files.
105
- - OpenAPI specs — tracked but too large for context.
125
+ But `.augmentignore` should ALSO include the following — these are typically
126
+ tracked in Git (so absent from `.gitignore`) yet useless for the retrieval
127
+ index because they are large, generated, or duplicate first-class source:
128
+
129
+ - Lock files (`composer.lock`, `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, `poetry.lock`, `Pipfile.lock`, `Gemfile.lock`, `go.sum`, `Cargo.lock` for binaries) — tracked but useless for code understanding.
130
+ - IDE helpers and codegen artefacts (`_ide_helper.php`, `_ide_helper_models.php`, `.phpstorm.meta.php`, `*.generated.ts`, `*.gen.go`, `__generated__/`) — tracked but huge.
131
+ - API contracts that are generated, not authored (`openapi.{yaml,json}` produced by codegen, `schema.graphql` generated from resolvers, `swagger.json`) — keep the source, drop the generated.
132
+ - Translation bundles when the project ships them in source control (`lang/`, `locales/`, `i18n/` files larger than ~20 KB).
106
133
 
107
134
  ### 8. Analyze irrelevant agent skills
108
135
 
@@ -112,10 +139,16 @@ Each ignored skill saves ~3 lines of system prompt tokens per request.
112
139
  **How:**
113
140
 
114
141
  1. Read `AGENTS.md` — extract tech stack (framework, language, DB, frontend, infra).
115
- 2. Read `composer.json` extract `require` and `require-dev` packages.
116
- 3. Read `package.json` (if exists) — extract frontend dependencies.
117
- 4. List all skills: `ls .augment/skills/`
118
- 5. For each skill, decide: **is this relevant to the detected stack?**
142
+ 2. Read every package manifest present in the project root — extract dependencies:
143
+ - `composer.json` `require`, `require-dev`
144
+ - `package.json` `dependencies`, `devDependencies`, `peerDependencies`
145
+ - `pyproject.toml` `[project].dependencies`, `[tool.poetry.dependencies]`, `[dependency-groups]`
146
+ - `requirements*.txt` / `Pipfile` → package list
147
+ - `go.mod` → `require` blocks
148
+ - `Cargo.toml` → `[dependencies]`, `[dev-dependencies]`, workspace members
149
+ - `Gemfile` → `gem` lines
150
+ 3. List all skills: `ls .augment/skills/`
151
+ 4. For each skill, decide: **is this relevant to the detected stack?**
119
152
 
120
153
  **Decision matrix — ignore when ALL conditions are true:**
121
154
 
@@ -165,7 +198,6 @@ Only consider rules with a `description` frontmatter (auto-loaded by topic match
165
198
 
166
199
  | Rule | Ignore when... |
167
200
  |---|---|
168
- | `e2e-testing.md` | No Playwright / no E2E tests in project |
169
201
  | `lang-files.md` | No `lang/` directory in project |
170
202
 
171
203
  **Conservative approach:**
@@ -262,9 +294,9 @@ echo "Rules ignored: $rules_count"
262
294
  - **Lock files are always ignored** — they're huge and provide zero code insight.
263
295
  - **IDE helpers are always ignored** — generated, 20k+ lines, stale quickly.
264
296
  - **When in doubt, ignore files** — false positive is easy to fix, false negative wastes tokens silently.
265
- - **When in doubt, keep skills** — ignoring a needed skill bad output, keeping an unneeded one just wastes ~3 lines.
297
+ - **When in doubt, keep skills** — ignoring a needed skill causes bad output, keeping an unneeded one just wastes ~3 lines.
266
298
  - **Never ignore always-active rules** — only auto-loaded rules (those with `description` frontmatter) may be ignored.
267
- - **Never ignore meta/agent-system skills** — `agent-docs-writing-writing`, `commands`, `context-create`, `override-management`, `guidelines`, `project-docs`, `roadmap-management`, `naming`, `skill-reviewer`, `file-editor`, `copilot-config`, `copilot-agents-optimization`.
299
+ - **Never ignore meta / agent-system skills** — these are framework-independent and used by every project regardless of stack: `agent-docs-writing`, `agents-md-thin-root`, `check-refs`, `command-routing`, `command-writing`, `compress-memory`, `context-authoring`, `copilot-agents-optimization`, `copilot-config`, `description-assist`, `file-editor`, `guideline-writing`, `learning-to-rule-or-skill`, `lint-skills`, `md-language-check`, `override-management`, `persona-writing`, `project-analyzer`, `project-docs`, `project-health`, `roadmap-writing`, `rule-writing`, `skill-improvement-pipeline`, `skill-management`, `skill-reviewer`, `skill-writing`.
268
300
  - **Restore previously ignored skills** when the stack changes (e.g., Vue added to project → restore `vue` skill).
269
301
 
270
302
  ## Cloud Behavior
@@ -26,21 +26,29 @@ which rtk
26
26
 
27
27
  Scan the project to determine which CLI tools are used:
28
28
 
29
- | Check | Tool detected |
30
- |---|---|
31
- | `composer.json` contains `phpstan` or `larastan` | PHPStan |
32
- | `composer.json` contains `pestphp/pest` or `phpunit/phpunit` | Pest / PHPUnit |
33
- | `composer.json` contains `symplify/easy-coding-standard` | ECS |
34
- | `composer.json` contains `rector/rector` | Rector |
35
- | `composer.json` contains scripts like `quality:phpstan` | Artisan quality commands |
36
- | `package.json` contains `playwright` | Playwright |
37
- | `package.json` contains `vitest` or `jest` | JS test runner |
38
- | `package.json` contains `biome` or `eslint` | JS linter |
39
- | `package.json` contains `typescript` | TypeScript compiler |
40
- | `docker-compose.yml` or `docker-compose.yaml` exists | Docker Compose |
41
- | `Makefile` exists | Make targets |
42
- | `Cargo.toml` exists | Rust / Cargo |
43
- | `go.mod` exists | Go |
29
+ | Detection | Tool |
30
+ |------------------------------------------------------------------------------------------------|----------------------------|
31
+ | `composer.json` contains `phpstan` or `larastan` | PHPStan |
32
+ | `composer.json` contains `pestphp/pest` or `phpunit/phpunit` | Pest / PHPUnit |
33
+ | `composer.json` contains `symplify/easy-coding-standard` | ECS |
34
+ | `composer.json` contains `rector/rector` | Rector |
35
+ | `composer.json` contains scripts like `quality:phpstan` | Artisan / Composer quality wrappers |
36
+ | `package.json` contains `typescript` | tsc |
37
+ | `package.json` contains `eslint` | ESLint |
38
+ | `package.json` contains `prettier` | Prettier |
39
+ | `package.json` contains `@biomejs/biome` | Biome |
40
+ | `package.json` contains `vitest` | Vitest |
41
+ | `package.json` contains `jest` | Jest |
42
+ | `package.json` contains `playwright` / `@playwright/test` | Playwright |
43
+ | `pyproject.toml` / `requirements*.txt` contains `ruff` | Ruff |
44
+ | `pyproject.toml` / `requirements*.txt` contains `mypy` / `pyright` | mypy / Pyright |
45
+ | `pyproject.toml` / `requirements*.txt` contains `pytest` | pytest |
46
+ | `.golangci.yml` exists OR `golangci-lint` in `go.mod` tool dependencies | golangci-lint |
47
+ | `go.mod` exists | `go test` / `go vet` |
48
+ | `Cargo.toml` exists | cargo (build / test / clippy / fmt) |
49
+ | `Gemfile` contains `rubocop` / `standard` | RuboCop / Standard |
50
+ | `docker-compose.yml` or `docker-compose.yaml` exists | Docker Compose |
51
+ | `Makefile` exists | Make targets |
44
52
 
45
53
  ### 3. Read existing filters
46
54
 
@@ -77,16 +85,24 @@ max_lines = <appropriate limit>
77
85
 
78
86
  **Common noise patterns per tool:**
79
87
 
80
- | Tool | Noise to strip |
81
- |---|---|
82
- | PHPStan | Progress bars (`\d+/\d+`), separator lines (`━`), notes |
83
- | Pest/PHPUnit | Empty lines, box-drawing chars (`│`, `⇂`) |
84
- | ECS/Rector | Separator lines, empty lines |
85
- | Composer | Download progress, "Loading composer" |
86
- | Docker Compose | Build context lines, pull progress |
87
- | npm/yarn | Audit warnings, funding messages |
88
- | Playwright | Browser download progress |
89
- | cargo | Compiling lines (keep errors), download progress |
88
+ | Tool | Noise to strip |
89
+ |----------------|------------------------------------------------------------------------------|
90
+ | PHPStan | Progress bars (`\d+/\d+`), separator lines (`━`), notes |
91
+ | Pest / PHPUnit | Empty lines, box-drawing chars (`│`, `⇂`) |
92
+ | ECS / Rector | Separator lines, empty lines |
93
+ | Composer | Download progress, "Loading composer" |
94
+ | tsc | Progress dots, repeated cache-hit notes, watch-mode banners |
95
+ | ESLint | Numeric prefix per line (`123:45`), summary divider, `0 errors / 0 warnings` |
96
+ | Prettier | File-list output when only formatting (`✔ src/foo.ts`) |
97
+ | Vitest / Jest | Spinner frames, watch banner, coverage summary table when not requested |
98
+ | Playwright | Browser launch banner, retry notices, trace-file paths repeated per run |
99
+ | Ruff | Progress (`Checking N files`), repeated file headers in `--watch` |
100
+ | mypy / Pyright | `Daemon running` banners, success summary repeated per file |
101
+ | golangci-lint | Progress (`linters`), divider lines between linters |
102
+ | `go test` | `=== RUN` / `--- PASS` per sub-test (suppress in passing runs) |
103
+ | Cargo | ` Compiling …` lines for dependencies, `Finished release` banner |
104
+ | npm / yarn | Audit warnings, funding messages |
105
+ | Docker Compose | Build-context lines, pull progress |
90
106
 
91
107
  ### 5. Write the filters file
92
108
 
@@ -114,11 +130,21 @@ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
114
130
  - `full` → multi-line summary table:
115
131
 
116
132
  ```
117
- | # | Filter | Match | Max Lines |
118
- |---|---|---|---|
119
- | 1 | phpstan | phpstan\|quality:phpstan\|vendor/bin/phpstan | 80 |
120
- | 2 | pest | pest\|phpunit\|artisan test | 60 |
121
- | ... | ... | ... | ... |
133
+ | # | Filter | Match | Max |
134
+ |-----|--------------|---------------------------------------------------------------|------|
135
+ | 1 | phpstan | phpstan\|quality:phpstan\|vendor/bin/phpstan | 80 |
136
+ | 2 | pest | pest\|phpunit\|artisan test | 60 |
137
+ | 3 | tsc | tsc\|tsc --noEmit | 60 |
138
+ | 4 | eslint | eslint\|next lint | 50 |
139
+ | 5 | vitest | vitest\|jest | 50 |
140
+ | 6 | playwright | playwright\|@playwright/test | 40 |
141
+ | 7 | ruff | ruff check\|ruff format | 60 |
142
+ | 8 | mypy | mypy\|pyright | 50 |
143
+ | 9 | pytest | pytest\|python -m pytest | 50 |
144
+ | 10 | golangci | golangci-lint\|go vet | 50 |
145
+ | 11 | gotest | go test | 40 |
146
+ | 12 | cargo | cargo build\|cargo check\|cargo clippy\|cargo test\|cargo fmt | 50 |
147
+ | ... | ... | (add per project as the toolchain grows) | ... |
122
148
  ```
123
149
 
124
150
  ### Rules
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: package-test
3
3
  tier: 2
4
- skills: [composer, npm]
4
+ skills: [composer, npm, python-packages, go-modules, cargo-packages]
5
5
  description: /package-test
6
6
  disable-model-invocation: true
7
7
  suggestion:
@@ -17,15 +17,28 @@ Test a local package in the current project by linking it via Composer or npm.
17
17
 
18
18
  ### 1. Detect or ask for package manager
19
19
 
20
- Check the project root for `composer.json` and `package.json`.
20
+ Check the project root for a package manifest. Supported (try in this order, take the first match — the project can have several):
21
21
 
22
- - **Both exist** ask:
22
+ | Manifest | Ecosystem | Link mechanism |
23
+ |-------------------------------------------------------------------|------------------|----------------------------------------------------------|
24
+ | `composer.json` | PHP / Composer | `repositories[].type: path` + `composer require @dev` |
25
+ | `package.json` | JS / TS / Node | `npm link` / `pnpm link` / `yarn link` / `file:../path` |
26
+ | `pyproject.toml`, `setup.py`, or `setup.cfg` | Python | `pip install -e <path>` / `uv pip install -e <path>` / `poetry add --editable <path>` |
27
+ | `go.mod` | Go | `go mod edit -replace example.com/pkg=<path>` |
28
+ | `Cargo.toml` | Rust | `cargo add --path <path>` or `[patch.crates-io]` block |
29
+ | `Gemfile` | Ruby | `bundle config local.<gem> <path>` |
30
+
31
+ - **Multiple manifests exist** → ask:
23
32
 
24
33
  ```
25
34
  Which package manager?
26
35
 
27
36
  1. Composer (PHP)
28
- 2. npm (JavaScript/TypeScript)
37
+ 2. npm / pnpm / yarn (JavaScript / TypeScript)
38
+ 3. Python (pip / poetry / uv)
39
+ 4. Go modules
40
+ 5. Cargo (Rust)
41
+ 6. Bundler (Ruby)
29
42
  ```
30
43
 
31
44
  - **Only one exists** → use that one automatically, confirm:
@@ -37,7 +50,7 @@ Detected: {manager}. Proceeding.
37
50
  - **Neither exists** → abort:
38
51
 
39
52
  ```
40
- ❌ No composer.json or package.json found in project root. Cannot link a local package.
53
+ ❌ No supported package manifest (composer.json / package.json / pyproject.toml / setup.py / go.mod / Cargo.toml / Gemfile) found in project root. Cannot link a local package.
41
54
  ```
42
55
 
43
56
  ### 2. Ask for the local package path
@@ -51,15 +64,19 @@ Example: ../my-package or /Users/me/projects/my-package
51
64
 
52
65
  Validate:
53
66
  - Path exists and is a directory
54
- - For Composer: directory contains `composer.json`
55
- - For npm: directory contains `package.json`
67
+ - The directory contains a manifest matching the ecosystem chosen in the detection step (`composer.json`, `package.json`, `pyproject.toml` / `setup.py`, `go.mod`, `Cargo.toml`, or `Gemfile`)
68
+ - If the directory has multiple manifests, ask the user which one to link (rare but possible — e.g. a Composer package that also ships a JS bundle)
56
69
 
57
70
  If invalid, show error and ask again.
58
71
 
59
72
  ### 3. Read the package name
60
73
 
61
- - **Composer:** Read `name` from the package's `composer.json`
62
- - **npm:** Read `name` from the package's `package.json`
74
+ - **Composer:** Read `name` from the package's `composer.json` (e.g. `vendor/package`)
75
+ - **npm / pnpm / yarn:** Read `name` from the package's `package.json` (e.g. `@scope/package`)
76
+ - **Python:** Read `[project].name` from `pyproject.toml`, or `setup(name=...)` from `setup.py`
77
+ - **Go:** Read `module` from `go.mod` (e.g. `example.com/vendor/package`)
78
+ - **Rust:** Read `[package].name` from `Cargo.toml`
79
+ - **Ruby:** Read the gem name from the `*.gemspec` file in the package directory
63
80
 
64
81
  Confirm:
65
82
 
@@ -118,10 +135,69 @@ Or for workspaces, add to `package.json`:
118
135
 
119
136
  Then: `npm install`
120
137
 
138
+ #### Python
139
+
140
+ Editable install (preferred):
141
+
142
+ ```bash
143
+ pip install -e {package-path}
144
+ # or, if the project uses uv:
145
+ uv pip install -e {package-path}
146
+ # or, if the project uses poetry:
147
+ cd {project-root} && poetry add --editable {package-path}
148
+ ```
149
+
150
+ Re-sync after upstream changes:
151
+
152
+ ```bash
153
+ pip install -e {package-path} --force-reinstall --no-deps
154
+ ```
155
+
156
+ #### Go
157
+
158
+ Edit `go.mod` in the **project** root to add a `replace` directive:
159
+
160
+ ```
161
+ replace example.com/vendor/package => ../my-package
162
+ ```
163
+
164
+ Then run `go mod tidy` so the lockfile picks up the local path. Remove the `replace` line before publishing.
165
+
166
+ #### Rust / Cargo
167
+
168
+ Add as a path dependency in the **project's** `Cargo.toml`:
169
+
170
+ ```toml
171
+ [dependencies]
172
+ vendor_package = { path = "../my-package" }
173
+ ```
174
+
175
+ Or, to override a published crate without rewriting the dependency line, use `[patch.crates-io]`:
176
+
177
+ ```toml
178
+ [patch.crates-io]
179
+ vendor_package = { path = "../my-package" }
180
+ ```
181
+
182
+ Run `cargo build` to re-resolve.
183
+
184
+ #### Ruby / Bundler
185
+
186
+ ```bash
187
+ bundle config local.{gem-name} {package-path}
188
+ bundle install
189
+ ```
190
+
191
+ Remove with `bundle config --delete local.{gem-name}`.
192
+
121
193
  ### 5. Verify
122
194
 
123
195
  - **Composer:** Check that `vendor/{package-name}` is a symlink → the local path
124
- - **npm:** Check that `node_modules/{package-name}` is a symlink → the local path
196
+ - **npm / pnpm / yarn:** Check that `node_modules/{package-name}` is a symlink → the local path
197
+ - **Python:** `pip show {package-name}` → `Location` should point inside `{package-path}` (editable installs show the source dir, not site-packages)
198
+ - **Go:** `go list -m {module-path}` → resolved path should match the `replace` target
199
+ - **Rust:** `cargo metadata --format-version 1 | jq '.packages[] | select(.name=="{package-name}") | .manifest_path'` → should point inside `{package-path}`
200
+ - **Ruby:** `bundle config get local.{gem-name}` → should return the linked path
125
201
 
126
202
  Report result:
127
203
 
@@ -6,8 +6,8 @@ description: Run quality pipeline (PHP and/or JS/TS) and fix all errors — auto
6
6
  disable-model-invocation: true
7
7
  suggestion:
8
8
  eligible: true
9
- trigger_description: "fix the quality errors, run PHPStan and fix issues, fix code style"
10
- trigger_context: "PHPStan/Rector/ECS output in recent tool results"
9
+ trigger_description: "fix the quality errors run the project's type-checker / linter / formatter and resolve every issue (PHPStan / tsc / mypy / golangci-lint / clippy / …)"
10
+ trigger_context: "type-checker / linter / formatter output in recent tool results (PHPStan, Rector, ECS, tsc, eslint, prettier, ruff, mypy, golangci-lint, clippy)"
11
11
  ---
12
12
 
13
13
  # quality-fix
@@ -33,34 +33,56 @@ git diff --name-only origin/{default}..HEAD
33
33
  ### Prerequisites
34
34
 
35
35
  - All commands run **inside the PHP container** (e.g. `docker compose exec -T <service> ...`).
36
- - Detect the project type:
37
- - Project ships a `quality:*` wrapper (Artisan or Composer script) prefer `php artisan quality:phpstan` / `php artisan quality:rector --fix`
38
- - `phpstan/phpstan` installed `vendor/bin/phpstan analyse`
39
- - `rector/rector` installed `vendor/bin/rector process`
40
- - `symplify/easy-coding-standard` installed `vendor/bin/ecs check --fix`
41
-
42
- ### Step 1: PHPStan fix all errors
43
-
44
- 1. Run PHPStan and capture the full output.
36
+ - Detect the project's quality toolchain **before** doing anything else. Pick the first match:
37
+ 1. Project ships a wrapper script prefer the wrapper over invoking tools directly:
38
+ - PHP: `php artisan quality:*` (Laravel), `composer run quality`, `composer run lint`
39
+ - JS / TS: `npm run lint`, `npm run typecheck`, `pnpm lint`, `pnpm typecheck`, `yarn lint`, `yarn typecheck`
40
+ - Python: `make lint`, `nox -s lint`, `tox -e lint`
41
+ - Polyglot: `Taskfile.yml`, `Makefile`, or `justfile` with a `quality` / `lint` / `check` target
42
+ 2. No wrapperinvoke tools directly based on which are installed:
43
+ - PHP: `vendor/bin/phpstan analyse`, `vendor/bin/rector process`, `vendor/bin/ecs check --fix`
44
+ - JS / TS: `npx tsc --noEmit`, `npx eslint . --fix`, `npx prettier . --write`, `npx biome check --apply`
45
+ - Python: `ruff check . --fix`, `ruff format .`, `mypy .`, `pyright`
46
+ - Go: `golangci-lint run --fix`, `go vet ./...`, `gofmt -w .`
47
+ - Rust: `cargo clippy --fix --allow-dirty`, `cargo fmt`
48
+ 3. Nothing detected → ask the user which command runs the project's quality pipeline. Do not invent one.
49
+
50
+ ### Step 1: Type-checker — fix all errors
51
+
52
+ Run the project's type-checker (chosen in the detection step):
53
+ - PHP → PHPStan
54
+ - JS / TS → `tsc --noEmit`
55
+ - Python → mypy / pyright
56
+ - Go → `go vet` + `go build`
57
+ - Rust → `cargo check`
58
+
59
+ 1. Run the type-checker and capture the full output.
45
60
  2. For each error, **fix it in code**. Resolve the root cause.
46
- 3. **Do NOT add errors to the baseline or phpstan.neon ignore lists.**
47
- 4. If truly impossible (confirmed false positive), use inline ignore with reason.
48
- 5. After fixing, run PHPStan again.
61
+ 3. **Do NOT add errors to the baseline or ignore list** (`phpstan-baseline.neon`, `tsconfig.json` `exclude`, `# type: ignore`, `// @ts-ignore`, `#[allow(...)]`, `//nolint`).
62
+ 4. If truly impossible (confirmed false positive), use the language-native inline ignore with a one-line reason: `@phpstan-ignore`, `// @ts-expect-error: <reason>`, `# type: ignore[<code>] # <reason>`, `//nolint:<linter> // <reason>`, `#[allow(<lint>)] // <reason>`.
63
+ 5. After fixing, re-run the type-checker.
49
64
  6. Repeat until **0 errors**.
50
65
 
51
- ### Step 2: Rector — apply automated refactoring
66
+ ### Step 2: Auto-fixer / refactoring tool — apply transforms
67
+
68
+ Run the project's auto-fixer / refactoring tool (skip the step entirely if the project does not ship one):
69
+ - PHP → `vendor/bin/rector process`
70
+ - JS / TS → `npx eslint . --fix` (rule auto-fixes), `npx biome check --apply-unsafe` (safe transforms only)
71
+ - Python → `ruff check . --fix` (lint auto-fixes), `ruff check . --fix --unsafe-fixes` (broader)
72
+ - Go → `golangci-lint run --fix`, `gofmt -w .`, `goimports -w .`
73
+ - Rust → `cargo clippy --fix --allow-dirty --allow-staged`, `cargo fmt`
52
74
 
53
- 1. Run Rector with the fix flag.
54
- 2. Review what Rector changed it may introduce new PHPStan errors.
55
- 3. Run Rector again to verify no further changes are applied.
56
- 4. Repeat until Rector produces no more changes.
75
+ 1. Run the auto-fixer with the apply / fix flag.
76
+ 2. Review the diffauto-fixes may introduce new type-checker errors or change semantics on edge cases.
77
+ 3. Re-run the auto-fixer to verify it produces no further changes.
78
+ 4. Repeat until the auto-fixer is idempotent.
57
79
 
58
- ### Step 3: Final PHPStan verification
80
+ ### Step 3: Final type-checker verification
59
81
 
60
- 1. Run PHPStan one more time.
61
- 2. If new errors appeared (e.g. from Rector changes), fix them as in Step 1.
82
+ 1. Run the type-checker (from Step 1) one more time.
83
+ 2. If new errors appeared (e.g. from auto-fixer changes), fix them as in Step 1.
62
84
  3. If fixes were needed, go back to Step 2.
63
- 4. Done when PHPStan reports **0 errors** and Rector has **no changes**.
85
+ 4. Done when the type-checker reports **0 errors** **and** the auto-fixer is idempotent. Also run the formatter once at the very end (`vendor/bin/ecs check --fix` / `prettier --write` / `ruff format` / `cargo fmt`) to normalise whitespace.
64
86
 
65
87
  ---
66
88
 
@@ -105,7 +127,7 @@ git diff --name-only origin/{default}..HEAD
105
127
  ## Rules
106
128
 
107
129
  - **Do NOT commit or push.** Only apply local changes.
108
- - **Do NOT modify baseline files** (`phpstan-baseline.neon`) or config files (`biome.json`, `tsconfig.json`).
109
- - **Do NOT add entries to `ignoreErrors`** in `phpstan.neon`.
110
- - Inline ignores (`@phpstan-ignore`, `@ts-expect-error`, `biome-ignore`) are a last resort.
111
- - Run `php -l` on modified PHP files if you made significant structural changes.
130
+ - **Do NOT modify baseline files** (`phpstan-baseline.neon`, `tsconfig.json` `exclude`, `.mypy.ini` ignore list, `.eslintrc` `ignorePatterns`, `clippy.toml` `allow` list).
131
+ - **Do NOT widen ignore lists** in the config (`ignoreErrors`, `exclude`, `# type: ignore` blanket, `eslint-disable` file-wide).
132
+ - Inline ignores (`@phpstan-ignore`, `@ts-expect-error`, `# type: ignore[code]`, `biome-ignore`, `eslint-disable-next-line`, `//nolint:`, `#[allow(...)]`) are a last resort and must carry a one-line reason.
133
+ - After significant structural changes, run a language-level syntax check (`php -l <file>`, `node --check <file>`, `python -m py_compile <file>`, `go build ./...`, `cargo check`) before claiming the file is fixed.
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: update-form-request-messages
3
3
  tier: 2
4
+ framework: laravel
4
5
  skills: [laravel-validation]
5
- description: Sync the messages() method of a FormRequest class — add missing entries, link them to language keys, and clean up stale ones
6
+ description: "Sync the messages() method of a FormRequest class — add missing entries, link them to language keys, and clean up stale ones."
6
7
  disable-model-invocation: true
7
8
  suggestion:
8
9
  eligible: true