Repository navigation
Conversation
A site export is how an operator leaves with what is theirs, and the shop handed Mallok nothing for it: variants, prices, the stock ledger, orders and inquiries were in no backup. exportFiles now returns a JSON file for each, under shop/, with a manifest: a row an object, as stored, so that an amount stays whole minor units and nothing a buyer typed is rewritten. A variant carries its product's slug as well as its translation group, which only this database knows. Carts, rates and the scheduler's state stay behind, and of an inquiry the cart it came from and the mark of who sent it. Tables are read with *, and a test fails when a new p_shop_ table is neither exported nor named among those left behind. A table past the row limit fails the export by name rather than be cut short: Mallok then says there is no backup, where a file missing rows would have passed for one.
…t do The design gains §19. The security notes say that an export holds orders and inquiries as stored, and that a shop can outgrow an export built in one request.
…o race A review showed that atTheSameMoment checked the first trip of every call before the second of any, which is 'every reading before any write' only for a function that reads once. It is told the number of readings now. Two calls that never write, one after the other, look the same as two side by side: that is refused as nothing to race for. And a call that throws before its first wait no longer leaves the others unwaited for.
…ects a review found - A price whose variant is gone was left out, and the manifest's count with it: the prices were read through a join. Every price is read now, and the column the export adds is named variant_sku, which no table's column is. - Twenty thousand rows a table came, by the review's measure, to more than a Worker's memory, so the limit would never have named a table. It is five thousand rows now, and sixteen megabytes of text for the files together. - Mallok's command line and admin show that the shop failed and not why, so the reason is logged as well. - The shop's settings were in no export. They are in shop/settings.json. - A line separator inside a value broke 'a row to a line' for a reader that splits lines the way Unicode does. It is written as an escape. And four wrong exports passed every test: one dropping columns of an inquiry, one dropping columns of a price, one with no order to its rows, one holding two tables to the limit. The tests compare every table whole, from rows put in the other way round, hold each of the nine to the limit, and list every column of every exported table, so that a new one is looked at before it leaves the shop.
… showed wrong Removing the status condition does turn a race red where two different changes of an order meet; the design said it turned none. The security notes say what an export holds in full, and not to switch the shop off to get a backup when its export fails.
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.
What this is
A site export is how an operator leaves with what is theirs, and the shop handed Mallok nothing for it: variants, prices, the stock ledger, orders and inquiries were in no backup. They are now (design §19).
exportFilesreturns a JSON file for each, undershop/, with a manifest and the shop's own settings: a row an object, as stored, so that an amount stays whole minor units and nothing a buyer typed is rewritten. A variant carries its product's slug as well as its translation group, which only this database knows. Carts, exchange rates and the scheduler's state stay behind, and of an inquiry the cart it came from and the mark of who sent it.Tables are read with
*, so a column a migration adds is not forgotten — and a test lists every column of every exported table, so that a new one is looked at before it leaves the shop.A table past 5,000 rows, or files past 16 MB of text together, fail the export rather than be cut short: Mallok then says there is no backup, where a file missing rows would have passed for one.
An independent review, and what it found
Twelve things, each checked before it was acted on. The ones that mattered most:
SECURITY.mdsays not to follow that suggestion.How it was verified
Not verified, and not there
mallok exportitself was not run against this site: the tests read the endpoint it reads.