Add a TinTin++ Setup page for tt++ players
Parallel to Mudlet Samples: GMCP via #event {IAC SB GMCP <Module>}, an auto-open-
login #action, the built-in #map mapper driven by Room.Info, a #split vitals line,
and channel colouring — with honest placeholders where tt++ can't match Mudlet
(no dockable per-channel windows; no addCmdLineSuggestion-style tab completion).
Linked from the sidebar and Player-Reference.
41fc7bb
Mudlet: add an auto-open-login-link trigger recipe
A plain-text (non-GMCP) multiline trigger that matches the gate's OAuth login
prompt and opens the link in the browser via openUrl(matches[2]). Regex keys off
the engine's login screen text (stable across content changes). Linked from the
Player-Reference Connecting section.
cb145d7
Round 30 milestone: reconnect/placement/drain correctness (#321/#324/#329/#331/#336) + RID re-home (#373)
Round did not self-document. Closed:
- Persistence-and-Durability: a live reconnect routes by an in-memory residency
index BEFORE the lagging durable zone_ref (prevents a double-owned character
when a link-dead resume beats the async flush of an intra-shard walk) (#321);
the placement writer gets the saver's shutdown-barrier treatment so a logout
tombstone isn't lost on graceful shutdown (else the tell/mail oracle reports a
player on a dead shard) (#331)
- Distributed-Systems-Model: the placement tombstone now carries a per-session
nonce, fencing a same-shard/same-epoch relog that shard+epoch alone couldn't
distinguish (#329)
- Edge-and-Protocol: a fresh login bounced by a draining shard (Unavailable) is
re-resolved + re-dialed to the peer instead of dropped; token-bearing re-dials
never retried (extends the zero-drop drain to ARRIVING players) (#324)
- Cross-Shard-Handoff: a gate-wedged player is skipped by the drain and reclaimed
(client-fault straggler), not miscounted zero-drop Redirected (#336)
- Entity-Component-Model: an intra-shard transfer re-homes the entity + carried
subtree to fresh per-zone RIDs (the overworld 'map on some rooms' bug) (#373)
685d958
Overworld map, content-defined toggles, and the demo-strip release model
Cross-repo changes (gomud engine+demo, telosMUD-content, telosMUD-infra):
Overworld / minimap (gomud #358/#360/#361/#367):
- Pack-Entity-Reference: new toggle_defs def table (on/off player preference,
verb-flipped, delta-from-default override, never a trust signal); the room
display surface (return nil to fall back → own the render for some rooms only)
- Pack-Lua-Scripting: coord(), has_room_flag (room content flags, vs has_flag =
Living flags), long(), toggle() handle reads
- Builder-Commands + Player-Reference: enter/exit/out named-exit verbs + the
Exits: line order; toggle verbs
- Demo-Pack: the 4th zone (overworld 'The Open Plains', 6x20 grid) + the opt-in
minimap (overworld toggle → room display template); the plains route vs the
kept-for-parity direct market->grove exit
Demo-strip release model (gomud release-images + telosMUD-content/-infra):
- Deployment: published images built with nofixture ship core-only; the world is
pulled from the external content store; telos-pull added to the published matrix
(telos-seed keeps the demo embed for local stacks)
- Content-Packs-Intro + Content-Pack-Operations: the demo is a dev fixture, not a
shipped world; a deployed fleet (e.g. live staging) pulls the reference pack
832efd4
Round 29: help system (#64) + world-director script (#47)
Round did not self-document. Two LARGE features:
#47 content-defined Lua world-director script (the headline — closes the
'director-script unauthored' gap the Orchestration + Engine-Dev-landing pages
carried):
- Orchestration-and-Directors: new 'The world-director script' section — the
director host table (get/set/broadcast/log), on_signal delivered per non-
boss.died signal, the four guards (guard-your-own-events, idempotent derived
writes, reserved key/down-event refusal); rewrote the stale 'unauthored' note.
- Lua-Sandbox-Internals: the sandbox core is now a shared internal/luasandbox
package used by both the zone VM and the director VM, cross-checked by a
build-failing parity test.
- Scoped-Event-Bus: signal-up is now consumed by the content on_signal handler.
- Pack-MUD-Settings: world_script manifest field.
- Pack-Lua-Hooks: builder-facing 'The world-director script' authoring section.
#64 builder-defined help system:
- Pack-Entity-Reference: help_defs def table (ref/title/category/keywords/body/
see_also; auto-includes the command set; honors CmdHidden+MinRank).
- Builder-Commands + Player-Reference: the help command; fixed the stale
'CmdHidden has no help/listing consumer yet' note.
a709624
Round 28: reload/reset/comms residuals (#304/#269/#309)
Round did not self-document. All three closed:
- Pack-Lua-Hooks: on("spawn") now fires on the PERSISTENT (durable-object) reset
path too, not just ephemeral repop; fires parent-first, before contents and
before later 'into' ops — one 'spawn fires when placed, don't assume inventory
yet' contract across both paths (#304)
- Content-Loading-and-Hot-Reload: channel reload republishes the full (ref-
independent) hear-set, so a burst of channel edits is coalesced per zone (one
O(players) pass, not K); flag disarmed before the recompute so no edit is
swallowed (#269)
- Content-Loading-and-Hot-Reload: reload now appends a non-blocking advisory when
it removes content a NOT-reloaded pack still references (the inverse #205 won't
hard-block); pre-vs-post diff against the live proto cache at validate time (#309)
8d6e9fd
Round 27: the AdoptZone fence cluster (#316/#288/#327)
The round self-documented #315 (generation fence) on RPC + Sysadmin. Closing
the rest:
- Cross-Shard-Handoff: new 'Zone adoption: build, confirm, or un-adopt' — the
destination requires from_shard_id to be the zone's live owner and refuses
before building (#316, a correctness precondition, not a security barrier since
owner+gen share one read); adoption is confirmed by observing the lease flip
LAND (via ClaimZone), never by the RPC returning; an unconfirmed runtime
adoption is un-adopted when its confirm deadline expires, gated on an 'adopted'
flag so boot zones fence rather than self-delete (#327).
- Zone-Runtime-and-Actor-Model: new 'Runtime zone teardown' — UnhostZone + the
per-zone actor context; the four guards (disposable-not-unowned; quiescence is
not pop==0; post selects on a dead channel or the saver drainer wedges the whole
shard; publish+arm under one lock) (#288).
- RPC-and-Protobuf: the from_shard_id line now notes the live-owner precondition.
- Running-at-Scale: the source tears down a rebalanced-away zone (no zombie per
migration).
4779c41
AdoptZone is fenced by the zone's lease generation, not a clock-skew window (#315)
d67ea30
Round 26: the placement record becomes the reconnect-routing spine
Track-6 residuals. Round self-documented only #276 (catch-up metrics); the
rest of the engine/ops surface was stale.
- Distributed-Systems-Model: NEW 'The placement record' section — zone is the
routing key (ShardForZone resolves the current owner, so an offline rebalance
is transparent), epoch is the fence AND the tell/mail existence key, shard
routes nothing. Every residency registers a placement (incl. the intra-shard
zone walk); registerPlacement accepts an equal epoch where the handoff CAS
demands a strictly greater one. Clean logout writes a fenced compare-and-delete
tombstone, not a delete (#320 slice 2, #70). Also: lease renewal restarts on
re-adoption, closing an A->B->A split-brain (#288).
- Persistence-and-Durability: close the shard-not-zone 'Known gap'; add the
saver shutdown sentinel barrier (#282).
- Edge-and-Protocol: world-side Send watchdog — keepalive can't see a gate whose
transport acks PINGs while its application stopped reading (#274).
- Orchestration-and-Directors: a runtime-adopted zone's scope replica is seeded
before the zone is exposed (a full-map replace would clobber newer state) (#280).
- Cross-Shard-Handoff / Running-at-Scale / DistSys: drain-target reservations now
carry per-field, server-timed expiry (#284).
- Running-at-Scale: drop the self-contradicting 'deliver_lag_ms silent' gap; the
gate row now describes zone-keyed reconnect routing.
e889eb9
scale: document the durable scoped-event catch-up metrics; drop the stale deliver_lag_ms gap
03f91f5
Round 25: durable-zone login fix + engine-side notes for #69/#262/#266
The round self-documented #69 (Abilities), #262 and #266 (Sysadmin). Closing the
engine-page gaps and the one undocumented item:
- Persistence-and-Durability: NEW 'Where a returning player lands' — characters.zone_ref
is the login routing key (#320). Documents the data-loss bug it fixed (an intra-shard
walk + logout silently reset you to the home zone's start room), the link-dead
reconnect side-fix, the room_ref warn, the checkpoint drift guard, and the remaining
shard-not-zone placement gap.
- Combat-System: the death generation (Living.deaths) + die() entry re-entrancy latch
(an item dupe) + why position/location can't carry the 'did it die' signal (#69).
- Scoped-Event-Bus: paced durable NAK redelivery + the tri-state ack decision (#266).
- RPC-and-Protobuf: AdoptZone is signed on keyed shards (#262).
- Edge-and-Protocol: the connect diagram binds the durable zone.
b0123fc
abilities: death inside an op-list (cross-respawn guard, actor-death abort)
d1c0c70
sysadmin: authenticated AdoptZone + rolling-upgrade fail-closed note
3d73cdd
Sysadmin: durable-message delivery guarantee, park/poison metrics, and the consumer-config upgrade note (#266)
39b54e1
Close the Round 24 doc gaps: roam field, salvage pity, #205 validation
Most of Round 24 was documented as it shipped (on("spawn")/witness_leave hooks,
the state.x reload-guard idiom, the shared-def rolling-reboot readout). Remaining:
- Pack-Entity-Reference: add the missing roam reset field (zone-wide population)
- Loot-Spawns-and-Crafting: salvage pity no longer compounds across over-skill
bonus passes (was listed as a latent bug); only the base pass advances pity
- Content-Loading-and-Hot-Reload: scoped reloads now validate against the whole
merged graph, rejecting only findings whose last-writer pack is in scope
(provenance-by-last-writer; avoids the migration trap)
- Demo-Pack: the wandering wisp + chasing stalker, and the reload-safe greeter seed
742a1d9
Complete the shared-def list in the reload rolling-reboot note (#56)
6360f75
Document the reload shared-def rolling-reboot reminder (#56)
d1208f8
Fix witness_leave chase note (escaping artifacts) + document flee-path firing (#202)
b0da851
Document the witness_leave chase hook (#202 scenario 2)
d44485f
Document the on("spawn") lifecycle hook + roam reset (#202 wandering mobs)
ea09249
Builder guide: guard top-level state.x initializers against hot reload (#67)
cb72951
GMCP docs: reflect Round 23 (Track 7) enrichment
Track 7 landed three GMCP features on main:
- Char.Items.Contents: first INBOUND client->world request (gate whitelist,
per-session rate limit, reach-scoped resolve, keyed Char.Items.List reply)
- Comm.Channel.Players: new package, cross-shard per-channel listener roster
authored by the leader director (poll/diff + periodic full resync)
- live HUD beyond combat: Char.Vitals/Status/Stats pushed change-detected on a
~2s non-combat pulse, not just at prompts/combat boundaries
Updates GMCP-Reference (new Inbound-requests section + Comm.Channel.Players row
+ Char cadence), Edge-and-Protocol (GmcpIn now consumed for whitelisted
requests), Orchestration-and-Directors (roster aggregation responsibility), and
Mudlet-Samples (roster panel + container-contents request recipes).
4e27db0
Fix mermaid: remove semicolons from sequence-message labels
The actual breaker (per GitHub's parser error): mermaid treats ';' as a
statement separator, so a semicolon inside an unquoted sequence message ends
the message early and the trailing words parse as a bare actor (Expecting
arrow, got NEWLINE). Replaced ';' with ',' in the Accounts-and-Auth and
Content-Loading (still-broken) sequence diagrams. Verified no unquoted
semicolons remain in any diagram.
6840bcf
Fix Accounts auth mermaid: drop colon from participant alias
mermaid's sequenceDiagram parser treats ':' as the message delimiter, so
the ':8080'/':9100' ports in the telos-account participant label broke the
render (the real cause that survived the earlier <device_code> fix). Simplified
the diagram to mermaid-safe labels.
0b79549
Fix mermaid render errors: strip backticks + <tag> tokens from diagrams
GitHub's mermaid parser rejects backticks and angle-bracket <placeholder>
tokens (sanitized as HTML tags) inside diagram labels. Fixes the broken
Content-Loading-and-Hot-Reload sequence diagram and the same <device_code>
issue in Accounts-and-Auth-Internals.
69ae77f
Scaling docs: reflect shipped load-aware placement rebalancer
Track 6 drain/scale landed: occupancy-weighted rebalancing that executes
(director issues rebalance-drain directives with cooldown + locality colocation)
and director-owned, reservation-based drain-target selection. Updates the
now-stale 'advisory-only / naive drain-select' language on Running-at-Scale,
Distributed-Systems-Model, Cross-Shard-Handoff, and Orchestration-and-Directors.
bf33f6c
Pack Reference (demo) + Player Reference + Mudlet recipes
- Pack-Reference: catalog + why three systems + licensing overview
- Demo-Pack: real walkthrough of the midgaard/darkwood/crypt world + scripts
- Player-Reference: connecting, everyday commands, channels, rich clients
- Mudlet-Samples: HP-bar / automapper / GMCP tab-complete recipes
- SRD5/WoW/D6 placeholders: added exact source PDFs + license references
10e625c
Engine Dev: auth internals, Lua sandbox, architecture, landing
- Accounts-and-Auth-Internals: device bridge, signed assertions, tier authority,
single-session lock; passphrase/SSH/Google/Discord marked not-implemented
- Lua-Sandbox-Internals: per-zone VM, allowlisted stdlib, chokepoint budgets,
circuit breaker, self.state trust boundary, validated handles
- Architecture-Overview: service fleet, keystroke path, single-writer model,
engine-vs-content pillar, codebase layout
- Engine-Developer-Reference landing → Ready
Completes the Engine Developer Reference section (19 deep-dives + index).
ccad180
Engine Dev: directors, scoped event bus, handoff, distsys model
- Orchestration-and-Directors: director-as-actor, per-scope leader election,
scope hierarchy, worked boss loop; unauthored-director-script flag
- Scoped-Event-Bus: two lanes, write-up/read-down, apply-once watermark,
the no-cross-scope-budget nuance
- Cross-Shard-Handoff: two-phase Prepare/Commit, signed snapshot + tier carry,
graceful drain, gate redirect/replay
- Distributed-Systems-Model: single-writer spine, leases, placement, the
one-zone-one-core ceiling + honest scaling gaps
409adfd
Engine Dev: abilities/effects, combat, loot/spawns/crafting
- Abilities-and-Effects: substrate, effect-op vocabulary, 10-step lifecycle,
the PvP gate + guardHarmful, tag-CC, affect runtime (stale-comment corrections)
- Combat-System: round loop, swing pipeline, death checkpoint, reactions;
honest gaps (lag logged-only, auto-swings ungated by prevents, dead formula seam)
- Loot-Spawns-and-Crafting: resolver, quality/affixes, scheduled spawns,
tracks/bundles/four modes, crafting + tier-bound salvage
6579ac0