34 tables: 10 seeded by the new crm-defaults.changelog.sql, 24 start empty with a stated reason (user content, runtime-written, or host-specific). Every table help now says "How rows get created". The home has a Setup card.
Changes
crm-defaults.changelog.sql (insert-only; table-exists and tenant_key preconditions; lists seeded only while empty, pipeline only if none exists, base currency only if none). CrmStarterData unchanged.
Setup card (crm_setup widget, CrmSetupStatus): default pipeline, stages (incl. closed won/lost), lifecycle Lead/Opportunity, base currency, email delivery (CrmReadiness). Resolves config the way the runtime does.
Help bundle extended for all 34 tables and the app.
crm_currency.rateLastUpdatedDate now stamped on insert and when the rate changes (CurrencyRateDateCustomizer), field read-only.
crm_external_mapping: no writer exists; help says "not used yet" (only erasure reads it).
Tests
CrmDefaultsChangelogTest (real Liquibase on H2: applies once, second update runs nothing, missing tables and tenant schemas MARK_RAN; plus SQL-level idempotency/edit survival), CrmTablesGuardrailTest, CrmSetupStatusTest, CurrencyRateDateTest. ./mvnw verify green.
Not done
crm_external_mapping stays unwritten (a sync is more than a day).
Tenant-enabled hosts must seed per tenant themselves.
No "Create defaults" table action (changelog covers it).
## Audit result
34 tables: 10 seeded by the new `crm-defaults.changelog.sql`, 24 start empty with a stated reason (user content, runtime-written, or host-specific). Every table help now says "How rows get created". The home has a Setup card.
## Changes
- `crm-defaults.changelog.sql` (insert-only; table-exists and tenant_key preconditions; lists seeded only while empty, pipeline only if none exists, base currency only if none). CrmStarterData unchanged.
- Setup card (`crm_setup` widget, `CrmSetupStatus`): default pipeline, stages (incl. closed won/lost), lifecycle Lead/Opportunity, base currency, email delivery (CrmReadiness). Resolves config the way the runtime does.
- Help bundle extended for all 34 tables and the app.
- `crm_currency.rateLastUpdatedDate` now stamped on insert and when the rate changes (`CurrencyRateDateCustomizer`), field read-only.
- `crm_external_mapping`: no writer exists; help says "not used yet" (only erasure reads it).
## Tests
`CrmDefaultsChangelogTest` (real Liquibase on H2: applies once, second update runs nothing, missing tables and tenant schemas MARK_RAN; plus SQL-level idempotency/edit survival), `CrmTablesGuardrailTest`, `CrmSetupStatusTest`, `CurrencyRateDateTest`. `./mvnw verify` green.
## Not done
- crm_external_mapping stays unwritten (a sync is more than a day).
- Tenant-enabled hosts must seed per tenant themselves.
- No "Create defaults" table action (changelog covers it).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Audit result
34 tables: 10 seeded by the new
crm-defaults.changelog.sql, 24 start empty with a stated reason (user content, runtime-written, or host-specific). Every table help now says "How rows get created". The home has a Setup card.Changes
crm-defaults.changelog.sql(insert-only; table-exists and tenant_key preconditions; lists seeded only while empty, pipeline only if none exists, base currency only if none). CrmStarterData unchanged.crm_setupwidget,CrmSetupStatus): default pipeline, stages (incl. closed won/lost), lifecycle Lead/Opportunity, base currency, email delivery (CrmReadiness). Resolves config the way the runtime does.crm_currency.rateLastUpdatedDatenow stamped on insert and when the rate changes (CurrencyRateDateCustomizer), field read-only.crm_external_mapping: no writer exists; help says "not used yet" (only erasure reads it).Tests
CrmDefaultsChangelogTest(real Liquibase on H2: applies once, second update runs nothing, missing tables and tenant schemas MARK_RAN; plus SQL-level idempotency/edit survival),CrmTablesGuardrailTest,CrmSetupStatusTest,CurrencyRateDateTest../mvnw verifygreen.Not done
🤖 Generated with Claude Code