- 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>
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>