22 "decision": "Create with { memberAbout: { memberId, content: { nodes: [...] } } }; content is a Ricos RichContent node tree. One About per member (unique constraint on memberId), so the import path is upsert: query by memberId, PATCH the existing About with its revision, otherwise create."
23 },
24 "reliability": {
25 "status": "reliable",
26 "flags": []
27 },
28 "pitfalls": [
29 {
30 "code": "rich-content-wrapping",
31 "severity": "warning",
32 "summary": "content is Ricos RichContent (node tree), not plain text; a WordPress user description must be wrapped as paragraph nodes. Malformed node trees fail the write. Verified-live minimal shape: { nodes: [ { type: 'PARAGRAPH', id: 'p1', paragraphData: {}, nodes: [ { type: 'TEXT', id: '', nodes: [], textData: { text, decorations: [] } } ] } ] }."
33 },
34 {
35 "code": "member-must-exist",
36 "severity": "blocker",
37 "summary": "Keyed by memberId — the member import must complete and the crosswalk resolve before abouts are written."
38 },
39 {
40 "code": "one-about-per-member",
41 "severity": "warning",
42 "summary": "VERIFIED LIVE 2026-08-16: a second create for the same memberId returns 409 ALREADY_EXISTS (uniqueConstraintViolation on memberId). A resumed/retried import must upsert — POST /members/v2/abouts/query { query: { filter: { memberId } } }, then PATCH /members/v2/abouts/{id} with { memberAbout: { id, revision, memberId, content } } (revision required; returns revision+1)."
43 },
44 {
45 "code": "about-outlives-member",
46 "severity": "warning",
47 "summary": "VERIFIED LIVE 2026-08-16: DELETE /members/v1/members/{id} does NOT delete that member's About — the record is still returned by the abouts query afterwards. Probe/rollback cleanup must delete the About explicitly (DELETE /members/v2/abouts/{id}), and a re-import onto a cleaned site can collide with an orphan About."
48 }
49 ],
50 "mappingGuidance": [
51 "Import after members/member: resolve memberId from the crosswalk, wrap the source bio (WP user description) in a minimal RichContent paragraph tree.",
52 "Skip empty bios rather than writing empty abouts.",
53 "Use upsert semantics (query by memberId → PATCH with revision, else POST) so re-runs don't 409."
70 "path": "migrations/probe-run-20260812/config/wix.env (target site 00000000-0000-0000-0000-000000000000)",
71 "note": "KB verification probe 2026-08-16, safe mode on / site muted: create → 200 (about aedb21d9…, revision 1) on a probe member; GET by id and query-by-memberId both read the content back; PATCH with revision → 200 revision 2; duplicate create → 409 ALREADY_EXISTS; probe member + orphan About deleted"
72 }
73 ],
74 "notes": "Authored 2026-08-11 from the docs-survey gap (Members About V2). WordPress core user description maps here; not covered by the members/member basic-profile import. Promoted to verified-live 2026-08-16 by a create/read/update/delete probe on the probe site — one-About-per-member and About-outlives-member were discovered by that probe."