Onboarding hub: an answer from the earlier setup counts as answered

Before and after on stage. A synthetic company holds three older knowledge sections (pets, move-in day, tours) under their pre-hub ids, the way the questionnaire answers were loaded on 2026-09-15.

5 Oct 2026 · branch feat/hub-legacy-answer-fallback · captured against propflow-stage · at 39eac3c253d+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 · Before (main): Policies, the pet question reads as open

The company already has a pets section, and Clara reads it. The hub only looks at its own onboarding-policy-pets slot, so the pet question shows Not answered yet with a red dot. It also counts toward the open questions.

Asserted in the captured DOM — What are your pet rules? · Not answered yet.

Before (main): Policies, the pet question reads as open
Provenance. Captured from commit e7f9a63a8ca, read from the worktree the server was started from (/Users/miniclaw/code/PropFlow/wt-hub-legacy-before) — 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.
Sections 2–4 and notes

2 · After (this PR): Policies, the pet question shows the earlier answer

Same data, this branch. The field is filled with the older section's text, a small grey note says From your earlier setup, and the red dot is gone. Save stays off until the customer changes the text. Saving then writes the hub's own slot, as it always has, and from then on that slot wins. Nothing was written to make this happen: the page reads the older row through the same rule the backfill script uses.

Asserted in the captured DOM — What are your pet rules? · From your earlier setup. The note is asserted in the DOM; the earlier answer sits in the text field, where a text check cannot read it, so the picture carries it.

After (this PR): Policies, the pet question shows the earlier answer

3 · Before (main): Tours & move-in

The company has tours and move-in-day sections. On main, both questions read as open.

Asserted in the captured DOM — Who shows the home? · How do new residents get their keys? · Not answered yet.

Before (main): Tours & move-in
Provenance. Captured from commit e7f9a63a8ca, read from the worktree the server was started from (/Users/miniclaw/code/PropFlow/wt-hub-legacy-before) — 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.

4 · After (this PR): Tours & move-in

Both questions show their earlier answers with the note, and their dots are gone. After approval has no older section here, so it still reads as open with its dot. The fallback only fills a question that really was answered before. The progress line at the top right counts the two filled questions here plus the pet question on Policies.

Asserted in the captured DOM — Who shows the home? · How do new residents get their keys? · From your earlier setup · Not answered yet.. Both earlier answers are in their text fields (visible in the picture). 'Not answered yet.' is the after-approval question, which has no older section.

After (this PR): Tours & move-in

What did not change

No data was written, migrated or renamed by this PR. Clara reads exactly what she read before. Building exceptions still match by title. The topic table moved out of the backfill script into one shared module, and the script's skip-legacy-answered now calls the same function the hub uses, so the two cannot drift. The three stage rows were seeded on a synthetic company for this capture and removed afterwards.

PropFlow Docs