qbit-build-parent: architecture guardrails (dependency rules, contract fragment, stand-in expiry, no HTML widgets, no SNAPSHOT) #9

Closed
opened 2026-10-14 00:14:20 +00:00 by KofTwentyTwo · 0 comments
KofTwentyTwo commented 2026-10-14 00:14:20 +00:00 (Migrated from github.com)

Add these to qbit-build-parent so that every qbit inherits them:

  • G1: dependency rules.
    • enforcer bannedDependencies on com.kingsrook.qbits:*, except allow-listed API artifacts (qbit-object-storage, a future qbit-assistant-provider-api);
    • an ArchUnit rule: com.kingsrook.qbits.<x>.. depends only on itself, com.kingsrook.qqq.. and allow-listed com.kingsrook.qbits.<y>.api..;
    • no Class.forName("com.kingsrook.qbits.<other>").
  • G3: committed fragment. A registered MiddlewareSpecExtension must have a committed openapi/qqq-v1/{name}.yaml and pass UiApiContractAssertions.assertExtensionMatchesCommitted.
  • G4: stand-in expiry. Stand-ins are tagged STAND-IN(core=QRun-IO/qqq#N, removeBy=4.1.0-RC.N). The build fails when qqq.version >= removeBy or when removeBy is missing.
  • G5: no HTML widgets. No RawHTML / WidgetType.HTML outside an allow-list, once the core typed widgets land (qqq F1).
  • G7: no SNAPSHOT. requireReleaseDeps for com.kingsrook.qqq (no SNAPSHOT on develop).

Source: Architecture review QRun-IO/qqq#1150 (docs/ARCHITECTURE-REVIEW-2026-10-13.md), finding G1-G7.

Add these to `qbit-build-parent` so that every qbit inherits them: - [ ] **G1: dependency rules.** - enforcer `bannedDependencies` on `com.kingsrook.qbits:*`, except allow-listed API artifacts (`qbit-object-storage`, a future `qbit-assistant-provider-api`); - an ArchUnit rule: `com.kingsrook.qbits.<x>..` depends only on itself, `com.kingsrook.qqq..` and allow-listed `com.kingsrook.qbits.<y>.api..`; - no `Class.forName("com.kingsrook.qbits.<other>")`. - [ ] **G3: committed fragment.** A registered `MiddlewareSpecExtension` must have a committed `openapi/qqq-v1/{name}.yaml` and pass `UiApiContractAssertions.assertExtensionMatchesCommitted`. - [ ] **G4: stand-in expiry.** Stand-ins are tagged `STAND-IN(core=QRun-IO/qqq#N, removeBy=4.1.0-RC.N)`. The build fails when `qqq.version >= removeBy` or when `removeBy` is missing. - [ ] **G5: no HTML widgets.** No `RawHTML` / `WidgetType.HTML` outside an allow-list, once the core typed widgets land (qqq F1). - [ ] **G7: no SNAPSHOT.** `requireReleaseDeps` for `com.kingsrook.qqq` (no SNAPSHOT on develop). Source: Architecture review QRun-IO/qqq#1150 (docs/ARCHITECTURE-REVIEW-2026-10-13.md), finding G1-G7.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: QRun-IO/qbit-bom#9