ADR 0010: Orkeon main after #234, on the rc.6 pin
- Status: accepted
- Date: 2026-10-29
- Amends: ADR 0009
Context
Five Orkeon pull requests landed on main after #230, the commit ADR 0009 validated (7ff12c9); b8833ca is the
last of them:
- #231,
1.0.0-rc.6cut and the public API frozen:src/Directory.Build.propsmoves from rc.5 to rc.6, the changelog closes the[1.0.0-rc.6]section (dated 2026-10-28) and everyPublicAPI.Unshipped.txtis folded into itsShipped.txt. Nothing of the scripting surface Orkeon Code calls is renamed or removed: the freeze records what #224-#230 added. - #232, #233, release fixes: the Debian smoke starts
orkeon-replwith a mount, andDockerfile.runnerscopies the rootDirectory.Build.targetsit had left out. The tagv1.0.0-rc.6is on #232 (14e1796); the GitHub release of 2026-10-28 carries the archives (Linux x64 and arm64, macOS x64 and arm64, Windows.zipand.msi), the Debian packages and the SBOM, andOrkeon.Scripting.Cli 1.0.0-rc.6is on nuget.org. Theorkeon-runners:1.0.0-rc.6image was not on ghcr.io on 2026-10-29 (the registry lists rc.3 to rc.5): theDockerfile.runnersfix of #233 came after the tag. - #234, the TypeSafe System One decision model (Orkeon ADR-015 and ADR-016):
ModelProviderCategory,IDecisionModeland the TypeSafe adapter, decision profiles withroute,guardandverifystages, an input guard, thedecisionreranker, and a 120th tool class,system_one_decide, registered byAddOrkeonTypeSafe, which the three shipped binaries call only when theOrkeon:TypeSafesection exists orTYPESAFE_API_KEYis set. The scripting DSL gainsdecision(spec)andwhen(decisionTask, clauses)on the task builder, run by the Sequential, Parallel and Graph processes; the settings gain theOrkeon:TypeSafeandOrkeon:Decisionsections andorkeon runthe--no-decisionflag. Marked breaking by Orkeon:TaskCompletedEvent.AgentIdis nullable andParallelProcessStrategytakesCrewStrategyDependencies, C# surfaces Orkeon Code never touches. - #235, the rate-limit window reads
retry-after-ms: besideRetry-After, the header OpenAI and TypeSafe send in milliseconds; the longest header still wins andLlm:MaxRateLimitWaitstill bounds the wait.
What Orkeon Code calls is unchanged: the regenerated typings differ by the two task-builder members and their
types (DecisionSpec, QuestionSpec, WhenClauses) in orkeon.d.ts; orkeon-cli.d.ts is identical. The crews
of Orkeon Code are procedural (publishCrew, agents acting over a tool catalogue) and build no task DAG, so
nothing of them can call the two members; OrkeonBuiltInTools does not list system_one_decide, an opt-in tool.
Decision
- The same pin, now a release.
.orkeon-versionstays1.0.0-rc.6, which is tagged: the surface Orkeon Code targets is a published release for the first time since ADR 0002, and the ADRs 0004 to 0009 are in it. The typings are regenerated fromb8833ca(scripts/sync-typings.shoverORKEON_SOURCE), the runtime smoke builds that commit while the rc.6 image is unpublished and switches to the image by itself oncedocker manifest inspectfinds it, as the workflow already decides. The documentation stops saying that only the source mode works: the tool mode has its packages (the Debian package on the aptrcchannel, the release archives, the dotnet tool), the docker mode waits for the image. - The two unshipped members are kept out of the sources. The typings describe
mainafter #234, two members ahead of the release the pin names: a call to.decision(or.when(would typecheck and fail on the pinned runtime.tests/repository/version.test.tskeeps every runtime source ofsrc/free of such a call, until the pin moves to a release that ships them. system_one_decideis in no built-in list. The catalogue names only tools the host registers, since an unknown name in.tools([...])fails the act before the model is asked, andorkeon-replregisters this one only with theOrkeon:TypeSafesection orTYPESAFE_API_KEY. A user whose host registers it lists it intools.extra, where it is accepted as it is no built-in; it declares a read to the gate, so it runs without a question wherever the catalogue offers it, and thewriteclass it takes by default keeps it out ofplananddontAsk, which promise that nothing leaves the machine: the tool sends the state it is given to the TypeSafe API.permission.test.tspins that no mode offers it by itself,extra-tools.test.tsthat the listing is accepted. Orkeon Code reads neitherOrkeon:TypeSafenorOrkeon:Decision: its agents run on theLlmsection and the host's profiles, as before.- The rate-limit row names the new header.
Llm:MaxRateLimitWaitin the configuration page says the window comes fromRetry-After,retry-after-msor the provider's reset headers, the longest winning. Nothing of Orkeon Code reads the headers. - The roadmap is unchanged. None of #231-#235 closes an item or a known issue of the roadmap; the pages that said "until rc.6 is tagged" (README, CONTRIBUTING, getting started, development, headless, the WSL tutorial, EN and FR) say what is published and what is not.
Consequences
orkeon-coderuns from anorkeon-replof the release (--mode tool), the first mode the launcher picks when it finds one onPATH;--mode dockerand the smoke's image path wait forghcr.io/orkeon/orkeon-runners:1.0.0-rc.6. Neither the tool mode on the release's packages nor the Windows launcher on the.zipor.msiwas run live for this ADR: the runtime smoke onb8833ca, in source mode, is the check made./statuson a build ofmainafter #231 saysOrkeon 1.0.0-rc.6+<sha> (source), the pin of .orkeon-version; on the release'sorkeon-replit says the same version with its own commit and channel.- A crew of Orkeon Code that one day branches on a decision task needs the pin on a release that ships
decisionandwhen, and theOrkeon:TypeSafesection in the settings; the test ofversion.test.tsis then updated with the pin. - A user who sets
Orkeon:TypeSafecan handsystem_one_decideto the assistant with/config set tools.extra system_one_decide(Permissions); no example settings file sets the section.
Alternatives considered
- Pinning
.orkeon-versionto amainbuild identifier: the pin is a version the launcher checks and the image tag;mainafter #234 reports1.0.0-rc.6, like the release, so the pin stays and the ADR names the commit. - Adding
system_one_decidetoNETWORK_READ_TOOLS: offered by name, it would fail every act of a host without the TypeSafe section, the common case; the extra-tools path exists for a tool the host may or may not register. - Regenerating the typings from the
v1.0.0-rc.6tag instead ofb8833ca: the typings would match the pin exactly, but the smoke and the ADRs validate Orkeon Code againstmain, and the two extra members are guarded by a test rather than hidden from the type check. - Mirroring
decisionandwhenin the crews: Orkeon Code's crews are act loops, not task DAGs; a decision task has no place in them today, and the rc.6 runtime they target does not run one.