Radiology Transcript Interpreter · research proof of concept

Documentation

These sections are rendered directly from the checked-in specifications, plans, and operator documents. The Markdown files remain authoritative.

Operator manual

The working guide for starting, testing, observing, troubleshooting, and stopping the resident toolchain services.

Authoritative source: infrastructure/README.md · Permanent section link

# Toolchain Service Infrastructure This directory implements the adopted infrastructure experiment in `../research/toolchain-service-infrastructure/PLAN.md`. It keeps the installed research tools resident behind local capability services, routes them through a Go hub, and exposes their verification evidence through the Toolchain Debug UI. It does not implement radiology interpretation semantics. ## Operator interface ```sh make -C infrastructure doctor make -C infrastructure start make -C infrastructure status make -C infrastructure smoke-services make -C infrastructure smoke-hub make -C infrastructure smoke-assembly make -C infrastructure test-ui make -C infrastructure test-interpreter-ui make -C infrastructure verify make -C infrastructure stop ``` `start` links the three checked-in user units and starts them, but does not enable them at login. All services bind only to loopback: | Process boundary | Address | Responsibility | |---|---|---| | Go Toolchain hub | `http://127.0.0.1:8170` | caller API, evaluation records, and web UI | | Python linguistics service | `http://127.0.0.1:8171` | Stanza, Grew/UCxn, MoCCA, and FrameNet | | SWI-Prolog service | `http://127.0.0.1:8172` | CoNLL-U inspection and the resident RadLex bundle | The public research host uses the same user units with lingering and login enablement so they return after reboot. Its accepted installation and recovery details are recorded in `FULL-TOOLCHAIN-DEPLOYMENT-REPORT.md`. The retired artifact-only deployment remains available as an explicit rollback service. The primary interpreter UI and supporting Toolchain UI are: ```text http://127.0.0.1:8170/interpretations/new http://127.0.0.1:8170/toolchains/rad-nlp-research ``` The interpreter UI is the UI-only first slice: it loads and resolves the reviewed POC transcription to its immutable checked-in R0–R5 artifact. It does not yet run edited or arbitrary text through a durable interpretation operation. The interface states that boundary explicitly instead of presenting an edited Draft as a completed interpretation. A dependency-free vanilla-JS SPA layer performs Run, depth, focus, and history transitions in place; the same server-rendered GET URLs bootstrap refreshes and deep links. The interactive workflow intentionally has no parallel non-JavaScript fallback. After Run, the Draft textarea is replaced by depth-specific visual representations: source text, linguistic tokens, constructions, semantic frames, ontology groundings, and validated structured findings. Object indexes and raw JSON remain secondary inspection details. ## Configuration and evidence `config/services.json` is the operational inventory. It fixes service IDs, loopback addresses, user-unit names, limits, and the component/resource identities required for hub readiness. `config/environment` is an optional, untracked operator override; `config/environment.example` documents supported non-secret values. Runtime evidence is written beneath `infrastructure/var/evaluations/`, which is not version controlled. Each completed evaluation has a read-only JSON record and content-addressed artifacts. The UI and `/api/v1/evaluations/{id}` expose the same durable truth; browser connection state is not authoritative. ## Operation and troubleshooting Use `make -C infrastructure status` for unit and readiness state. Logs remain in the user journal: ```sh infrastructure/scripts/manage-services.sh logs journalctl --user -u radnlp-linguistics.service -f journalctl --user -u radnlp-prolog.service -f journalctl --user -u radnlp-toolchain-hub.service -f ``` If the hub reports `not_ready`, inspect `/readyz` and `/v1/manifest` on the two bare services. A component identity that differs from the checked-in inventory is intentionally treated as stale rather than silently accepted. Rebuild and restart only the Go boundary with: ```sh make -C infrastructure build systemctl --user restart radnlp-toolchain-hub.service ``` `make -C infrastructure stop` cleanly stops all three project units and the Python-owned Grew child. The direct heavy smokes use separate ports 18171 and 18172, so they can validate clean resident instances independently.