docs(link): the player-vendor marketplace (Protocol 3.0 §8) #71
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/vendor-listing"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
Documentation for Protocol 3.0 order 5b —
vendor.listing, the player-vendor marketplace — across the four repos: servuo-plugins #5, link #19, website #116.NEW
website/MARKETPLACE.mdThe operator guide. Leads with the three things the pages are required to say out loud, because each is a consequence of how the data is gathered rather than a UI preference: the prices are not live (round-robin sweep), a shop can be truncated, and an item may have no name.
Also documents the privacy contract in one place — the player's own in-game Vendor Search toggle wins, and no admin setting overrides it — plus the
Bridge.cfgknobs, how they trade against each other, and the measured sweep costs with the arithmetic behind the slow-tick warning.link/INTEGRATION.mdCatalog entry for
vendor.listing/vendor.listing.removewith six consumer gotchas (the other 3.0 kinds needed four; this one has more surface). The ones most likely to be got wrong:nameis null for nearly every item andclilocis the real label;child: truemeans the price buys the enclosing container, so printing it against each item inside is a lie about the shard; and processing theremovepromptly is how a player revoking consent reaches you.Plus the
GET /marketREST section — the sidecar's only paged read, and why it orders by serial rather than shop name (a rename mid-walk would otherwise make a vendor skip or repeat a page).website/BACKEND_DESIGN.mdshard_vendors/shard_vendor_items, the three routes, and the marketplace search recorded as the only rate-limited public read on the site — with why it earns that when nothing else does.Explains the two columns that carry non-obvious meanings (
item_countvsitem_total;display_namebeing denormalized and re-resolved after a cliloc import) and whyupdated_atis written explicitly rather than left toON UPDATE CURRENT_TIMESTAMP.website/SHARD_VISIBILITY.mdWhy the market's fields default to Everyone — the in-game gump already shows exactly that set to any player, so publishing it is not a new disclosure, and "already public in game" is a judgement about your shard rather than ours. Also: why location is one setting covering four things, and why hiding the owner name while leaving the owner id published achieves nothing.
link/PLAN.mdThe amortized round-robin recorded as the one sweep pattern the bridge did not previously have, with the measured numbers.
Also updates §7's cliloc note, which had recommended resolving names website-side to avoid a server-side dependency on the client directory. That recommendation held — but the real reason is stronger than the one given: ServUO cannot resolve clilocs either, because every current client ships them compressed and the bundled
Ultima.StringListreads only the older plain layout. Pushing name resolution to the plugin was never an option, and the in-game Vendor Search gump has the same gap.link/v3.md§8.8 — what the build changedFour things the implementation settled differently from §8 as written, chief among them:
§8.1's payload sketch had
locationFLAT (map/x/y/region), which would have made Part A's pre-wiredmarket.locationrule inert —projectValuematches literal JSON keys, so there would have been nolocationkey to match. Exactly thecharacterNamemiss §7.5 records, one part later. Nesting it makes one rule cover the facet, coordinates, region and house on both the live frame and the stored read model.Also: the diff signature is the full listing set rather than §8.3's
count | Σ(serial ^ price)(which collides on two items swapping prices — i.e. on re-pricing a shop); there is nopayloadcolumn onshard_vendorsdespite §8.5 implying the board pattern; and sweep cost is now reported because the batch cap is a claim about it.Also
README.mdgained index rows forMARKETPLACE.mdand — while there — forSPAWN_ATLAS.mdandCLILOCS.md, which were both missing. An index listing one of three sibling docs is worse than no index.How it was tested
Prose only. Every code reference, measured number and behaviour described here was taken from the live runs recorded in the three implementation PRs (real shard: 209k items / 43k mobiles / 27 player vendors / 1,040 listings), not from the design as written — §8.8 exists precisely because the two diverged.
Progress tables in §Progress and §9 updated: 5a → Done, 5b → In review. Only the cutover (order 6) remains.
Checklist
AI-assisted contributions (required)
Claude Code (Opus 5). I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with aCo-Authored-Bytrailer.License