All 19 marketing_* tables are read or written by runtime code (checked by MarketingTablesGuardrailTest). Eight are seeded by the existing starter data action (product, evidence_source, claim, audience, campaign, metric, channel, policy); eleven hold work and results and start empty by design (content, revision, approval, execution, attempt, test_delivery, agent_run, agent_step, finding, outcome_event, metric_daily), each with a reason in STARTS_EMPTY.
Half-wired items
marketing_channel.rulesVerifiedDate had no staleness check. Fixed: new config staleChannelRulesDays (default 90); Check Readiness on a campaign warns when content uses a channel whose rules were last read longer ago than that, like staleSourceDays for sources (ChannelRulesStalenessTest: fresh, 91 days, 89 days, configurable window, unverified channel keeps its own warning).
marketing_channel.rulesSourceUrl had no reader but the agent tool. Fixed: the stale and the "not verified" findings now say "Read "; field help says so.
marketing_campaign.leadQualificationNote had no reader. It is a free-text note by design (the rule is the other fields); now also shown to the agent in its campaign view, and its help already says it is a note.
Found while auditing: the help bundle was never applied at run time (only tests read it; core #1198 has not shipped). Added MarketingHelp (STAND-IN core=QRun-IO/qqq#1198, removeBy=4.1.0-RC.8), which fills empty app/table help slots and resolves the {{label|default|maxLength|values}} references, called at the end of the producer. Field, process and widget entries are still not applied (they need core).
What changed
Every table entry now says How rows get created, naming Load Verified Starter Data for the eight tables it seeds, and the actions (Schedule, Approve, agent actions, Check Readiness, Update Results from CRM, Rebuild Results) for the rest. Bundle version: 1.
README (Starter data and setup), OPERATIONS (config), UPGRADE.md, CHANGELOG.
No Setup card added: the Configuration Status widget already exists.
Tests
ChannelRulesStalenessTest, MarketingTablesGuardrailTest (use, seeded or explained, help says how rows get created and names the starter action, references resolved, host help kept). ./mvnw verify green (95 tests, checkstyle, JaCoCo, StandInGuardrailTest).
Not done
Applying field, process and widget help entries at run time (waits for core #1198).
## Audit per table
All 19 `marketing_*` tables are read or written by runtime code (checked by `MarketingTablesGuardrailTest`). Eight are seeded by the existing starter data action (product, evidence_source, claim, audience, campaign, metric, channel, policy); eleven hold work and results and start empty by design (content, revision, approval, execution, attempt, test_delivery, agent_run, agent_step, finding, outcome_event, metric_daily), each with a reason in `STARTS_EMPTY`.
## Half-wired items
- `marketing_channel.rulesVerifiedDate` had no staleness check. **Fixed**: new config `staleChannelRulesDays` (default 90); Check Readiness on a campaign warns when content uses a channel whose rules were last read longer ago than that, like `staleSourceDays` for sources (`ChannelRulesStalenessTest`: fresh, 91 days, 89 days, configurable window, unverified channel keeps its own warning).
- `marketing_channel.rulesSourceUrl` had no reader but the agent tool. **Fixed**: the stale and the "not verified" findings now say "Read <url>"; field help says so.
- `marketing_campaign.leadQualificationNote` had no reader. It is a free-text note by design (the rule is the other fields); now also shown to the agent in its campaign view, and its help already says it is a note.
- Found while auditing: the help bundle was **never applied at run time** (only tests read it; core #1198 has not shipped). Added `MarketingHelp` (STAND-IN core=QRun-IO/qqq#1198, removeBy=4.1.0-RC.8), which fills empty app/table help slots and resolves the `{{label|default|maxLength|values}}` references, called at the end of the producer. Field, process and widget entries are still not applied (they need core).
## What changed
- Every table entry now says **How rows get created**, naming **Load Verified Starter Data** for the eight tables it seeds, and the actions (Schedule, Approve, agent actions, Check Readiness, Update Results from CRM, Rebuild Results) for the rest. Bundle `version: 1`.
- README (Starter data and setup), OPERATIONS (config), UPGRADE.md, CHANGELOG.
- No Setup card added: the Configuration Status widget already exists.
## Tests
`ChannelRulesStalenessTest`, `MarketingTablesGuardrailTest` (use, seeded or explained, help says how rows get created and names the starter action, references resolved, host help kept). `./mvnw verify` green (95 tests, checkstyle, JaCoCo, StandInGuardrailTest).
## Not done
Applying field, process and widget help entries at run time (waits for core #1198).
🤖 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 per table
All 19
marketing_*tables are read or written by runtime code (checked byMarketingTablesGuardrailTest). Eight are seeded by the existing starter data action (product, evidence_source, claim, audience, campaign, metric, channel, policy); eleven hold work and results and start empty by design (content, revision, approval, execution, attempt, test_delivery, agent_run, agent_step, finding, outcome_event, metric_daily), each with a reason inSTARTS_EMPTY.Half-wired items
marketing_channel.rulesVerifiedDatehad no staleness check. Fixed: new configstaleChannelRulesDays(default 90); Check Readiness on a campaign warns when content uses a channel whose rules were last read longer ago than that, likestaleSourceDaysfor sources (ChannelRulesStalenessTest: fresh, 91 days, 89 days, configurable window, unverified channel keeps its own warning).marketing_channel.rulesSourceUrlhad no reader but the agent tool. Fixed: the stale and the "not verified" findings now say "Read "; field help says so.marketing_campaign.leadQualificationNotehad no reader. It is a free-text note by design (the rule is the other fields); now also shown to the agent in its campaign view, and its help already says it is a note.MarketingHelp(STAND-IN core=QRun-IO/qqq#1198, removeBy=4.1.0-RC.8), which fills empty app/table help slots and resolves the{{label|default|maxLength|values}}references, called at the end of the producer. Field, process and widget entries are still not applied (they need core).What changed
version: 1.Tests
ChannelRulesStalenessTest,MarketingTablesGuardrailTest(use, seeded or explained, help says how rows get created and names the starter action, references resolved, host help kept)../mvnw verifygreen (95 tests, checkstyle, JaCoCo, StandInGuardrailTest).Not done
Applying field, process and widget help entries at run time (waits for core #1198).
🤖 Generated with Claude Code