Task: Add the ores.web service to the services subsystem

Table of Contents

This page documents a task in the Integrate the Volga TypeScript UI as ores.web story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

compass services start launches the ores.web web interface on a port inside the environment range, and compass services status reports it.

2. Status

Field Value
State DONE
Parent story Integrate the Volga TypeScript UI as ores.web
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-09-19

3. Acceptance

  • compass services start installs and starts the ores.web unit.
  • The service port sits inside the environment port range.
  • The unit reads its configuration through the environment mapper.
  • compass services status lists ores.web.

4. Plan

(Implementation strategy. Written when work starts; key decisions are distilled into the parent story's * Decisions at close, but the plan itself stays — it is the historical record of what we did.)

5. Notes

6. Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario) that verify this task. Link new ones here as they're created; the scenario doc itself links back via its "Verifies task" field.

Scenario State Notes
     

7. PRs

PR Title
   

8. Review

Comment summary File Decision Notes
       

9. Result

Wired. ORES_WEB_PORT is offset 2 of the environment block — the slot the retired Wt client held — and compass env configure emits it together with ORES_WEB_BFF_HOST, the interface the BFF binds.

ores.web.service is in projects/modeling/service_registry.org with two new properties, :runtime: node and :entry_point:, which the org loader carries and systemd_generate renders as a Type=simple unit. The unit runs the built BFF from the component directory, appends its output to the log file compass services start polls for readiness, exports the service's own NATS certificate over the shared identity in .env, and joins ores-<env>.target. nats_certs generates its certificate, and projects/ores.web/CMakeLists.txt builds the component so the unit finds a built BFF.

Verified end to end in the sandbox once ~/.config/systemd/user became writable: the units deploy, and compass services status --use-busctl reports all 24 units running, including ores.web.service-eager_maxwell, which serves the bundle and the API on 21402 and answers a bad credential with 401 against IAM over mTLS.

The sandbox's user namespace makes the manager refuse systemctl, so compass grew --use-busctl, which reaches the same manager over the session bus. That transport is covered by tests/test_systemctl_bus.py, and the unit rendering by tests/test_systemd_generate.py.

compass services gained an optional per-service selector on start, stop, restart and status while this was verified, so the interface can be cycled on its own without bouncing the other 23 units.

Emacs 29.3 (Org mode 9.6.15)