Skip to content

History / Content Pack Operations

Revisions

  • Round 39 milestone: content-pipeline trust (#423/#424/#427/#366) - Content-Loading-and-Hot-Reload: the post-boot content refresh is now VALIDATED before it publishes (#423). Previously it published with nothing checking it while reload's identical publish was gated — so content an operator watched a reload REJECT went live at the next unrelated invalidation, and "nothing propagated" stopped meaning "nothing applied". Documents why the refresh gate is deliberately NARROWER than reload's (rejectable iff a finding makes the snapshot unsafe to BUILD A ZONE FROM), why it freezes the whole snapshot instead of dropping the offending pack (dropping removes populated zones with players in them), the rejected-version cooldown, the problem-set-keyed memo, and why boot reports but does not refuse (no fallback snapshot; the asymmetry is the alertable "fleet split by uptime" signal). Keeps the honest residual: validatePacks is a HEALTH gate, not a PROVENANCE one — the deploy log makes cross-pack deploys legible, and its fingerprint includes `instanceable`. - Content-Loading-and-Hot-Reload + Deployment: the content-bus pack filter now fails CLOSED (#424). An invalidation naming no pack was accepted by every shard, and since the re-read matches on (kind, ref, pack) an empty pack resolves nothing -> Found:false -> the DELETION path: a fleet-wide eviction primitive. Documents the three-part accepts predicate and states the scope honestly — blast-radius reduction, NOT authentication. The real remedy is deployment-side NATS subject permissions, now written up in Deployment. - Content-Pack-Operations + Builder-Commands: `pull <version> force` (#427). The guard still runs and still reports; admin-only on top of builder; a stale override downgrades. Leads with the corrected remedy — REDIRECT CHARACTERS FIRST, because the reboot IS the harm event (a peer cannot build a stripped zone, so the handover fails and players are reclaimed to their home room). - Content-Pack-Operations: the seed->pull ref collision (#366). Definition refs are GLOBAL, not per-pack, and telos-seed never registers — so seeded rows collide with the first pulled pack sharing a ref. Detected in-transaction after the prune; notes that PurgePack must share the LOCK, not just the tx, and that the old message asserted a registry fact it never checked (a dead-end remedy is worse than none).

    @yfronto yfronto committed Jul 20, 2026
  • Document instanced zones across all three audiences (#422) Round 36 shipped instanced zones (#72) and Round 37 changed four things about them; only the engine-developer page existed, and it predated the Round 37 work. Builder — new page, Building Instanced Zones: - the `instanceable: true` opt-in and why it is opt-in (a mint runs the zone's boot resets, so every copy is a generation faucet that also routes around every in-world gate: a private copy has no doorman) - the start_room requirement, enforced at mint, and both reasons for it - mud.send_to_instance is self-only, and what "the invoking actor" actually resolves to per attach point: a custom command or an ability acts as the PLAYER, but on("enter")/on("greet") act as the room/mob, so an entity trigger cannot send the entrant in. The dungeon-door idiom is a verb the player types - mud.zone() and why `ev.zone ~= "darkwood"` matches inside every copy - the exhaustive does-not-work list with the why for each: persistent resets (durable item dupe), timed repop (farmable), signal_region / signal_world (the envelope drops source), reserved director schedule events, nesting, the reload freeze - the engine-owned player-facing lines, and the caps to design around Sysadmin — a new section in Running at Scale plus the prune-guard remedy in Content Pack Operations: - the caps ARE PER PROCESS, so an account gets perAccount x shards; and they are not config knobs today (compile-time defaults + a Go option, no TELOS_INSTANCE_* env var wires them) - shard-local and unleased: not in the placement pool, never rebalanced, never a handoff destination, and they die with the shard - metrics label by template because an instance id is unbounded, player-driven cardinality; logs go the other way and keep the id. Adds the missing telos.zone.instances gauge to the metrics table - drain step 0 ejects occupants to their exit anchor - the reload freeze and the pinned-instance advisory - Round 37: a mint builds from the live content snapshot and refuses an incomplete build (#418); the TTL'd dir:tmplinuse claim, so a content pull can be REFUSED while parties are inside copies and clears ~45s after the last one (#416); the concurrent bounded reaper sweep (#419); and the up-to-3-minute rebalance deferral with its "rebalance deferred" log lines (#421) Mudlib — Instanced Zones: - the routing-vs-isolation rule spelled out (the room map is the isolation boundary; the zone-segment test is only a pre-filter), and what the build-failing lint actually covers - the "never mint on a zone goroutine" contract with the reason, the three-hop entry, why the request carries the origin zone POINTER, and why abandonInstance is a flag rather than a record deletion - minting from the live snapshot, and the incomplete-build refusal - the concurrent reaper: the detached per-teardown context, and why the bound is a smoothing bound rather than a correctness one - the dir:tmplinuse claim as the cheapest possible analogue of a lease, its own goroutine, and the mint kick - the anchor's invariant DECAYS, the pre-handoverZoneTo guard and why the placement of that guard is the load-bearing property, why the anchors are queried rather than maintained, and why it fails open

    @MrG0rd0x MrG0rd0x committed Jul 19, 2026
  • 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

    @yfronto yfronto committed Jul 11, 2026
  • Sysadmin Reference: deployment, OAuth, content ops, scale - Deployment: image/service model, port map + exposure posture, TLS, one-public-edge firewall, fail-closed gates; cross-links telosMUD-infra IaC - Sysadmin-OAuth-Setup: production GitHub OAuth + exact trust-secret env keys - Content-Pack-Operations: versioned store, telos-pull, registry, CI gate - Running-at-Scale: per-component scaling, drain/rolling-upgrade, OTel, logging (honest about advisory-only rebalancing, one-zone-one-core, obs gaps) - Sysadmin-Reference landing + production checklist Completes the Sysadmin Reference section (5 pages).

    @yfronto yfronto committed Jul 9, 2026
  • Scaffold wiki + author About and Getting Started - 48-page skeleton across all audiences (flat files + grouped _Sidebar) - Every page carries an Audience + Status banner (Ready/Draft/Placeholder) - About: Overview, History of MUDs (Ready) - Getting Started: Getting-Started, Running-Locally, First-Admin-Setup, Content-Packs-Intro (Ready) — dev bypass, local GitHub OAuth, bootstrap admin, promote/demote, content-pack model, all grounded in code - SRD5/WoW/D6 pack pages are honest placeholders (packs not yet built)

    @yfronto yfronto committed Jul 9, 2026