Adopt stage-1 capability cut and product capability model
Persist capability/feature vocabulary, v0 model, and founder stage-1 must set (onboarding, spaces/pages with Title/Abstract/Visual, page copy and transfer). Mark CSOC-WP-0001-T03 done; add CSOC-WP-0006 for implementation.
This commit is contained in:
parent
2dfb5a0bf2
commit
bc78cd27fc
13 changed files with 622 additions and 11 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
3
SCOPE.md
3
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)
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
13
docs/capability/README.md
Normal file
13
docs/capability/README.md
Normal file
|
|
@ -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.
|
||||
194
docs/capability/model-v0.yaml
Normal file
194
docs/capability/model-v0.yaml
Normal file
|
|
@ -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
|
||||
126
docs/capability/stage-1-cutover.md
Normal file
126
docs/capability/stage-1-cutover.md
Normal file
|
|
@ -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?
|
||||
73
docs/capability/vocabulary.md
Normal file
73
docs/capability/vocabulary.md
Normal file
|
|
@ -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.<kebab>` — noun phrase of utility
|
||||
e.g. `cap.space-content`
|
||||
- Features: `feat.<kebab>` — verb/noun of implementation
|
||||
e.g. `feat.space-md-render`
|
||||
- Prefer stable ids; titles may change.
|
||||
65
docs/decisions/2026-08-12-feature-cut-stage-1.md
Normal file
65
docs/decisions/2026-08-12-feature-cut-stage-1.md
Normal file
|
|
@ -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).
|
||||
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
112
workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md
Normal file
112
workplans/CSOC-WP-0006-stage-1-space-page-capabilities.md
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue