Land CSOC-WP-0006 PageOps: member space/page CRUD, copy, transfer
Thin CONTENT_ROOT content plane (ADR-0003/0004) with space visual field, product UI for Title/Abstract/Visual, page list sidebar, and tests. Update capability model and smoke checklist; mark WP-0006 finished.
This commit is contained in:
parent
00dbb86c93
commit
affed64839
24 changed files with 1812 additions and 151 deletions
|
|
@ -4,7 +4,7 @@
|
|||
schema_version: "0.1"
|
||||
product: coulomb-social
|
||||
resource_id: "resource:tenant:coulomb:coulomb-social"
|
||||
updated: "2026-08-12"
|
||||
updated: "2026-08-13"
|
||||
stance: |
|
||||
Partial rebuild is intentional. Stage 1 enables user transfer and retires
|
||||
Bubble as productive system; Bubble may remain reference-only. Later stages
|
||||
|
|
@ -74,36 +74,38 @@ capabilities:
|
|||
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"
|
||||
status: shipped
|
||||
notes: "Member UI create/edit/archive; DB index + CONTENT_ROOT tree"
|
||||
- id: feat.space-title
|
||||
title: Space Title field
|
||||
status: partial
|
||||
notes: "DB title exists; member edit UI todo"
|
||||
status: shipped
|
||||
- id: feat.space-abstract
|
||||
title: Space Abstract field
|
||||
status: partial
|
||||
notes: "Maps to Space.description until product rename"
|
||||
status: shipped
|
||||
notes: "Maps to Space.description (product label Abstract / Abstractor)"
|
||||
- id: feat.space-visual
|
||||
title: Space Visual (cover/image)
|
||||
status: todo
|
||||
status: shipped
|
||||
notes: "Path relative to space tree (e.g. assets/cover.jpg); not app media yet"
|
||||
- id: feat.page-list
|
||||
title: List pages in a space
|
||||
status: partial
|
||||
status: shipped
|
||||
notes: "Sidebar from CONTENT_ROOT pages/*.md"
|
||||
- id: feat.page-crud
|
||||
title: Page create / update / delete (product path)
|
||||
status: partial
|
||||
notes: "Git/Forgejo only today; product path todo"
|
||||
status: shipped
|
||||
notes: "PageOps on CONTENT_ROOT; Forgejo optional fallback"
|
||||
- id: feat.page-title
|
||||
title: Page Title (structured)
|
||||
status: partial
|
||||
notes: "Inferred from H1/filename; frontmatter/UI todo"
|
||||
status: shipped
|
||||
notes: "Frontmatter title + form; H1 fallback on render"
|
||||
- id: feat.page-abstract
|
||||
title: Page Abstractor
|
||||
status: todo
|
||||
status: shipped
|
||||
- id: feat.page-visual
|
||||
title: Page Visual
|
||||
status: todo
|
||||
status: shipped
|
||||
notes: "Frontmatter path; relative assets copied on page copy"
|
||||
- id: feat.authoring-top-down
|
||||
title: Top-down authoring (title → abstractor → outline → body)
|
||||
status: todo
|
||||
|
|
@ -133,8 +135,8 @@ capabilities:
|
|||
notes: "markitect explode/implode; ArchitectureBlueprint D4"
|
||||
- id: feat.content-plane-thin-git
|
||||
title: Content SoR as directory + markdown files in git
|
||||
status: todo
|
||||
notes: "Upgrades to shard-wiki then kontextual supported later"
|
||||
status: partial
|
||||
notes: "CONTENT_ROOT PageOps landed (CSOC-WP-0006); git commit/push operator path next"
|
||||
- id: feat.content-fail-closed
|
||||
title: Fail closed on missing binding/fetch
|
||||
status: shipped
|
||||
|
|
@ -148,10 +150,12 @@ capabilities:
|
|||
features:
|
||||
- id: feat.page-move
|
||||
title: Move page between spaces
|
||||
status: todo
|
||||
status: shipped
|
||||
notes: "PageOps transfer; index page cannot move"
|
||||
- id: feat.page-move-authz
|
||||
title: Authz for source and destination spaces
|
||||
status: todo
|
||||
status: shipped
|
||||
notes: "spaces_for_member on both ends"
|
||||
|
||||
- id: cap.page-copy
|
||||
title: Generate copy of page
|
||||
|
|
@ -162,10 +166,11 @@ capabilities:
|
|||
features:
|
||||
- id: feat.page-duplicate
|
||||
title: Duplicate page (new slug/title)
|
||||
status: todo
|
||||
status: shipped
|
||||
- id: feat.page-duplicate-assets
|
||||
title: Copy or re-link page assets
|
||||
status: todo
|
||||
status: partial
|
||||
notes: "Relative visual files under assets/ copied; full asset scan deferred"
|
||||
|
||||
# --- later stage (not transfer blockers) ---
|
||||
|
||||
|
|
|
|||
|
|
@ -64,6 +64,24 @@ kubectl -n coulomb-social exec deploy/coulomb-social -- \
|
|||
| Session details | profile menu diagnostics (no secrets) |
|
||||
| Refresh content | re-fetch after git edit (or webhook) |
|
||||
|
||||
### Stage-1 PageOps smoke (CSOC-WP-0006) — local / after deploy
|
||||
|
||||
Content plane: `CONTENT_ROOT` (default `var/content/`) with
|
||||
`spaces/<slug>/pages/*.md`. Forgejo binding remains optional fallback.
|
||||
|
||||
| Step | Expected |
|
||||
|------|----------|
|
||||
| `/app/` → **New space** | create with Title, Abstract, Visual → detail |
|
||||
| Space **Edit** | update Title/Abstract/Visual; index frontmatter stays in sync |
|
||||
| **New page** | Title/Abstract/Visual + markdown body on content plane |
|
||||
| Page list sidebar | lists index + pages; switch with `?page=` |
|
||||
| **Copy** | independent slug/title; optional other destination space |
|
||||
| **Transfer** | page leaves source space, appears in destination |
|
||||
| **Delete** (non-index) | page removed; index cannot be deleted |
|
||||
| **Archive space** | hidden from list; soft-archive tree under `.archived-*` |
|
||||
| Tenant isolation | other tenant 404 on detail / page mutations |
|
||||
| `make test` | includes `tests/test_pageops.py`, `tests/test_space_crud.py` |
|
||||
|
||||
## Case matrix (CSOC-WP-0003-T04)
|
||||
|
||||
| Case | Status |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue