ADR 0013: the pin is a commit of Orkeon's main, never a release
Context
Since ADR 0002, .orkeon-version pinned a released Orkeon version, 1.0.0-rc.6, and every adaptation to Orkeon's
main (ADR 0004 to ADR 0012) validated the commands against a commit the release did not carry: the runtime smoke
built the REPL from the sources at ORKEON_SOURCE_REF, a second pin kept in the workflow; the typings were
regenerated from that commit; the docs said in five places that the orkeon-runners:1.0.0-rc.6 image was not
published yet; and ADR 0010 added a guard test so that no source called decision or when, two members the
typings carried and the pinned release did not ship.
The owner decided on 2026-10-29 that the source checkout is the reference runtime: Orkeon Code runs against
Orkeon's sources at one commit, and a release tag is never what it is checked against. The decision model of
Orkeon #234 (decision, when, system_one_decide) is the first thing the guard kept out for the sake of a
release that nobody runs here.
Decision
.orkeon-versionholds one full commit of Orkeon'smain,3fcfbbe8fefe03da56b166ed679a76ac450d7c7atoday (main after Orkeon #240).tests/repository/version.test.tschecks the form (forty hexadecimal characters) and thatORKEON_RUNTIME_COMMITofsrc/commands/_lib/status/meta.tsis the same commit. The launcher,/statusand/doctorprint its first seven characters,3fcfbbe.- The source mode is the reference runtime. The launcher runs the checkout
ORKEON_SOURCEnames and warns when itsHEADis not the pin, without refusing. The runtime smoke checks Orkeon's sources out at the pin read from.orkeon-versionand runs the source mode, always:ORKEON_SOURCE_REFis gone, one pin instead of two. /statusand/doctorcompare commits, never versions. The host'sruntimeservice (Orkeon #225) carries the commit the build was made from; the row saysthe pin of .orkeon-versionwhen that commit is the pinned one, short or full, andNOT the pin 3fcfbbe of .orkeon-versionotherwise, a runtime that reports no commit included. A release built at the pinned commit is the pin, whatever its version says.- The tool and docker modes run a release, which the pin never names. They stay as install conveniences:
orkeon-replfrom the Debian package, a release archive or the dotnet tool (1.0.0-rc.6), and theorkeon-runners:latestimage (the last one published,1.0.0-rc.5at this writing; or the oneORKEON_CODE_IMAGEnames) in docker mode and inscripts/run-crew.sh. The releases need not be at the same version: a mode runs what its channel published./statussays they are not the pin..config/dotnet-tools.jsonkeeps the last release for the typings' fallback and is no longer tied to the pin. - The typings come from the pin.
scripts/sync-typings.shwithORKEON_SOURCErefuses a checkout at another commit (--anyoverrides); without a checkout it generates the typings of the manifest's release and says so. - The guard on unshipped members goes. The sources may call whatever the pinned commit ships:
decisionandwhenamong them. What ADR 0010 kept out of the sources for the release's sake is allowed, and the opt-in path ofsystem_one_decidethroughtools.extrastands as it is.
Consequences
- Upgrading Orkeon is one commit moved in
.orkeon-versionandmeta.ts, the typings regenerated from a checkout at that commit,esbuildandglobal.jsonaligned with what the commit bundles with and pins, thennpm run checkand the smoke in source mode (Development, "Upgrading Orkeon"). - A user of the tool or docker mode runs an Orkeon behind the pin: what the pinned commit added since the last
release (an exclusive crew launch, the decision tasks) is ignored or fails there, and
/statusnames the difference. The reference path for a user is a checkout of Orkeon at the pin. - The ADRs before this one keep their text: they name the release they were written against.
Alternatives considered
- Two pins, a release and a commit, as before: the release was never what the commands were validated against, and every adaptation had to say so in the docs, the workflow and a guard test.
- Renaming the file to
.orkeon-ref: the launchers, the install scripts, the issue template and a dozen pages name.orkeon-version; the content changes, the name stays, and a test keeps the content a commit. - Refusing the source mode at another commit: a developer checks an Orkeon branch out to try a change; a warning names the pin and lets the run go.
- Pinning the docker image to the pin's commit: Orkeon publishes images on release tags only; the image can follow the last release or nothing.