fix(registry): migrate persisted operation ownership state - #607
Conversation
|
Commit 3 — Second production defect after the boot fix: every keeper REST call answered 500 Fix in Proof over the production history: boot 0 errors, Known, left visible: |
|
Correction to the previous comment: the retain-and-re-stamp fix ("keep one resident identity across retained entries") is withdrawn in favor of cde05d7 |
332acbc to
4587dce
Compare
4587dce to
6d3f57d
Compare
7a3a6cb to
4e8649d
Compare
8f55951 to
55eac93
Compare
Problem
Persisted registry history did not carry enough registry-owned state to replay ownership and dependency-root transitions independently of the application baseline. Update-first history could restore an entry without a corresponding ownership record, and provenance-only identity changes were not durable. Keeper's atomic snapshot then correctly rejected missing or conflicting ownership.
Fix
Operation.Registryblock. The publicEntryand Lua entry shape carry no ownership/root field; format-1 decoding translates the retired wire flag directly into registry state. User entrymetaanddataremain unchanged.registry_history.operations.There is no Keeper-specific lookup, user-metadata fallback, parallel ownership index, or second migration table.
Rollout
This is a one-way data cutover:
An old binary is supported before cutover with the new Keeper. It is intentionally not allowed to write a migrated store it cannot understand.
Proof
/system200.1.3/ operation format3; invalid published application graphs were rejected without partial application./system200, shut down cleanly, then restored from persisted state and served 200 again.Validation
go test ./... -count=1go test -raceand PostgreSQL enabledmake lint— 0 issuesgit diff --check