Gera's onboarding notes, checked against #15705

Notes 1 and 2 (2026-10-03): what #15705 already fixes, and the one path it does not.

3 Oct 2026 · branch origin/feat/onboarding-module-frame-layout · captured against propflow-stage · at e0b99f2dbab+local

Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.

1 · Note 1: Fees & deposits → Hours & contact, right after the click (#15705)

The title, intro, flow and tabs stay on screen. Only the new tab's highlight and the section below change. A probe that tagged the frame's DOM nodes before the click found every one still mounted after it: the frame is not re-rendered.

Asserted in the captured DOM — How Clara handles your leads · What Clara does here. · Hours & contact

Note 1: Fees & deposits → Hours & contact, right after the click (#15705)
Sections 2–6 and notes

2 · Note 2: Leasing → Maintenance from the menu, right after the click (#15705)

Inside the module pages the title, the module tag, the tabs and the section labels paint at once. Only the questions are ghosts.

Asserted in the captured DOM — MAINTENANCE · Maintenance onboarding · Routing · Emergencies

Note 2: Leasing → Maintenance from the menu, right after the click (#15705)

3 · Note 2, NOT fixed: entering a module from the Overview (or any other settings page)

Crossing INTO the module pages, #15705's layout shows its gate fallback, which redacts every word. The title, the module tag, the tabs and the intro all become skeletons: the whole-body skeleton Gera described. The redaction was added in #15705's review ("no copy before the gate"). Frame note: this frame is from the first run of this same spec, on a cold server. On a warm dev server the skeleton lasts only as long as the server's member check, which ends inside the tool's 400 ms settle. In both runs the capture waited for, and found, skeletons inside the Leasing tab bar.

Asserted in the captured DOM — Overview

Note 2, NOT fixed: entering a module from the Overview (or any other settings page)

4 · Module tag: already above the title on main

On main today, the small "MAINTENANCE" tag already sits directly above "Maintenance onboarding".

Asserted in the captured DOM — MAINTENANCE · Maintenance onboarding

Module tag: already above the title on main
Provenance. Captured from commit 3eb35c71baf, read from the worktree the server was started from (/Users/miniclaw/code/PropFlow/wt-onbnotes-main) — the server could not report its own commit, so this is the weaker of the two sources. That commit is already merged into origin/main.

5 · Module tag: main, phone

Asserted in the captured DOM — MAINTENANCE · Maintenance onboarding

Module tag: main, phone
Provenance. Captured from commit 3eb35c71baf, read from the worktree the server was started from (/Users/miniclaw/code/PropFlow/wt-onbnotes-main) — the server could not report its own commit, so this is the weaker of the two sources. That commit is already merged into origin/main.

6 · Module tag: #15705, dark

Asserted in the captured DOM — MAINTENANCE · Maintenance onboarding

Module tag: #15705, dark

What is left

Two follow-ups wait on #15705 merging, because they live in its new files. (1) The layout's gate fallback should draw the real frame words, not skeletons. They are static product copy, and the Settings menu already shows these module names to the same viewer. (2) An optimistic highlight on the clicked tab, so the tab moves even when a click beats the prefetch.

Method and caveat

The "not re-rendered" claim comes from a Playwright probe. It held references to the title, tag, intro, tab bar and tabs, clicked, then checked isConnected. Section switch: all survived. Module switch: the title, tag and tab bar survived; the intro and tabs were replaced because their content changes. The dev server never prefetches. If a click beats the prefetch in production, the old tab stays lit until the page answers.

PropFlow Docs