docs(link): protocol 7 part b — what an event borrows, and the one-shots #222
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/events-p12b-borrowed-and-oneshots"
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?
Events Phase 12b, docs half. One of five:
website,servuo-plugins,link,Module-uo,docs— all ontoedge.link/v7.mdgains §11–§14;EVENTS.md§G's five part-b rows are marked built, three carrying a correction;MODULE_API.mdrecords the three members 12b amends into 1.10.0;EVENTS_PLAN.mdhas Phase 12b as built.The design point, written down
A borrowed value whose home is the world save does not come back on a restart the way a config value does. 11b's fail-safe — a lease that never reaches disk makes a restart a free restore — depends entirely on the leased value being memory-only too, and for a spawner property or a seasonal status it is not: a restart preserves the change and destroys only the timer that would have undone it. So those two planes' holds are persisted and their deadlines re-armed, and the config plane's still are not. The same argument, applied where its premise is false.
Five corrections to
EVENTS.mdSpawner.Amountdoes not exist. The property isMaxCount;MinDelay/MaxDelayareTimeSpans, so the wire carries seconds.OnStatusChange()generates or removes world content for six of the eight permitted types.TreasuresOfTokunois excluded, becauseIsActive()reads its ownDropErarather thanStatus. A lease on it applies cleanly, reads back, restores cleanly and changes nothing — §N10's "capability that lies", and the one instance no runtime probe can catch.The config-lease row is closed at one key: 156 non-Bridge
Config.Getsites, 82 outside a field declaration, all but four of those cached at boot anyway. The self-check ships regardless — it exists for the operator whose own scripts read config live.MODULE_API 1.10.0, amended in place
targeton a lease declaration,valueson a string lease,searchable+{ q }on option sources. Amended rather than bumped for the reason every phase since P10 has: 1.10.0 has never reachedmain, so no deployment can tell the difference.The
targetentry records why this extendscore.leaserather than giving the module its own lease verb: §F settled that in Phase 8, and half its objection no longer holds (the two-events-one-target refusal comes from the ledger's unique index whichever verb reserves the row) while the other half —maxDurationMsre-implemented per module — still does.§14 records the protocol-pin defect 11a and 12a both shipped, and why the test guarding it passed anyway: it asserts the three declarations agree with each other, which all three being equally stale satisfies.
Checks
docshas no CI. Every relative link in the new sections was resolved by hand; the files are CRLF in the working tree and each diff is content-sized (--numstatmatches the real change: 281/5, 18/13, 72/0, 79/2), so nothing carries the\r\r\nfull-file rewrite.🤖 Generated with Claude Code
https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
`link/v7.md` gains §11-§14: the two targeted lease planes, the two one-shots, the routes, and what the build found in already-merged code. `EVENTS.md` §G's five part-b rows are marked built, three of them carrying a correction. `MODULE_API.md` records the three contract members 12b amends into 1.10.0. `EVENTS_PLAN.md` has Phase 12b as built. THE DESIGN POINT, WRITTEN DOWN A borrowed value whose home is the world save does not come back on a restart the way a config value does. 11b's fail-safe -- a lease that never reaches disk makes a restart a free restore -- depends entirely on the leased value being memory-only too, and for a spawner property or a seasonal status it is not: a restart preserves the CHANGE and destroys only the timer that would have undone it. So those two planes' holds are persisted and their deadlines re-armed, and the config plane's still are not. The same argument, applied where its premise is false. FIVE CORRECTIONS TO EVENTS.md - `Spawner.Amount` does not exist. The property is `MaxCount`, and `MinDelay`/`MaxDelay` are TimeSpans, so the wire carries seconds. - The seasonal toggle is not "small and safe". Safe, yes -- ServUO does it to itself from a staff gump -- but `OnStatusChange()` generates or removes world content for six of the eight permitted types. - It is a THREE-value enum over nine named events, not a nine-value enum. (Caught in 12a's survey; the row is corrected here now it is built.) - `TreasuresOfTokuno` is excluded, because `IsActive()` reads its own `DropEra` rather than `Status`. A lease on it applies cleanly, reads back, restores cleanly and changes nothing -- §N10's "capability that lies", and the one instance no runtime probe can catch. - The grant row said failure aborts rather than retries. Protocol 6 changed that: an idempotency key means a repeat is answered by the original reply, so a retried grant cannot be one winner receiving two. And the config-lease row is closed at one key. Counted on ServUO 57.4: 156 non-Bridge `Config.Get` call sites, 82 outside a field declaration, all but four of those inside a `Configure()` or static constructor and cached at boot anyway. The self-check ships regardless -- it exists for the operator whose OWN scripts read config live. MODULE_API 1.10.0, AMENDED IN PLACE `target` on a lease declaration, `values` on a string lease, and `searchable` + `{ q }` on option sources. Amended rather than bumped for the reason every phase since P10 has: 1.10.0 has never reached `main`, so no deployment can tell the difference, and the cutover is what publishes the whole of it. The `target` entry records why this extends `core.lease` rather than giving the module a lease verb of its own: §F settled that in Phase 8, and half its objection no longer holds (the two-events-one-target refusal comes from the ledger's unique index whichever verb reserves the row) while the other half -- `maxDurationMs` re-implemented per module -- still does. §14 records the protocol-pin defect 11a and 12a both shipped, and why the test that guards it passed anyway: it asserts the three declarations agree with each other, which all three being equally stale satisfies. CHECKS `docs` has no CI. Every relative link in the new sections was resolved by hand; the files are CRLF in the working tree and each diff is content-sized (`--numstat` matches the real change), so nothing carries the `\r\r\n` full-file rewrite. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4