Release 0.1.0 #2

Merged
KofTwentyTwo merged 9 commits from release/0.1.0 into main 2026-03-29 20:45:44 +00:00
9 Commits
Author SHA1 Message Date
james.maes c1d65736fb chore(license): switch from AGPL v3 to Apache 2.0
Update LICENSE file, pom.xml license reference, checkstyle header
template, and README badge/references.
2026-03-29 15:39:20 -05:00
james.maes 1829473d1c fix: address all audit findings (3 critical, 6 high, 6 medium)
Critical: email case normalization, null session NPE guard (4 files),
stale DealProduct read fix with in-memory sum tracking.

High: paginated CalculateLeadScores (500/batch), BulkAssignOwner
field default, AutoAssign JSON parsing via JsonUtils, consistent
getPossibleValueId() across 20+ files, GDPR exception logging,
EmailTemplatePreDeleteCustomizer test.

Medium: extracted CrmCurrencyUtils and CrmSessionUtils utilities,
batched DealProduct updates, lazy old stage load, dot-notation
field resolution in CalculateLeadScores.

373 tests, 0 failures, 90% coverage.
2026-03-29 11:53:57 -05:00
james.maes e4abdcda94 test: add customizer tests, integration test, 90.2% coverage
- FormSubmissionAutoLinkCustomizerTest (3 tests)
- CrmIntegrationTest: full end-to-end lifecycle test covering contact,
  company, form auto-link, activities, pipeline, deal stage progression,
  products, audit log, and stage history
- 369 tests, 0 failures, 90.2% instruction coverage
2026-03-29 11:12:17 -05:00
james.maes dc08d1ed48 feat: customizer tests, GDPR audit scrub, AutoAssign QQueryFilter
- Add dedicated test classes for ActivityLastDate, DealStageChange,
  DealInit, DealProductRecalc customizers
- Implement GDPR audit log scrubbing with session bypass flag
- Improve AutoAssign criteriaJson evaluation
- 363 tests, 0 failures
2026-03-29 11:04:22 -05:00
james.maes 622218812b feat: add FormSubmissionAutoLinkCustomizer
Auto-links contactId on form submission insert when a contact with
matching email already exists. Wired via postProduceActions.
2026-03-29 08:10:28 -05:00
james.maes 316e790691 fix: implement table customizers, PRE_DELETE guards, and process quality fixes
- Wire CrmAuditLogCustomizer on Contact/Company/Deal/Activity via postProduceActions
- Add ActivityLastDateCustomizer (updates lastActivityDate/lastContactedDate)
- Add DealStageChangeCustomizer (stage validation, weightedAmount, history)
- Add DealInitializationCustomizer (initial stageEnteredDate, weightedAmount)
- Add DealProductRecalculationCustomizer (totalAmount, parent deal amount)
- Add PRE_DELETE guards: ActivityType(system), PipelineStage(active deals),
  Product(line items), EmailTemplate(active sequences)
- Add ConsentRecord append-only enforcement
- Add @ChildTable on Contact, Company; fix missing children on Deal, Activity
- Add FormSubmissionAutoLinkCustomizer
- Add sendWindow/timezone/businessDays to ProcessSequenceSteps
- Add dot-notation fieldPath and DAYS_AGO operators to CalculateLeadScores
- Update test assertions for new customizer behavior
2026-03-29 08:08:23 -05:00
james.maes 5d1797fde6 docs: expand README with complete integration guide
Add step-by-step instructions for consuming the QBit: Maven setup,
QInstance wiring, database schema, app navigation, seed data, multi-
tenant security, companion QBits, and complete working example.
2026-03-29 07:41:34 -05:00
CircleCI 1f29e30a86 Bump version to 0.1.0 [skip ci] 2026-03-29 12:36:55 +00:00
james.maes 02c1921bfb chore: add .editorconfig to diverge develop from main 2026-03-29 07:20:22 -05:00