Files
sow-tools/docs/consumer-contract.md
T
archvillainette b7c0f43064
test-image / build-image (push) Successful in 45s
test / test (push) Successful in 1m22s
build-binaries / build-binaries (push) Successful in 2m2s
build-image / publish (push) Successful in 13s
Fix autogen to fail-open on missing asset manifests (#4)
Reviewed-on: #4
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-16 21:50:45 +00:00

2.0 KiB

Crucible consumer contract

How the artifact repos (sow-module, sow-topdata, sow-assets-manifest) locate and invoke a Crucible builder. The goal: no local-machine assumptions (Phase 5 exit criterion). A consumer either finds a Crucible binary or fails closed — it never fakes an artifact.

Resolution order (single-token command)

Each consumer wrapper resolves its builder to one executable token, in order:

  1. Explicit override$SOW_MODULE_BUILD / $SOW_TOPDATA_BUILD / $CRUCIBLE (a path or name), if set and executable. Back-compat with the pre-Crucible skeletons.
  2. Standalone Crucible binarycrucible-module / crucible-topdata / crucible-hak / crucible-depot on PATH.
  3. Legacy namesow-module-build / sow-topdata-build on PATH (pre-D11; kept so nothing breaks during cutover).

If none resolve, the wrapper exits non-zero with a Phase 5 message. The crucible dispatcher (crucible module …) is for humans and CI introspection; wrappers prefer the single-token crucible-<name> shim so "$builder" args quoting stays correct.

In CI (preferred)

OPERATOR NOTE: Stop. Do not do it this way. Use the pinned prod.yml version. That's what it's there for.

Run the consumer job inside the pinned image and the binaries are on PATH:

container:
  image: registry.westgate.pw/deployment/crucible:<sha> # pinned, immutable

No host install, no $HOME layout, no developer machine assumptions.

NWN_ROOT rule

Crucible never guesses NWN_ROOT from $HOME (this was a deploy-notes pain point). The NWN install/data root is passed explicitly:

  • env NWN_ROOT=/path/to/nwn, or
  • flag --nwn-root /path/to/nwn.

A builder that needs NWN_ROOT and receives neither must fail closed with a clear message, not fall back to a home-directory default.

Determinism

Same inputs → identical output bytes. Consumers may checksum artifacts across runs; non-determinism is a builder bug.