coulomb-social/workplans/CSOC-WP-0013-sharing-content-hardening.md
tegwick f94ef6a9d1
Some checks failed
Use-case regression gate / usecase-regressions (push) Has been cancelled
Define revision purge and copy/move crash recovery
Page saves keep every revision. An explicit purge drops only inactive
revisions older than a timezone-aware cutoff, keeps live bytes and deleted
page history, and stops if a stored hash does not match. Interrupted copies
and moves resume from a journal without deleting a changed source or granting
destination access. Private corpus review remains open.

Assistant: grok
Assistant-Session: 01a12cc2-e3b2-77a3-8aef-9cc60e577fee
2026-10-11 23:24:23 +02:00

3.6 KiB

id type title domain repo status owner topic_slug created updated origin origin_ref state_hub_workstream_id
CSOC-WP-0013 workplan Sharing, portability and content-storage acceptance communication coulomb-social active codex coulomb-social 2026-10-08 2026-10-11 residual CSOC-WP-0008 70370f4e-7cba-5b0a-853b-fedcd2bd49a5

Residual acceptance from CSOC-WP-0008, split at the user's request. Existing implementation/release/acceptance evidence remains in the originating workplan; these tasks own the remaining concrete outputs. Source checks never grant runtime or productive acceptance.

T01 — Finish unambiguous storage enforcement

id: CSOC-WP-0013-T01
status: progress
priority: high
state_hub_task_id: "4d18a390-c82a-5d6b-8509-1b1704975150"

Decide and enforce the existing global-slug invariant at SQL/storage boundaries, including admin/import concurrency and legacy collision migration refusal. Preserve tenant/member denial and protected journeys. Prepare migration/rollback proof before a guarded rollout.

2026-10-11: spaces_space_slug_global_uniq is in the model and migration 0003. The migration raises before adding the constraint when any slug is duplicated and does not rename, merge, or delete those rows. Admin save, space create and import map the constraint failure to the existing validation errors. Rollback is manage.py migrate spaces 0002, which drops only the global constraint. Tests cover parallel inserts, a missed import pre-check, an admin race, inactive slug reservation, migration refusal, and the legacy fail-closed reads. The live database has not been migrated.

T02 — Complete content fidelity and revision lifecycle

id: CSOC-WP-0013-T02
status: progress
priority: high
state_hub_task_id: "8d06cdee-e0ce-5c3e-bf98-705deed0ee62"

Review custom Markdown/raw HTML and body-linked assets with privately nominated corpus examples. Define revision retention/purge and failed multi-file copy/move crash recovery without losing source or incoming-address authorization. Current immutable revisions, stale-edit refusal, supported Markdown attachments and aliases are deployed; preserve them.

2026-10-11: Supported Markdown is fenced code, tables, newline breaks and sane lists. Raw HTML, script, event handlers and non-http(s)/mailto URLs are removed. Relative asset URLs stay. No private corpus has been nominated, so this is not corpus acceptance. Revisions are not purged on save. purge_revisions deletes only inactive revisions older than an explicit timezone-aware cutoff, keeps the live page bytes, and keeps every revision of a deleted page. A hash mismatch aborts the purge before any deletion. Copy and move write a journal under CONTENT_ROOT/.recovery. The next content write finishes a confirmed move or discards an unconfirmed destination. The source is deleted only when its bytes still match the journal. Alias changes do not grant destination access. The live content root has not been purged or recovered.

T03 — Review productive sharing and personal portability

id: CSOC-WP-0013-T03
status: todo
priority: high
state_hub_task_id: "8edd7661-17b0-5aa0-b177-6170aa159623"

Review owner Share space/revocation, reader/outsider denial, account-local export, successor ownership and local exit semantics with the user. Keep platform identity outside app deletion. Record UC-003/004/005/006 verdicts independently; weekly-call acceptance is UC-008 only.

Completion

Finish when every task above has its stated evidence and acceptance, or hand off any newly discovered residual to a live work record first. Cross-owner dependencies remain their existing canonical records.