Problem
Splash has conflicting source rules. Gate 2 can accept a named source without a URL, while render review treats any named dataset/publication without a specific public URL as incomplete. This guarantees late concerns for legitimate local, private, synthetic, or unpublished newsroom datasets.
The current model also cannot distinguish “no URL exists” from “the agent forgot to collect the URL”.
@rmdms
Suggested solution
Define one shared source model and policy used by proposal validation, production, render review, and delivery.
Suggested source kinds:
public: named external dataset/publication; requires a specific traceable URL.
local: journalist-provided file; requires a display label plus file hash/path provenance in the private run manifest, not necessarily a public URL.
private: newsroom/internal dataset; requires a display-safe attribution and optional internal reference, with no private URL leaked into the visual.
synthetic: test/demo data; must be labelled fictional/test data and blocked from real publication unless the run itself is explicitly a test.
prose: figures attributed only to the article or named outlet; uses the established honest prose fallback.
none: only for visual forms that genuinely have no external factual data.
Create a single validateSourcePolicy module consumed at every gate. It should decide required fields, display furniture, privacy handling, and whether the source is shippable for the run mode.
The preflight/CADRAGE flow should ask one targeted question only when the source kind or required metadata cannot be determined from the supplied materials.
Acceptance criteria
- Gate 2 and render review apply the same source policy and never contradict one another.
- Public named sources require a specific dataset/page URL.
- Local/private sources can be valid without a public URL while retaining auditable private provenance.
- Private paths/URLs never appear in exported visuals or public manifests.
- Synthetic data is visibly marked and cannot accidentally ship as real reporting.
- Existing source fields migrate without silently widening what is considered valid.
- Tests cover every source kind, privacy redaction, public URL specificity, synthetic test mode, and render furniture.
Problem
Splash has conflicting source rules. Gate 2 can accept a named source without a URL, while render review treats any named dataset/publication without a specific public URL as incomplete. This guarantees late concerns for legitimate local, private, synthetic, or unpublished newsroom datasets.
The current model also cannot distinguish “no URL exists” from “the agent forgot to collect the URL”.
@rmdms
Suggested solution
Define one shared source model and policy used by proposal validation, production, render review, and delivery.
Suggested source kinds:
public: named external dataset/publication; requires a specific traceable URL.local: journalist-provided file; requires a display label plus file hash/path provenance in the private run manifest, not necessarily a public URL.private: newsroom/internal dataset; requires a display-safe attribution and optional internal reference, with no private URL leaked into the visual.synthetic: test/demo data; must be labelled fictional/test data and blocked from real publication unless the run itself is explicitly a test.prose: figures attributed only to the article or named outlet; uses the established honest prose fallback.none: only for visual forms that genuinely have no external factual data.Create a single
validateSourcePolicymodule consumed at every gate. It should decide required fields, display furniture, privacy handling, and whether the source is shippable for the run mode.The preflight/CADRAGE flow should ask one targeted question only when the source kind or required metadata cannot be determined from the supplied materials.
Acceptance criteria