rein-aharness/workplans/REINAH-WP-0007-glas-profiled-ops-runs.md
codex 7c8f7e6a9e fix(workplans): move work-record identifiers onto the repository prefix
Identifiers predating the PREFIX-WP-NNNN convention were rejected by the canon
registry, so none of this repository's work records could be registered.

One prefix per repository (ADR-007). Existing conforming identifiers keep their
numbers where possible; the pre-convention records take the next free numbers
rather than renumbering work that was already correct.

Projection UUIDs are re-derived from the new canonical ids (ADR-007 decision 2).
Nothing was registered on central under the old identifiers, so no hub record is
orphaned by this.

Refs CUST-WP-0068-T03

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-25 22:42:27 +02:00

173 lines
7.8 KiB
Markdown

---
id: REINAH-WP-0007
type: workplan
title: "Profile-driven ops-run execution through Glas"
domain: infotech
repo: rein-aharness
status: finished
owner: codex
topic_slug: rein-aharness
priority: high
created: "2026-08-22"
updated: "2026-08-23"
related:
- ACTIVITY-WP-0032
- ACT-ADR-006
state_hub_workstream_id: "bc81d1c5-6663-5291-9ccf-64b192e39eb8"
---
# REINAH-WP-0007 — Profile-driven ops-run execution through Glas
## Origin
Activity Core handoff `4ed3422a-b42c-4408-843c-f63c3e86cf3e` reports that
the claim consumer currently drops `harness_profile_ref` and `execution_refs`.
A profiled row would consequently enter the legacy `select_approach` path and
could execute a different constellation than the producer authorized.
The related handoff `69710949-9726-4fd0-aef3-1c7075870410` reports that
llm-connect provider errors lose their safe structured status at this boundary,
making a provider 401 look like an undifferentiated 502 transport failure.
## Carry the profile selector and attribution references
```task
id: REINAH-WP-0007-T01
status: done
priority: high
state_hub_task_id: "c0cbe983-ee83-5f10-913a-8023729a8212"
```
Extend `OpsRun.from_api` with `harness_profile_ref` and the allowlisted
`execution_refs`. Preserve the queued selector verbatim for the authoritative
Glas resolver; do not translate it into an approach hint.
**Done 2026-08-22:** both fields are normalized onto `OpsRun` and covered by
the API projection test.
## Route profiled rows through the Glas gateway
```task
id: REINAH-WP-0007-T02
status: done
priority: high
state_hub_task_id: "d1017604-204e-54e8-9b3e-680acc8dc8c2"
```
For a row with a profile, resolve its target checkout, build the Glas
`ExecutionRequest`, and invoke `run_execution` before any sandbox is created by
this consumer. Complete or fail the ops run with the full `GatewayResult`.
Profile refusal and gateway failure are terminal and never fall back to
`select_approach`. Profile-absent rows retain the legacy coexistence path.
**Done 2026-08-22:** `glas_execution.py` resolves the queued checkout, maps the
complete contract 1.0 request (including attribution refs), and invokes Glas
through lazy runtime imports. The claim loop branches on profile presence
before legacy selection and sends the full `GatewayResult` to Activity Core.
Its own returned detail retains only `ExecutionEvidence`. Tests prove success,
terminal refusal, no legacy fallback, and profile-aware queue inspection. A
real sibling-package probe of `harness.unknown@9.9.9` returned
`refused/resolution` with no sandbox id.
## Preserve safe llm-connect provider failure context
```task
id: REINAH-WP-0007-T03
status: done
priority: medium
state_hub_task_id: "0da3c70d-5555-5b12-b579-b92c701c41af"
```
On an HTTP error, retain only llm-connect's allowlisted `error`,
`provider_status`, `provider`, and `model` fields plus a bounded message. Never
copy the raw provider response or credential material into an ops-run result.
**Done 2026-08-22:** HTTP errors retain exactly the four safe diagnostic fields
plus a 400-character message. Tests cover the upstream 401 hidden behind 502,
redaction-by-allowlist, bounding, and unusable bodies.
## Deploy and coordinate one production proof
```task
id: REINAH-WP-0007-T04
status: done
priority: high
state_hub_task_id: "fddd724c-8775-5096-b6fa-b9bfc655209d"
```
Install the Glas and sand-boxer sibling packages into the railiance01 claim
worker environment, deploy the source-tested consumer, and coordinate one
low-risk profiled definition with Activity Core. Evidence must show the queued
profile, resolved rein/model/sandbox/outcome, and teardown/commit facts.
**Progress 2026-08-22:** source verification is green (96 tests, compilation,
and diff checks). Packaging exposes the local Glas/sand-boxer extra and the
deployment rsync now excludes `.venv`, preventing workstation-bound shebangs
from overwriting the live worker environment. railiance01 is healthy on the
legacy worker but still needs the Glas checkout/package install, deployment,
restart, and coordinated pilot.
Deployment then exposed a pre-existing upstream database mismatch: the live
Activity Core image selects `ops_runs.harness_profile_ref`, but production
PostgreSQL has not applied migration `0008`, so every claim returns 500. The
worker's prior error path retried that failure every two seconds; it now uses
the configured 30-second backoff for claim errors and reserves the short pause
for cycles that actually claimed work. Activity Core must apply/verify its
migration before the coordinated pilot can run.
**Live deployment evidence:** railiance01 runs consumer `db58801`,
glas-harness `ae2a706`, and sand-boxer `20258de`; the user service is active,
the packaged profile catalog validates all three profiles, and the remote
unknown-profile probe refused before sandbox creation. Journal timestamps
`21:59:13`, `21:59:43`, and `22:00:13` UTC prove the corrected 30-second error
backoff. Activity Core handoff `413a4041-cfb3-4d02-a41a-1d92b3de06af`
contains the production traceback and requests migration application before a
pilot is scheduled. T04 waits only on that upstream repair and the coordinated
low-risk proof.
**Resumed 2026-08-23:** Activity Core applied migration `0008` and the bounded
pilot reached the Glas branch with its selector and refs intact. It refused at
`sandbox_create` because `OpsRunConfig.worker_id` had been used as the Glas
actor, conflating queue lease identity (`rein-aharness@railiance01`) with the
governed actor type (`agt`). Activity Core handoff
`c9a4ae44-f092-424f-9a4d-9b4cf58d65fd` confirms a direct `actor=agt`
create/destroy preflight passed and requests the mapping correction plus real
Glas/sand-boxer model validation before the final pilot.
**Done 2026-08-23:** commit `c633291` separates queue lease ownership from the
governed Glas actor (`agt`), validates the mapping against the real Glas and
sand-boxer models, and is deployed as the active railiance01 claim worker. The
full optional-runtime suite passes 98 tests.
The post-fix bounded production run
`ededc939-266f-473c-8386-ffd3f027f5f0` preserved
`harness.agent-dev-local@1.0.0` and its attribution refs, resolved
rein-aharness `0.1.0`, `claude-sonnet-4-6`, `green-commit-only`, and
`profile.bwrap-local`, and created sandbox `d750cd5c` as actor `agt`. It failed
closed at `session_start` before model dispatch, artifact creation, or commit.
Sand-boxer records the sandbox destroyed at
`2026-08-22T23:35:41.024853Z`, and the workspace is absent.
The proof exposed no remaining rein consumer defect. A no-dispatch
reproduction showed that Glas cannot `nsenter` the managed bwrap namespaces.
Installing and persistently loading Ubuntu's `bwrap-userns-restrict` AppArmor
profile made the bwrap runtime stable with zero effective child capabilities,
but direct consumer namespace entry remains denied. Executable owner-mediated
reachability, a mounted rein runtime, and explicit model egress/credential
delivery already belong to live residual `GLAS-IN-0002`
(`01a02b76-f020-7d60-a3ce-12a34c13ebce`). Evidence and ownership were handed
to Glas in message `3e64f8e0-92a3-496c-99b0-57fbc28e46de`, sand-boxer in
`6bc53d35-5074-4aa9-b6b6-f9b063863439`, and Activity Core in
`64568b0a-f5b4-41f2-8abd-9acc7e10ee38`. No host-execution fallback was added;
the later successful-commit proof remains with `ACTIVITY-WP-0032-T05` after
that residual is delivered.
## Completion
All rein-aharness-owned work is complete: profile selectors and attribution
survive the queue boundary, profiled rows use the authoritative Glas gateway
without legacy fallback, safe provider diagnostics remain allowlisted, claim
errors respect configured backoff, the governance actor is correctly mapped,
and the deployed worker has produced normalized fail-closed production
evidence with verified teardown. The only actionable follow-up is already a
live owner record (`GLAS-IN-0002`) and is not parked in this finished workplan.