ADR 0005: Orkeon main after #206, on the rc.6 pin
- Status: accepted
- Date: 2026-10-26
- Amends: ADR 0004
Context
Orkeon #206 is merged on Orkeon main (7efa3b60); no tag holds it yet. It closes the five issues Orkeon Code had
opened against the runtime (Orkeon #196 to #200) and changes the surface Orkeon Code runs on:
- Relative paths (#199, #200). A file tool (
file_read,file_write,edit_file,glob,grep, the node readers and editors,edit_batch, the search tools) resolves a relativepathagainst the agent's root, else the file system's working directory (/workspacewhen mounted), and answers with the absolute path. An emptypathis refused withpath is required: …; a path in no mount saysa path starts with a mount: /workspace/….shell_commandwithoutworking_directoryruns in the agent's root, else that working directory: it no longer falls back to the first mount that grants the right. - Pending approvals for scripts (#198). A
*.cmd.tsreads the tool approvals waiting for the operator throughctx.services.get("approvals"):list()gives{ taskId, command, tool, input }per approval, an empty list once answered. The typings declarePendingApprovalsandPendingApproval. - The TUI (#196) no longer rebuilds a pane for each appended line, and
--llm-log(#197) keeps the cache, reasoning and cost counts of a streamed exchange. Neither changes what Orkeon Code calls. orkeon-repl --replay <file>feeds a file of REPL lines as if typed, non-interactive by default, with exit codes0,1(stopped at a line) and2(file missing); the file is read through the VFS, so it sits under a mount.
Decision
- The same pin.
.orkeon-versionstays1.0.0-rc.6; the surface Orkeon Code targets is Orkeonmainafter #206, the one that tag will carry. The runtime smoke builds from that commit (ORKEON_SOURCE_REF). - Typings from the sources until the tag, as ADR 0002 and ADR 0004 decided (
scripts/sync-typings.shoverORKEON_SOURCE). /tasksreads the approvals. APendingApprovalsport (ports/approvals.ts), its adapter over theapprovalsservice, which answers an empty list on a host that does not register it;/taskslists each approval waiting with its ticket, its command and its tool. This closes Orkeon Code's #15 as it was meant.- The relative-path resolution of the tool-call hook stays (
shared/domain/dev/path-args.ts): the runtime now resolves a relative path too, but Orkeon Code's own guard and hooks judge the path before the call, and they must see one absolute form. The reading rule of the dev roles no longer forbids a relative path: it says where such a path is read, and that either form goes. - Nothing to configure.
/workspaceis mountedrwby the launcher and no settings file setsOrkeon:FileSystem:WorkingDirectory, so the end ofshell_command's fallback changes nothing for Orkeon Code.
Consequences
scripts/smoke-runtime.shkeeps feeding/exitthrough the standard input:--replaywould give it exit codes of its own, once the replay file is written under a mount the--demomode creates (/tmp). A possible follow-up./tasksshows a task blocked on the operator as such, under the list, where only its "running" row showed before.- A relative path no longer meets the
No mount found for virtual pathtext; the runtime keeps it, with a hint, for a path in no mount. The comments that cited it say what the resolution is for now.
Alternatives considered
- Drop the hook's path resolution now that the runtime resolves: the guard would then match a relative path in a form the rules do not name, and a hook would receive a path the runtime has not yet resolved.
- Wait for the tag: the
/tasksgap (#15) and the cost of the old refusals in live runs are worth closing first.