From df1ad3f1256c81a01b538f7ac467c66b9081b1a8 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:19 -0800 Subject: [PATCH 01/16] ledger: track LIVE-BETA-LAUNCH-CAMPAIGN --- .../rows/LIVE-BETA-LAUNCH-CAMPAIGN.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/LIVE-BETA-LAUNCH-CAMPAIGN.json diff --git a/docs/ledger/rows/LIVE-BETA-LAUNCH-CAMPAIGN.json b/docs/ledger/rows/LIVE-BETA-LAUNCH-CAMPAIGN.json new file mode 100644 index 000000000..361ec367a --- /dev/null +++ b/docs/ledger/rows/LIVE-BETA-LAUNCH-CAMPAIGN.json @@ -0,0 +1,19 @@ +{ + "id": "LIVE-BETA-LAUNCH-CAMPAIGN", + "title": "Run the Founding Member beta campaign toward the January 1 launch", + "status": "open", + "lane": "live", + "priority": "P1", + "size": "L", + "source": { + "file": "lib/core/beta-notices.ts", + "ref": "Daniel November 4 audit and approved launch scope" + }, + "detail": "Daniel set the official launch for January 1, 2027, with beta participation through December 31, 2026. He approved Founding Member recognition for beta participants, preservation of existing paid commitments and retention of individual 72-hour paid offers. Implement one campaign contract covering dates, recognition and copy across source and published overrides. Use public member and host entry paths, existing-owner resume paths, meaningful activation measures, feedback and reviewed campaign drafts. Keep personal paid clocks distinct from beta enrollment. Do not use /offer as a neutral public entry. Coordinate protected launch, theme and marketing work with Claude. Activate delivery only after recipients, content and schedule are reviewed.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "41 existing focused offer and beta tests passed. Live /offer still mentions December 1 and a personal 72-hour offer. The inventory distinguishes paid annual Founder recognition, early-join copy and the activity achievement. Acceptance requires an authorized audience, accurate checkout and badge qualification, signup and resume checks at desktop/mobile sizes, accessibility, a READY deployment and delivery evidence." + }, + "wave": "W7" +} From 1cb662be01b47b102d9085666fd0d266d4db6245 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:20 -0800 Subject: [PATCH 02/16] ledger: track LIVE-CUSTOM-DOMAIN-ALIAS --- .../ledger/rows/LIVE-CUSTOM-DOMAIN-ALIAS.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/LIVE-CUSTOM-DOMAIN-ALIAS.json diff --git a/docs/ledger/rows/LIVE-CUSTOM-DOMAIN-ALIAS.json b/docs/ledger/rows/LIVE-CUSTOM-DOMAIN-ALIAS.json new file mode 100644 index 000000000..cc1aebce8 --- /dev/null +++ b/docs/ledger/rows/LIVE-CUSTOM-DOMAIN-ALIAS.json @@ -0,0 +1,19 @@ +{ + "id": "LIVE-CUSTOM-DOMAIN-ALIAS", + "title": "Provision the missing Wildheart free-domain alias and verify canonical redirects", + "status": "open", + "lane": "live", + "priority": "P1", + "size": "S", + "source": { + "file": "lib/sites/hosted.ts", + "ref": "Daniel November 4 audit and approved launch scope" + }, + "detail": "The audit found wildheart.frequencylocal.com points to Vercel but fails TLS, and its alias is absent from the verified project-domain list. Attach and verify only the intended free alias through the established provider workflow. Verify the certificate, root and nested-page permanent redirects, and canonical destination. Preserve the working custom site and the existing admin, API, booking-confirmation, Spotlight and chapter exceptions.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "86 read-only public checks covered six custom domains. Wildheart free-alias TLS failed on five attempts; its exact provider lookup returned 404 and the 32-domain inventory omitted it. No provider settings changed. Acceptance requires trusted TLS, matching-page redirects and an unchanged working custom site." + }, + "wave": "W7" +} From 65afec3bd684efcc108d5c94062f1bef2dfed27e Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:20 -0800 Subject: [PATCH 03/16] ledger: track LIVE-FEED-DAYTIME --- docs/ledger/rows/LIVE-FEED-DAYTIME.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/LIVE-FEED-DAYTIME.json diff --git a/docs/ledger/rows/LIVE-FEED-DAYTIME.json b/docs/ledger/rows/LIVE-FEED-DAYTIME.json new file mode 100644 index 000000000..195446aab --- /dev/null +++ b/docs/ledger/rows/LIVE-FEED-DAYTIME.json @@ -0,0 +1,19 @@ +{ + "id": "LIVE-FEED-DAYTIME", + "title": "Future daytime events are labelled by time of day rather than Tonight", + "status": "open", + "lane": "live", + "priority": "P2", + "size": "M", + "source": { + "file": "lib/feed/home-rank.ts", + "ref": "Daniel 2026-11-04 audit and approved improvement scope" + }, + "detail": "Current source puts all later same-day events into the Tonight slot, including future morning/noon events. Historical local candidate94135d44e exists; reconcile it with fresh main and current planner label before implementing anew. No current canonical row covers this daytime-label defect; old LIVE-079 concerns a different midnight-boundary issue.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "Source-confirmed home-rank.ts and planner label; earlier production audit observed9am/noon events under Tonight. Acceptance: future daytime/evening and midnight boundaries in Space/viewer time zones, preserved ranking, rendered labels and exact deployed behavior. Historical candidate focused tests are not current-head production proof." + }, + "wave": "W7" +} From f7339e8abf569036e04c93c67c148a5bea068406 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:20 -0800 Subject: [PATCH 04/16] ledger: track LIVE-NOTIFICATION-GRID --- docs/ledger/rows/LIVE-NOTIFICATION-GRID.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/LIVE-NOTIFICATION-GRID.json diff --git a/docs/ledger/rows/LIVE-NOTIFICATION-GRID.json b/docs/ledger/rows/LIVE-NOTIFICATION-GRID.json new file mode 100644 index 000000000..2e055ebf2 --- /dev/null +++ b/docs/ledger/rows/LIVE-NOTIFICATION-GRID.json @@ -0,0 +1,19 @@ +{ + "id": "LIVE-NOTIFICATION-GRID", + "title": "Notification setting controls align and expose their descriptions accessibly", + "status": "open", + "lane": "live", + "priority": "P2", + "size": "M", + "source": { + "file": "app/(main)/settings/notifications/form.tsx", + "ref": "Daniel 2026-11-04 audit and approved improvement scope" + }, + "detail": "Local source-only candidate75ec93a85 adds alignment and description association. Existing 11 tests and focused lint passed in prior candidate evidence. Reconcile current main before publication; no old branch overwrite.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "Local candidate and patch exist; no browser geometry, full CI, preview or production proof. Acceptance: desktop/mobile control alignment, accessible help associations, save/reload and unchanged notification choices." + }, + "wave": "W7" +} From 072fa055cd69901f3476d2e0310b6e2e03ccee58 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:21 -0800 Subject: [PATCH 05/16] ledger: track LIVE-SPACE-NAV --- docs/ledger/rows/LIVE-SPACE-NAV.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/LIVE-SPACE-NAV.json diff --git a/docs/ledger/rows/LIVE-SPACE-NAV.json b/docs/ledger/rows/LIVE-SPACE-NAV.json new file mode 100644 index 000000000..abf4752a5 --- /dev/null +++ b/docs/ledger/rows/LIVE-SPACE-NAV.json @@ -0,0 +1,19 @@ +{ + "id": "LIVE-SPACE-NAV", + "title": "Space navigation has four page destinations and clearly separated role-based management", + "status": "open", + "lane": "live", + "priority": "P1", + "size": "M", + "source": { + "file": "docs/MENU-CONTRACT.md", + "ref": "Daniel 2026-11-04 audit and approved improvement scope" + }, + "detail": "Daniel approved Home, Community, Calendar and Program as fixed Frequency Space navigation, all published Programs/Journeys/Practices under Program, custom pages remaining in website menus. Remove section-anchor items from Space primary navigation only; preserve accessibility skip links and old deep links. Every existing function needs a reachable contextual destination. Preserve independent website navigation and plan entitlements. Live metadata found stored custom page slugs program(1), calendar(1), circles(2); a new static Program route must not shadow or delete them. Preserve server role/function/visibility gates; do not grant access through display logic. Coordinate community and shared chrome with Claude.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "Signed-in production Daniel Tyack Space currently displays twelve public/menu links, including Offerings #offerings, Book #booking, FAQ #faq and Business #business, plus Manage. Source profile-nav.ts derives anchors and paid saved-menu links. Acceptance: keyboard/mobile and guest/member/editor/moderator/admin/owner/staff matrix; no primary fragment links; published-only learning hub; collision preservation; website custom-menu regression; exact READY deployment and live checks." + }, + "wave": "W7" +} From 0da2022b17755b08e1c7be9f5787a87434f2bc75 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:21 -0800 Subject: [PATCH 06/16] ledger: track LIVE-SUBDOMAIN-ATTRIBUTION --- .../rows/LIVE-SUBDOMAIN-ATTRIBUTION.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/LIVE-SUBDOMAIN-ATTRIBUTION.json diff --git a/docs/ledger/rows/LIVE-SUBDOMAIN-ATTRIBUTION.json b/docs/ledger/rows/LIVE-SUBDOMAIN-ATTRIBUTION.json new file mode 100644 index 000000000..f1fe62831 --- /dev/null +++ b/docs/ledger/rows/LIVE-SUBDOMAIN-ATTRIBUTION.json @@ -0,0 +1,19 @@ +{ + "id": "LIVE-SUBDOMAIN-ATTRIBUTION", + "title": "Custom-domain redirects retain supported campaign attribution and matching page paths", + "status": "open", + "lane": "live", + "priority": "P1", + "size": "M", + "source": { + "file": "lib/sites/hosted.ts", + "ref": "Daniel 2026-11-04 audit and approved improvement scope" + }, + "detail": "Current custom-domain subdomain308 redirects preserve paths but pass an empty query to subdomainSiteRedirect. Root and /book redirect verified live; ?utm_source is dropped. Prepare a tenant-bound, query-safe fix that preserves ISR/cache behavior, avoids uncached database work per request, does not leak credential/private query values, and does not alter unconfigured/unpublished/custom-domain eligibility. Coordinate with all custom-domain owners.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "Live HEAD checks on danieltyack.frequencylocal.com verified308 to danieltyack.com and /book to /book, with UTM loss. Acceptance: all configured host mappings, allowed query tags, rejected sensitive query values, same-page destination, no loops, no cross-tenant redirects, cache/latency and canonical/sitemap consistency. Prototype remains pending." + }, + "wave": "W7" +} From 58bb3e1620b472dc91159cbfe54cf144bfeb7e85 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:21 -0800 Subject: [PATCH 07/16] ledger: track SEC-CAMPAIGN-AUDIENCE --- docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json diff --git a/docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json b/docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json new file mode 100644 index 000000000..17932bf97 --- /dev/null +++ b/docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json @@ -0,0 +1,19 @@ +{ + "id": "SEC-CAMPAIGN-AUDIENCE", + "title": "Scope platform campaign recipients to Frequency and enforce consent by message purpose", + "status": "open", + "lane": "live", + "priority": "P1", + "size": "M", + "source": { + "file": "lib/studio/campaigns.ts", + "ref": "Daniel November 4 audit and approved launch scope" + }, + "detail": "Platform recipient resolution lacks consistent root-contact scoping; an unknown built-in selector falls through to a broad member audience. Send category currently depends on the audience key, so a promotional Founder invitation addressed through profile selectors becomes lifecycle. Restrict every platform selector to root or legacy-null contacts, reject unknown selectors and separate message purpose from recipient selection. Preserve legitimate per-Space campaign paths and existing consent. Recheck purpose-specific permission, verified identity and suppression at send time.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "Aggregate review found 37 verified identities with current platform marketing permission, a root contact and no suppression. Thirty-four contact mirrors are unknown, which is not revocation. The existing strict selector reaches three. Forty-two existing consent/send tests passed but do not prove the new boundaries. The isolated root-scoping candidate is under review; changes to protected test fixtures require specific approval. No actual cross-Space send was established, and no messages were sent." + }, + "wave": "W7" +} From 52137002c6e2ada09aa964b98fc58d08f5d5f884 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 08:20:21 -0800 Subject: [PATCH 08/16] ledger: track SEC-POSTGIS-PUBLIC --- docs/ledger/rows/SEC-POSTGIS-PUBLIC.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/ledger/rows/SEC-POSTGIS-PUBLIC.json diff --git a/docs/ledger/rows/SEC-POSTGIS-PUBLIC.json b/docs/ledger/rows/SEC-POSTGIS-PUBLIC.json new file mode 100644 index 000000000..0d0df30d2 --- /dev/null +++ b/docs/ledger/rows/SEC-POSTGIS-PUBLIC.json @@ -0,0 +1,19 @@ +{ + "id": "SEC-POSTGIS-PUBLIC", + "title": "Secure exposed PostGIS objects through a staged provider-compatible plan", + "status": "open", + "lane": "live", + "priority": "P1", + "size": "M", + "source": { + "file": "docs/RUNBOOKS.md", + "ref": "Daniel 2026-11-04 audit and approved improvement scope" + }, + "detail": "Read-only metadata identified public.spatial_ref_sys owned by supabase_admin, RLS disabled and broad browser-role privileges. Supabase November4 guidance treats exposed PostGIS objects as a real advisor issue; extension relocation/permission repair needs provider-compatible staging, impact inventory and rollback. This is separate from backup-table containment; do not change extension ownership or apply SQL speculatively.", + "verify": { + "kind": "manual", + "checked": "2026-11-04", + "evidence": "Metadata-only finding; no exploit, table-row read or mutation performed. Acceptance: exact current extension/object/role inventory; isolated provider/version staging and spatial/webhook/pool compatibility; reviewed committed SQL and Daniel-only execution if required; live effective-permission and application postconditions." + }, + "wave": "W7" +} From 753deeebb753d55462ff80f5f8b90b7139a1afb6 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 4 Nov 2026 17:56:34 +0000 Subject: [PATCH 09/16] Handoff to ChatGPT: open PRs, standing rules, live-check gaps and follow-up passes (2026-11-04) Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_012BMmZVEFG5U61eQEGoGBPJ --- docs/HANDOFF-2026-11-04.md | 67 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/HANDOFF-2026-11-04.md diff --git a/docs/HANDOFF-2026-11-04.md b/docs/HANDOFF-2026-11-04.md new file mode 100644 index 000000000..4e9a2e8fa --- /dev/null +++ b/docs/HANDOFF-2026-11-04.md @@ -0,0 +1,67 @@ +# Handoff to ChatGPT: the merge queue and what is left (2026-11-04) + +> Status of any row lives in [`docs/BUILD-BACKLOG.json`](BUILD-BACKLOG.json) (`pnpm backlog`, `pnpm packets`), never here. This file explains the state of the queue at 18:00Z on 2026-11-04 and the rules to follow. Daniel's instruction (17:55Z): ChatGPT takes over all remaining merges and follow-up tasks. Claude lanes stopped merging at that moment and left auto-merge armed where it was. + +Check in on [issue #4306](https://github.com/hellofrequencylab/frequency-web/issues/4306) first ([`AGENT-COORDINATION.md`](AGENT-COORDINATION.md)). Work on `codex/` branches. Merging to `main` deploys to production. + +## 1. Open PRs, in the order to land them + +State read from GitHub at about 18:00Z. Re-read before acting: CI was still moving. + +| PR | What it is | Head | State | What is pending | +|---|---|---|---|---| +| #4650 | Offer Use on CyberWitch and remember the last kit on every theme page | `408eea3` | Ready, auto-merge armed | `test` and `analyze` running after main was merged in. Daniel gave the phrase for its one test edit (the themes-page test: CyberWitch has a Use theme button and nine See the full kit links). It takes main's `lib/create-space/last-kit.test.ts`. | +| #4652 | Remember the kit in view on /themes (LIVE-2201) | `d017971` | Ready, auto-merge armed, `clean` | Was waiting on `test`. Same last-kit test resolution as #4650. | +| #4658 | LIVE-2230: reset the stale public header menu row (migration `20270346029900`) | `9c2174e` | Ready, **not armed** | Daniel already ran the SQL in Frequency Community, and the ledger row is recorded. `migration-readiness` and its runner go red by design on an already-applied migration. Merge with the admin bypass once lint, checks, test, analyze and db-tests are green. After the deploy is READY, the menu thread verifies the live header (see section 3, job 2). | +| #4655 | LIVE-2211: re-cut the New World Spotlight layouts and kit emails | `eb25e15` | **Draft** | Its thread marks it ready. Leave it until then. It changes the six Spotlight layouts and eleven kit emails (white labels on accent buttons per Daniel's rule). | +| #4657 | Security: contain November backup table grants | `efb4510` | Yours (ChatGPT) | No SQL runs from the PR. Keep SEC-023 open until the script executes once and live metadata verifies RLS and denial for browser roles. | + +Merge one at a time, with `expectedHeadSha`, squash, and never red. **After every merge, check every other open PR for conflicts against the new main and fix them before moving on** (new rule from today's miss). On a conflict in `lib/create-space/last-kit.test.ts`, take main's version. + +Merged today (all production builds READY unless noted): #4618, #4623, #4622, #4640, #4616, #4641, #4634, #4615, #4639, #4633 (its own build hit an out-of-memory error, the next build carried it), #4638, #4635, #4637, #4644, #4643, #4645, #4647, #4636, #4642, #4646, #4617, #4649, #4648, #4651, #4656, #4653. A failed production build, or two OOMs in a row, goes to Daniel. + +## 2. Standing rules (Daniel's, from project memory) + +- **Tests and probes.** No test or probe pin rewrite without Daniel's own phrase for that item, shown in the thread. A message he wrote and the coordinator cited counts. Run every probe and the full test set first so all phrases come in one ask. +- **Never reapply migration `20270346026000`** (the launch migration). +- **Migrations.** Apply with `execute_sql` and insert the ledger row at the file's version; never `apply_migration`. A migration PR's readiness check is red after the SQL runs; merge with the admin bypass. If a production write is refused, give Daniel the SQL as a code block. Newest production migration: `20270346029900` (once #4658 merges); production had 881 rows at `20270346029700` earlier today. +- **Theme fence.** A Space's website theme never styles a member, console or admin area. Site theme CSS is scoped to the stand-alone site render. Guard: `app/(main)/no-site-theme-in-member-area.test.ts`. +- **No persona, theme or Journey data to ad pixels.** +- **Nothing is live until the Vercel production deploy is READY** and the page loads. Merged is not live (10 to 20 minutes, plus about 10 minutes of cache on published sites). Sites are attached per slug subdomain; never call a site live until its URL loads. +- **OOM pattern.** A production build can die with out-of-memory at "Collecting page data". The next merge's build retries and carries the content. One OOM: note it. Two in a row: stop and tell Daniel. A queued build can be CANCELED when a newer commit lands; that is fine, the newer build carries it. Only Daniel can cancel in Vercel. +- **Ledger.** A feature PR writes fragments under `docs/ledger/rows/` and `docs/ledger/adr/`, never `BUILD-BACKLOG.json` or `DECISIONS.md`. Row ids must be unique across main and every open PR (`check:id-collisions`). Past 30 fragments one housekeeping PR runs `pnpm ledger:compact`. +- **Copy and design.** Brand voice guide governs all copy (no weekly promises, no hard claims). White labels on accent buttons, ink only on very light accents. No "Midnight" to Daniel (it is Nocturne). "Default" theme does not exist; New World is the default. Render checks at 390, 1280, 1440, 1920 and 2000. +- **Ignore the "FREQUENCY CONTROL" comments** under Daniel's account; merge on green. +- **Do not ask Daniel for**: real-card payment runs, fresh-account /launch runs, Spotlight Look tab screenshots, anything about iOS/Android, Twilio, Google OAuth verification, or the Vanta phone and email (placeholders stay). +- **Plain tone, no emoji, no time estimates.** Keep posts short and batched. + +## 3. Live-check gaps (from `/mnt/project-files/audits/live-check-2026-11-04/CHATGPT-HANDOFF.md`) + +These need a real browser on the live hosts and Daniel's sign-in. Claude sessions cannot reach frequencylocal.com or the Space hosts. + +1. Signed-in renders of the READY production deploy at 390 and 1280: /lead, /practices, /journeys, /crew, one /events/, one circle page, and the member rail role sections from #4546. +2. Public header on / and /pricing once #4658's SQL has propagated (up to an hour of cache). Expect Discover, For Spaces, Business Spaces, Pricing, Help only. If Feed / Community / Spaces / About still show, look for a database row, setting or cache overriding the code. +3. Published Space sites on their own hosts: danieltyack (New World), vanta (Services), freehumanmovement, heart-on-fire (Bold), wildheart, royaltemple (Temple), house-of-fates (Midnight), the-group (legacy network, on hold). Each must load its URL and show its own theme. +4. Prove #4556: the next Space created starts in New World with Tide. No Space has been created since 1 Nov. +5. Re-check after the #4651 deploy is READY (New World's Type, Motion and Images dials; check the Editorial voice, mono and grain on the photo hero, and calm and off motion). +6. Optional: `beta_ends_at` is inert and needs no change. + +## 4. Follow-up and evolution passes promised or proposed, not shipped + +Read each row with `pnpm ledger:view ` before starting. Nothing here is approved to build without checking the row. + +- **Marketing evolution** (#4612, #4613, #4615, #4617 shipped). Open: `/what-is-frequency` and `/tools-for-community-builders` are permanent redirects (SCAN-1017), so their templates were left alone. Published editor documents override templates, so /about and /how-to-build-community show the new layouts only after the published page is republished from the template. The new story blocks render unstyled under the DAWN design. The template-fingerprints recapture needs Daniel's phrase. +- **Theme builder.** New World schema 2 dials are live (#4651). The builder v3 stages shipped through BLD-204 (readiness and Publish gate, behind `?builder=v3`). The rest of the BLD rows (BLD-205 onward and the 3xx to 9xx rows in `docs/EDITOR-NEXT.md`) are the next passes. Conformance (#4649, LIVE-2205): one owner-rule row (white labels on accent buttons reach 2.83:1 against the handoff's 4.5:1), and four rules skipped until a rendered site exists (3 height, 10 repaint, 6 empty states, 8 reset). +- **New World.** #4655 (Spotlight and emails) is the next one. The older theme conversions (LIVE-2044 to LIVE-2051) wait on Daniel's updated style systems. CyberWitch is the eighth theme and now in every picker. Wildheart and Bold are live. +- **Services (Vanta).** #4653 matched the wordmark, header and hero to the design system. Vanta's block has no proof line or area list, so the stars row and ticker do not show; that is content, not theme. +- **Menu strategy.** #4546 shipped the five-item header and folded footer. Next in that thread: /for 13 to 9 and page folds. The header you see live today is stale until #4658's row reset takes effect. +- **Launch and kits.** #4642 carried the chosen kit into the 12-minute launch; #4650 and #4652 finish it. The Group to Network kit page-doc conversion stays on hold until the block editor lands. +- **Community wall.** Part 1 SQL `20270346029600` and approval of the LIVE-1620 and SCAN-901 probe rewrites sit with Daniel; part 2 SQL only after #4619 is live. +- **Env and probes batch for Daniel.** Append `create-space-draft-reminders` to the Vercel env `CRON_HEARTBEAT_SKIP`; the SCAN-502 probe phrase; possibly `roles.test` 10 to 11. Send these as one batched ask, not one by one. +- **Temple.** The gatherings online/in-person filter is waiting on "add the event field". Nocturne's four Spotlight layouts and three email pictures need Claude Design screens. +- **Vera assistants.** Vera is a coach, not a ghostwriter. Confirm before every write; changes stay draft and the owner publishes. +- **Audit follow-ups.** The chat audit and overnight theme gap list are in `/mnt/project-files/chat-audit-2026-11-03/` and `/mnt/project-files/themes-overnight-2026-11-04/`. + +## 5. Lanes closed + +Claude lanes finished and stopped: CyberWitch pickers (#4636), Services dials and picker (#4633, #4646, #4653), New World dials (#4651), marketing evolution lanes (#4612 to #4617), builder v3 up to BLD-204 (#4644, #4648, #4656), conformance (#4649), launch kit carry (#4642). Open lanes that still own a PR: #4655 (New World Spotlight and emails), #4658 (menu header reset). The merge driver thread stops at this handoff. From d2e10e5950dbdef2c3b3731ed4242f5f177913bd Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 4 Nov 2026 17:57:07 +0000 Subject: [PATCH 10/16] Handoff: #4652 merged Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_012BMmZVEFG5U61eQEGoGBPJ --- docs/HANDOFF-2026-11-04.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/HANDOFF-2026-11-04.md b/docs/HANDOFF-2026-11-04.md index 4e9a2e8fa..c7e571045 100644 --- a/docs/HANDOFF-2026-11-04.md +++ b/docs/HANDOFF-2026-11-04.md @@ -11,14 +11,14 @@ State read from GitHub at about 18:00Z. Re-read before acting: CI was still movi | PR | What it is | Head | State | What is pending | |---|---|---|---|---| | #4650 | Offer Use on CyberWitch and remember the last kit on every theme page | `408eea3` | Ready, auto-merge armed | `test` and `analyze` running after main was merged in. Daniel gave the phrase for its one test edit (the themes-page test: CyberWitch has a Use theme button and nine See the full kit links). It takes main's `lib/create-space/last-kit.test.ts`. | -| #4652 | Remember the kit in view on /themes (LIVE-2201) | `d017971` | Ready, auto-merge armed, `clean` | Was waiting on `test`. Same last-kit test resolution as #4650. | +| #4652 | Remember the kit in view on /themes (LIVE-2201) | `d017971` | **Merged as `279b267`** by auto-merge at about 17:56Z | Its production build was queued; confirm READY. | | #4658 | LIVE-2230: reset the stale public header menu row (migration `20270346029900`) | `9c2174e` | Ready, **not armed** | Daniel already ran the SQL in Frequency Community, and the ledger row is recorded. `migration-readiness` and its runner go red by design on an already-applied migration. Merge with the admin bypass once lint, checks, test, analyze and db-tests are green. After the deploy is READY, the menu thread verifies the live header (see section 3, job 2). | | #4655 | LIVE-2211: re-cut the New World Spotlight layouts and kit emails | `eb25e15` | **Draft** | Its thread marks it ready. Leave it until then. It changes the six Spotlight layouts and eleven kit emails (white labels on accent buttons per Daniel's rule). | | #4657 | Security: contain November backup table grants | `efb4510` | Yours (ChatGPT) | No SQL runs from the PR. Keep SEC-023 open until the script executes once and live metadata verifies RLS and denial for browser roles. | Merge one at a time, with `expectedHeadSha`, squash, and never red. **After every merge, check every other open PR for conflicts against the new main and fix them before moving on** (new rule from today's miss). On a conflict in `lib/create-space/last-kit.test.ts`, take main's version. -Merged today (all production builds READY unless noted): #4618, #4623, #4622, #4640, #4616, #4641, #4634, #4615, #4639, #4633 (its own build hit an out-of-memory error, the next build carried it), #4638, #4635, #4637, #4644, #4643, #4645, #4647, #4636, #4642, #4646, #4617, #4649, #4648, #4651, #4656, #4653. A failed production build, or two OOMs in a row, goes to Daniel. +Merged today (all production builds READY unless noted): #4618, #4623, #4622, #4640, #4616, #4641, #4634, #4615, #4639, #4633 (its own build hit an out-of-memory error, the next build carried it), #4638, #4635, #4637, #4644, #4643, #4645, #4647, #4636, #4642, #4646, #4617, #4649, #4648, #4651, #4656, #4653, #4652. A failed production build, or two OOMs in a row, goes to Daniel. ## 2. Standing rules (Daniel's, from project memory) From cb85832681308b5e450b6d5d1bb118184b9032b8 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 10:38:26 -0800 Subject: [PATCH 11/16] docs(security): close SEC-023 with production permission receipt --- docs/ledger/rows/SEC-023.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/ledger/rows/SEC-023.json b/docs/ledger/rows/SEC-023.json index 673000524..8e290f499 100644 --- a/docs/ledger/rows/SEC-023.json +++ b/docs/ledger/rows/SEC-023.json @@ -4,16 +4,17 @@ "lane": "live", "priority": "P0", "size": "S", - "status": "open", + "status": "done", "source": { "file": "scripts/ops/secure-frequency-nov03-backups.sql", "ref": "Read-only Frequency Community production catalog review, 2026-11-04" }, - "detail": "Four specific November 3 public backup tables were found with RLS disabled and effective anonymous and authenticated table or column privileges. Three contain a website_editor column and three contain a preferences column; no backup rows were read and API access was not tested. A permission-only operator transaction targets only these four, refuses unexpected preconditions, preserves postgres, service_role and operator effective table and individual column privileges, and verifies RLS and browser privilege removal. The committed script has not been applied; do not rerun earlier repairs. Default privileges can re-expose future backups, which requires separate compatibility-reviewed prevention.", + "detail": "Four specific November 3 public backup tables were found with RLS disabled and effective anonymous and authenticated table or column privileges. Three contain a website_editor column and three contain a preferences column; no backup rows were read and API access was not tested. A permission-only operator transaction targets only these four, refuses unexpected preconditions, preserves postgres, service_role and operator effective table and individual column privileges, and verifies RLS and browser privilege removal. CLOSED 2026-11-04: the exact committed operator transaction was applied once after #4657 merged at 2d5b5493a8d9fe0c3323aee5f8f75f78c6879d45 and production deployment dpl_FnT7McAUs2BjJefeCqgwX2BAfQgG was READY for frequencylocal.com. Postcondition metadata at 18:31:50 UTC verifies all four named backups have RLS enabled, no anon/authenticated table or column privileges, and preserved service/operator SELECT. The transaction compared effective postgres, service_role and operator table and individual-column privileges before and after and would roll back any change. Already applied once: never reapply this operator repair. This is permission metadata proof, not end-to-end private-flow verification. Default privileges can re-expose future backups, which requires separate compatibility-reviewed prevention.", "verify": { "kind": "manual", "checked": "2026-11-04", - "evidence": "OPEN: Production catalog metadata showed all four reviewed tables with RLS disabled and browser privileges present. After the exact operator file is on main and Daniel authorizes and executes it once in Frequency Community, verify all four named tables have RLS enabled, no anon/authenticated table or column privileges, preserved service/operator access and no unrelated data changes. Read metadata only, not backup rows. Keep open until actual postconditions are verified." + "evidence": "DONE: Frequency Community production permission receipt checked 2026-11-04 18:31:50 UTC after #4657 main SHA 2d5b5493a8d9fe0c3323aee5f8f75f78c6879d45; deployment dpl_FnT7McAUs2BjJefeCqgwX2BAfQgG READY on frequencylocal.com. Executed SQL SHA-256 40e0f3c79426cf67146a1c03efe0304380d23d3b22d38d49b8b4dcaa508abd92 matches the unchanged committed operator file. Targets zz_backup_danieltyack_newworld_20261103, zz_backup_danieltyack_nwblocks_20261103, zz_backup_free_human_heroes_20261103 and zz_backup_vanta_20261103 each report RLS=true; anon/authenticated table privileges=false and column privileges=false; service_select=true and operator_select=true. Transaction verified protected effective table and individual-column privileges unchanged. Metadata only; no backup rows read or changed, API/private-flow access not exercised. Repair executed once, never reapply." }, - "wave": "W7" + "wave": "W7", + "closed": "2026-11-04" } From d74a7c845f3caaac5f88e54ebf799abbeb94723d Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 10:39:09 -0800 Subject: [PATCH 12/16] docs: record verified Control takeover and production receipts --- docs/HANDOFF-2026-11-04.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/HANDOFF-2026-11-04.md b/docs/HANDOFF-2026-11-04.md index c7e571045..b89fea8e1 100644 --- a/docs/HANDOFF-2026-11-04.md +++ b/docs/HANDOFF-2026-11-04.md @@ -4,6 +4,17 @@ Check in on [issue #4306](https://github.com/hellofrequencylab/frequency-web/issues/4306) first ([`AGENT-COORDINATION.md`](AGENT-COORDINATION.md)). Work on `codex/` branches. Merging to `main` deploys to production. +## Control receipt — 2026-11-04 18:38Z + +The queue below is the original handoff snapshot, not a live task list. Read current PR heads and the merged ledger before acting. Daniel subsequently approved normal current-main updates to #4658, #4655, #4660 and #4659; no force pushes. + +- #4650 and #4652 are merged. #4655 is ready for review, not a draft; its current-main reconciliation is published at `e965e0bdc`. #4660 joins the queue, reconciled at `7b7dd335e`; independent content-preservation review is pending. Neither sentence certifies current checks. +- #4657 merged as `2d5b5493a8d9fe0c3323aee5f8f75f78c6879d45`; exact production deployment `dpl_FnT7McAUs2BjJefeCqgwX2BAfQgG` is READY. Its committed permission-only operator script was executed once in **Frequency Community** after fresh prerequisites. Independent metadata verifies all four targets have RLS enabled, no effective anon/authenticated table or column privileges, and preserved operator/service SELECT. The transaction also asserts unchanged protected table and individual-column privileges. Never rerun that script. Canonical SEC-023 closure is a separate ledger change. +- #4658 is reconciled at `efbfcdb191dde29160ef522783a41f744c714978`. Its trusted readiness log names current-main/production drift because SQL `20270346029900` is already recorded but its file is not yet on main. Never reapply the SQL or silently bypass another failing guard. +- The public header target is **Feed, Discover, For Spaces, Business Spaces, Pricing, Help**. An actual signed-in browser on `/pricing` now renders all six at 1280 without horizontal overflow; this does not claim #4658 is merged or signed-out/mobile acceptance. +- Actual 1280 browser renders confirm Vanta's wordmark/photo hero and the new About, community Playbook and pricing layouts. The earlier assumption below that published documents necessarily hide the new marketing templates is refuted for those inspected production pages; do not republish or overwrite them blindly. Practices, Journeys and Leadership also render signed in; `/crew` redirected to Feed in this session and needs investigation. Remaining widths, role combinations and hosts still need their own acceptance. +- Vera Admin Assistant is live for staff per the coordinator's addendum; no further admin action is queued without Daniel choosing it. Builder BLD-108 and BLD-301–304 remain next-build proposals, not silently included in this release. + ## 1. Open PRs, in the order to land them State read from GitHub at about 18:00Z. Re-read before acting: CI was still moving. @@ -40,7 +51,7 @@ Merged today (all production builds READY unless noted): #4618, #4623, #4622, #4 These need a real browser on the live hosts and Daniel's sign-in. Claude sessions cannot reach frequencylocal.com or the Space hosts. 1. Signed-in renders of the READY production deploy at 390 and 1280: /lead, /practices, /journeys, /crew, one /events/, one circle page, and the member rail role sections from #4546. -2. Public header on / and /pricing once #4658's SQL has propagated (up to an hour of cache). Expect Discover, For Spaces, Business Spaces, Pricing, Help only. If Feed / Community / Spaces / About still show, look for a database row, setting or cache overriding the code. +2. Public header on / and /pricing once #4658's SQL has propagated (up to an hour of cache). Expect Feed, Discover, For Spaces, Business Spaces, Pricing, Help. If the old Community / Spaces / About items still show, look for a database row, setting or cache overriding the code. 3. Published Space sites on their own hosts: danieltyack (New World), vanta (Services), freehumanmovement, heart-on-fire (Bold), wildheart, royaltemple (Temple), house-of-fates (Midnight), the-group (legacy network, on hold). Each must load its URL and show its own theme. 4. Prove #4556: the next Space created starts in New World with Tide. No Space has been created since 1 Nov. 5. Re-check after the #4651 deploy is READY (New World's Type, Motion and Images dials; check the Editorial voice, mono and grain on the photo hero, and calm and off motion). From 0875b33278874e0c80643a12496c38991943f85f Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 10:50:21 -0800 Subject: [PATCH 13/16] ledger: leave Space navigation row with its implementation PR --- docs/ledger/rows/LIVE-SPACE-NAV.json | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 docs/ledger/rows/LIVE-SPACE-NAV.json diff --git a/docs/ledger/rows/LIVE-SPACE-NAV.json b/docs/ledger/rows/LIVE-SPACE-NAV.json deleted file mode 100644 index abf4752a5..000000000 --- a/docs/ledger/rows/LIVE-SPACE-NAV.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": "LIVE-SPACE-NAV", - "title": "Space navigation has four page destinations and clearly separated role-based management", - "status": "open", - "lane": "live", - "priority": "P1", - "size": "M", - "source": { - "file": "docs/MENU-CONTRACT.md", - "ref": "Daniel 2026-11-04 audit and approved improvement scope" - }, - "detail": "Daniel approved Home, Community, Calendar and Program as fixed Frequency Space navigation, all published Programs/Journeys/Practices under Program, custom pages remaining in website menus. Remove section-anchor items from Space primary navigation only; preserve accessibility skip links and old deep links. Every existing function needs a reachable contextual destination. Preserve independent website navigation and plan entitlements. Live metadata found stored custom page slugs program(1), calendar(1), circles(2); a new static Program route must not shadow or delete them. Preserve server role/function/visibility gates; do not grant access through display logic. Coordinate community and shared chrome with Claude.", - "verify": { - "kind": "manual", - "checked": "2026-11-04", - "evidence": "Signed-in production Daniel Tyack Space currently displays twelve public/menu links, including Offerings #offerings, Book #booking, FAQ #faq and Business #business, plus Manage. Source profile-nav.ts derives anchors and paid saved-menu links. Acceptance: keyboard/mobile and guest/member/editor/moderator/admin/owner/staff matrix; no primary fragment links; published-only learning hub; collision preservation; website custom-menu regression; exact READY deployment and live checks." - }, - "wave": "W7" -} From 5894eb11d307743ec0f5c923af3ccdab6482f865 Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 11:12:05 -0800 Subject: [PATCH 14/16] docs: register the requested historical release handoff The handoff records release rationale and receipts while deferring work status to the canonical ledger. Register it as required by check-one-list; no guard or test assertion changes. --- scripts/planning-docs.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/planning-docs.txt b/scripts/planning-docs.txt index b14a4d1a3..42b7570a5 100644 --- a/scripts/planning-docs.txt +++ b/scripts/planning-docs.txt @@ -56,6 +56,7 @@ docs/FOUNDATION-HARDENING-PLAN.md docs/GAMIFICATION-AUDIT.md docs/GROWTH-OS-BUILD-PLAN.md docs/HANDOFF-2026-08-12.md +docs/HANDOFF-2026-11-04.md docs/LAUNCH-MARKETING-PLAN.md docs/LOOM-EVERYWHERE-PLAN.md docs/MARKETING-BUILD-PLAN.md From 97b3224ba630b8bbca34bae172e57261bf78d75a Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 11:34:11 -0800 Subject: [PATCH 15/16] ledger: transfer campaign audience row to its security repair --- docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json diff --git a/docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json b/docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json deleted file mode 100644 index 17932bf97..000000000 --- a/docs/ledger/rows/SEC-CAMPAIGN-AUDIENCE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": "SEC-CAMPAIGN-AUDIENCE", - "title": "Scope platform campaign recipients to Frequency and enforce consent by message purpose", - "status": "open", - "lane": "live", - "priority": "P1", - "size": "M", - "source": { - "file": "lib/studio/campaigns.ts", - "ref": "Daniel November 4 audit and approved launch scope" - }, - "detail": "Platform recipient resolution lacks consistent root-contact scoping; an unknown built-in selector falls through to a broad member audience. Send category currently depends on the audience key, so a promotional Founder invitation addressed through profile selectors becomes lifecycle. Restrict every platform selector to root or legacy-null contacts, reject unknown selectors and separate message purpose from recipient selection. Preserve legitimate per-Space campaign paths and existing consent. Recheck purpose-specific permission, verified identity and suppression at send time.", - "verify": { - "kind": "manual", - "checked": "2026-11-04", - "evidence": "Aggregate review found 37 verified identities with current platform marketing permission, a root contact and no suppression. Thirty-four contact mirrors are unknown, which is not revocation. The existing strict selector reaches three. Forty-two existing consent/send tests passed but do not prove the new boundaries. The isolated root-scoping candidate is under review; changes to protected test fixtures require specific approval. No actual cross-Space send was established, and no messages were sent." - }, - "wave": "W7" -} From 2fec6f788eec0fefc6c3b10eefef5b598888301a Mon Sep 17 00:00:00 2001 From: Daniel Tyack Date: Wed, 4 Nov 2026 13:19:35 -0800 Subject: [PATCH 16/16] docs: close verified website editor toast lifecycle repair --- docs/ledger/rows/LIVE-WEBSITE-EDITOR-TOAST-LIFECYCLE.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/ledger/rows/LIVE-WEBSITE-EDITOR-TOAST-LIFECYCLE.json b/docs/ledger/rows/LIVE-WEBSITE-EDITOR-TOAST-LIFECYCLE.json index 72bf3354a..a876c459c 100644 --- a/docs/ledger/rows/LIVE-WEBSITE-EDITOR-TOAST-LIFECYCLE.json +++ b/docs/ledger/rows/LIVE-WEBSITE-EDITOR-TOAST-LIFECYCLE.json @@ -4,16 +4,16 @@ "lane": "live", "priority": "P2", "size": "XS", - "status": "open", + "status": "done", "source": { "file": "components/sites/editor/shell.tsx", "ref": "CI run 41907827177, test job 126847922617, docs PR #4666 head 059aeba8e6531bb457350d2552018770e52c731d: 2,485 files and 27,944 tests passed, but an unhandled ReferenceError from the toast callback after shell.frequency.test.tsx teardown failed the job. Source review on main a6ad4cd1369d53d83c12368f2becdbe72af4ea01 confirms the timer has no unmount cleanup." }, - "detail": "Give the existing toast timer the website editor shell's lifecycle: reset the mounted marker on effect setup, cancel and clear the timer handle on cleanup, and ignore toast-only work after the shell unmounts. This also prevents a late clipboard, publish or Vera completion from scheduling a new toast after cleanup. Keep the 2,600 ms duration, replacement timing, visible messages and save/publish/Vera request semantics unchanged. Do not mask window errors or change test environments, timeouts, probes, pins or thresholds. Source and local consequence checks do not close this row; exact CI, READY preview and appropriate production verification remain required.", + "detail": "Give the existing toast timer the website editor shell's lifecycle: reset the mounted marker on effect setup, cancel and clear the timer handle on cleanup, and ignore toast-only work after the shell unmounts. This also prevents a late clipboard, publish or Vera completion from scheduling a new toast after cleanup. Keep the 2,600 ms duration, replacement timing, visible messages and save/publish/Vera request semantics unchanged. Do not mask window errors or change test environments, timeouts, probes, pins or thresholds. Source and local consequence checks do not close this row; exact CI, READY preview and appropriate production verification remain required. CLOSED 2026-11-04: #4670 merged769f685681fd6100a45a5affc2692a1b31166062 after exact required checks/full tests/CodeQL and READY preview. Exact production dpl_ETz4R4hSb5PzQSvpAHaGpfmQFoLw READY; owner editor view-only Preview/toast expiry/Escape return verified at1280, Draft saved and13layers/Undo-disabled preserved. No authored content/save/publish or live failure was induced.", "verify": { "kind": "manual", "checked": "2026-11-04", - "evidence": "35 unchanged existing editor tests pass before and after the local fix. Five disposable tests exercise the actual shell with mocked IO: pending-toast unmount cleanup, the unchanged 2,600 ms lifetime, replacement timing, deferred clipboard completion after unmount, and StrictMode setup/cleanup/replay. All five pass on the candidate; pristine source fails the three teardown/late-completion cases while the two duration/replacement controls pass. Tests remain outside the repository. No full-CI, READY-preview or production fix is claimed yet." + "evidence": "35 unchanged existing editor tests pass before and after the local fix. Five disposable tests exercise the actual shell with mocked IO: pending-toast unmount cleanup, the unchanged 2,600 ms lifetime, replacement timing, deferred clipboard completion after unmount, and StrictMode setup/cleanup/replay. All five pass on the candidate; pristine source fails the three teardown/late-completion cases while the two duration/replacement controls pass. Tests remain outside the repository. No full-CI, READY-preview or production fix is claimed yet. Production acceptance: exact READY deployment dpl_ETz4R4hSb5PzQSvpAHaGpfmQFoLw at769f6856, with frequencylocal.com alias exact. Existing signed-in ROOT IAB owner editor danieltyack.com/admin/editor shows Preview toast, expiry and Escape Back to editing; Draft saved, Undo disabled,13layers and no horizontal page overflow1280. Source fault proof remains the five disposable actual-shell lifecycle cases plus pristine three targeted failures/two timing controls; no forced production teardown fault or exact live millisecond timing claimed. Native Mac locked did not prevent the existing root IAB; no unlock, auth bypass or session export. Receipts: outputs/Frequency-4670-Toast-Release-Staging-2026-11-04.json and Editor-Toast-Production-769f68-{Preview,Restored}-2026-11-04.json in the Control workspace; #4306 comment6642365573." }, "wave": "W7" }