james.maes and Codex
d2c2f8a9b8
ci: centralize QBit source scanning
...
Co-Authored-By: Codex <noreply@openai.com >
2026-10-21 10:20:46 -05:00
james.maes and Codex
e422092fd4
ci: adopt central orb 0.7.12 and stable gates ( #28 )
...
Co-authored-by: Codex <noreply@openai.com >
2026-10-21 08:53:07 -05:00
james.maes and Codex
70f841c256
ci: centralize rc release completion in qqq orb ( #27 )
...
Co-authored-by: Codex <noreply@openai.com >
2026-10-21 02:25:01 -05:00
james.maes and Codex
730bb68428
ci: adopt shared orb 0.7.11 ( #26 )
...
Co-authored-by: Codex <noreply@openai.com >
2026-10-21 00:56:34 -05:00
james.maes
62c393374d
Merge pull request #25 from QRun-IO/feature/central-ci
...
ci: adopt shared QQQ orb standard
2026-10-20 19:20:28 -05:00
james.maes and Codex
c380dce8b6
ci: adopt verified central QQQ orb 0.7.3
...
Co-Authored-By: Codex <noreply@openai.com >
2026-10-20 19:02:42 -05:00
james.maes
a8e9a34b51
Merge pull request #22 from QRun-IO/feature/crm-setup-admin-only
...
fix(crm): Setup card only for settings holders while setup is incomplete
2026-10-16 10:19:22 -05:00
james.maes and Claude Sonnet 5.5
26b8847b46
fix(crm): show the Setup card only to CRM settings holders while setup is incomplete
...
The crm_setup widget was the 2nd widget on the CRM home, rendered to every
CRM user even when complete ("Nothing to do"), and carried a provider row
(Email delivery: sends through the email qbit). That is system/config content
on a business home.
- crm_setup now requires crm.manage (the permission guarding the CRM Settings
tables) via widget rules, plus CrmSetupVisibility, a request-time custom
permission checker (same mechanism as crm_goals) that denies once no
business step is missing. Denied widgets are omitted (DenyBehavior.HIDDEN)
from metadata and render.
- Removed the Email delivery row; the checklist is business setup only.
- Help text updated.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 09:10:51 -05:00
james.maes
820474805d
Merge pull request #21 from QRun-IO/ci/release-rc-secrets-inherit
...
ci(release-rc): pass secrets so the shared workflow can sign the RC tag
2026-10-16 08:03:28 -05:00
james.maes and Claude Opus 5.5
5157f81208
ci(release-rc): pass secrets to the shared workflow so it can sign the RC tag
...
QRun-IO/.github#2 adds a tag-and-release job that signs vX with the
QRUN_TAG_SIGNING_KEY secret after Maven Central confirms the artifact.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-15 16:22:11 -05:00
james.maes
c6031c26ed
Merge pull request #20 from QRun-IO/fix/producer-version-from-build
...
fix: qbit metadata version comes from the build
2026-10-15 01:42:56 -05:00
james.maes and Claude Opus 5.5
08e880af2e
fix: the qbit metadata version comes from the build, not a hardcoded constant
...
The producer read a literal version, so released artifacts reported a stale
or -SNAPSHOT version. qbit-crm.properties (version=${project.version}) is
Maven-filtered and the producer loads it; tests assert producer == bundle ==
artifact version.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-15 01:22:58 -05:00
james.maes
e3f20d357e
Merge pull request #18 from QRun-IO/fix/help-bundle-version
...
fix(help): help bundle version comes from the build, not a hardcoded SNAPSHOT
2026-10-14 22:37:20 -05:00
james.maes and Claude Opus 5.5
4710ed38b3
fix(help): the help bundle carries the artifact version (Maven-filtered) instead of a hardcoded SNAPSHOT
...
On release branches the bundle's version and the producer's differed, so the
bundle test that asserts they match failed, and released bundles recorded
SNAPSHOT as their provenance. help/*.yaml is now filtered:
version: ${project.version}.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 22:05:02 -05:00
james.maes
0ebbeefa08
Merge pull request #17 from QRun-IO/feature/help-bundle
...
feat(help): qbit-crm help bundle via QQQ help bundles, with coverage gate
2026-10-14 20:45:30 -05:00
james.maes and Claude Opus 5.5
c5383718a3
feat(help): ship the qbit-crm help bundle through QQQ help bundles, with coverage gate
...
Host-neutral help (deployment-specific facts removed), registered with
HelpBundles, gated by HelpBundleAssertions. QQQ 4.1.0-RC.7.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 20:27:08 -05:00
james.maes
a025eeee2f
Merge pull request #16 from QRun-IO/feature/health-system-session
...
fix(health): run context-less health checks as the system user
2026-10-14 18:27:16 -05:00
james.maes and Claude Opus 5.5
80bf85a158
fix(health): run context-less health checks as the system user
...
CrmHealthChecks.indicators() captured a plain tokenless new QSession()
when registered without a caller session (host startup). Token-based
authentication modules (OAuth2, Auth0) reject any tokenless session other
than QSystemUserSession, so on such hosts every CRM check failed session
validation and reported UNKNOWN.
With no caller session, each check now runs as core
QSystemUserSession(instance), created at check time, the same pattern as
qbit-backups#24. A supplied monitoring session is still used unchanged.
The checks return only UP/DEGRADED, never values.
contextlessIndicatorsRunOnTokenRequiredHost uses a test authentication
module that rejects tokenless sessions; it fails without this fix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 18:24:59 -05:00
james.maes
24707575fc
Merge pull request #15 from QRun-IO/feature/tables-populated-defaults
...
Populate and explain every CRM table
2026-10-14 17:10:40 -05:00
james.maes and Claude Opus 5.5
d6900e3842
test: commit host rows before the Liquibase rollback in the rollback test
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 17:07:40 -05:00
james.maes and Claude Opus 5.5
dc4ad764f3
fix(defaults): empty rollbacks, fresh-install guards, ordering docs, behavior test
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 17:05:08 -05:00
james.maes and Claude Opus 5.5
4b4b33127e
feat: populate and explain every CRM table (defaults changelog, setup card, help, currency date)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 16:51:18 -05:00
james.maes
c8d765a135
Merge pull request #14 from QRun-IO/feature/ui-polish
...
fix(ui): labels, money formatting, contact layout and home polish
2026-10-14 15:42:34 -05:00
james.maes and Claude Opus 5.5
2babcaf3b4
fix(ui): plain table and field labels, contact layout, 4-column child lists, nullable names and owners, close dates on closed-stage inserts
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 15:39:27 -05:00
james.maes and Claude Opus 5.5
31964ff0e0
fix(home): grouped currency amounts, Stage/Deals/Weighted columns, compact Today statistics, readable timeline dates
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 15:39:26 -05:00
james.maes
50acf63211
Merge pull request #13 from QRun-IO/feature/pii-tenancy-api
...
feat: PII, tenancy, search/API, help bundle, health, full GDPR erase, bulk-load profiles
2026-10-14 15:00:14 -05:00
james.maes and Claude Opus 5.5
1f994e127b
fix(schema): 320-char emails, 500-char UTM fields; cap lead source names from UTM at 100
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:57:36 -05:00
james.maes and Claude Opus 5.5
212c7aaa77
fix(home): let Next size home table columns (no fixed widths)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:57:35 -05:00
james.maes and Claude Opus 5.5
40a93c3286
fix(app): produce a plain QAppMetaData so hosts can attach it as a child app
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:57:35 -05:00
james.maes and Claude Opus 5.5
da0ba96966
feat: PII classification, optional tenancy locks, search fields and API publication
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:54:55 -05:00
james.maes and Claude Opus 5.5
b7b146259f
feat: contingent primary contact and server-side stage and outcome validation
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:54:54 -05:00
james.maes and Claude Opus 5.5
7ee43485c3
feat(privacy): Erase Personal Data covers every CRM table and core audit copies
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:54:54 -05:00
james.maes and Claude Opus 5.5
019d93a5d7
feat: CRM health checks (stand-in qqq#1199) and bulk-load starter profiles
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:54:53 -05:00
james.maes and Claude Opus 5.5
99102d3175
feat(help): qbit-crm help bundle with stand-in loader (qqq#1198)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:54:52 -05:00
james.maes
90cdaaa88d
Merge pull request #12 from QRun-IO/feature/platform-reuse
...
feat: real email and sequences, delivery sync, schedules, notifications, collaboration features
2026-10-14 13:34:57 -05:00
james.maes
424f6ea379
Merge remote-tracking branch 'origin/develop' into feature/platform-reuse
2026-10-14 13:32:17 -05:00
james.maes and Claude Opus 5.5
8d9dfb9172
feat: schedules, collaboration record features and alert types
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 13:31:24 -05:00
james.maes and Claude Opus 5.5
e1fb2c0deb
feat(deals): won and rotting notifications through QAlerts
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 13:31:24 -05:00
james.maes and Claude Opus 5.5
68220ec915
feat(scoring): date-decay operators, incremental recalculation and auto-assign on insert
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 13:31:23 -05:00
james.maes and Claude Opus 5.5
666cec834e
feat(email): Send Email and sequence steps send through CrmEmailTransport; delivery sync and consent expiry
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 13:31:22 -05:00
james.maes
4b1d272ac5
Merge pull request #11 from QRun-IO/feature/record-actions
...
feat(actions): CRM record actions on the standard streamed ETL
2026-10-14 13:06:13 -05:00
james.maes
06d41fb3f7
Merge remote-tracking branch 'origin/develop' into feature/record-actions
...
# Conflicts:
# src/main/java/com/kingsrook/qbits/crm/scoring/processes/AutoAssignProcess.java
2026-10-14 13:03:32 -05:00
james.maes and Claude Opus 5.5
a93365a7b7
refactor: retire reminder, overdue, import, track and old bulk processes; page background jobs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 13:00:39 -05:00
james.maes and Claude Opus 5.5
15a2549b59
feat(actions): CRM record actions on the standard streamed ETL with review and result summaries
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 13:00:38 -05:00
james.maes
831bc59743
Merge pull request #10 from QRun-IO/feature/app-home
...
feat(app): CRM app, real home dashboard and child lists
2026-10-14 12:52:45 -05:00
james.maes
7a9a38afe4
Merge remote-tracking branch 'origin/develop' into feature/app-home
...
# Conflicts:
# src/main/java/com/kingsrook/qbits/crm/CrmQBitConfig.java
# src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java
# src/test/java/com/kingsrook/qbits/crm/CrmRdbmsTest.java
2026-10-14 12:50:29 -05:00
james.maes
45df8cd380
Merge pull request #9 from QRun-IO/feature/intake-api
...
feat(api): CRM intake and marketing contracts, double opt-in, signed hooks
2026-10-14 12:48:48 -05:00
james.maes
43c6fe83b1
Merge remote-tracking branch 'origin/develop' into feature/app-home
2026-10-14 12:46:04 -05:00
james.maes
0da0edfc6c
Merge remote-tracking branch 'origin/develop' into feature/intake-api
2026-10-14 12:46:00 -05:00
james.maes and Claude Opus 5.5
b8dc4041a7
fix(api): trusted intake writes, per-list eligibility, enum ids, re-subscribe, auto-assign new leads
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 12:45:38 -05:00