Approved scope: the October 22, 2026 owner-profile/onboarding/quiz prompt and supplied Find someone reference. This is the implementation and preservation record for the active follow-on scope.
| Existing data/action | Preserved destination / integration |
|---|---|
| Invited password sign-in, verified Auth identity, active beta membership | Existing authentication retained. New provisioned accounts complete profile setup on their first approved sign-in; public registration remains disabled. Existing accounts receive a nonblocking invitation. |
| Header email and Sign out | Far-right account/avatar menu; My profile, Account settings and the existing Sign out action. |
| Global appearance/automation/cost preferences | Existing Settings store and routes; Account settings opens it. |
| Saved contacts, names/aliases, photos, methods, About, locations and optional identity | Existing Contacts folder browser, editors and expanded profiles. Owner profile is a separate account-bound record, never a contact or duplicate candidate. |
| Current/former/unknown affiliations, partial dates, archived entries and history | Existing contact sections remain; owner profile reuses their validated entry and edit patterns with its own private storage/history. |
| Appearance, manual voice, exact height/ranges, pending/rejected photo suggestions | Existing records and review states retained. Quiz evidence uses allowed confirmed/manual facts only. Owner identity stays profile-only. |
| Original notes, source-linked Unreviewed summaries, encounters, groups, relationships, imports/custom/combined history | Existing contact/profile/review surfaces, including the compact recognition card; no migration into About or owner data. |
| Sentence search, scope, any/all groups, clue removal, candidate gallery, rejection/recovery | Retained around the new question panel. Versioned quiz history coordinates scope/query, answers and skips; Prev. replaces ambiguous independent undo counters. |
| Earlier appearance-weighted question selector and many small option buttons | Superseded by the approved common-first/balanced catalogue and two or three full-area blue buttons. Unknown/uncertainty remain internal, not answer categories. |
lib/domain/owner-profile.ts, lib/server/owner-profile.ts, app/api/my-profile/*, components/my-profile.tsx: canonical private profile, shared validated section forms, history, authenticated sanitized photo upload/read, avatar/menu and saved setup. setup_basic commits name and progress atomically. Exact request receipts prevent duplicate history/affiliations; revisions reject stale writes. A conflict retains the open editor draft and refreshes the underlying profile so cancelling/reopening uses the current revision. Photo retries retain the same file/request/revision. History keeps original text, dated entries and previous photos accessible.supabase/migrations/202610220018_owner_profile.sql: separate owner/profile-history/receipt tables, RLS, auth-account creation trigger, private owner-photo bucket, section RPC and contact comparison metadata. Existing Auth accounts get blank setup_required=false profiles; new ones get resumable setup. No contact is converted, deleted or matched to the owner by name/email.202610220019_owner_profile_validation.sql: atomic basic setup and database-level validation for comparison metadata, including direct-table writes. Both migrations were applied locally without resetting existing data.components/profile-section-editor.tsx, contact-profile.tsx, lib/domain/profile.ts, comparison.ts, duplicates.ts, app/api/contacts/route.ts: shared editor/appearance validation; contact-only professional fields and explicit list completeness with history. Combining records unions supplied fields and conservatively intersects completeness flags; original records remain available for explicit undo.lib/domain/quiz-questions.ts: typed stable semantic IDs, predicates, actual choices, evidence policies, canonical anchors and deterministic scoring. lib/domain/quiz.ts: frozen evidence, current scope/query, replayable history, prior selections/modes, skip/equivalence suppression, event tokens, recovery. The former entropy/appearance-weighted selector now delegates to this catalogue for compatibility callers.components/find-someone.tsx, workspace.tsx, app/globals.css: approved teal bar, large whole-area native buttons, Prev./Skip, two/three choices, retained header/navigation/scope/gallery, compact recognition suggestion, account menu and responsive theme/compact styling. Existing Settings are reused, never copied into the quiz or profile.Each question records its field/operator/values, display text, immutable choices, source-evidence policy and any resolved owner anchor/revision. COMMON selects greatest known Yes count, then coverage, lower expected remaining, familiar owner wording and stable ID. BALANCED minimizes U + sum(ni²)/K, treats scores within 1e-9 as equal, then prefers fewer choices, coverage, familiar wording and stable ID. The named switch policy is 20% improvement after a substantive answer; skipping alone does not advance a stage. Once balanced, it stays balanced forward; Prev restores the historical mode.
Known incompatible answers leave the active branch, while unknowns stay neutral and eligible. Tolerant sentence scores are retained, without introducing a hard text cutoff. A deliberately broadened search includes incompatible records with an explicit label. Original contact facts are never changed by recognition answers.
Single-valued appearance requires one allowed confirmed/nonconflicting value. Voice descriptors can overlap and use binary inclusion only; absent tags remain unknown unless the list is explicitly complete. Organization comparisons retain kind and current/former status, multiple anchors and exact normalized/established-alias equality. Partial or unknown-time lists cannot prove nonmembership. Owner identity, About, prose, appearance and interests do not enter owner comparison facts. Existing contact identity-exclusion projections/source-review rules remain intact.
Categorical questions cover all reliable categories in the current pool and have two or three actual choices. Their meanings remain fixed in history; newly broadened records outside those historical categories remain unknown rather than being assigned a false answer. Inverse/equivalent partitions in the same field cannot evade Skip. Generic unstructured meeting/role prose remains available to sentence search and profiles; it is not treated as an exhaustive categorical fact.
Snapshots are account-bound in-memory search state. Opening tabs, profiles, Settings or the account menu preserves progress. Reloading begins a new search; owner edits and setup progress remain persistent in the database. A changed contact/group/owner revision shows an explicit updated-details restart. Query/scope changes replay the current answer prefix against the frozen evidence. Start over retains visible description/groups; Broaden search visibly relaxes groups/rejections/answer filtering and keeps history. Saved photo review and cue source links remain in existing recognition/profile views.
Use the existing local setup in README. For an existing database run npx supabase migration up --local; do not reset it. This task applied 018–019 locally. The current production preview runs with CONTACT_RECALL_DIST_DIR=.next-owner-quiz APP_ORIGIN=http://127.0.0.1:3002 npm run start -- --port 3002.
Executed results: 111 unit checks, 65 local backend checks and 31 Chromium browser checks passed, along with type checking, lint and the production build. The optional WebKit run could not start a page because of an installed-runtime protocol mismatch; Firefox and hosted deployment were not verified. Details and initial test failures are in BUILD_STATUS. All fixtures are disposable, synthetic, ownership-isolated and cleaned up. Browser screenshots cover the approved common/three-choice layouts, owner profile and narrow dark/compact rendering. Additional passing interaction runs exercised text and two blank areas of every answer rectangle, and the one-candidate recognition suggestion with Prev. recovery. No live paid calls or external synchronization were performed.
Invite provisioning remains operator-managed, with profile setup on first approved sign-in rather than public registration. Canonical owner profiles have no public route and no contact-export path. Account deletion/export infrastructure, OAuth, notifications, integrations, recording and social discovery remain outside scope. The 20% threshold is an initial deterministic heuristic, not proof of optimal identification. Existing conservative English-language identity filtering in unstructured contact prose is retained; this work adds no semantic classifier or broader language claims. Owner history is paged from the database but currently rendered on demand as a whole list; very large histories may warrant incremental UI pagination later.