Repository navigation
Conversation
…othing behind The built binary never exercised the data-fault path; the tour now narrows a seeded column one row will not fit, asserts the failed / data-fault verdict and exit 1, then runs a second copy-and-swap on the same table as proof nothing was left behind. The seed also pins search_path = public: the compose role shares its name with the engine's schema, so a reseed after any copy-and-swap landed the tables in the wrong schema.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The demo tour now walks a data fault through the built binary: a copy-and-swap whose rows will not fit the new type reports
failed/data-faultwith exit 1, and a second copy-and-swap on the same table proves the abandon left nothing behind.Why
The engine abandons a run on a data fault — drops the shadow, releases the slot or the fence, deletes the checkpoint row — and the Go suite proves that against testcontainers. The artifact smoke test did not exercise the path at all, so a regression in the CLI's rendering of it (the exit code, the
codefield, the table) would reach a release unseen. The tour is the one check that runs the shipped binary the way a user does.While wiring it in, the seed turned out not to be rerunnable once a copy-and-swap has run: the compose role is
pgsprite, the engine creates a schema of the same name for its checkpoint table, and from then on the seed's unqualifiedCREATE TABLElanded inpgspriteinstead ofpublicunder the role's defaultsearch_path, so everypublic.*assertion in a secondmake demo-checkfailed. CI never saw it because its database is fresh.What
demo/seed.sql:ordersgains anote textcolumn; one row (id = 4000, past the copier's first chunks) carries a 64-character note. The seed pinssearch_path = publicso reseeding lands inpublicwhether or not the engine's schema exists yet.demo/tour.sh: newexecute_data_faulthelper (check mode asserts exit 1,outcome == failed,code == data-fault,table, not forced; demo mode prints the verdict and the expected exit) and tworun_execrows after the existing copy-and-swap: narrownotetovarchar(32)(the fault), then widen it tovarchar(200)through copy-and-swap again — the success is the proof that no shadow, slot, or checkpoint row survived the abandon.demo/README.md: theexecrow and the check-mode exit-code list name the new step.Before / after
Same table, same seeded rows. Before, the tour ran one copy-and-swap on
ordersand moved on; a data fault was never exercised by the built binary, and the second local run seeded into the wrong schema. After, the fault is met part-way through the copy, the verdict is asserted, and the next copy-and-swap on the same table succeeds only because the abandon released everything.🤖 Generated with Amp (Claude Opus 4.6)