One job: change one authorized cause and return inspectable evidence to the graph.
Nodes you own
Start every node from t3u node-brief --node <id>; it carries the contract, routes and budget.
| Node | Focus |
|---|---|
dependency-plan |
Composer target for ^14.3 with latest stable versions; flagged R for the resolution choices |
dependency-resolution |
Exactly one blocker per attempt, behind a Git anchor |
rung-13 |
13.4 compatibility rung; snapshot first; wizards/schema to a fixed point; evidence loop. Core already on ^14.3: read-only not-applicable (below) |
mechanical-migration |
Rector, Fractor, scanner; rebuild caches; second pass reports no changes; keep the compress/concatenate keys Fractor removes too early |
manual-migration |
Removed APIs and stored data before registration; snapshot first; evidence loop; copy fsc's 13.4 parseFunc while 13.4 is installed |
rung-14 |
^14.3 at the latest 14.3.x patch, fixed point, DI container, backend opens; snapshot first; the TYPO3 14 fix pack before the first proof loop; evidence loop |
rung13-recovery |
Diagnose the one blocking cause and plan the repair for the retried rung |
mechanical-recovery |
Diagnose the cause the tools left behind; plan the fix for the retry |
manual-recovery |
Diagnose one data/API/registration-order failure; plan the fix |
rung14-recovery |
Diagnose the one blocking cause and plan the repair for the retried rung |
content-recovery |
One ledgered content/data repair found by visual classification or db-health-target; snapshot first; outcome pass reruns visual-proof, db-health reruns db-health-target |
Stateful nodes open with t3u snapshot-create --node <id> first. Code nodes open with a
--rollback-ref git:<sha>; the guard measures your diff against it.
Patch path. When ddev composer show typo3/cms-core proves the installed core already satisfies
^14.3, rung-13 opens --applicability-only and closes not-applicable with that output as evidence
and an independent review; the graph skips mechanical-migration and manual-migration, and
rung-14 does the patch update (latest 14.3.x, compatible dependencies) to a wizard/schema fixed point.
Worker protocol
Your input is the node brief. Write its evidence file, return one allowed outcome, and never run
node-open/node-close or edit run state. Details: graph runner.
Keep the evidence lean: about 120 lines of proof, earlier artifacts cited by path and hash, one probe
artifact; at the brief's forecast (15 minutes or less) or twice it, stop and return what is proven
plus the open question (lean profile).
Preconditions
- The node is
ready; Baseline A is sealed and verified; graph definition/identity/fingerprints match. - Code changes have a Git/file rollback reference. Stateful work has a DDEV snapshot taken immediately before this node. Exact destructive scope has a granted approval.
- Application PHP/Composer/TYPO3 commands run through DDEV.
Invariants
- Target
typo3/cms-core: ^14.3; PHP 8.4 standard; try 8.5 and recordwhy-not. - Apply latest stable by default to in-scope packages/tooling. Verify release metadata, review major migrations, and record explicit acceptance of any evidenced older-version fallback; do not inherit old example versions.
- Produce v14-only project code. Verify every replacement API against installed 14.3 source.
- Follow native tools first: use Core/extension commands and supported APIs, then widely used compatible tools. Record a concrete gap before writing a custom adapter; official commands still need side-effect and output/coverage review.
- One cause/pass, normally ≤10 files or ≤400 changed lines. Remaining findings return to the graph.
- Each extension ends with a supported upgrade, replacement, compatibility fork + exit plan, local migration, or approved removal. Never silently drop a feature.
- Prefer 13.4 as the compatibility rung, then mechanical and manual work, then 14.3.
- Apply the TYPO3 14 fix pack at the nodes it names instead of rediscovering its items: one read-only probe artifact, a fix only where the detection matches, one commit per item, and the pack table in the evidence. A symptom whose detection does not match is a finding, not a blind patch.
- Run Rector/Fractor/scanner a second time after registry/cache rebuild; preserve exact output.
- Migrate stored data before new registration. Preserve CType/list-type identities, parent/child and FAL relations, nullable meaning, translations, and YAML scalar types.
- Schema analyzer output is quarantine. Drops require separate exact table/field/index approval.
- Before the 13.4 schema update, set
''to'0'in every text column that 13 turns into an INT file count (seen:fe_users.image,backend_layout.icon); strict mode refuses the retype with "Truncated incorrect INTEGER value". Ledger the update and replay it on staging before its schema update. - Every migration/wizard/setup command must reach documented fixed point on an unchanged rerun.
- After any dependency change, including patch releases, inspect used backend subclasses and DI signatures against the installed target. Rebuild the container and open the affected real module. Prefer an upstream fix; otherwise pin a reproducible Composer patch with drift failure and exit plan.
- Read fleet regression contracts for touched integrations. Preserve recipient/DOI/consent, cached selection, URL and persisted-data semantics; a provider response or successful Composer solver is not end-to-end proof.
Specialist routes
- Mask/content modeling →
typo3-content-blocks - PHP APIs →
typo3-v14-reference+typo3-rector - TypoScript/Fluid/YAML/XLIFF →
typo3-fractor - Assets/Gulp/Bootstrap →
typo3-vite - Solr/indexing/order →
typo3-solr - CKEditor/RTE presets and link dialogs →
typo3-ckeditor5 - Inline frontend editing →
typo3-visual-editor - Executable visitor/editor journeys →
typo3-playwright - Environment secrets/Deployer information → orchestrator environment reference
- Redirect install/editor groups → DDEV Composer +
typo3-backend-rights - Security finding →
typo3-security/security-audit, without disguising it as Composer failure
If typo3/cms-redirects is absent, dependency resolution installs a constraint compatible with the
locked 14.3 core, inside DDEV. Snapshot before setup/schema. The later rights node proves intended
editor access and least privilege.
Also require spooner/deployer-information, the latest stable Bootstrap 5.x for every Bootstrap
site, and native project JavaScript where compatible. A Bootstrap 3/4 site migrates in vite-assets
after the invariance loop, not in a migration node (procedure).
Preserve existing functionality and prove any approved exception.
Evidence and exit
Run syntax/static/unit/functional checks proportionate to the cause, schema/extension fixed-point checks, Composer audit, affected URL/component sentinels, and a bounded intermediate parity capture.
pass: requested cause is migrated, fixed-point proof is green, no new unclassified findings.findings: record root cause and affected evidence; graph routes to re-plan/specialist/recovery.blocked: identity, backup, approval, credential, policy, dependency, or retry bound prevents safe work.
Rollback on drift, oscillation, two no-progress attempts, scope/destination change, or exceeded budget. Never rebaseline and never deploy.
Boundaries
Use typo3-upgrade-closure for full source→target proof. A successful Composer update is not an
upgrade verdict.