FileNotFoundError means no recent release carries the asset, which is not the same as the
source never having published: a rate limit or a run of releases missing the asset reaches
the same branch and would erase the accumulated history.
- add --allow-bootstrap; without it a missing asset is now a hard failure
- plumb it through the reusable workflow, and set it for Transport Canada only, which has
genuinely never published
- let a tolerated source that produced nothing upload nothing, rather than failing its leg
and blocking the join a required source depends on
Generated-by: Claude Opus 5 <noreply@anthropic.com>
- key the reusable workflow's concurrency on the source: one shared group made the matrix
legs cancel each other, defeating the parallelism
- resolve action versions at write time on the jobs this change adds (checkout v7,
setup-python v7, upload-artifact v7, download-artifact v8) and add the missing
workflow concurrency block and job-level permissions
- stage each leg's outputs into one directory so every artifact has the same root; two
search paths moved the root to the common ancestor for some legs only, and the FAA CSV
and zip then matched nothing downstream
- fail a leg that produced no CSV, and split the unknown-source guard out of the tolerated
step so a matrix typo goes red
- write continue-on-error as an explicit comparison rather than relying on ! coercion
- gate the join on success rather than always, and rename its artifact so the download
pattern cannot re-ingest it on a re-run
- delete the previous release only when it exists, so a 403 stops the run instead of
leaving two assets that the next run reads as an ambiguous base
Generated-by: Claude Opus 5 <noreply@anthropic.com>
- add a reusable registry-source workflow so every source runs in parallel rather than as
a hand-written job; adding a registry becomes one matrix entry plus one script
- add build_registry.py to align the per-source CSVs on the union of columns and emit a
single table discriminated by the source column
- reindex each frame to the union before concatenating, so a source missing a column
yields an empty cell rather than a shifted row
Generated-by: Claude Opus 5 <noreply@anthropic.com>