@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.
- package/.agent-src/commands/bug-fix.md +1 -0
- package/.agent-src/commands/feature/roadmap.md +2 -2
- package/.agent-src/commands/fix/seeder.md +3 -2
- package/.agent-src/commands/memory/add.md +3 -3
- package/.agent-src/commands/module/create.md +1 -0
- package/.agent-src/commands/module/explore.md +10 -6
- package/.agent-src/commands/onboard.md +9 -1
- package/.agent-src/commands/optimize/augmentignore.md +52 -20
- package/.agent-src/commands/optimize/rtk.md +56 -30
- package/.agent-src/commands/package-test.md +86 -10
- package/.agent-src/commands/quality-fix.md +49 -27
- package/.agent-src/commands/update-form-request-messages.md +2 -1
- package/.agent-src/contexts/augment-infrastructure.md +4 -7
- package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -1
- package/.agent-src/contexts/contracts/research-schema.md +1 -1
- package/.agent-src/contexts/execution/interrupt-examples.md +34 -0
- package/.agent-src/contexts/skills-and-commands.md +2 -2
- package/.agent-src/rules/architecture.md +24 -10
- package/.agent-src/rules/artifact-drafting-protocol.md +6 -0
- package/.agent-src/rules/augment-edit-discipline.md +28 -0
- package/.agent-src/rules/augment-source-of-truth.md +2 -2
- package/.agent-src/rules/autonomous-execution.md +31 -0
- package/.agent-src/rules/context-hygiene.md +1 -1
- package/.agent-src/rules/domain-adoption-policy.md +4 -5
- package/.agent-src/rules/domain-safety-disclaimer.md +114 -0
- package/.agent-src/rules/domain-safety-pii.md +142 -0
- package/.agent-src/rules/domain-safety-retention.md +86 -0
- package/.agent-src/rules/downstream-changes.md +4 -4
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +130 -0
- package/.agent-src/rules/git-history-discipline.md +99 -0
- package/.agent-src/rules/minimal-safe-diff.md +6 -0
- package/.agent-src/rules/no-roadmap-references.md +4 -2
- package/.agent-src/rules/user-interrupt-priority.md +46 -0
- package/.agent-src/rules/verify-before-complete.md +11 -2
- package/.agent-src/skills/adversarial-review/SKILL.md +1 -1
- package/.agent-src/skills/ai-council/SKILL.md +1 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +58 -154
- package/.agent-src/skills/api-testing/SKILL.md +11 -0
- package/.agent-src/skills/code-refactoring/SKILL.md +36 -30
- package/.agent-src/skills/code-review/SKILL.md +41 -36
- package/.agent-src/skills/context-authoring/SKILL.md +1 -1
- package/.agent-src/skills/dashboard-design/SKILL.md +1 -2
- package/.agent-src/skills/database/SKILL.md +8 -3
- package/.agent-src/skills/dependency-upgrade/SKILL.md +65 -19
- package/.agent-src/skills/developer-like-execution/SKILL.md +25 -14
- package/.agent-src/skills/eloquent/SKILL.md +1 -1
- package/.agent-src/skills/feature-planning/SKILL.md +1 -1
- package/.agent-src/skills/file-editor/SKILL.md +45 -19
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
- package/.agent-src/skills/git-workflow/SKILL.md +4 -4
- package/.agent-src/skills/laravel-api-endpoint/SKILL.md +187 -0
- package/.agent-src/skills/{dto-creator → laravel-dto}/SKILL.md +5 -4
- package/.agent-src/skills/{migration-creator → laravel-migration}/SKILL.md +11 -10
- package/.agent-src/skills/laravel-reverb/SKILL.md +3 -3
- package/.agent-src/skills/{websocket → laravel-websocket}/SKILL.md +4 -3
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -1
- package/.agent-src/skills/merge-conflicts/SKILL.md +49 -17
- package/.agent-src/skills/migration-architect/SKILL.md +6 -6
- package/.agent-src/skills/module-management/SKILL.md +1 -0
- package/.agent-src/skills/multi-tenancy/SKILL.md +15 -8
- package/.agent-src/skills/pest-testing/SKILL.md +18 -0
- package/.agent-src/skills/php-debugging/SKILL.md +28 -0
- package/.agent-src/skills/php-service/SKILL.md +3 -3
- package/.agent-src/skills/playwright-testing/SKILL.md +16 -1
- package/.agent-src/skills/project-analyzer/SKILL.md +68 -42
- package/.agent-src/skills/readme-writing-package/SKILL.md +94 -23
- package/.agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +23 -8
- package/.agent-src/skills/rule-refactor/SKILL.md +145 -0
- package/.agent-src/skills/rule-writing/SKILL.md +34 -8
- package/.agent-src/skills/security/SKILL.md +38 -29
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/test-driven-development/SKILL.md +4 -4
- package/.agent-src/skills/test-performance/SKILL.md +6 -5
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +24 -27
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/copilot-instructions.md +2 -2
- package/.agent-src/templates/rule.md +2 -2
- package/.claude-plugin/marketplace.json +6 -4
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +74 -170
- package/README.md +2 -2
- package/docs/architecture.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.25.0.md +191 -0
- package/docs/catalog.md +17 -12
- package/docs/contracts/file-ownership-matrix.json +473 -43
- package/docs/contracts/kernel-membership.md +17 -0
- package/docs/contracts/smoke-contracts.md +8 -8
- package/docs/getting-started.md +1 -1
- package/docs/guidelines/php/api-design.md +1 -1
- package/docs/guidelines/php/controllers.md +1 -1
- package/docs/guidelines/php/resources.md +1 -1
- package/docs/guidelines/php/validations.md +1 -1
- package/package.json +1 -1
- package/scripts/build_linear_digest.py +0 -1
- package/scripts/lint_framework_leakage.py +348 -0
- package/scripts/lint_framework_leakage_allowlist.json +476 -0
- package/scripts/measure_augment_budget.py +6 -0
- package/scripts/schemas/command.schema.json +5 -0
- package/scripts/schemas/skill.schema.json +5 -0
- package/scripts/skill_linter.py +60 -7
- package/scripts/smoke/kernel.sh +4 -4
- package/scripts/smoke/router.sh +2 -2
- package/.agent-src/rules/agent-docs.md +0 -20
- package/.agent-src/rules/augment-portability.md +0 -23
- package/.agent-src/rules/capture-learnings.md +0 -19
- package/.agent-src/rules/docs-sync.md +0 -20
- package/.agent-src/rules/domain-safety-disclaimer-consulting.md +0 -52
- package/.agent-src/rules/domain-safety-disclaimer-financial.md +0 -54
- package/.agent-src/rules/domain-safety-disclaimer-legal.md +0 -49
- package/.agent-src/rules/domain-safety-disclaimer-medical.md +0 -56
- package/.agent-src/rules/domain-safety-export-redact.md +0 -65
- package/.agent-src/rules/domain-safety-logging-pii-floor.md +0 -55
- package/.agent-src/rules/domain-safety-pii-finance.md +0 -57
- package/.agent-src/rules/domain-safety-pii-marketing.md +0 -60
- package/.agent-src/rules/domain-safety-pii-recruiting.md +0 -56
- package/.agent-src/rules/domain-safety-pii-support.md +0 -57
- package/.agent-src/rules/domain-safety-retention-finance.md +0 -48
- package/.agent-src/rules/domain-safety-retention-support.md +0 -55
- package/.agent-src/rules/e2e-testing.md +0 -19
- package/.agent-src/rules/no-unsolicited-rebase.md +0 -107
- package/.agent-src/rules/post-push-rewrite-discipline.md +0 -70
|
@@ -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**
|
|
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
|
|
68
|
+
Currently there are **no exceptions**. All circular dependencies have been resolved.
|
|
68
69
|
|
|
69
|
-
**Pattern for resolving circular
|
|
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
|
-
- [`
|
|
141
|
-
learning is better captured as an `incident-learnings` entry vs
|
|
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
|
|
@@ -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
|
|
21
|
-
- **
|
|
22
|
-
-
|
|
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
|
|
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
|
|
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 ]
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
-
|
|
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
|
-
|
|
97
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
|
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`, `
|
|
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
|
-
|
|
|
30
|
-
|
|
31
|
-
| `composer.json` contains `phpstan` or `larastan`
|
|
32
|
-
| `composer.json` contains `pestphp/pest` or `phpunit/phpunit`
|
|
33
|
-
| `composer.json` contains `symplify/easy-coding-standard`
|
|
34
|
-
| `composer.json` contains `rector/rector`
|
|
35
|
-
| `composer.json` contains scripts like `quality:phpstan`
|
|
36
|
-
| `package.json` contains `
|
|
37
|
-
| `package.json` contains `
|
|
38
|
-
| `package.json` contains `
|
|
39
|
-
| `package.json` contains `
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
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
|
|
81
|
-
|
|
82
|
-
| PHPStan
|
|
83
|
-
| Pest/PHPUnit | Empty lines, box-drawing chars (`│`, `⇂`)
|
|
84
|
-
| ECS/Rector
|
|
85
|
-
| Composer
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
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
|
-
| #
|
|
118
|
-
|
|
119
|
-
| 1
|
|
120
|
-
| 2
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
-
|
|
55
|
-
-
|
|
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
|
|
10
|
-
trigger_context: "
|
|
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
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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 wrapper — invoke 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
|
|
47
|
-
4. If truly impossible (confirmed false positive), use inline ignore with reason
|
|
48
|
-
5. After fixing, run
|
|
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:
|
|
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
|
|
54
|
-
2. Review
|
|
55
|
-
3.
|
|
56
|
-
4. Repeat until
|
|
75
|
+
1. Run the auto-fixer with the apply / fix flag.
|
|
76
|
+
2. Review the diff — auto-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
|
|
80
|
+
### Step 3: Final type-checker verification
|
|
59
81
|
|
|
60
|
-
1. Run
|
|
61
|
-
2. If new errors appeared (e.g. from
|
|
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
|
|
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`
|
|
109
|
-
- **Do NOT
|
|
110
|
-
- Inline ignores (`@phpstan-ignore`, `@ts-expect-error`, `biome-ignore`) are a last resort.
|
|
111
|
-
-
|
|
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
|