Fourth increment of #129. Makes the output trustworthy rather than merely present.
The problem, from a real import
Organiser Name silently fell back to the blueprint placeholder while every other organiser field extracted fine. Nothing said so. The page looked complete and was not.
That is the dangerous failure: not a crash, not an empty field, but a plausible-looking value that came from the blueprint instead of the source. At 135 tours, silent fallback is how a bad page reaches production.
The tool
warnings[] on the response, populated for every destination field that ended up with its blueprint default rather than mapped content.
warnings: [
{ field: "organiserName", reason: "no source content matched; kept blueprint default" }
]
Applies to both dryRun: true and a real import — knowing before creating is better.
What counts as a warning
- A mapping exists but matched nothing in the source
- A field has a blueprint value and no mapping targets it, so nothing could ever fill it
- A mapping targets something not in
destination.json (stale after a blueprint change)
The third overlaps existing ValidateConfig startup warnings. Worth reusing rather than duplicating the logic.
What is not a warning
Fields deliberately left to the blueprint. Not everything is meant to be filled from a source, and warning about those would train people to ignore the list.
Distinguishing the two may need something in the workflow config — an expectation that a field should be filled. Worth checking whether the map already implies it before adding config.
Done when
Part of #129. Follows #132.
Fourth increment of #129. Makes the output trustworthy rather than merely present.
The problem, from a real import
Organiser Name silently fell back to the blueprint placeholder while every other organiser field extracted fine. Nothing said so. The page looked complete and was not.
That is the dangerous failure: not a crash, not an empty field, but a plausible-looking value that came from the blueprint instead of the source. At 135 tours, silent fallback is how a bad page reaches production.
The tool
warnings[]on the response, populated for every destination field that ended up with its blueprint default rather than mapped content.Applies to both
dryRun: trueand a real import — knowing before creating is better.What counts as a warning
destination.json(stale after a blueprint change)The third overlaps existing
ValidateConfigstartup warnings. Worth reusing rather than duplicating the logic.What is not a warning
Fields deliberately left to the blueprint. Not everything is meant to be filled from a source, and warning about those would train people to ignore the list.
Distinguishing the two may need something in the workflow config — an expectation that a field should be filled. Worth checking whether the map already implies it before adding config.
Done when
Part of #129. Follows #132.