Repository navigation
Recover original child reservations after definition changes - #1145
Conversation
|
Security exact source/API review: PASS for frozen head I reviewed the complete three-file delta. Production changes are confined to the additive 21-line
Storage lookup is only by the deterministic original-generation child ID. The loaded row must match the authorized namespace and native workflow type before the bounded reservation JSON is decoded. Decoding is the existing maximum-32,768-byte/depth-32 closed state path. The operation performs no write, start, admission, closure, current-run substitution, or absence certification. It returns the unchanged stored descriptor only. A later The focused additions exercise historical-definition drift, unavailable-class loading with an autoload sentinel, same-key descriptor substitution, missing storage without creation, distinct load authorization with pinned-policy preservation, owner/type refusal before decoding, authorization-before-query, and caller-transaction refusal. Documentation accurately limits this to descriptor recovery and retains the admission/absence boundaries. This PASS is source-only. Current hosted checks remain required. It does not complete or promote the retained child participant, atomic scope bootstrap, protected business cancellation/commit, full #1069 integration, missing-child settlement, merge, release, or #1130 authority. |
|
|
Security narrow exact-head rebind: PASS for test-only successor The reviewed production The delta only removes the five historical-load cases from One additional unit case changes the selected row namespace to a foreign owner and replaces the protected reservation with invalid JSON. It requires the exact owner-mismatch
|
|
Delivered at normal merge 8bb05a6, tree 02089f73154f01368f3e03e9c3e728a84efe1372 exactly equal to reviewed/tested f158a29. All four actual-main workflows are terminal SUCCESS, including full build 43584177278. The topic was deleted with an exact f158a29 lease; independent remote readback is 404 and the local topic is absent. All local qualification objects were removed. This delivers historical reservation lookup only; retained participant integration and the remaining #1069 business contract stay open. |



A deployment can change the child definition before a lost reservation acknowledgement is recovered.
reserve()correctly refuses replacing that pinned definition, but recovery still needs the original descriptor to close the reservation.Add
ChildReservationStore::load()at the recorded host boundary. It authorizes the original identity before storage, checks native ownership before decoding, and returns the exact stored descriptor without resolving or autoloading a workflow class. Changed binding content and missing records refuse. Callers useclose()afterward for the current authoritative admission or committed closure.Focused and adjacent tests: 235 tests / 5,651 assertions PASS, including historical definition recovery, unavailable-class loading without autoload, policy reauthorization, owner substitution and missing-record refusal. ECS and changed-file PHPStan pass. Six historical-load controls run in the unit persistence suite. Hosted qualification and final-head independent review remain pending.
This prepares the retained compensation adapter for #1069. The child participant, atomic child-scope admission, protected business cancellation/commit and complete integration example remain unfinished. #1069 stays open.