# Migration rehearsal — reichelag sample (2026-08-13) | Field | Value | |-------|--------| | Workplan | CSOC-WP-0001-T04 | | Depends on | CSOC-WP-0006 PageOps landing pad | | Source (local only) | `~/.config/coulomb-social/auth/exports/corpus-202608131015057/trees/reichelag/` | | Destination | `CONTENT_ROOT/spaces/reichelag/` (local; not committed) | | Command | `manage.py import_content_tree` | **Do not commit** source trees or imported content — private business notes. ## Command ```bash export CONTENT_ROOT="$PWD/var/content-rehearsal" # or default var/content uv run python manage.py migrate # sign-in once or ensure a Member exists for --member-subject uv run python manage.py import_content_tree \ ~/.config/coulomb-social/auth/exports/corpus-202608131015057/trees/reichelag \ --tenant tenant:coulomb \ --member-subject \ --replace ``` Dry-run: ```bash uv run python manage.py import_content_tree PATH/TO/tree --dry-run ``` ## Result (this run) | Metric | Value | |--------|------:| | Pages copied | 30 (1 index + 29 articles) | | Assets copied | 29 (logo/visual images) | | Space row | Created `reichelag` title **ReichelAG** | | Render path | `load_space_page` → `source=content-plane` | | Index title | ReichelAG | | Sample page | frontmatter title + markdown body render OK | | Visual files | Present under `assets/` for pages that declare them | ## Lossiness and residuals | Gap | Severity | Note | |-----|----------|------| | Bubble `Slug` vs export slug | low | Bubble space slug was `new-space-36`; export/tree uses friendly `reichelag` | | Space display title | medium | Not first-class on `custom.space`; taken from index frontmatter / guess | | Membership list | medium | Only local owner from `--member-subject`; Bubble `members_list_user` not mapped to NetKingdom | | Parent/article graph | medium | Frontmatter `parent` kept as opaque bubble id; no outline/include graph yet | | Full corpus coverage | high | Only **one** dense sample tree; 70 other spaces not imported; many spaces have incomplete article dumps | | Chunk / Research UI | deferred | Bubble `pg_chunk` / Research surfaces not in tree | | Workflows / privacy flags | deferred | `isprivate_boolean` not enforced in rebuild authz beyond tenant membership | | Identity | blocked elsewhere | Member transfer assist / public registration (CSOC-IN-0001) | | Production path | deferred | Rehearsal is local `CONTENT_ROOT`; cluster import needs operator CONTENT_ROOT volume + tenant choice | ## What worked losslessly (for this tree) - Page **Title / Abstractor / Visual** frontmatter → PageOps + Space index fields - Markdown **body** → content-plane render (bleach markdown pipeline) - Relative **visual** assets under `assets/` - **Page list** via `list_pages` - Idempotent re-import with `--replace` ## Acceptance against CSOC-WP-0001 - [x] At least one migration rehearsal run - [x] Residual gaps listed (above) - [ ] Bulk multi-space import + NK membership map — residual - [ ] Apex cutover — still gated on product parity + self-registration ## Related - Export progress: `docs/migration/export-progress-2026-08-13.md` - Field map: `docs/migration/field-map-from-session-2026-08-13.md` - PageOps: `coulomb_social/apps/spaces/pageops.py`, `import_tree.py` - Stage-1 cut: `docs/decisions/2026-08-12-feature-cut-stage-1.md`