Repository navigation
v0.2.4
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
aprule 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