docs(website): settle the three de-entanglement registries and what they cost
Phase 2 PR 4 of MODULE_SYSTEM.md §2.7. Records what §1.8's three entangled files and §1.9's extension slot actually became, and four decisions taken with them. MODULE_API.md §2.4: - registerNotificationStreams takes the catalog ALONE. `mapEvent` was a leftover from before §1.8's push inversion was settled — a module owns fromShardEvent and calls publish() with an id it resolved, so core never needs a second route to the same place. It follows that the public-safety filter is module-internal, which is the right home: the kinds, the streams and the filter become one file that moves together. - the entry shape is two booleans, not a single `scope` — that object is the body of GET /auth/me/notifications/streams and a shipped Android client reads both. - registerAnnounceLeg gains `label`, so a module's leg renders in the admin panel with no client change; and legs became `announce_job_legs` ROWS, because a module cannot ALTER a core table and a registered leg had nowhere to live. - every call STAGES; nothing commits until the module as a whole is known good. New §6.5 — the eight grandfathered names (seven stream ids, one leg id), allowed to `uo` alone by explicit allowlist, the same shape as the loader's legacy table prefixes. Grandfathering rather than dropping the rule is what keeps it real for every module written after this one. New §6.6 — an extension slot is invisible to static analysis, so core needs §6.1's fragment merge for its OWN slot fills, a phase earlier than the plan expected. Moving the six users-detail routes behind the slot deleted 407 lines from swagger-output.json while printing `Success`. Which slots and where each hangs are both derived — from the registry and from the live express stack — because a written-down copy drifts. MODULE_SYSTEM.md §1.8 / §1.9 record the outcome per file, and §2.7 the progress. BACKEND_DESIGN.md and website-README.md follow the moved files; the PUBLIC_KINDS reference at §"visibility" named the wrong file and is corrected to utils/shardBroadcast.js. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -482,7 +482,7 @@ Copy `.env.example` (Compose) or `server/.env.example` (local) and fill in. **`.
|
||||
| `CLIENT_ORIGIN` | `http://localhost:5173` | enables CORS in dev only |
|
||||
| `LOG_LEVEL` / `FILE_LOG_LEVEL` | `info` / `debug` | console / file verbosity |
|
||||
| `LOG_TO_FILE` / `LOG_DIR` / `LOG_FILE` | `true` / `<server>/logs` / `app.log` | log file (bind-mounted to `./logs` in Docker) |
|
||||
| `ANNOUNCE_POLL_MS` | `15000` | how often the news-announcement dispatcher sweeps `announce_jobs` for due/retry legs (town crier + Discord) |
|
||||
| `ANNOUNCE_POLL_MS` | `15000` | how often the news-announcement dispatcher sweeps `announce_job_legs` for due/retry legs (whichever are registered — Discord is core's, the town crier is module-uo's) |
|
||||
| `TOWNCRIER_DURATION_SEC` | `3600` | how long a news post's in-game town-crier message stays up (≤ `86400`) |
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user