Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a10e2d-a5ef-7e92-b03d-b1694e915680
6.4 KiB
Stage 1 cutover — productive transfer set
| Field | Value |
|---|---|
| Decision | ../decisions/2026-08-12-feature-cut-stage-1.md |
| Model | model-v0.yaml |
| Date | Decision: 2026-08-12; checkout status reviewed: 2026-10-06 |
| Stance | Partial rebuild is enough for transfer; extend with later use cases after Bubble is reference-only |
Goal of stage 1
Move members to app.coulomb.social as the productive home and retire
Bubble on apex as a productive system. After transfer:
- Bubble may remain online only as an implementation reference (read-only / archival / comparison), not as the place where new work happens.
- Additional capabilities (marketplace, social graph, monetization, …) ship later on the rebuild without blocking transfer.
Implementation statuses below describe this checkout, not fresh live acceptance. CSOC-IN-0004 still owns PageOps persistence/deployment smoke; WP-0008 owns transfer and recovery acceptance. Public registration has historical 2026-08-14 Case B evidence (CSOC-IN-0001 closed).
Must capabilities (stage 1)
1. User onboarding — cap.member-onboarding
Members can obtain and use an account on the rebuild without depending on Bubble for day-to-day login.
| Feature | Status | Notes |
|---|---|---|
| OIDC sign-in (existing LLDAP/KeyCape users) | shipped | Case A proven |
| JIT Member + user-engine link | shipped | |
| Session / account diagnostics | shipped | /account/session/ |
| Public Create account + verified mail | historically evidenced | CSOC-IN-0001 closed; NK owns mail/registration, recheck at transfer |
| Guided first landing on app home | shipped | post-login → Spaces |
| Bulk / assisted member transfer from Bubble | partial | Manifest maps existing tenant+issuer+subject members; actual cohort rehearsal pending |
Stage-1 acceptance: known operators and community members can sign in; new members can register once NK path is live or operator-provisioned LLDAP accounts cover the transfer cohort. No Bubble password import.
2. Spaces with markdown content — cap.space-content
Members work in spaces whose durable content is markdown (ADR-0002).
| Feature | Status | Notes |
|---|---|---|
| Space list (tenant-scoped) | shipped | |
| Space detail + render page from Forgejo | shipped | |
| Edit in Forgejo + refresh / webhook | shipped | git SoR |
| Space CRUD (create/read/update/delete or archive) | implemented | Member create/update/archive (WP-0006) |
| Title on space | implemented | Model and member forms |
| Abstract on space | implemented | description, product label Abstractor |
| Visual on space (cover/image) | metadata implemented | Relative path; upload/authenticated asset delivery not accepted |
| Page list within space | implemented | Local pages sidebar |
| Page CRUD (create/update/delete markdown pages) | implemented | In-app metadata/body forms; index deletion prohibited |
| Title on page | implemented | Frontmatter and form |
| Abstract on page | implemented | Frontmatter and form |
| Visual on page | metadata implemented | Relative Visual copied; broader asset pipeline incomplete |
| Fail-closed missing binding | shipped |
Stage-1 acceptance: members can create and maintain spaces and pages with Title, Abstract, Visual as first-class fields (not only raw git for metadata), content body in markdown, readable on app host. Exact UX (in-app editor vs structured form + Forgejo body) can vary; utility must not require Bubble.
3. Move page between spaces — cap.page-transfer
| Feature | Status | Notes |
|---|---|---|
| Transfer page to another space | implemented with limits | Markdown + Visual asset; arbitrary links/assets are not rewritten |
| Authz (source + destination membership) | implemented with limits | Tenant/membership visibility; viewer write roles still unenforced |
Stage-1 acceptance: a page can leave space A and appear in space B without Bubble, with clear ownership after the move.
4. Duplicate page — cap.page-copy
| Feature | Status | Notes |
|---|---|---|
| Generate copy of page (same or other space) | implemented | New slug/title; independent thereafter |
| Copy assets referenced by page | partial | Relative Visual copied; body-linked assets deferred |
Stage-1 acceptance: member can produce an independent copy without manual git surgery as the only path (operator git escape hatch may exist but is not the product path).
Explicitly later (not stage-1 blockers)
Examples — full list in model-v0.yaml:
- Favorites / social graph
- Marketplace (challenges, methods, solutions)
- Monetization / payments
- Full Bubble workflow automation parity
- Pixel-perfect Research chrome parity
- In-app collaborative real-time editing
Platform dependencies (not product features)
| Dependency | Stage-1 role |
|---|---|
| NetKingdom OIDC + (eventually) registration mail | Onboarding |
| apps-pg | Space/member metadata |
| CONTENT_ROOT + optional Forgejo | Local PageOps SoR; Forgejo fallback, no automatic local commit/push |
| Railiance deploy | Host app.coulomb.social |
Current acceptance backlog
WP-0006 implemented the member CRUD/metadata/copy/transfer path. WP-0007 added validated single/bulk import with explicit membership mapping. Remaining acceptance is tracked in WP-0008: persistence/live smoke, paired recovery, private cohort reconciliation, access roles/privacy, member portability and explicit founder cutover. Later authoring features remain in the machine model.
Resolved choices and remaining product questions
- Visual: path metadata and relative-file copying today; upload, serving and full body-linked asset fidelity require acceptance work.
- Abstract: UI uses Abstractor; persisted Space field remains
description. - Body: markdown form implemented; no real-time editor or conflict protocol.
- Delete: Space archive; page delete except index.
- Cohort: explicit existing NetKingdom identity mappings; no password import. Actual cohort and lossiness acceptance are still required.
- Content: ADR-0004 thin local directory, optional Forgejo fallback. Git automation, authoring projections, live includes and outline operations remain future work, not prerequisites silently added to the accepted cut.