Skip to content

v0.2.4

Choose a tag to compare

@github-actions github-actions released this 02 Oct 13:39
· 1435 commits to main since this release
v0.2.4
bcd7b84

What's Changed

What's Changed

  • ci: add Inferno US Quality Core test suite workflow (sqlite) by @smunini in #1285
  • ci(inferno-qc): bound HL7 validator memory, gate on its readiness, capture stack logs by @smunini in #1286
  • ci(deploy): enable subscriptions and provision NL search key for deployed hfs by @smunini in #1282
  • fix(ui): report the cause of Bulk Import kick-off transport failures by @smunini in #1284
  • feat(mongodb): composite search parameters (#1206) by @dougc95 in #1232
  • fix(s3): bulk-submit batches rolled back the lease they ran under, so the other worker reclaimed it every 60 s (#1229) by @angela-helios in #1237
  • fix(ui): say on the Import pages when the search index is still rebuilding (#1245) by @mauripunzueta in #1246
  • fix(bulk-export): preserve configured lease duration on heartbeat by @Gordex2014 in #1247
  • chore(deps): update chacha20 and spin off yanked versions by @smunini in #1248
  • fix(rest): $export on a backend without an export store says so, not 'disabled' (#1226) by @angela-helios in #1249
  • test(mongodb): run the integration suite on a replica set; fix SearchParameter cache reload ordering by @dougc95 in #1252
  • fix(rest): batch If-None-Exist on a search-less backend names the operation, not 'search' (#1225) by @angela-helios in #1254
  • fix(s3,sof): resolve canonicals and list SQL definitions by scan on standalone S3 (#1228) by @angela-helios in #1255
  • fix(search): composite comparison prefixes only strip from numeric component types (#1236 part 1) by @angela-helios in #1256
  • refactor(bulk-submit): collapse INDEX_DURING_INGEST into DEFER_INDEXING (#1242) by @angela-helios in #1258
  • fix(search): a type-mismatched _cursor sort value is a 400, not a 500 (#1120) by @angela-helios in #1259
  • fix(auth): POST $export is authorized as Read, like GET (#1123) by @angela-helios in #1261
  • fix(rest): apply unknown-parameter handling to compartment search (#787) by @eterceros in #1263
  • perf(everything): batch supporting-resource reads by type (#1119) by @angela-helios in #1268
  • fix(hts): surface SQLSTATE/message in PostgreSQL backend errors by @smunini in #1277
  • fix(bulk-export): local-fs requiresAccessToken follows the auth state (#1269) by @angela-helios in #1270
  • docs(matrix): $export works on s3-es (SQLite sidecar job store) (#1279) by @angela-helios in #1281
  • ci(inferno-qc): run US Quality Core against all backends by @smunini in #1287
  • fix(persistence): postgres date search ignored negative timezone offsets by @smunini in #1288
  • fix(search): parse the terminal value of chained and _has searches by @smunini in #1301
  • fix(persistence): parse conditional criteria like direct search parameters (#1312) by @smunini in #1320
  • fix(search): chain :Type qualifiers on the right hop, and terminal modifiers on chains and _has (#1302, #1303) by @smunini in #1311
  • fix(persistence): delegate composite chain/_has resolution to the shared resolver (#1304) by @smunini in #1308
  • fix(search): reject an unknown modifier on a direct search parameter (#1318) by @smunini in #1326
  • fix(search): 501 for a terminology modifier on a chained or _has terminal (#1317) by @smunini in #1329
  • fix(persistence): main does not compile — restore composite storage imports by @smunini in #1333
  • fix(hfs): compile without the mongodb feature on Postgres and S3 builds by @smunini in #1299
  • fix(elasticsearch): stop retrying malformed-query 400s and report them as 400 by @smunini in #1331
  • fix(persistence): never turn an unparseable date search value into now (#1289) by @smunini in #1298
  • fix(persistence): bind timestamps for Postgres chain-builder date terminals (#1290) by @smunini in #1305
  • fix(persistence): bind chained number/quantity terminals through the unchained predicates by @smunini in #1309
  • fix(persistence): strip chain-terminal prefixes only on ordered types (#1307) by @smunini in #1310
  • fix(persistence): unparseable number/quantity search values never widen a Postgres search by @smunini in #1332
  • fix(search): one date search grammar and precision range across all backends by @smunini in #1313
  • fix(persistence): elasticsearch indexes dates through the shared parser (#1314) by @smunini in #1325
  • fix(persistence): derive indexed date precision from the parsed value by @smunini in #1327
  • fix(persistence): postgres ORs the values of one search parameter (#1300) by @smunini in #1328
  • fix(persistence): index stored dateTimes that have minutes but no seconds (#1315) by @smunini in #1330
  • ci(deploy): seed the deployed hfs via $bulk-submit by @smunini in #1359
  • docs: hosted S3 manifest as alternative to fhir2.tar.gz in manual testing matrix [skip ci] by @smunini in #1368
  • ci: add postgres-elasticsearch and mongodb-elasticsearch legs to backend matrices by @smunini in #1342
  • fix(postgres): AND repeated parameters under _contained by @smunini in #1345
  • test(mongodb): load the spec search parameters in every test backend by @smunini in #1346
  • fix(persistence): reconcile ES index mappings at startup and retry search_count (#1335) by @smunini in #1347
  • fix(search): derive implicit precision from the exponent form of a number (#1337) by @smunini in #1348
  • feat(search): shared grammar and gate for number/quantity search values (#1340) by @smunini in #1349
  • fix: conditional criteria - repeated parameters, percent-decoding, unknown parameters (#1321, #1322, #1323) by @smunini in #1350
  • fix(search): modifier handling — 400 before 501, case-sensitive modifiers, version-aware type qualifiers, full nested _has keys (#1339) by @smunini in #1351
  • fix(fhir-gen): keep resourceDefinition on additional resources by @smunini in #1357
  • fix(persistence): route ES storage-side reads (count, read, reindex) through the shared retry/classifier by @smunini in #1369
  • fix(conditional): refuse empty criterion values; route conditional PATCH; settle conditional DELETE no-match (#1360, #1361) by @smunini in #1371
  • ci(inferno): use HeliosSoftware fork of us-quality-core-test-kit by @smunini in #1376
  • fix(sof): accept SQL on FHIR 3.0.0-ballot examples by @smunini in #1354
  • fix(search): _contained on every backend - AND repeated parameters, never drop a criterion (#1362, #1363) by @smunini in #1373
  • ci: pin RUSTUP_TOOLCHAIN — a runner's leftover nightly override was failing lint by @smunini in #1386
  • fix(search): type a chain's terminal parameter before expanding its terminology modifier (#1365) by @smunini in #1372
  • fix(search): one version-aware :[type] qualifier rule for every entry point (#1366) by @smunini in #1374
  • fix(fhir-validator): compile under FHIR version feature subsets (R4,R5); CI guard by @smunini in #1375
  • ci(inferno): pin US Quality Core test kit to our fixes, drop the known failure by @smunini in #1385
  • ci(inferno): add test kit ref and backend inputs to the US Quality Core run by @smunini in #1378
  • fix(search): match system|code token searches on code-typed elements (#1379) by @smunini in #1387
  • fix(search): SearchPrefix::is_valid_for agrees with the parser on sa/eb for numbers by @smunini in #1396
  • fix(persistence): retry and stop discarding Elasticsearch write failures (#1382) by @smunini in #1397
  • fix(search): _contained with no criterion, compartment, _has/_list and counts on all backends (#1383) by @smunini in #1398
  • fix(rest,persistence): honour If-Match on conditional update, delete and patch (#1381) by @smunini in #1399
  • fix(search): an empty search value or OR-alternative is refused or ignored, never a match-all (#1380) by @smunini in #1400
  • docs: correct crate/binary counts, add Windows worktree notes and .hfs-monitor/project.md by @eterceros in #1370
  • fix: derive conditional interactions in the CapabilityStatement (and their 501) from the storage; FHIR version for CompositeStorage by @smunini in #1401
  • test(persistence): ES write wiremock tests fail on Windows (assumed instant connection refusal) by @smunini in #1409
  • feat(ui): persist the Home chart's selected types across navigation (#1358) by @angela-helios in #1410
  • chore: add create-issue agent skill by @Gordex2014 in #1412
  • perf(s3): concurrent bulk-submit ingest + raw-archive coalescing (#945, #1429) by @angela-helios in #1411
  • fix(bulk-export): get the Inferno Bulk Data workflow green again by @smunini in #1424
  • fix(postgres): flatten multi-value _id predicates by @Gordex2014 in #1417
  • fix: unblock subscriptions-smoke (S3 loader without R4; smoke ids via PUT) by @smunini in #1418
  • fix(mongodb): serve :of-type, reference :identifier, :[type] and :above/:below by @smunini in #1419
  • Fix URL encoding of visual search condition values by @Gordex2014 in #1420
  • fix(persistence): atomic versioned update/delete; MongoDB lost race is 409, not 500 by @smunini in #1421
  • feat(persistence): one patch applier and one conditional_patch for every backend by @smunini in #1422
  • fix(search): _contained remainder — contained _id rows, _sort, Postgres modifiers, composites, compartment by @smunini in #1423
  • fix(rest): refuse system-level search with 501 and stop advertising search-system (#1338) by @smunini in #1425
  • feat(composite): count, report, durably record and repair failed secondary syncs (#1334) by @smunini in #1428
  • fix(elasticsearch): a read of an index still being created waits for its primary shard (#1402) by @smunini in #1430
  • stream resources to fix OOM scan by @bomanaps in #1196
  • fix(postgres): index bare reference ID searches by @Gordex2014 in #1427
  • perf(postgres): avoid repeated parameter rescans by @Gordex2014 in #1431
  • fix(ui): group result counts by locale by @Gordex2014 in #1432
  • fix(s3): re-land the same-id concurrency guard + raw coalescing dropped from #1411 by @angela-helios in #1433
  • perf(s3): coalesce the bulk-submit change log to one object per batch by @angela-helios in #1434
  • fix(metadata): advertise SMART-on-FHIR in rest.security when auth is enabled by @angela-helios in #1442
  • fix(bulk-submit-ui): add iat to the Import page client assertion so Keycloak accepts it by @angela-helios in #1443
  • fix(ui/search-parameters): report the failed self-call, not a missing spec bundle by @angela-helios in #1444
  • fix(bulk-submit): mirror rollbacks to Elasticsearch on the deferred path by @eterceros in #1445
  • fix(ui): authenticate the Import and Export pages' self-calls with the outbound provider (#1436, #1438) by @angela-helios in #1448
  • feat(ui/auth): interactive browser login (Authorization Code + PKCE) with a server-side session by @angela-helios in #1454
  • fix(persistence): clear every merged manifest's index_pending marker by @eterceros in #1447
  • bench(persistence): chain resolver vs native SQL chain builders — recommend deleting the native path by @smunini in #1450
  • fix(sof): fetch compartment supporting resources by id, not by scan by @smunini in #1464
  • Retain grouped fresh creates in mixed PostgreSQL bulk-submit batches by @Gordex2014 in #1465
  • fix(ui): keep the busy button's label visible beside its spinner by @eterceros in #1446
  • fix(persistence): honor PostgreSQL reindex page byte limits by @Gordex2014 in #1469
  • Cache six fixed PostgreSQL import bookkeeping statements by @Gordex2014 in #1466
  • perf(bulk-submit): run PostgreSQL files in independent tasks by @Gordex2014 in #1467
  • Recover only the failing PostgreSQL FTS group during reindex (#1462) by @Gordex2014 in #1471
  • Preserve grouped PostgreSQL creates above 100 entries by @Gordex2014 in #1468
  • Fetch PostgreSQL reindex retry resources directly by ID by @Gordex2014 in #1470
  • feat(ui): show the signed-in user in the account menu, with Sign out as a POST form by @angela-helios in #1476
  • fix(bulk-export): stop a deleted export's worker from orphaning its output directory by @eterceros in #1477
  • perf(s3): coalesce the bulk-submit receipts to one object per batch (#1429) by @angela-helios in #1478
  • fix(postgres): classify final reindex failures by SQL cause by @Gordex2014 in #1486
  • Speed up standalone PostgreSQL reindex with bounded write groups by @Gordex2014 in #1487
  • test(rest): pin tenant-scoped custom search parameters as conditional criteria by @eterceros in #1483
  • Support same-type MongoDB composites after #1495 by @Gordex2014 in #1508
  • Fix remaining contained search gaps in MongoDB and Elasticsearch by @Gordex2014 in #1495
  • fix(rest): honour Prefer: return=OperationOutcome on delete and conditional delete by @eterceros in #1484
  • fix(persistence): match system| in SQL chain terminals, refuse unresolved chains in search() by @eterceros in #1485
  • feat(ui): run page-initiated exports and SQL exports as the signed-in user by @angela-helios in #1488
  • fix(sqlite): honor precision of short fractional date searches by @Gordex2014 in #1489
  • fix(persistence): index Period search values as one [start, end) range by @eterceros in https://github.com//pull/1490
  • fix(persistence): make token |code mean "no system" on PostgreSQL and MongoDB by @eterceros in #1491
  • Fix MongoDB offloaded transaction conditional scans (#1394) by @Gordex2014 in #1493
  • Fix large chained searches in SQLite and PostgreSQL by @Gordex2014 in #1497
  • Validate PATCH writes and enable Bundle PATCH (#1393) by @Gordex2014 in #1498
  • Fix chain resolver paging for wide intermediate hops by @Gordex2014 in #1501
  • ui: show the SQL attachment in the SQL Library Details JSON and keep it in sync with the SQL card by @andyguz17 in #1504
  • ui: unsaved-changes cue and leave guard on every editing screen by @andyguz17 in #1505
  • fix(bulk-export): validate the Until instant and reject an Until earlier than Since by @eterceros in #1509
  • feat(auth): keep web login sessions in the primary store (#1481) by @angela-helios in #1492
  • fix(persistence): one shared ap rule for numbers and quantities on every backend by @eterceros in #1494
  • feat(auth): keep web login sessions in PostgreSQL, MongoDB and S3 too (#1481) by @angela-helios in #1496
  • ui: rework the resource editor's "+ Add Element" picker (feedback after adding, closing, size) by @andyguz17 in #1511
  • fix(persistence): bind TextArray params in the id-only PostgreSQL search by @andyguz17 in #1521
  • fix(ui): render the Parameters card on a new SQL Query so its values can be typed by @eterceros in #1513
  • test(bulk-submit): serve benchmark fixtures over HTTP/1.1 and apply T3 matrix corrections by @eterceros in #1482
  • fix(persistence): add meta.versionId and meta.lastUpdated to bulk export NDJSON by @eterceros in #1507
  • perf(mongodb): reindex instrumentation, no behaviour change (#1403 PR0) by @dougc95 in #1510
  • perf(mongodb): id-order $reindex walk with catch-up rounds (#1403 PR1) by @dougc95 in #1512
  • perf(mongodb): honour HFS_REINDEX_BATCH_BYTES; 32 MiB server default (#1403 PR2a) by @dougc95 in #1516
  • docs(hfs-monitor): give the descriptor the rules its prompts are losing by @eterceros in #1523
  • feat(dashboard): count from Elasticsearch when the S3 primary cannot (#1280) by @angela-helios in #1518
  • fix(ci,rest): the three deterministic reds of the nightly UI matrix by @angela-helios in #1525
  • docs(matrix): set the #937 indexing settings on *-es rows for T3 by @eterceros in #1529
  • feat(s3): serve identifier-scoped conditional create (#1435) by @angela-helios in #1517
  • perf(mongodb): overlap and parallelise $reindex page preparation (#1403 PR2b) by @dougc95 in #1519
  • fix(bulk-export): decide Patient-compartment membership from the CompartmentDefinition, not two fixed paths by @angela-helios in #1522
  • fix(hfs): drain on SIGTERM as well as Ctrl-C (Phase 0.3) by @aacruzgon in #907
  • fix(persistence): never claim an unleased 'processing' bulk-submit manifest by @smunini in #1533
  • fix(hts): report the full match count in search Bundle.total and honor _summary=count by @smunini in #1537
  • docs(rest): bring the Bundle section of the README up to date by @smunini in #1541
  • ci(deploy): deploy hts first and gate the clients on it serving by @smunini in #1536
  • feat(bulk): release export/submit leases on graceful shutdown (#1531) by @smunini in #1538
  • feat(rest,persistence): resolve PATCH [type]?[criteria] inside a transaction by @smunini in #1540
  • ci(bench): benchmark all six storage backends (#1475) by @dougc95 in #1544
  • ci: pull MinIO from the GHCR mirror everywhere quay.io was still used (#1520) by @angela-helios in #1546
  • ci(bench): harden shared-host cleanup in fhir-benchmark.yml by @dougc95 in #1543
  • ci(bench): stream the per-shape search attribution instead of slurping it by @dougc95 in #1547
  • fix(search): refuse conditional criteria made only of result parameters (#1542) by @angela-helios in #1551
  • fix(elasticsearch): split an id list past index.max_terms_count into several terms clauses (#1548) by @angela-helios in #1552
  • fix(bulk-export): cancelling a running export never answers 500 nor orphans a part by @angela-helios in #1553
  • fix(sof): $sql-run and $sql-export reject an unparsable _since with 400 like $export by @angela-helios in #1554
  • ci(bulk-submit-smoke): MongoDB and the S3 composite run the full submit flow by @angela-helios in #1555
  • fix(s3): escape the client identifiers in $bulk-submit object keys (#1556) by @angela-helios in #1557
  • fix(s3): ingest the manifests of a submission completed at kick-off (#1558) by @angela-helios in #1559
  • fix(ui): say once when auth is on and no browser sign-in is configured (#1560) by @angela-helios in #1562
  • fix(ui/import): a rejected poll credential keeps the submission in progress (#1561) by @angela-helios in #1563
  • ui: rework the SQL Query / SQL View Tables card (Reads from / Used by) by @andyguz17 in #1565
  • fix(sql-export): keep completed export jobs downloadable across a restart (#1474) by @dougc95 in #1566
  • perf(mongodb): look up named reindex retries by id instead of walking the type (#1500) by @dougc95 in #1567
  • fix(mongodb): let a positive _id bound the search instead of tripping the 300k cap (#1528) by @dougc95 in #1568
  • fix(ui/export): a refused cancel keeps the card in progress and says why (#1571) by @angela-helios in #1573
  • fix(rest): an unmatched path answers 404, not the console-admin gate (#1584) by @angela-helios in #1585
  • docs(bulk-submit): the defer switch is the index-during-ingest lever, not the removed variable [skip ci] by @angela-helios in #1587
  • feat(persistence): sort MongoDB searches by several search parameters (#1564) by @doctorvk in #1574
  • chore(sof): trace the SQL the in-DB runners compile a view into by @angela-helios in #1589
  • fix(sof): the SQLite runner keeps NULL columns, and CSV writes them empty (#1569) by @angela-helios in #1591
  • fix(rest): refuse a transaction on a non-atomic backend before resolving references (#1590) by @angela-helios in #1592
  • perf(bulk-export): index PostgreSQL patient compartment candidates (#1582) by @Gordex2014 in #1594
  • ci(ui-tests-matrix): run the dashboard chart specs on the s3-elasticsearch leg (#597) by @angela-helios in #1595
  • docs(s3): bucket-per-tenant is a library mode, not one the hfs binary configures (#1514) [skip ci] by @angela-helios in #1599
  • perf(postgres): optimize broad Observation code-quantity searches by @Gordex2014 in #1601
  • docs(cluster): "Running HFS in a Cluster" operator chapter and cluster-testing skill section (Phase 0.5) by @aacruzgon in #909
  • fix(sof): a failed $sql-export answers the status $sql-run gives the fault (#1570) by @angela-helios in #1572
  • fix(persistence): quote strings spliced into SQL through one helper by @smunini in #1604
  • fix(persistence): refuse result-parameter-only criteria on Mongo and S3 by @smunini in #1605
  • fix(search): sort a missing _sort value last on every backend (#1606) by @smunini in #1607
  • fix(ui): clear only bulk export resource types by @Gordex2014 in #1611
  • test(search): re-resolve chains on each poll in the token-chain suite by @smunini in #1608
  • fix(ui): preserve pending export filters by @Gordex2014 in #1612
  • fix(ui): refuse anonymous tenant and bulk-import requests in the bearer-only posture (#1619) by @angela-helios in #1620
  • fix(fhirpath): bound parse nesting so a deep expression cannot abort the process (#1621) by @angela-helios in #1622
  • fix(bulk-submit): resume a reclaimed manifest where the earlier run stopped, on every backend (#1610) by @angela-helios in #1614
  • fix(persistence): scope clearExisting to the reindex's types or resources (#1624) by @doctorvk in #1627
  • perf(postgres): optimize reverse-chain and patient-scoped searches by @Gordex2014 in #1597
  • perf(sof): push eligible preview limits into SQL by @Gordex2014 in #1609
  • test(search): resolve the chain again on every retry of the Elasticsearch positive control by @angela-helios in #1615
  • fix(rest): a request for XML on a build without the xml feature is 406, not 500 by @angela-helios in #1617
  • Revert "docs(cluster): Running HFS in a Cluster chapter (#909)" by @smunini in #1626
  • fix(persistence): Elasticsearch resource-scoped clearExisting removes stale documents by @smunini in #1630
  • fix(search): reject ambiguous contained composites on SQL backends by @Gordex2014 in #1631
  • fix(clippy): build clean on Rust 1.99 by @smunini in #1639
  • ci: skip du on Windows in target dir GC; note 500GB C: [skip ci] by @smunini in #1646
  • feat(rest,persistence): resolve conditional URL entries inside transaction bundles by @aacruzgon in #919
  • remap transaction failure entry index by @bomanaps in #1472
  • fix(persistence): sync transactional deletes by @bomanaps in #1526
  • fix(ui): give SQL artifact duplicates unique canonicals by @Gordex2014 in #1613
  • fix(ui): refresh export summaries and pluralize counts by @Gordex2014 in #1616
  • ci(bench): give the import suite's k6 setup() 1200 s instead of 600 s by @dougc95 in #1638
  • fix(sof): name the dependency, the cap and the setting when a SQL Query dependency exceeds its row cap (#1473) by @dougc95 in #1642
  • perf(pg-es): $bulk-submit indexes during ingest on the grouped path, with self-healing index rejections (#939) by @andyguz17 in #1600
  • fix(ui): make long-running searches cancellable and replaceable by @Gordex2014 in #1632
  • fix(keycloak): grant system/bulk-submit to hfs-web so the bundled login can import (#1633) by @angela-helios in #1634
  • fix(mongodb): apply _id / _lastUpdated to in-transaction ifNoneExist with other criteria (#1602) by @dougc95 in #1635
  • fix(ui): drop unsaved-changes guard from one-shot submit forms by @smunini in #1655
  • fix(test): mongodb_tests fails to compile on main (missing BundleEntry.criteria) by @smunini in #1669
  • fix(ui): group every displayed number by the page's locale by @smunini in #1656
  • fix(rest): reject a malformed or unreadable $reindex body with 400 (#1653) by @doctorvk in #1657
  • fix(reindex): audit a completed job with resource errors as a minor failure (#1658) by @doctorvk in #1659
  • fix(ui): align the editor's unsaved pill, card bottoms and raw-mode hint (#1648) by @mauripunzueta in #1650
  • feat(ui): confirm an editor save by clearing the unsaved pill, not a Saved. line (#1649) by @mauripunzueta in #1651
  • fix(ui): make patients optional on a Patients-scope bulk export by @smunini in #1660
  • fix(mongodb): retry transaction bundles aborted with TransientTransactionError (#1586) by @dougc95 in #1641
  • fix(mongodb): reload SearchParameters after a bulk batch fails partway (#1661) by @doctorvk in #1679
  • fix(persistence): include the reason in BackendError::Unavailable's display (#1680) by @doctorvk in #1684
  • fix(ui): no page is wider than the viewport at phone width (#1670) by @angela-helios in #1678
  • fix(mongodb): fail readiness when a hinted query index is missing, building or hidden (#1686) by @doctorvk in #1688
  • fix(ui): every select the search builder renders has an accessible name (#1677) by @angela-helios in #1681
  • fix(persistence): reload PG SearchParameter registry after bulk-submit commit by @smunini in #1683
  • fix(search): add next, previous and first links to offset-paged searchsets (#1689) by @doctorvk in #1692
  • feat(ui): query builder parameter typeahead with an unknown-parameter state (#1643) by @andyguz17 in #1685

Full Changelog: v0.2.3...v0.2.4