This release hardens Bundle splitting in the DIMP step: the partitioner now computes the exact Bundle wrapper size, counts entry separators, and passes an empty Bundle through unchanged, so chunks no longer overshoot the size threshold. Flattening becomes more robust — aether now requests NDJSON from the fhir-flattener and builds the CSV itself, which fixes parse failures on free text, and a failed CSV write is kept as a .partial file instead of a truncated result. A new install-dev.sh installs a build from a pull request or from main in one step. CI gains Go native fuzz targets, a compatibility test against the pinned fhir-ontology-generator flattening release, and per-PR binary builds for all platforms.
What's Changed
Features
feat: addinstall-dev.shto install a PR or main build —./install-dev.sh 663installs the binary built for pull request 663;./install-dev.sh main(or no argument) installs the newest main build. (closes #665) #666
Bug Fixes
fix(dimp): compute the exact Bundle wrapper size when partitioning — the partitioner used an estimate of the wrapper size, so a chunk could exceed the configured threshold. It now measures the real serialized wrapper. (closes #659) #661fix(dimp): count entry separators when partitioning a Bundle — the,separators between entries were missing from the size calculation, another source of oversized chunks. (closes #649) #657fix(dimp): return an empty Bundle unchanged when splitting —SplitBundleno longer produces a chunk with an emptyentryarray for a Bundle without entries. (closes #650) #658fix(flattening): keep failed CSV output as.partialand report write errors — a batch that fails mid-write no longer leaves a file that looks complete; the output keeps a.partialsuffix and the error is reported. (closes #669) #671fix(flattening): emit only one warning for a deprecatedparentfield — loading a lookup table with authoredparentfields logged one warning per entry; it now logs one warning per file. (closes #672) #673fix(config): reject ISO 8601 durations that overflowtime.Duration— an overflowing duration in the config now fails validation instead of wrapping around. (closes #647) #656fix(compression): match the.zstsuffix case insensitively when stripping — a file named.ZST/.Zstis now recognized as compressed. (closes #648) #655
Internal & CI
refactor(flattening): request NDJSON from the flattener instead of CSV — the chain had two CSV dialects (Spark CSV from fhir-flattener, RFC 4180 in aether), so free text with an embedded quote stopped the step. aether now receives NDJSON, maps values by column name, and writes the CSV once. (closes #668) #670test(fuzz): add Go native fuzz targets over the code that reads untrusted input. (closes #646) #651test(compat): add a compatibility test against the pinned fhir-ontology-generator flattening release — a new CI job loads the releasedflatteningLookup.jsonand builds a ViewDefinition for every profile in it. (closes #645) #654ci: build the binary for all platforms on every pull request. (closes #644) #652ci: run in-package tests under coverage. (closes #674) #675ci: set Go up in the e2e-test job. (closes #662) #663ci(docs-deploy): scopecontents: writeto the deploy job. (closes #641) #643