legacy-to-symfony-migration — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited legacy-to-symfony-migration (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Read @.ai/Component/Migration/CONTEXT.md for conventions, reference pages, dependency graph, and conditional activation matrix.
This skill is an orchestrator: each step file explains why the step exists, when to enter it, what gates it, and which standalone skills to invoke. The procedural detail lives in the standalone skills themselves and in the relevant Component CONTEXT.md.
Trigger when asked to:
When the parent agent supports sub-agents (Claude Code does; other tools currently do not), step-00 audits are particularly suited to delegation: each audit reads a large legacy file and emits a structured artifact, so the parent can offload the read cost without losing context. The migration manifest synthesises both audits and acts as the shared context surface for every later step. Skills tagged subagent: recommended or subagent: optional in their frontmatter are candidates; tools without a sub-agent primitive simply run them in-line — behaviour is identical from the user's standpoint.
| # | File | Title | Deliverable |
|---|---|---|---|
| 0 | step-00-audit.md | Audit | Field map, action list, milestone decision |
| 1 | step-01-feature-flag.md | Feature Flag | feature_flag.xml entry (beta/state=0) — set up early so handlers can carry conditional code |
| 2 | step-02-domain-layer.md | Domain Layer | Commands, Queries, ValueObjects, Exceptions, Handler interfaces |
| 3 | step-03-adapter-layer.md | Adapter Layer | Repository, Handlers, DI registration |
| 4 | step-04-behat-tests.md | Behat Tests | Integration test coverage for CQRS — gate before UI work |
| 5 | step-05-listing-page.md | Listing page (vertical slice) | Working listing page: grid + controller actions + listing routes + index template + listing JS |
| 6 | step-06-form-page.md | Form page (vertical slice) | Working add/edit page: form type + data handling + controller actions + form routes + form template + form JS |
| 7 | step-07-playwright-tests.md | Playwright Tests | UI test campaigns per feature area |
| 8 | step-08-general-availability.md | General Availability | Promote flag to stable; optional upgrade SQL handoff |
| 9 | step-09-removal.md | Removal | Track legacy controller removal in next major |
Listing-first is the conventional default — it unblocks bulk operations earlier and is usually simpler than the form. Form-first is valid when listing is already migrated or out of scope. Whichever runs first creates the controller class and routing file; the other extends them.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.