Pinky X: service robustness — reboot-proof steer spawn + baked boot-start (v1.28.0) #54

Merged
ClaudiuSchuster merged 1 commit from oss-oo/pinky-x-robustness into main 2026-09-26 10:14:43 +00:00
Owner

Two defects in one service-robustness round (owner-reported after the 2026-09-26 station reboot):

S-1 — steering broken after reboot. After a reboot the user manager starts zcode-observatory.service with the default PATH, which lacks ~/.local/bin (where the zcode-dispatch launcher symlink lives) — every steer died on the bare shutil.which lookup. Fixed at BOTH layers: the unit ships Environment="PATH=%h/.local/bin:…" (%h home specifier, no hardcoded username), and the steer spawn resolves the launcher through an explicit candidate order (resolve_dispatcher): ZDO_DISPATCH_BIN override (missing override = loud error, never a silent fall-through) → absolute ~/.local/bin/zcode-dispatch → the tracked install dirs (sibling checkout, ~/tools/zcode-dispatch, ~/.local/share/zcode-dispatch) → bare PATH lookup last resort. The 503 refusal lists every candidate tried. Both spawn sites use it (start_steer + fastlane delivery).

S-2 — boot-start baked into install/update (owner decision 2026-09-26): install.sh runs systemctl --user enable --now after daemon-reload; the unit's outdated "deliberately NOT auto-enabled" comment is gone; README documents boot-start and the resolution order.

Tests (84, +15): resolution-precedence units; a real boot-env integration rig (server under the scrubbed fresh-boot environment, free port — steer spawns via the absolute candidate, override wins); station-unit contract updated (Environment line + enablement); v1.27.0 validation follow-up F1 — the missing invalidation mutation tests (stream-history delivered flag, stream-dropped rewrite, provider-config touch, live-driver/alive-steer digest flips; each asserts the next poll reflects it).

Local gates: full suite 84/84 green; Super-Linter station recipe green (BASH, BASH_EXEC, MARKDOWN, PYTHON_PYLINT, PYTHON_RUFF, YAML); G5 CPU envelope re-check on a 120-session fixture rig: 0.72 % of one core over 22 poll cycles (pre-v1.27.0 failure mode ~170 %); fixture CDP probes green (page builds, version marker v1.28.0).

Two defects in one service-robustness round (owner-reported after the 2026-09-26 station reboot): **S-1 — steering broken after reboot.** After a reboot the user manager starts `zcode-observatory.service` with the default PATH, which lacks `~/.local/bin` (where the `zcode-dispatch` launcher symlink lives) — every steer died on the bare `shutil.which` lookup. Fixed at BOTH layers: the unit ships `Environment="PATH=%h/.local/bin:…"` (%h home specifier, no hardcoded username), and the steer spawn resolves the launcher through an explicit candidate order (`resolve_dispatcher`): `ZDO_DISPATCH_BIN` override (missing override = loud error, never a silent fall-through) → absolute `~/.local/bin/zcode-dispatch` → the tracked install dirs (sibling checkout, `~/tools/zcode-dispatch`, `~/.local/share/zcode-dispatch`) → bare PATH lookup last resort. The 503 refusal lists every candidate tried. Both spawn sites use it (`start_steer` + fastlane delivery). **S-2 — boot-start baked into install/update** (owner decision 2026-09-26): `install.sh` runs `systemctl --user enable --now` after `daemon-reload`; the unit's outdated "deliberately NOT auto-enabled" comment is gone; README documents boot-start and the resolution order. **Tests (84, +15):** resolution-precedence units; a real boot-env integration rig (server under the scrubbed fresh-boot environment, free port — steer spawns via the absolute candidate, override wins); station-unit contract updated (Environment line + enablement); v1.27.0 validation follow-up **F1** — the missing invalidation mutation tests (stream-history delivered flag, stream-dropped rewrite, provider-config touch, live-driver/alive-steer digest flips; each asserts the next poll reflects it). Local gates: full suite 84/84 green; Super-Linter station recipe green (BASH, BASH_EXEC, MARKDOWN, PYTHON_PYLINT, PYTHON_RUFF, YAML); G5 CPU envelope re-check on a 120-session fixture rig: 0.72 % of one core over 22 poll cycles (pre-v1.27.0 failure mode ~170 %); fixture CDP probes green (page builds, version marker v1.28.0).
Pinky X: service robustness — reboot-proof steer spawn + baked boot-start (v1.28.0)
All checks were successful
Checks / Functional checks (pull_request) Successful in 18s
1e917568f6
S-1 (steering broken after reboot, owner-hit 2026-09-26): after a reboot
the user manager starts the unit with the default PATH, which lacks
~/.local/bin (where the zcode-dispatch launcher symlink lives) — every
steer died on the bare PATH lookup. Belt and suspenders:
- zcode-observatory.service ships Environment="PATH=%h/.local/bin:…"
  (%h home-dir specifier, no hardcoded username)
- observatory.py resolves the launcher through an explicit candidate
  order (resolve_dispatcher): ZDO_DISPATCH_BIN override (a missing
  override is a loud error, never a silent fall-through) >
  ~/.local/bin/zcode-dispatch (Path.home()-based) > the tracked install
  dirs (observatory sibling checkout, ~/tools/zcode-dispatch,
  ~/.local/share/zcode-dispatch) > bare PATH lookup (last resort); the
  503 refusal lists every candidate tried. Both spawn sites use it
  (start_steer + fastlane delivery, which logs the reason on requeue)

S-2 (boot-start baked in, owner decision 2026-09-26): install.sh runs
systemctl --user enable --now after daemon-reload; the unit's outdated
'deliberately NOT auto-enabled' comment is gone; README documents the
boot-start behavior and the resolution order.

Tests (84 total, +15): dispatcher-resolution precedence units; a real
boot-env integration rig (fixture DB + fake HOME, server under the
scrubbed fresh-boot environment on a free port — steer spawns via the
absolute candidate, override wins); station-unit contract updated for
the Environment line + enablement; validation follow-up F1 — the
missing invalidation mutation tests (stream-history delivered flag,
stream-dropped rewrite, provider-config touch, live_driver_digests and
alive_steer_counts flips; each asserts the next poll reflects it).
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
OSS-Singularity/zcode-dispatch-observatory!54
No description provided.