coulomb-social/history/20261005T223104Z-scope-intent-assessment.md
tegwick 57a329949f Audit actual scope and implement safe corpus transfer tooling
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a10e2d-a5ef-7e92-b03d-b1694e915680
2026-10-06 09:54:33 +02:00

6.8 KiB

Scope against intent — 2026-10-06

Timestamp prefix is UTC (2026-10-05 22:31:04); review date is Europe/Berlin. Evidence: tracked application source, tests, workplans, ADRs and historical migration/identity records. No live production or private-corpus execution.

Finding

The repository is an implemented Django identity + spaces/pages application, not a scaffold and not yet a complete co-creation marketplace. The previous SCOPE under-reported member CRUD/PageOps and finished Bubble assessment work, and incorrectly described public registration as still platform-blocked.

INTENT's broad parity language must be read with the accepted 2026-08-12 stage-1 cut: partial rebuild for productive transfer, broader social/marketplace features later. This review does not change that human decision or authorize retiring Bubble.

Intent success criteria against evidence

INTENT criterion Assessment Evidence / gap
Inventory all Bubble surfaces/workflows/data/integrations Partial docs/bubble-inventory/, client-package capability map and design crawl. Backend workflows/privacy and full editor schema remain lower-confidence; not a full formal export.
Tenant-keyed relational mapping and rehearsal import Partial Member/Space/membership tables, schema sketches, 2026-08-13 reichelag rehearsal (30 pages, 29 assets). Full 71-space corpus and member mapping not executed; filesystem content uses slug, not tenant keys.
Human-gated feature cut Met as a recorded decision docs/decisions/2026-08-12-feature-cut-stage-1.md accepts onboarding + spaces/pages/copy/transfer and defers broader parity.
Standalone v1 under service contract Partial Docker, migrations, health, OIDC/user-engine, deployment lane and demand evidence exist. CONTENT_ROOT deployment, paired restore, export/delete, ops/cost/provenance acceptance are not comprehensively evidenced here.
Members/content cut over without Bubble dependence Not accepted yet Core code works without Bubble; historical Case B registration closed CSOC-IN-0001. Live PageOps acceptance, full cohort/content transfer, recovery and explicit cutover evidence remain outstanding.

Ranked gaps to address

  1. Persistent, accepted content deployment and recoverability (high). The latest product capability is not proven on the app host. Markdown on an ephemeral disk would undermine productive transfer; a DB-only backup loses page bodies. Existing CSOC-IN-0004 is the deployment handoff. Require pinned image/migration, volume decision, paired DB/content backup and isolated restore with membership/render checks before acceptance.
  2. Safe multi-space and member migration (high). One successful tree is not a community transfer. Existing CSOC-IN-0003 covers 70 remaining spaces and identity mapping; thin exports and parent/privacy lossiness need disposition. The old importer wrote content before DB completion, dry-run skipped member validation, and subject lookup could fall back to another tenant. Implement local corpus preflight/mapping and rollback before touching private content.
  3. Access fidelity and portability (high). Tenant-filtered rows are useful, but slug-keyed filesystem paths, tenant-wide bootstrap visibility and roles without viewer/editor enforcement do not establish privacy parity. Exact Bubble privacy/member mapping, membership revocation and app-local member export/delete remain acceptance gaps. Do not declare shared-root multi-tenant SaaS supported.
  4. Capability evidence accuracy (medium). Stage-1 cutover tables still described member CRUD, Visual and copy/move as todo despite WP-0006. The machine model used shipped without separating checkout and deployment; session pickup also retained a closed registration blocker. Reconcile these now so future work starts from actual capability and live evidence.
  5. Content integrity/versioning (medium). Local PageOps lacks automatic git history, arbitrary asset/link transfer and concurrent-edit conflict control. Visual fields alone do not deliver an upload/asset-serving workflow. Outline, live includes and lazy projections remain designed, not implemented.
  6. Full co-creation marketplace (later). Discovery/matching, favorites, social graph, payments and real-time editing are meaningful differences from broad INTENT, but the accepted cut deliberately excludes them from stage-1 acceptance. Implementing them now would miss the nearer transfer blockers.

Implemented response — CSOC-WP-0007

  • Rewrite SCOPE with checkout capabilities, practical limits and dated live evidence; reconcile stage-1 status and pickup pointers.
  • Shared single-space import validation rejects cross-tenant member/slug use, source symlinks, overlapping roots and invalid pages/metadata. Subject lookup requires exactly one tenant-local member. Content is staged, published beside the destination and restored on ordinary errors while DB writes roll back.
  • New import_content_corpus preflights all entries before writing, maps active members by tenant+issuer+subject, requires a mapped owner, rejects duplicate destinations and supports read-only dry-run and explicit replacement.
  • Documentation states additive membership semantics and per-space restart behavior; private trees/manifests remain outside git. Regression checks use synthetic data, not the real corpus.

These changes close local preparation gaps. They do not certify corpus parity, production rollout, crash atomicity, exact ACL replacement or restore success.

Live follow-up

CSOC-WP-0008 tracks persistence/live acceptance, paired recovery, real cohort mapping, privacy/access portability and founder cutover. It takes over the execution of CSOC-IN-0003/0004 without closing either on the strength of local tooling. CSOC-IN-0002 is closed with independent callback replay and same-email identity separation regressions in tests/test_identity_regressions.py. No residual is hidden only in this report or SCOPE.

Validation

Final test and lint results are recorded below at session close. Repository-wide lint initially exposed pre-existing unused imports/variables, import ordering and long lines; changed-code lint is checked separately from that baseline.

Final verification: 72 tests passed (synthetic corpus, no private data); Ruff passes all changed application/test files; Django migration check reports no changes. Full repository Ruff retains 19 pre-existing findings in identity, members/admin/migrations, older PageOps/Forgejo code and tests. WP-0008-T07 tracks that quality debt. Test warnings are Authlib jose deprecation and missing collected staticfiles in the test environment.

Production acceptance decision drafted in State Hub: 186be722-e2c7-4109-a1e6-d120fe8fca5b (pending; no live change approval inferred).