feat: CMS qbit skeleton with feature flags and the CORE feature (phase 1, slice 1) #3

Open
KofTwentyTwo wants to merge 2 commits from feature/phase-1-skeleton into develop
pull from: feature/phase-1-skeleton
2 Commits
Author SHA1 Message Date
james.maesandClaude Opus 5.5 242b2696fb fix: child lists serialize, plural table labels, area homes without duplicate counts
- CmsRuntime no longer points back at its config; the config's runtime is
  @JsonIgnore. Tables carry their source qbit config to the frontend, and
  the cycle broke every child-record list (Sections, Items, Domains).
- Table labels are plural, as in kof22 (Pages, Page Section Types).
- Area homes show what needs attention (unpublished, inactive), the
  create actions the user may run, and recent changes. Next's app page
  already lists each table with its count, so the homes no longer repeat
  them.
- A test-scope demo server (CmsDemoServer) and screenshots of the homes
  and record screens at 390 and 1440 px, light and dark, from kof22's
  real CORE content.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:45:43 -05:00
james.maesandClaude Opus 5.5 eb9d163840 feat: CMS qbit skeleton with feature flags and the CORE feature
Phase 1 of the qbit-cms spec (QRun-IO/qqq#1083), first slice.

- CmsQBitProducer builds everything from CmsQBitConfig (no package scan):
  validation, namespaces for a second install, and a collision check
  against names already on the instance.
- CmsFeature flags with dependencies; CORE implemented, the others
  rejected until they ship.
- CORE tables as standard QQQ tables (site, domain, redirect, redirect
  type, page, page type, page section, page section type, snippet, menu,
  menu item): prefixed names equal to the SQL names, snake_case columns,
  possible-value sources, child lists and associations, permission
  rules, field audit when the host has QQQ audit tables.
- The CMS app with one home per area (Sites, Pages, Navigation): real
  data read as the user (PermissionEnforcement.ENFORCE), honest empty
  states, readable at any width in light and dark mode.
- CmsRole bundles, CmsSecurity.applySessionPermissions, openReads.
- A prefix-parameterized Liquibase changelog (1.0.0 baseline, kof22
  column types, generic reference data, feature gating, halt on a
  foreign table with a CMS name) and generated reference DDL.
- Startup schema check (FAIL_FAST, DEGRADED, SKIP).
- Checkstyle wired into verify; 22 tests incl. Testcontainers PostgreSQL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:35:25 -05:00