diff --git a/INTENT.md b/INTENT.md index 1477547..ee47835 100644 --- a/INTENT.md +++ b/INTENT.md @@ -80,6 +80,8 @@ The rebuild is deliberately **product-faithful first**: UI and content parity ma - `workplans/CSOC-WP-0001-bubble-io-exit-assessment.md` — Bubble inventory/migration **after** product foundation - `workplans/CSOC-WP-0005-resource-demand-and-cost-evidence.md` — **finished**: demand/SLO/labor evidence for resource-control - `docs/resource-evidence/` — workload demand forecasts, observations, labor +- `docs/capability/` — product capability/feature model; stage-1 cutover must set +- `docs/decisions/2026-08-12-feature-cut-stage-1.md` — partial rebuild for productive transfer - `the-custodian/docs/coulomb-social-rebuild-seed.md` — original workplan seed (CUST-WP-0058-T08) - `the-custodian/canon/standards/business-app-service-contract_v0.1.md` - NetKingdom: IAM Profile, user-engine boundary, KeyCape/Keycloak modes diff --git a/README.md b/README.md index 64f5252..fabbebc 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ exiting the stalled bubble.io product. apex [`coulomb.social`](https://coulomb.social) remains Bubble until cutover. **Current state:** identity + app shell + Forgejo-backed spaces on -`app.coulomb.social` (`CSOC-WP-0002`–`0004` finished). Operator runbook: -`docs/deploy.md`. Bulk Bubble migration deferred (`CSOC-WP-0001`); public -registration Case B waits on NetKingdom (`docs/intakes/csoc-residuals.md`). +`app.coulomb.social`. **Stage-1 cut** (productive transfer): onboarding + +spaces/pages with Title/Abstract/Visual + page copy/transfer — +`docs/capability/`. Operator runbook: `docs/deploy.md`. ## Quick start diff --git a/SCOPE.md b/SCOPE.md index 5ee0fdb..68cc6a9 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -73,7 +73,8 @@ coulomb.social connects people around shared projects and complementary capabili - Content ADR: `docs/adr/ADR-0002-space-content-forgejo-markdown.md` - Operator: `docs/deploy.md` runbook; residuals `docs/intakes/csoc-residuals.md` - Finished resource evidence: **`CSOC-WP-0005`** → `docs/resource-evidence/` -- Bubble exit: **`CSOC-WP-0001`** — surface inventory done; export/mapping needs Bubble editor; feature cut is human gate +- Bubble exit: **`CSOC-WP-0001`** — inventory done; stage-1 feature cut accepted (partial rebuild); export still needs Bubble editor +- Capability model: `docs/capability/` — stage 1 must = onboarding + spaces/pages (Title/Abstract/Visual) + page copy/transfer - Open residuals: public registration (`CSOC-IN-0001`/`0002`, NK-WP-0025) --- diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index 34a9a74..42d8aa7 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -13,9 +13,10 @@ | workplan | CSOC-WP-0003 | finished | — | workplans/CSOC-WP-0003-self-registration-and-assurance.md | | workplan | CSOC-WP-0004 | finished | — | workplans/CSOC-WP-0004-app-shell-and-space-content.md | | workplan | CSOC-WP-0005 | finished | — | workplans/CSOC-WP-0005-resource-demand-and-cost-evidence.md | +| workplan | CSOC-WP-0006 | ready | — | workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md | | task | CSOC-WP-0001-T01 | done | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | | task | CSOC-WP-0001-T02 | progress | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | -| task | CSOC-WP-0001-T03 | wait | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | +| task | CSOC-WP-0001-T03 | done | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | | task | CSOC-WP-0001-T04 | wait | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | | task | CSOC-WP-0002-T01 | done | — | workplans/CSOC-WP-0002-netkingdom-user-management-reestablish.md | | task | CSOC-WP-0002-T02 | done | — | workplans/CSOC-WP-0002-netkingdom-user-management-reestablish.md | @@ -39,5 +40,11 @@ | task | CSOC-WP-0005-T01 | done | — | workplans/CSOC-WP-0005-resource-demand-and-cost-evidence.md | | task | CSOC-WP-0005-T02 | done | — | workplans/CSOC-WP-0005-resource-demand-and-cost-evidence.md | | task | CSOC-WP-0005-T03 | done | — | workplans/CSOC-WP-0005-resource-demand-and-cost-evidence.md | +| task | CSOC-WP-0006-T01 | todo | — | workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md | +| task | CSOC-WP-0006-T02 | todo | — | workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md | +| task | CSOC-WP-0006-T03 | todo | — | workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md | +| task | CSOC-WP-0006-T04 | todo | — | workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md | +| task | CSOC-WP-0006-T05 | todo | — | workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md | +| task | CSOC-WP-0006-T06 | todo | — | workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md | | intake | CSOC-IN-0001 | open | blue | docs/intakes/csoc-residuals.md | | intake | CSOC-IN-0002 | open | green | docs/intakes/csoc-residuals.md | diff --git a/docs/bubble-inventory/2026-08-12-surface-inventory.md b/docs/bubble-inventory/2026-08-12-surface-inventory.md index e846bb0..69812fb 100644 --- a/docs/bubble-inventory/2026-08-12-surface-inventory.md +++ b/docs/bubble-inventory/2026-08-12-surface-inventory.md @@ -168,11 +168,14 @@ Public meta returned **no** `types`. Expected classes (to confirm on export): ## 10. Priority order for migration (recommended) -1. **Spaces + page bodies** → Forgejo markdown (ADR-0002) — highest product value -2. **Members** → already re-platformed via NetKingdom JIT (no Bubble password import) -3. **Memberships / favorites** → after schema exists -4. **Marketplace / monetization** → human feature cut (T03) -5. **Historical workflow automation** → rewrite in code only if still needed +Aligned with **stage-1 cut** (`docs/capability/stage-1-cutover.md`): + +1. **Members** → NetKingdom JIT / assisted transfer (no Bubble passwords) +2. **Spaces + pages** (Title, Abstract, Visual + markdown body) → app metadata + Forgejo +3. **Page copy / transfer** support data as needed +4. **Memberships** beyond tenant-wide defaults +5. **Favorites / marketplace / monetization** → later (not stage 1) +6. **Bubble workflows** → rewrite only if product need returns (`out` for parity) ## Related diff --git a/docs/capability/README.md b/docs/capability/README.md new file mode 100644 index 0000000..4b236c9 --- /dev/null +++ b/docs/capability/README.md @@ -0,0 +1,13 @@ +# Capability and feature model — coulomb-social + +Product utility and implementation hierarchy for the Bubble exit and rebuild. +**Local first**; extract durable patterns to HelixForge / reuse-surface later. + +| Doc | Role | +|-----|------| +| [`vocabulary.md`](vocabulary.md) | Capability vs feature vs toggle rules | +| [`model-v0.yaml`](model-v0.yaml) | Machine-readable capability map | +| [`stage-1-cutover.md`](stage-1-cutover.md) | First productive-transfer stage (must set) | +| [`../decisions/2026-08-12-feature-cut-stage-1.md`](../decisions/2026-08-12-feature-cut-stage-1.md) | Recorded cut decision | + +Related: Bubble inventory, ADR-0002, CSOC-WP-0001-T03. diff --git a/docs/capability/model-v0.yaml b/docs/capability/model-v0.yaml new file mode 100644 index 0000000..c559ecd --- /dev/null +++ b/docs/capability/model-v0.yaml @@ -0,0 +1,194 @@ +# coulomb-social product capability model v0 +# Vocabulary: docs/capability/vocabulary.md +# Stage-1 narrative: docs/capability/stage-1-cutover.md +schema_version: "0.1" +product: coulomb-social +resource_id: "resource:tenant:coulomb:coulomb-social" +updated: "2026-08-12" +stance: | + Partial rebuild is intentional. Stage 1 enables user transfer and retires + Bubble as productive system; Bubble may remain reference-only. Later stages + add use cases on the rebuild. + +stages: + stage_1: + id: stage_1_productive_transfer + title: "Productive transfer / Bubble reference-only" + goal: > + Members use app.coulomb.social for onboarding and space/page work with + Title, Abstract, Visual; page copy and transfer. Apex productive use leaves Bubble. + decision_ref: docs/decisions/2026-08-12-feature-cut-stage-1.md + +capabilities: + - id: cap.member-onboarding + title: User onboarding + utility: > + A person becomes and remains a signed-in member of the rebuild without + Bubble for day-to-day authentication. + priority: must_stage_1 + depends_on_platform: + - netkingdom-oidc + - user-engine + features: + - id: feat.oidc-sign-in + title: OIDC sign-in (existing users) + status: shipped + - id: feat.jit-member + title: First-login JIT Member + user-engine link + status: shipped + - id: feat.session-diagnostics + title: Session / principal diagnostics + status: shipped + - id: feat.public-registration + title: Public Create account + verified mail + status: blocked + blocked_on: "NK-WP-0025 / CSOC-IN-0001" + toggle: NETKINGDOM_REGISTRATION_URL + - id: feat.post-login-app-home + title: Post-login app home (Spaces) + status: shipped + - id: feat.member-transfer-assist + title: Assisted transfer of Bubble members (no password import) + status: todo + + - id: cap.space-content + title: Spaces with markdown content + utility: > + Members organize work in spaces and maintain page content as markdown, + with first-class Title, Abstract, and Visual metadata and CRUD. + priority: must_stage_1 + depends_on_platform: + - forgejo + - apps-pg + related: + - docs/adr/ADR-0002-space-content-forgejo-markdown.md + features: + - id: feat.space-list + title: List spaces (tenant-scoped) + status: shipped + - id: feat.space-md-render + title: Render space page from Forgejo markdown + status: shipped + - id: feat.space-edit-forgejo + title: Edit body in Forgejo + refresh/webhook + status: shipped + - id: feat.space-crud + title: Space create / read / update / delete-or-archive (member UI) + status: partial + notes: "Model + admin/seed; member-facing CRUD todo" + - id: feat.space-title + title: Space Title field + status: partial + notes: "DB title exists; member edit UI todo" + - id: feat.space-abstract + title: Space Abstract field + status: partial + notes: "Maps to Space.description until product rename" + - id: feat.space-visual + title: Space Visual (cover/image) + status: todo + - id: feat.page-list + title: List pages in a space + status: partial + - id: feat.page-crud + title: Page create / update / delete (product path) + status: partial + notes: "Git/Forgejo only today; product path todo" + - id: feat.page-title + title: Page Title (structured) + status: partial + notes: "Inferred from H1/filename; frontmatter/UI todo" + - id: feat.page-abstract + title: Page Abstract + status: todo + - id: feat.page-visual + title: Page Visual + status: todo + - id: feat.content-fail-closed + title: Fail closed on missing binding/fetch + status: shipped + + - id: cap.page-transfer + title: Transfer page to another space + utility: > + A page (and agreed assets) can be moved from one space to another with + correct membership checks and stable identity after the move. + priority: must_stage_1 + features: + - id: feat.page-move + title: Move page between spaces + status: todo + - id: feat.page-move-authz + title: Authz for source and destination spaces + status: todo + + - id: cap.page-copy + title: Generate copy of page + utility: > + A member can create an independent copy of a page (optionally into + another space) without manual git-only workflow as the sole path. + priority: must_stage_1 + features: + - id: feat.page-duplicate + title: Duplicate page (new slug/title) + status: todo + - id: feat.page-duplicate-assets + title: Copy or re-link page assets + status: todo + + # --- later stage (not transfer blockers) --- + + - id: cap.social-engagement + title: Social engagement (favorites, follows) + utility: Members favorite and follow people or content. + priority: later + features: + - id: feat.favorites + title: Favorites + status: later + + - id: cap.marketplace + title: Marketplace matching + utility: Challenges, methods, and solutions discovery/matching. + priority: later + features: + - id: feat.challenges-methods-solutions + title: Challenge / method / solution surfaces + status: later + + - id: cap.monetization + title: Monetize curiosity / payments + utility: Paid offerings or monetization flows. + priority: later + features: + - id: feat.payments + title: Payments integration + status: later + + - id: cap.realtime-collab + title: Real-time collaborative editing + utility: Multiple members edit the same page concurrently in-app. + priority: later + features: + - id: feat.collab-editor + title: Collaborative in-app editor + status: later + + - id: cap.bubble-workflow-parity + title: Bubble workflow automation parity + utility: Like-for-like Bubble backend workflows. + priority: out + notes: > + Rebuild workflows in code only when product need returns; not a parity goal. + +platform_dependencies: + - id: netkingdom-oidc + title: NetKingdom OIDC (KeyCape / Authelia) + - id: user-engine + title: user-engine identity link + - id: forgejo + title: Forgejo git hosting for space content + - id: apps-pg + title: Shared application PostgreSQL + - id: railiance-runtime + title: Railiance deploy of coulomb-social diff --git a/docs/capability/stage-1-cutover.md b/docs/capability/stage-1-cutover.md new file mode 100644 index 0000000..016c0b6 --- /dev/null +++ b/docs/capability/stage-1-cutover.md @@ -0,0 +1,126 @@ +# Stage 1 cutover — productive transfer set + +| Field | Value | +|-------|--------| +| Decision | [`../decisions/2026-08-12-feature-cut-stage-1.md`](../decisions/2026-08-12-feature-cut-stage-1.md) | +| Model | [`model-v0.yaml`](model-v0.yaml) | +| Date | 2026-08-12 | +| 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. + +## 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 | partial / blocked | App entry ready; NK mailbox (`CSOC-IN-0001`) | +| Guided first landing on app home | shipped | post-login → Spaces | +| Bulk / assisted member transfer from Bubble | todo | Process + optional import; no password migration | + +**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) | partial | Admin/seed today; **member UI CRUD todo** | +| **Title** on space | partial | Model field exists; member edit UI todo | +| **Abstract** on space | partial | Use `description` as abstract until renamed | +| **Visual** on space (cover/image) | todo | Not in model yet | +| Page list within space | partial | path-based pages; richer list todo | +| **Page CRUD** (create/update/delete markdown pages) | partial | Via Forgejo only; in-app or first-class API todo | +| **Title** on page | partial | From H1 / filename; structured frontmatter todo | +| **Abstract** on page | todo | Frontmatter or metadata | +| **Visual** on page | todo | Frontmatter image / assets | +| 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 | todo | Move markdown (+ assets) + rewrite links; metadata follows | +| Authz (source + destination membership) | todo | | + +**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) | todo | New slug/title; independent thereafter | +| Copy assets referenced by page | todo | Or document “copy body only” if scoped | + +**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 | +| Forgejo | Markdown SoR | +| Railiance deploy | Host app.coulomb.social | + +## Implementation backlog (derived) + +Priority order suggested for build work after this decision: + +1. Space member CRUD + Title / Abstract edit +2. Visual field (space, then page) + asset storage convention +3. Page metadata (title/abstract/visual) + create/update/delete path +4. Page copy +5. Page transfer +6. Onboarding: transfer cohort process + unstick public registration residual + +Bubble export/mapping (CSOC-WP-0001-T02) feeds **content migration** into these +capabilities but does not redefine the must set. + +## Open product questions + +1. **Visual** — cover image only, or gallery? Max size? Forgejo `assets/` vs object store? +2. **Abstract** — rename `Space.description` → abstract in UI only, or schema rename? +3. **Page body editing** — stage 1 keeps edit-in-Forgejo for body, app forms for Title/Abstract/Visual only? Or in-app markdown editor? +4. **Delete** — hard delete vs archive (`is_active`)? +5. **Transfer cohort** — require public self-registration, or LLDAP bulk invite for stage 1? diff --git a/docs/capability/vocabulary.md b/docs/capability/vocabulary.md new file mode 100644 index 0000000..bec8cba --- /dev/null +++ b/docs/capability/vocabulary.md @@ -0,0 +1,73 @@ +# Capability / feature vocabulary (coulomb-social) + +Status: **adopted for product work** (2026-08-12) +Promote to fleet canon after one full cutover cycle. +Cites: orthogonal architecture Capability (C1–C3, `realizes`); reuse-surface +for *cross-product* reuse only — not product feature flags. + +## The coin + +| Side | Name | Question | +|------|------|----------| +| **Utility** | **Capability** | What can a person *do* or *get*? Stable job-to-be-done. | +| **Implementation** | **Feature** | Which concrete product slice delivers (part of) that utility? | + +Capabilities change slowly. Features appear, split, toggle, and retire under them. + +## Hierarchy (depth capped) + +```text +Capability + └── Feature+ (implementation slices) + └── Realization (code, config, deploy) — optional detail + └── Toggle? (runtime/config switch on a feature or stage) +``` + +Rules: + +1. **Capabilities: few.** Target ~10–30 for all of coulomb.social, not hundreds. +2. **No unlimited trees.** At most capability → optional sub-capability → feature. +3. **One feature, one primary capability.** Cross-links allowed as `supports`, not multi-parent ownership. +4. **Toggles attach to features (or release stages), never to capabilities.** + “Turn off identity” is a product decision, not a flag. +5. **Feature cut = prioritize capabilities**, then name which features are enough to call a capability *realized for that stage*. +6. **Partial rebuild is valid.** Stage N can retire Bubble as *productive* home while Bubble remains *reference-only* for later capabilities. + +## Status labels + +### Capability priority (cut / roadmap) + +| Label | Meaning | +|-------|---------| +| `must_stage_1` | Required before user transfer + Bubble productive retirement | +| `later` | Rebuild after stage 1; not a transfer blocker | +| `out` | Explicitly not rebuilding (or only if strategy changes) | +| `platform` | Delivered by platform dependency (NetKingdom, Forgejo, …) | + +### Feature implementation status + +| Label | Meaning | +|-------|---------| +| `shipped` | On app.coulomb.social (or ready to enable) | +| `partial` | Exists but missing stage-1 acceptance bits | +| `todo` | Not built; required for its capability stage | +| `later` | Intentionally after stage 1 | +| `blocked` | Waiting on external dependency | + +## What not to conflate + +| Concept | Home | +|---------|------| +| Product capability (user utility) | This model | +| Fleet reusable capability | reuse-surface registry | +| Platform service (OIDC, Forgejo, apps-pg) | Platform deps; product *depends_on* | +| Feature toggle | Env/settings/flag on a **feature** | +| Workplan task | Execution unit; may implement many features | + +## Naming + +- Capabilities: `cap.` — noun phrase of utility + e.g. `cap.space-content` +- Features: `feat.` — verb/noun of implementation + e.g. `feat.space-md-render` +- Prefer stable ids; titles may change. diff --git a/docs/decisions/2026-08-12-feature-cut-stage-1.md b/docs/decisions/2026-08-12-feature-cut-stage-1.md new file mode 100644 index 0000000..ed0dec8 --- /dev/null +++ b/docs/decisions/2026-08-12-feature-cut-stage-1.md @@ -0,0 +1,65 @@ +# Decision: Stage-1 feature cut (productive transfer) + +| Field | Value | +|-------|--------| +| Id | CSOC-DEC-2026-001 | +| Date | 2026-08-12 | +| Status | **accepted** (founder direction; refine fields as product details firm up) | +| Owner | bernd | +| Workplan | CSOC-WP-0001-T03 | +| Model | `docs/capability/model-v0.yaml` | +| Narrative | `docs/capability/stage-1-cutover.md` | + +## Context + +coulomb.social rebuild runs on `app.coulomb.social` in parallel with Bubble on +apex. Full Bubble parity is not required before transfer. We need an explicit +**must** set so implementation and migration do not stall on marketplace-class +scope, and so reductions are intentional. + +Discussion baseline: capability = utility, feature = implementation; practice +capability model on coulomb first; HelixForge extraction later. + +## Decision + +1. **Partial rebuild is the strategy for stage 1.** Transfer users and retire + Bubble as the **productive** system when stage-1 capabilities work. Bubble + may remain as **implementation reference only** (not productive use). + +2. **Stage-1 must capabilities:** + - **User onboarding** (`cap.member-onboarding`) + - **Spaces with markdown content and CRUD**, including **Visual, Title, + Abstract** on space/page as product fields (`cap.space-content`) + - **Transfer of pages to other spaces** (`cap.page-transfer`) + - **Generate copy of page** (`cap.page-copy`) + +3. **Later use cases** (social, marketplace, monetization, full chrome parity, + etc.) extend the rebuild **after** stage 1; they do not block productive + transfer. + +4. **Capability/feature vocabulary and map** live in `docs/capability/` and + guide backlog and toggles. Feature toggles attach to features, not to + capability ids. + +## Consequences + +- Implementation backlog prioritizes space/page CRUD metadata + copy/move over + marketplace and social graph. +- CSOC-WP-0001 migration/export targets stage-1 content and members first. +- Public registration may complete via NetKingdom residual; transfer cohort may + use provisioned accounts if registration is late (open question in stage-1 doc). +- ADR-0002 remains: page **bodies** markdown in Forgejo; Title/Abstract/Visual + may live in app DB and/or frontmatter — detail in implementation WPs. + +## Non-goals (stage 1) + +- Rebuild-as-is of all Bubble workflows +- Pixel-perfect Research UI +- In-app real-time collab editor (unless later promoted) +- HelixForge capability-management platform (extract later) + +## Open questions + +See `docs/capability/stage-1-cutover.md` § Open product questions (Visual +storage, Abstract field naming, body editor UX, delete vs archive, transfer +cohort auth). diff --git a/docs/migration/schema-mapping-sketch-2026-08-12.md b/docs/migration/schema-mapping-sketch-2026-08-12.md index a9bea77..2448281 100644 --- a/docs/migration/schema-mapping-sketch-2026-08-12.md +++ b/docs/migration/schema-mapping-sketch-2026-08-12.md @@ -82,8 +82,15 @@ checksums only** here when available. 4. `Space` row bind + membership for tegwick. 5. Open on `app.coulomb.social` — record lossiness. +## Stage-1 scope filter + +Only map/migrate what **stage-1 capabilities** need first +(`docs/capability/stage-1-cutover.md`): members, spaces, pages (title/abstract/visual ++ body), not marketplace/social unless later promoted. + ## Related - Inventory: `docs/bubble-inventory/2026-08-12-surface-inventory.md` +- Capability cut: `docs/decisions/2026-08-12-feature-cut-stage-1.md` - ADR-0002: `docs/adr/ADR-0002-space-content-forgejo-markdown.md` - Spaces models: `coulomb_social/apps/spaces/models.py` diff --git a/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md b/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md index 0852d26..1ab4475 100644 --- a/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md +++ b/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md @@ -81,7 +81,7 @@ editor/export access for actual type fields and content corpus. ```task id: CSOC-WP-0001-T03 -status: wait +status: done priority: high state_hub_task_id: "35a0af87-2f22-4fae-8c82-e3cc4f77f074" ``` @@ -90,6 +90,14 @@ Decide rebuild-as-is vs reduced v1 scope. **Human gate — Bernd.** Capture unde `docs/decisions/`. Gate **apex cutover / bulk migration**, not day-to-day rebuild work on `app.coulomb.social`. +2026-08-12: **Stage-1 cut accepted** — partial rebuild for productive transfer. +Must: onboarding; spaces/pages markdown CRUD with Visual, Title, Abstract; +page transfer; page copy. Later capabilities after Bubble is reference-only. +Record: `docs/decisions/2026-08-12-feature-cut-stage-1.md` +Model: `docs/capability/` (vocabulary + `model-v0.yaml` + stage-1 narrative). +Open product details (visual storage, editor UX, …) refine without reopening +the must-set unless founder revises the decision. + ## Migration rehearsal ```task diff --git a/workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md b/workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md new file mode 100644 index 0000000..9bafad8 --- /dev/null +++ b/workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md @@ -0,0 +1,112 @@ +--- +id: CSOC-WP-0006 +type: workplan +title: "Stage-1 space and page capabilities (CRUD, copy, transfer)" +domain: communication +repo: coulomb-social +status: ready +owner: bernd +topic_slug: coulomb-social +created: "2026-08-12" +updated: "2026-08-12" +depends_on: + - CSOC-WP-0004 +related: + - CSOC-WP-0001 + - CSOC-WP-0003 +origin: residual +origin_ref: docs/decisions/2026-08-12-feature-cut-stage-1.md +state_hub_workstream_id: "e92fe627-7ff4-42f6-a294-23b5a723edab" +--- + +# CSOC-WP-0006 — Stage-1 space and page capabilities + +Implement product features required by the **stage-1 productive transfer** cut +(`docs/capability/stage-1-cutover.md`, `docs/capability/model-v0.yaml`). + +**Out of scope here:** marketplace, social graph, monetization; Bubble export +(CSOC-WP-0001-T02); public registration platform path (CSOC-IN-0001 / NK). + +## T01 — Space member CRUD + Title / Abstract + +```task +id: CSOC-WP-0006-T01 +status: todo +priority: high +state_hub_task_id: "337baa68-0459-4985-9981-30a6d37f5bf5" +``` + +Member-facing create / update / archive (or delete) for `Space`. Expose +**Title** and **Abstract** (current `description` field or rename). List and +detail stay tenant-scoped. Tests for authz and isolation. + +## T02 — Space and page Visual + +```task +id: CSOC-WP-0006-T02 +status: todo +priority: high +state_hub_task_id: "1ee74b60-a87d-4aff-91f1-3f97026774a5" +``` + +Add **Visual** (cover/image) for space and page. Decide storage (Forgejo +`assets/` vs app media) in implementation notes; no secrets in git. Show +visual on list/detail. + +## T03 — Page metadata + product CRUD path + +```task +id: CSOC-WP-0006-T03 +status: todo +priority: high +state_hub_task_id: "fe95438c-2ed1-4efd-b6ea-84966636dbc3" +``` + +Structured **Title**, **Abstract**, **Visual** for pages; create/update/delete +product path (app UI and/or API) while keeping markdown body SoR per ADR-0002 +(Forgejo commit or equivalent). Page list in space. + +## T04 — Generate copy of page + +```task +id: CSOC-WP-0006-T04 +status: todo +priority: high +state_hub_task_id: "98d7428c-1b2f-45f1-b080-a833a4790b69" +``` + +`feat.page-duplicate`: independent copy with new slug/title; optional target +space; asset handling per stage-1 acceptance. + +## T05 — Transfer page to another space + +```task +id: CSOC-WP-0006-T05 +status: todo +priority: high +state_hub_task_id: "5ec81ff4-1d6f-4c86-8c93-b68b1570cc32" +``` + +`feat.page-move`: move page (+ agreed assets) with source and destination +authz; no Bubble dependency. + +## T06 — Stage-1 smoke and capability model update + +```task +id: CSOC-WP-0006-T06 +status: todo +priority: medium +state_hub_task_id: "752f52a8-8c18-402c-8f00-bce6c76a1db7" +``` + +Update `docs/capability/model-v0.yaml` feature statuses as work lands; extend +`docs/identity/smoke.md` / deploy runbook with space CRUD, copy, transfer +checks on app.coulomb.social. + +## Acceptance + +- [ ] Members can CRUD spaces with Title, Abstract, Visual without Django admin +- [ ] Members can CRUD pages with Title, Abstract, Visual + markdown body path +- [ ] Page copy and page transfer work with membership checks +- [ ] Capability model statuses match reality +- [ ] Stage-1 cut doc open questions resolved or explicitly deferred with owner