feat!: P1 platform upgrade, crm_ names, permissions and schema #8

Merged
KofTwentyTwo merged 7 commits from feature/platform-4.1 into develop 2026-10-14 17:23:18 +00:00
KofTwentyTwo commented 2026-10-14 17:13:19 +00:00 (Migrated from github.com)

Summary

P1 (Platform) of the qbit-crm 0.2.0 design (docs/DESIGN.md):

  • Build: parent qbit-build-parent 2.1.2 with guardrails enforced and strict UI API routes; QQQ 4.1.0-RC.6 through the qqq-snapshot BOM profile; Java 21; Maven wrapper; CircleCI orb 0.6.9; JaCoCo gate (70% instructions, 90% classes).
  • Names: every table, process, widget and join is crm_ snake_case. Backend names equal table names, and columns are snake_case (inferBackendNames, default true).
  • Removed: the bespoke tag tables and bulk tag processes, crmAttachment, crmAuditLog and its customizer. Contact, company, deal and activity use core FIELD-level audit instead. Dead config options are removed.
  • Security: new permission rules (crm, crm.manage, crm.admin, DenyBehavior.HIDDEN) on every table, process and widget, plus sourceQBitName provenance.
  • Schema: reference Postgres DDL (docs/ddl/postgres.sql) and a Liquibase changelog (db/liquibase/qbit-crm/crm.changelog.sql) for 33 tables. H2 tests run the DDL and persist through the RDBMS backend.
  • Docs: README and CHANGELOG are corrected. DESIGN.md now says 0.2.0 is a fresh install with no Voyage compatibility (owner decision, 2026-10-14).

Implemented by Codex, reviewed and committed by Claude.

Test plan

  • ./mvnw verify: 371 tests, 0 failures; checkstyle clean; JaCoCo 91% instructions, 99% classes; guardrails G1/G4/G7 pass
  • H2 schema test: 33 tables, unique keys, persistence of 7 entity types, DDL and changelog parity

🤖 Generated with Claude Code

## Summary P1 (Platform) of the qbit-crm 0.2.0 design (docs/DESIGN.md): - **Build:** parent `qbit-build-parent` 2.1.2 with guardrails enforced and strict UI API routes; QQQ 4.1.0-RC.6 through the `qqq-snapshot` BOM profile; Java 21; Maven wrapper; CircleCI orb 0.6.9; JaCoCo gate (70% instructions, 90% classes). - **Names:** every table, process, widget and join is `crm_` snake_case. Backend names equal table names, and columns are snake_case (`inferBackendNames`, default true). - **Removed:** the bespoke tag tables and bulk tag processes, `crmAttachment`, `crmAuditLog` and its customizer. Contact, company, deal and activity use core FIELD-level audit instead. Dead config options are removed. - **Security:** new permission rules (`crm`, `crm.manage`, `crm.admin`, `DenyBehavior.HIDDEN`) on every table, process and widget, plus `sourceQBitName` provenance. - **Schema:** reference Postgres DDL (`docs/ddl/postgres.sql`) and a Liquibase changelog (`db/liquibase/qbit-crm/crm.changelog.sql`) for 33 tables. H2 tests run the DDL and persist through the RDBMS backend. - **Docs:** README and CHANGELOG are corrected. DESIGN.md now says 0.2.0 is a fresh install with no Voyage compatibility (owner decision, 2026-10-14). Implemented by Codex, reviewed and committed by Claude. ## Test plan - [x] `./mvnw verify`: 371 tests, 0 failures; checkstyle clean; JaCoCo 91% instructions, 99% classes; guardrails G1/G4/G7 pass - [x] H2 schema test: 33 tables, unique keys, persistence of 7 entity types, DDL and changelog parity 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.