Compare commits
7 Commits
edge
...
132620e8b3
| Author | SHA1 | Date | |
|---|---|---|---|
| 132620e8b3 | |||
| 81b55ac29b | |||
| 2db5737f22 | |||
| eae8a6f93d | |||
|
|
537c79e5de | ||
| abfdcd4658 | |||
|
|
90f95520a3 |
@@ -79,6 +79,8 @@ android-app/
|
||||
│ │ │ │ │ │ └── PushTickle.kt
|
||||
│ │ │ │ │ ├── result/
|
||||
│ │ │ │ │ │ └── ApiResult.kt
|
||||
│ │ │ │ │ ├── time/
|
||||
│ │ │ │ │ │ └── Instants.kt
|
||||
│ │ │ │ │ ├── web/
|
||||
│ │ │ │ │ │ ├── WebHandoff.kt
|
||||
│ │ │ │ │ │ └── WebsiteUrls.kt
|
||||
@@ -90,6 +92,7 @@ android-app/
|
||||
│ │ │ │ │ │ │ ├── AdminDto.kt
|
||||
│ │ │ │ │ │ │ ├── AuthDto.kt
|
||||
│ │ │ │ │ │ │ ├── ContactDto.kt
|
||||
│ │ │ │ │ │ │ ├── EventsDto.kt
|
||||
│ │ │ │ │ │ │ ├── NotificationsDto.kt
|
||||
│ │ │ │ │ │ │ ├── PageDto.kt
|
||||
│ │ │ │ │ │ │ ├── PlayerShardDto.kt
|
||||
@@ -102,6 +105,7 @@ android-app/
|
||||
│ │ │ │ │ │ ├── AdminApi.kt
|
||||
│ │ │ │ │ │ ├── AuthApi.kt
|
||||
│ │ │ │ │ │ ├── AuthRefreshApi.kt
|
||||
│ │ │ │ │ │ ├── EventsApi.kt
|
||||
│ │ │ │ │ │ ├── MeApi.kt
|
||||
│ │ │ │ │ │ ├── NotificationsApi.kt
|
||||
│ │ │ │ │ │ ├── PlayerShardApi.kt
|
||||
@@ -117,11 +121,13 @@ android-app/
|
||||
│ │ │ │ │ ├── ConnectionRepository.kt
|
||||
│ │ │ │ │ ├── ContactRepository.kt
|
||||
│ │ │ │ │ ├── ContentRepository.kt
|
||||
│ │ │ │ │ ├── EventsRepository.kt
|
||||
│ │ │ │ │ ├── NotificationsRepository.kt
|
||||
│ │ │ │ │ ├── PlayerShardRepository.kt
|
||||
│ │ │ │ │ ├── SettingsRepository.kt
|
||||
│ │ │ │ │ ├── ShardFeaturesRepository.kt
|
||||
│ │ │ │ │ ├── ShardRepository.kt
|
||||
│ │ │ │ │ ├── SiteCapabilitiesRepository.kt
|
||||
│ │ │ │ │ └── WikiRepository.kt
|
||||
│ │ │ │ ├── di/
|
||||
│ │ │ │ │ ├── AppModule.kt
|
||||
@@ -157,6 +163,16 @@ android-app/
|
||||
│ │ │ │ │ ├── contact/
|
||||
│ │ │ │ │ │ ├── ContactScreen.kt
|
||||
│ │ │ │ │ │ └── ContactViewModel.kt
|
||||
│ │ │ │ │ ├── events/
|
||||
│ │ │ │ │ │ ├── EventScreen.kt
|
||||
│ │ │ │ │ │ ├── EventSeriesScreen.kt
|
||||
│ │ │ │ │ │ ├── EventSeriesViewModel.kt
|
||||
│ │ │ │ │ │ ├── EventsScreen.kt
|
||||
│ │ │ │ │ │ ├── EventsViewModel.kt
|
||||
│ │ │ │ │ │ ├── EventTimes.kt
|
||||
│ │ │ │ │ │ ├── EventViewModel.kt
|
||||
│ │ │ │ │ │ ├── MyEventsScreen.kt
|
||||
│ │ │ │ │ │ └── MyEventsViewModel.kt
|
||||
│ │ │ │ │ ├── home/
|
||||
│ │ │ │ │ │ ├── HomeScreen.kt
|
||||
│ │ │ │ │ │ └── HomeViewModel.kt
|
||||
@@ -335,6 +351,7 @@ android-app/
|
||||
│ │ │ │ │ └── WikiDtoTest.kt
|
||||
│ │ │ │ └── fake/
|
||||
│ │ │ │ ├── FakeAdminApi.kt
|
||||
│ │ │ │ ├── FakeEventsApi.kt
|
||||
│ │ │ │ ├── FakeNotificationsApi.kt
|
||||
│ │ │ │ ├── FakePlayerShardApi.kt
|
||||
│ │ │ │ ├── FakePublicApi.kt
|
||||
@@ -345,7 +362,8 @@ android-app/
|
||||
│ │ │ └── repository/
|
||||
│ │ │ ├── AccountTrustedDevicesTest.kt
|
||||
│ │ │ ├── ConnectionVersionGuardTest.kt
|
||||
│ │ │ └── ShardFeaturesRepositoryTest.kt
|
||||
│ │ │ ├── ShardFeaturesRepositoryTest.kt
|
||||
│ │ │ └── SiteCapabilitiesRepositoryTest.kt
|
||||
│ │ ├── ui/
|
||||
│ │ │ ├── admin/
|
||||
│ │ │ │ ├── AdminContentViewModelTest.kt
|
||||
@@ -356,8 +374,12 @@ android-app/
|
||||
│ │ │ │ └── BrandAssetsTest.kt
|
||||
│ │ │ ├── contact/
|
||||
│ │ │ │ └── ContactViewModelTest.kt
|
||||
│ │ │ ├── events/
|
||||
│ │ │ │ ├── EventsViewModelsTest.kt
|
||||
│ │ │ │ └── EventTimesTest.kt
|
||||
│ │ │ ├── navigation/
|
||||
│ │ │ │ ├── MenuAccessTest.kt
|
||||
│ │ │ │ ├── MenuCapabilityGatingTest.kt
|
||||
│ │ │ │ ├── MenuFeatureGatingTest.kt
|
||||
│ │ │ │ ├── NavOverridesTest.kt
|
||||
│ │ │ │ ├── NavPathsTest.kt
|
||||
|
||||
@@ -15,6 +15,14 @@ UO actions, the integrations, the authoring UI, the public surface — needed no
|
||||
Those fourteen phases reach the game only to *announce*, over verbs the write plane already carries; nothing in them creates or
|
||||
changes a thing in the world.
|
||||
|
||||
**COMPLETE as of 2026-09-10.** All seventeen phases are built and on `main` in every repository they
|
||||
touch. P16 ran as three legs — **16a** the acceptance walk from `edge`, **16b** the six-step cutover
|
||||
and the re-verify against released artefacts, **16c** `runicgateway.com` and `.profile` — and 16c
|
||||
opened by closing the seventh cutover step 16b had left standing (`docs#232`). The platform the
|
||||
workstream leaves behind is sidecar **v2.2.0**, overlay **v1.2.0**, bundle **2026.09.10** on
|
||||
**protocol 7**, `Module-uo` **v1.2.2**, and `MODULE_API_VERSION` **1.10.0**. Each phase's record is
|
||||
in its own section below; `edge` stays standing, unused, in every repository.
|
||||
|
||||
---
|
||||
|
||||
## Before anything: three facts about the ground
|
||||
@@ -2025,6 +2033,75 @@ core, docs, then the kit's re-pin and `runicgateway.com`.
|
||||
- **`.profile`** — the org landing page is updated when the *shape* of the project changes, which a new
|
||||
subsystem is.
|
||||
|
||||
> **16c BUILT (2026-09-09/10) — and it began by closing the cutover's missing seventh step.**
|
||||
> `runicgateway.com#30` and `.profile#6`, both onto `main`; the leg's first act was `docs#232`.
|
||||
>
|
||||
> #### The step 16b left on `edge`
|
||||
>
|
||||
> Six repositories were cut over and every one of them showed **0 commits on `edge` that are not on
|
||||
> `main`**. This one showed **46**. Step 6 (`#231`) landed the record *on* `edge` rather than cutting
|
||||
> `edge` over — an easy thing to miss, because the step's own PR merged green and closed. The
|
||||
> consequence was quiet and total: `docs` `main` opened `EVENTS.md` with *"revision 5. **No code
|
||||
> written.** Read against … `MODULE_API_VERSION` 1.9.0 · sidecar protocol 5"* while six repositories
|
||||
> shipped the engine on protocol 7, and `link/v6.md` and `v7.md` — the specs of record for two
|
||||
> protocol versions — existed on no default branch anywhere.
|
||||
>
|
||||
> **Nothing in this workstream could have caught it.** Every check that guards a contract lives in
|
||||
> the repository that *depends* on the contract, and a documentation repository has no dependants.
|
||||
> What found it was the one check that reads `docs` from outside: `runicgateway.com`'s
|
||||
> `checkReference.mjs` asserts every canonical document it names still exists on `main`, and adding
|
||||
> the current protocol spec failed with `✗ canonical doc link/v7.md`. **The site is the docs
|
||||
> repository's only dependant, and 16c is the only phase that would ever have run that check.**
|
||||
>
|
||||
> The merge was clean, and both `PROJECT_TREE.md` files stayed on `main`'s newer automated syncs —
|
||||
> `edge` never edited them, so git kept `main`'s side. `edge` stays standing, per 16b's decision,
|
||||
> now four generated commits behind.
|
||||
>
|
||||
> #### The site
|
||||
>
|
||||
> The checks were red before the phase started and named their own answers, which is the whole
|
||||
> bargain §12 of that repository's plan struck: nine `checkFacts` values (protocol 5 → **7** in all
|
||||
> three declaration sites, `moduleApi` → **1.10.0**, the bundle triple, `link` **v2.2.0**, `Module-uo`
|
||||
> **v1.2.2** — a third module release, one past the v1.2.1 the cutover cut), and **twenty-seven
|
||||
> `Bridge.cfg` keys** the site listed nowhere. Those became five groups rather than an appendix,
|
||||
> because `EventsEnabled` is a *second consent switch* and belongs beside the ceilings it governs
|
||||
> rather than filed under `AdminWriteEnabled`.
|
||||
>
|
||||
> Two pages, the treatment Teams has: **Scheduled events** under Administration and **Events
|
||||
> architecture**. Two capability entries, so the homepage, `/features/` and `/modules/` stop omitting
|
||||
> the subsystem — and the calendar one is deliberately **not** `needsModule`, because a bare core can
|
||||
> author and run an event and that marker means "present, correct and permanently empty".
|
||||
>
|
||||
> **`/privacy` owed a row and had none.** `event_run_participants` is personal data — scores and
|
||||
> ranks against a module-opaque member key, linked to an account where one is linked, feeding a
|
||||
> participant's own history. The new `deploy-events` row states the retention exactly, including the
|
||||
> asymmetry that matters: the diagnostic log is swept after 90 days **and only on terminal runs**,
|
||||
> while the run, its steps and its participants are never swept, because they are the record of what
|
||||
> was done to a shared world.
|
||||
>
|
||||
> **A naming collision worth fixing while it was cheap.** `reference/event-catalog` is about what a
|
||||
> shard *emits*; with a scheduled-event system shipped, two things in the documentation were called
|
||||
> an event catalog. Retitled **"Shard event catalog"**, with the route left alone so nothing outside
|
||||
> that repository breaks — and the page now opens by saying which of the two it is, since the kinds
|
||||
> it lists are exactly what a phase can wait for.
|
||||
>
|
||||
> **No screenshots**, and stated as a choice: capturing the events surfaces means standing the whole
|
||||
> rig back up for images no check requires, and the engagement workstream's site leg added none
|
||||
> either.
|
||||
>
|
||||
> #### `.profile`
|
||||
>
|
||||
> One bullet, and two stale numbers. The bullet says the posture rather than the feature list — off
|
||||
> by default, caps in the database, cleanup generated from a ledger, and *an event does not edit the
|
||||
> world, it holds a lease the game restores on its own deadline*. The numbers are protocol **5 → 7**
|
||||
> in the four values the installer prints (the block a reader copies into Admin → Shard, where a
|
||||
> wrong number is a pairing failure with no obvious cause) and **module-uo v1.1.0 → v1.2.2**.
|
||||
>
|
||||
> #### What 16c did not need
|
||||
>
|
||||
> No `EVENTS.md` change, no `MODULE_API_VERSION` change, no protocol change, no release. The phase
|
||||
> moves no contract — it makes the ones already moved legible from outside the organisation.
|
||||
|
||||
---
|
||||
|
||||
## What this plan does not do
|
||||
|
||||
@@ -169,6 +169,8 @@ website/
|
||||
│ │ ├── lib/
|
||||
│ │ │ ├── adminNav.js
|
||||
│ │ │ ├── engagementRules.js
|
||||
│ │ │ ├── eventAuthoring.js
|
||||
│ │ │ ├── eventCalendar.js
|
||||
│ │ │ ├── format.js
|
||||
│ │ │ ├── heroLayout.js
|
||||
│ │ │ ├── moduleAdmin.js
|
||||
@@ -216,6 +218,11 @@ website/
|
||||
│ │ │ │ │ ├── EngagementSuppressions.jsx
|
||||
│ │ │ │ │ ├── EngagementTemplates.jsx
|
||||
│ │ │ │ │ ├── EngagementTriggers.jsx
|
||||
│ │ │ │ │ ├── EventActions.jsx
|
||||
│ │ │ │ │ ├── EventEditor.jsx
|
||||
│ │ │ │ │ ├── EventRun.jsx
|
||||
│ │ │ │ │ ├── EventsAdmin.jsx
|
||||
│ │ │ │ │ ├── EventsCalendar.jsx
|
||||
│ │ │ │ │ ├── HeroEditor.jsx
|
||||
│ │ │ │ │ ├── InvitesAdmin.jsx
|
||||
│ │ │ │ │ ├── Moderation.jsx
|
||||
@@ -246,6 +253,7 @@ website/
|
||||
│ │ │ │ ├── ForgotPassword.jsx
|
||||
│ │ │ │ ├── PlayerAccount.jsx
|
||||
│ │ │ │ ├── PlayerAppeals.jsx
|
||||
│ │ │ │ ├── PlayerEvents.jsx
|
||||
│ │ │ │ ├── PlayerInbox.jsx
|
||||
│ │ │ │ ├── PlayerLogin.jsx
|
||||
│ │ │ │ ├── PlayerNotifications.jsx
|
||||
@@ -258,6 +266,9 @@ website/
|
||||
│ │ │ ├── public/
|
||||
│ │ │ │ ├── About.jsx
|
||||
│ │ │ │ ├── CmsPage.jsx
|
||||
│ │ │ │ ├── EventPage.jsx
|
||||
│ │ │ │ ├── Events.jsx
|
||||
│ │ │ │ ├── EventSeries.jsx
|
||||
│ │ │ │ ├── FiveOnFriday.jsx
|
||||
│ │ │ │ ├── Maintenance.jsx
|
||||
│ │ │ │ ├── News.jsx
|
||||
@@ -279,6 +290,8 @@ website/
|
||||
│ │ ├── apiClient.test.js
|
||||
│ │ ├── emailTemplates.test.js
|
||||
│ │ ├── engagementRules.test.js
|
||||
│ │ ├── eventAuthoring.test.js
|
||||
│ │ ├── eventCalendar.test.js
|
||||
│ │ ├── featureGate.test.js
|
||||
│ │ ├── format.test.js
|
||||
│ │ ├── heroLayout.test.js
|
||||
@@ -352,6 +365,7 @@ website/
|
||||
│ │ │ └── validateBlocks.js
|
||||
│ │ ├── config/
|
||||
│ │ │ ├── brand.js
|
||||
│ │ │ ├── coreEventActions.js
|
||||
│ │ │ ├── coreStreams.js
|
||||
│ │ │ ├── coreTriggers.js
|
||||
│ │ │ ├── csp.js
|
||||
@@ -393,6 +407,18 @@ website/
|
||||
│ │ │ ├── suppressions.js
|
||||
│ │ │ ├── templates.js
|
||||
│ │ │ └── templateSeeds.js
|
||||
│ │ ├── events/
|
||||
│ │ │ ├── announce.js
|
||||
│ │ │ ├── authorize.js
|
||||
│ │ │ ├── cleanup.js
|
||||
│ │ │ ├── dispatch.js
|
||||
│ │ │ ├── gates.js
|
||||
│ │ │ ├── ledger.js
|
||||
│ │ │ ├── participants.js
|
||||
│ │ │ ├── price.js
|
||||
│ │ │ ├── recurrence.js
|
||||
│ │ │ ├── spec.js
|
||||
│ │ │ └── verify.js
|
||||
│ │ ├── middleware/
|
||||
│ │ │ ├── botScore.js
|
||||
│ │ │ ├── loginProtection.js
|
||||
@@ -442,6 +468,25 @@ website/
|
||||
│ │ │ │ ├── engagementSuppressions.db.js
|
||||
│ │ │ │ ├── engagementTemplates.db.js
|
||||
│ │ │ │ └── engagementTemplates.model.js
|
||||
│ │ │ ├── events/
|
||||
│ │ │ │ ├── eventActionSettings.db.js
|
||||
│ │ │ │ ├── eventCalendar.model.js
|
||||
│ │ │ │ ├── eventDefinitions.db.js
|
||||
│ │ │ │ ├── eventDefinitions.model.js
|
||||
│ │ │ │ ├── eventJson.js
|
||||
│ │ │ │ ├── eventPhaseGates.db.js
|
||||
│ │ │ │ ├── eventPublic.model.js
|
||||
│ │ │ │ ├── eventRunBudget.db.js
|
||||
│ │ │ │ ├── eventRunControls.model.js
|
||||
│ │ │ │ ├── eventRunLog.db.js
|
||||
│ │ │ │ ├── eventRunParticipants.db.js
|
||||
│ │ │ │ ├── eventRunResources.db.js
|
||||
│ │ │ │ ├── eventRuns.db.js
|
||||
│ │ │ │ ├── eventRuns.model.js
|
||||
│ │ │ │ ├── eventRunSteps.db.js
|
||||
│ │ │ │ ├── eventSeries.db.js
|
||||
│ │ │ │ ├── eventSeries.model.js
|
||||
│ │ │ │ └── eventVersions.db.js
|
||||
│ │ │ ├── invites/
|
||||
│ │ │ │ ├── invites.db.js
|
||||
│ │ │ │ └── invites.model.js
|
||||
@@ -559,6 +604,8 @@ website/
|
||||
│ │ │ │ │ ├── emailConfig.controller.js
|
||||
│ │ │ │ │ ├── engagement.controller.js
|
||||
│ │ │ │ │ ├── engagement.router.js
|
||||
│ │ │ │ │ ├── events.controller.js
|
||||
│ │ │ │ │ ├── events.router.js
|
||||
│ │ │ │ │ ├── imageUpload.js
|
||||
│ │ │ │ │ ├── index.js
|
||||
│ │ │ │ │ ├── invites.controller.js
|
||||
@@ -607,6 +654,8 @@ website/
|
||||
│ │ │ │ ├── player/
|
||||
│ │ │ │ │ ├── appeals.controller.js
|
||||
│ │ │ │ │ ├── appeals.router.js
|
||||
│ │ │ │ │ ├── events.controller.js
|
||||
│ │ │ │ │ ├── events.router.js
|
||||
│ │ │ │ │ ├── index.js
|
||||
│ │ │ │ │ ├── teamForum.controller.js
|
||||
│ │ │ │ │ ├── teamForum.router.js
|
||||
@@ -615,6 +664,8 @@ website/
|
||||
│ │ │ │ ├── public/
|
||||
│ │ │ │ │ ├── engagement.controller.js
|
||||
│ │ │ │ │ ├── engagement.router.js
|
||||
│ │ │ │ │ ├── events.controller.js
|
||||
│ │ │ │ │ ├── events.router.js
|
||||
│ │ │ │ │ ├── index.js
|
||||
│ │ │ │ │ ├── modules.controller.js
|
||||
│ │ │ │ │ ├── modules.router.js
|
||||
@@ -646,6 +697,7 @@ website/
|
||||
│ │ │ ├── engagementEmit.js
|
||||
│ │ │ ├── engagementRetentionPrune.js
|
||||
│ │ │ ├── engagementWorker.js
|
||||
│ │ │ ├── eventRunner.js
|
||||
│ │ │ ├── forumHtml.js
|
||||
│ │ │ ├── htmlShell.js
|
||||
│ │ │ ├── logger.js
|
||||
@@ -718,6 +770,27 @@ website/
|
||||
│ │ ├── engagementRetentionSql.test.js
|
||||
│ │ ├── engagementTemplatesAdmin.test.js
|
||||
│ │ ├── engagementTriggers.test.js
|
||||
│ │ ├── eventActionRegistry.test.js
|
||||
│ │ ├── eventAnnounce.test.js
|
||||
│ │ ├── eventAuthorize.test.js
|
||||
│ │ ├── eventCleanup.test.js
|
||||
│ │ ├── eventGates.test.js
|
||||
│ │ ├── eventIntegrations.test.js
|
||||
│ │ ├── eventLedger.test.js
|
||||
│ │ ├── eventModuleContract.test.js
|
||||
│ │ ├── eventParticipants.test.js
|
||||
│ │ ├── eventPrice.test.js
|
||||
│ │ ├── eventPublic.test.js
|
||||
│ │ ├── eventRecurrence.test.js
|
||||
│ │ ├── eventRunControls.test.js
|
||||
│ │ ├── eventRunner.test.js
|
||||
│ │ ├── eventRunnerSql.test.js
|
||||
│ │ ├── eventsAdmin.test.js
|
||||
│ │ ├── eventSchedule.test.js
|
||||
│ │ ├── eventSeries.test.js
|
||||
│ │ ├── eventSpec.test.js
|
||||
│ │ ├── eventsRoles.test.js
|
||||
│ │ ├── eventVerify.test.js
|
||||
│ │ ├── honeypot.test.js
|
||||
│ │ ├── htmlShell.test.js
|
||||
│ │ ├── inviteController.test.js
|
||||
|
||||
Reference in New Issue
Block a user