Confirmed problem
After a campaign is generated, changing notes, audience, links, repository, uploaded source text, selected destinations, provider, model, or endpoint does not invalidate the existing review. Users can unknowingly review, export, or publish drafts produced from an older source.
Scope
- Define a normalized source snapshot and stable fingerprint.
- Store the fingerprint on every generation run.
- Recompute it whenever a generation-relevant field changes.
- Keep old output visible but mark it as generated from an older snapshot.
- Block final export and publishing while stale unless an explicitly designed archival action is used.
Acceptance criteria
Required verification
- Reducer/domain tests for every generation-relevant field.
- Save/reopen regression test.
- UI integration test for stale banner and blocked actions.
- Frontend tests and production build must pass.
Dependency
Start after the minimal canonical CampaignState, SourceSnapshot, and GenerationRun contracts exist.
Confirmed problem
After a campaign is generated, changing notes, audience, links, repository, uploaded source text, selected destinations, provider, model, or endpoint does not invalidate the existing review. Users can unknowingly review, export, or publish drafts produced from an older source.
Scope
Acceptance criteria
Required verification
Dependency
Start after the minimal canonical
CampaignState,SourceSnapshot, andGenerationRuncontracts exist.