Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0078

ADR-0078: The deployed codemod daemon reviews with every phase; the tools venv carries the free-threaded janus-swi

field value
Status Proposed
Date 2026-10-08
Register factory (docs/adr, 4-digit ids)
Source docs/adr/0078-the-deployed-codemod-daemon-reviews-with-every-phase-the-tools-venv-carries-the-free-threaded-janus.md — permalink at 6bf2b5988 (unchanged on master since that commit)
Wiki register entry ADR-0078 (wiki status: Proposed)

← ADR-0077 · ADR-0079 →

The record

Status: Proposed · Date: 2026-10-08

Context

/opt/orchestrata-tools (deploy/install-tools.sh) vendored four hand-listed subtrees of orchestrata_ultimate. Measured 2026-10-08 on master 1d5f3e52c (scratch import_closure.py, then scripts/tools_import_closure.py):

WI-DEPLOY (plans/recorded-run-2026-10-08-eight-failures-design.md §3.2, worktree wt-TOOLS-CLOSURE, commits 1d51e674d a49aea09d) made the vendor list computed and gate-pinned (deploy/tools-vendor-manifest.txt == ClosureReport.vendor_manifest() of the all-scopes closure) and made the deploy smoke construct the engine and review a two-file workspace. That smoke now passes — and prints PrologSemanticReview: janus-swi not available, skipping: the deployed review runs phases 1 and 2 only. janus_swi is a lazy third-party import on the review path; the project's own venv carries the patched free-threaded build (scripts/_janus_patched, scripts/build_janus_ft.py, janus_swi-1.5.3 in /opt/orchestrata/.venv), because upstream janus-swi re-enables the GIL process-wide on import (SPEC-023, the same class as the msgpack/grpcio incidents, task 184).

A review that silently drops its semantic phase is the false-green class this project forbids (RUL-009, docs/kernel-is-required.md): the daemon answers "reviewed" while the Prolog checks never ran.

Decision (proposed)

  1. The deployed codemod daemon reviews with every phase its in-repo twin runs. deploy/install-tools.sh installs into the tools venv the same free-threaded janus-swi artifact the project venv uses (the wheel scripts/build_janus_ft.py produces, from the pinned [tool.uv.sources] path), never upstream janus-swi from PyPI.
  2. The deploy smoke asserts the Prolog phase ran: the default-review smoke fails on the janus-swi not available, skipping line (or on any phase-3 skip marker), and asserts the venv interpreter still reports the GIL disabled after import janus_swi.
  3. The vendor list stays the all-scopes computed closure (nine packages), pinned by tests/deploy/test_tools_vendor_manifest.py; the eager closure is reported, not vendored, because a lazy path that is reachable in the daemon is a path the daemon will take.
  4. Third-party packages reachable only on lazy paths (httpx, redis, tiktoken, pyyaml) are installed when tools_import_closure.py --pip lists them for a deployed entry; the installer's pip line is derived from that output, as WI-DEPLOY already wired.

Alternatives rejected

Consequences

Provenance

Orchestrator (Claude Code, Fable 5.1) on 2026-10-08, from the WI-DEPLOY worker's report ("PrologSemanticReview: janus-swi not available, skipping … Decision for you") during the eight-failures swarm (plans/recorded-run-2026-10-08-eight-failures-design.md). Evidence: scratchpad/install2.log of the scratch-prefix install; closure counts from scripts/tools_import_closure.py; task 580; task 184 (janus/msgpack GIL re-enable). Awaiting Mohamed's ruling.

No other ADR is named in this record.

Rulings cited

Specs cited