feat(help): help bundle (qqq#1198 format) with a coverage gate #19

Merged
KofTwentyTwo merged 3 commits from feature/help-bundle into develop 2026-10-14 16:56:31 +00:00
KofTwentyTwo commented 2026-10-14 16:48:52 +00:00 (Migrated from github.com)

Summary

  • src/main/resources/help/qbit-marketing.yaml: a QBIT-layer help bundle in the qqq#1198 format (docs/HELP-CONTENT.md section 5). 346 entries: the app, all 18 tables, 239 non-trivial fields, 23 processes and record actions, 26 widgets (6 dashboard/section widgets, 20 child lists) and 39 possible-value sources. One-line plain summaries (<=120 chars) and 1-4 sentence content, checked against the code (ApprovalService, ExecutionService, ReadinessChecker, CrmResultsService, widgets, actions). Enum labels and lengths use live {{values:}} / {{maxLength:}} / {{label:}} references instead of copies.
  • HelpBundleCoverageTest: STAND-IN(core=QRun-IO/qqq#1198, removeBy=4.1.0-RC.8) for core's HelpBundleAssertions. It fails on any owned object without an entry, keys that don't resolve, over-long or marked-up summaries, and unresolvable references. New metadata can't merge without help.
  • Not registered in Java yet: HelpBundles.register doesn't exist until qqq#1198 merges; the producer registers it then (README "Help").

Note: the stacked #4 PRs add marketing_agent_run.heartbeatAt and a rollup table; their entries are added when those merge (the gate enforces it).

Tests

./mvnw verify green locally (all gates).

Written by a Sonnet subagent, reviewed by Claude Opus.

🤖 Generated with Claude Code

## Summary - `src/main/resources/help/qbit-marketing.yaml`: a QBIT-layer help bundle in the qqq#1198 format (docs/HELP-CONTENT.md section 5). 346 entries: the app, all 18 tables, 239 non-trivial fields, 23 processes and record actions, 26 widgets (6 dashboard/section widgets, 20 child lists) and 39 possible-value sources. One-line plain summaries (<=120 chars) and 1-4 sentence content, checked against the code (ApprovalService, ExecutionService, ReadinessChecker, CrmResultsService, widgets, actions). Enum labels and lengths use live `{{values:}}` / `{{maxLength:}}` / `{{label:}}` references instead of copies. - `HelpBundleCoverageTest`: `STAND-IN(core=QRun-IO/qqq#1198, removeBy=4.1.0-RC.8)` for core's `HelpBundleAssertions`. It fails on any owned object without an entry, keys that don't resolve, over-long or marked-up summaries, and unresolvable references. New metadata can't merge without help. - Not registered in Java yet: `HelpBundles.register` doesn't exist until qqq#1198 merges; the producer registers it then (README "Help"). Note: the stacked #4 PRs add `marketing_agent_run.heartbeatAt` and a rollup table; their entries are added when those merge (the gate enforces it). ## Tests `./mvnw verify` green locally (all gates). Written by a Sonnet subagent, reviewed by Claude Opus. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.