docs(engagement): Phase 12 as built — the 12a/12b split and three findings #198
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/engagement-phase-12"
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?
The design of record for Phase 12. Pairs with runicgateway.com#26 (12a, mergeable on
edgetoday) and runicgateway.com#27 (12b, a draft held deliberately red for the Phase 13 window).The split, and why building the phase sharpened its own timing note
§12 says the work is "written and reviewed before the cutover and merged inside the same window". Building it turned that into something more specific than a scheduling preference:
checkFacts.mjsfetches frommain, so the momentplatform.jsonsaysprotocol: 5the repo is red — and it stays red for the entireedgewindow, which is a long time to keep a public site's CI failing on purpose.bundle.tag/bundle.sidecar/bundle.overlayname an artefact that does not exist until Phase 13 has landedlink+servuo-pluginsonmainand CI has republished the bundle.So the org lead split it. Phase 13's order gains the fill-in step, written to be mechanical rather than remembered — the check names its own expected values, so it is run
checkFactsand copy the "says" column, plus the two pages that quote the bundle to re-read before merging.Two of the phase's own statements were already stale
Both because Phase 11 moved after §12 was written:
moduleApiis 1.9.0, not 1.7.0 — 1.8.0 for theadminceiling, 1.9.0 for the module seed API. Phase 13's step 3 is corrected to match.capabilities.mjs"Web" claim was already fixed in Phase 7's rg.com#24, and the Gmail sweep is already done:grep -ri gmail src/returns only Phase 1's migration note and one historical reference in Troubleshooting, which is exactly what the acceptance line asks for.Three findings, none of them in the phase's text
1.
/privacyhad been publishing a false sentence since Phase 8. Theapp-contentrow claimed "Nothing is cached for offline use and nothing is duplicated anywhere else", and Phase 8 shipped a DataStore snapshot of the inbox. That row is an input to the generated Play Data Safety answers, so it is a store-review matter rather than a doc nit — a form at Google cannot be corrected without a review round, which is the whole argument for generating it from the inventory in the first place.2. Nothing in the engagement schema has a retention sweep.
engagementCooldowns.db.prune()exists and has no caller; a finishedengagement_outboxrow is never deleted; the send log and the suppression list grow forever. The new privacy row says so plainly rather than implying an expiry nobody wrote. Recorded, not fixed — a sweep is awebsitechange and outside this phase's scope.3. The one page whose whole subject is the protocol number was the one page that hardcoded it.
platform.json's own header says no version number is ever hardcoded in prose;protocol-versions.mdxwrote4three times. It reads the JSON now. The trap for whoever does this again is recorded with it: MDX does not evaluate an expression inside backticks, so the interpolation has to sit outside the code span or the braces reach the published page.Files
website/ENGAGEMENT.md— Phase 12's As built section (the split, the page it owed, the three findings), Phase 13's runicgateway.com step rewritten as the two-merge order with the fill-in recipe, step 3'sMODULE_API_VERSIONcorrected to 1.9.0, and §6.0b's Phase 12 row naming both PRs.AI-assisted: written with Claude Code.
🤖 Generated with Claude Code