Story: Update vendored ORE Engine to 1.8.16.0

Table of Contents

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 ore engine package is genuinely self-contained and self-tests automatically against a real example's expected output.
  • external/ore/examples/ and external/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 via xsdcpp_generate_ore.sh – blocked by a pre-existing local xsdcpp environment issue unrelated to this story's own changes (see task Notes and capture 99A443B8).
  • 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 a ores.compute.wrapper change, not an external/ore/ vendoring one.

Emacs 29.3 (Org mode 9.6.15)