glas-harness/docs/execution-profiles.md
tegwick 695438019c
Some checks failed
ci / validate (push) Has been cancelled
Harden SSH and profile resolution boundaries
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a0233b-178d-7162-b92f-31a31ea8ca9b
2026-08-23 12:53:05 +02:00

115 lines
5.1 KiB
Markdown

# Execution profiles and workforce handoff
Glas profiles are versioned execution constellations. They make the execution
layer replaceable without changing an upstream workforce assignment.
```text
RoleAssignment / activity / channel
| organizational refs + bounded task + harness_profile_ref
v
ExecutionRequest
| deterministic profile validation
v
rein + model route + sandbox profile + tool profile + limits
| one outer lifecycle
v
ExecutionEvidence -> assignment/audit consumers
```
## Profile schema
Each YAML document under `profiles/` declares:
- stable `id`, semantic `version`, exact `contract_version`, and catalog
enablement status;
- typed operational readiness (`ready`, `unverified`, or `blocked`) with its
reason, owner, and evidence reference;
- rein registry ID and required capabilities;
- sand-boxer `sandbox_profile`;
- rein-enforced `tool_profile`;
- model provider, explicit model identifier, model class, and route;
- positive token/timeout/turn limits when applicable; and
- credential route references and non-secret metadata.
The catalog discovers files deterministically, forbids unknown schema fields,
rejects duplicate revisions, and checks the selected profile against
`registry/reins/*.yaml`. Unpinned lookup is accepted only when exactly one
revision exists; disabled revisions still make a multi-revision selector
ambiguous so callers must pin deliberately. A pinned disabled revision is
refused. Inline secrets and token-looking values are refused.
Use `glas-harness profiles` as the catalog/packaging validation command.
Catalog enablement and operational readiness answer different questions:
- `status: enabled` permits deterministic selection after schema and rein
compatibility checks;
- `operational_readiness.status: ready` requires a positive `evidence_ref`;
- `unverified` permits a bounded proof attempt but is carried into execution
evidence and must not be described as ready; and
- `blocked` requires an owner plus evidence reference and is refused during
resolution, before sandbox creation.
Profiles that predate the field default conservatively to `unverified`. The
catalog command lists all enabled profiles and labels readiness; it does not
filter blocked profiles or call them executable.
Catalog validation proves schema/compatibility, not transport installation. An
execution host must install `glas-harness` with sand-boxer support and make each
selected rein plus its dependencies available *inside* the sandbox transport,
not merely on the host. Same-host bwrap execution enters the descriptor's
namespace; remote execution crosses its SSH endpoint. The Claude-backed rein
also needs its documented `rein-aharness[llm]`/sibling `llm-connect` adapter
dependency in that environment. Missing runtime dependencies fail closed at
session start and still trigger sandbox teardown.
The committed local profiles are currently declared `blocked` by
`GLAS-IN-0002`. The remote profile is `unverified` because there is no positive
post-hardening execution proof. There is currently no committed `ready`
profile.
## Consumer request
See `examples/execution-request.json`. Consumers know only a profile reference,
not `ReinAharness`, `ReinOpenWeights`, Claude Code arguments, or OpenRouter
client details. An assignment system may set the organizational references; a
channel may omit fields it does not own.
If the requested profile, contract, rein, capability, resource envelope, or
credential route is unavailable, the caller must receive a refusal/failure. No
consumer may silently substitute a different rein or model constellation.
The current exact-profile path does not interpret resource envelopes or choose
profiles from requirements. A future requirements resolver belongs at this
Glas boundary, must be deterministic and explainable, and must refuse ambiguity.
## Two parallel local selections
For the same task and organizational references, switch only:
```text
harness.agent-dev-local@1.0.0
-> rein-aharness / claude-sonnet-4-6 / profile.bwrap-local
harness.agent-dev-openweights-local@1.0.0
-> rein-openweights / qwen/qwen-2.5-72b-instruct / profile.bwrap-local
```
Both declare `green-commit-only` and the same outer `GatewayResult` /
`ExecutionEvidence` contract. They are interchangeable as catalog shapes, but
both are currently operationally blocked and refused before sandbox creation.
This does not claim current runtime availability or identical model quality,
price, or provider behavior.
## Ownership handoff
- Agentic-resources/KaizenAgentic: leadership, role, duty, goal, resource
envelope, worker/agent instance, and assignment definitions.
- Activity-core or a channel: when work is invoked and the bounded task input.
- Glas: versioned execution selection, lifecycle, attribution, and evidence.
- Rein: inner loop, backend-specific policy enforcement and credentials.
- llm-connect/provider: inference/provider boundary and model capabilities.
- Sand-boxer: sandbox profiles, placement, provisioning, and teardown.
Rollback is selection-based: repin a caller to its last approved Glas profile.
Do not bypass Glas with `--sandbox-profile` or add a hidden default rein.