Story: Update vendored ORE Engine to 1.8.16.0
Table of Contents
- Goal
- Status
- Acceptance
- Tasks
- Decisions
- Package self-test runs the actual engine against a real example, not just an ldd check
- Hand-patches are reapplied by the sync script, not documented for a human to remember
- app_version_platform's codegen output had already drifted from its
.orgmodel - Package publishing is fetch-then-merge, never a bare replace, for per-platform junction rows
- Out of scope
This page documents a story in Sprint 24. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
Goal
The vendored ORE Engine binary package, examples, and XSD schemas are current, genuinely working, and safe to refresh again in the future without manual steps or silent regressions.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 24 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-08-01 |
Acceptance
- The vendored
oreengine package is genuinely self-contained and self-tests automatically against a real example's expected output. external/ore/examples/andexternal/ore/xsd/are refreshed from the same engine commit, with reproducible provenance, and pass schema validation.- Refreshing either in the future is a single reusable script invocation, not a manual copy-and-overwrite – including reapplying the known upstream hand-patches automatically.
Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Refresh ORE Engine binary package, examples, and XSD to 1.8.16.0 | DONE | 2026-07-30 | 2026-07-30 | Rebuild the ore engine self-contained, sync examples/xsd, automate hand-patch preservation. |
| Verify compute grid package SHA256 on download | DONE | 2026-07-31 | 2026-07-31 | ores.compute.wrapper should verify a downloaded engine package's checksum against a known-good SHA256 before extracting/running it. |
| Design and build ACME compute package publishing (client lib, shell, Qt) | DONE | 2026-07-31 | 2026-08-01 | New ores.compute.client package_publisher shared by ores.shell and ores.qt; retarget AppProvisionerWizard to per-platform uploads on the seed's own key shape; vendor the ORE binary into the build. |
Decisions
Package self-test runs the actual engine against a real example, not just an ldd check
Verifying "the RPATH points somewhere inside the package" is
necessary but not sufficient – a package can be structurally
self-contained and still be wrong (missing a library, a corrupted
copy, a version skew between bundled libraries). The self-test
extracts the package to an isolated scratch directory, runs it
against TA002_IR_Swap exactly the way ores.compute.wrapper does
(same invocation shape, same cwd semantics), and tolerantly diffs the
real output against real ExpectedOutput/, writing a human-readable
sign-off report. Rejected a byte-exact diff (cross-compiler/library
floating-point noise and legitimate schema evolution – e.g. new
report columns on a version bump – would both cause false failures).
Hand-patches are reapplied by the sync script, not documented for a human to remember
The alternative (documenting the 3 hand-patched files in prose and trusting a future refresher to read and reapply them) is exactly the failure mode that had already silently regressed once before this story even started work (caught live during this same task). Automation is strictly better than documentation here since the fix is small, mechanical, and safe to reapply unconditionally (a no-op if upstream ever fixes it at the source).
app_version_platform's codegen output had already drifted from its .org model
Regenerating the entity from ores.compute.app_version_platform_junction.org
would have renamed files, added several unrelated audit columns, and
silently dropped the hand-added platform_code denormalisation still
used by workunit_handler.hpp – pre-existing drift unrelated to the
SHA256 column. Added the sha256 column by hand instead, matching the
existing hand-maintained style; a full codegen realignment for this
entity is separate follow-up work, not folded into this story.
Package publishing is fetch-then-merge, never a bare replace, for per-platform junction rows
save_app_version_request replaces every app_version_platform row
for a version wholesale by design (it's the same request whether the
caller is adding a platform or editing an existing one, and there's no
per-row upsert semantics in the protocol). That means every caller
publishing a single platform at a time – ores.shell's
publish-package and ores.qt's UploadEnginesDialog – must fetch
the version's currently-published platforms first, replace only the
one being republished, and send the full merged set back. Getting this
wrong is silent data loss (a working platform's package_uri/sha256
vanishes) rather than a visible error, so both call sites do the
fetch-merge-save dance rather than trusting the request to be
additive.
Out of scope
- Regenerating
projects/ores.ore's C++ domain types viaxsdcpp_generate_ore.sh– blocked by a pre-existing localxsdcppenvironment issue unrelated to this story's own changes (see task Notes and capture99A443B8). - Compute-grid package integrity verification (SHA256 check on
download) – real gap found while building this story's tooling,
filed separately (capture
8DBD1BAE) since it's aores.compute.wrapperchange, not anexternal/ore/vendoring one.