Clarify Activity Core queue boundary

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a02b6f-7db1-7222-918b-e813a6bda38d
This commit is contained in:
tegwick 2026-08-23 13:01:37 +02:00
parent 2e16504e1f
commit c230f33698
2 changed files with 34 additions and 5 deletions

View file

@ -37,6 +37,12 @@ but it is not an accurate description of the current governed chain:
normalization. It neither stores credentials nor chooses organizational normalization. It neither stores credentials nor chooses organizational
policy. policy.
The current Activity Core worker API does not yet authenticate an individual
worker identity. `ACTIVITY_CORE_WORKER_TOKEN` authenticates a shared caller
class, while `worker_id` is request-supplied and is not bound to that principal.
That is a current-state limitation, not a property this decision may silently
upgrade into an identity guarantee.
Calling the rein the only enforcement point obscures these fail-closed Calling the rein the only enforcement point obscures these fail-closed
boundaries. Calling it the only credential holder obscures custody and release boundaries. Calling it the only credential holder obscures custody and release
authority. Conversely, moving provider or tenant credentials into Glas would authority. Conversely, moving provider or tenant credentials into Glas would
@ -55,7 +61,7 @@ The production target for unattended agentic repository mutation is:
```text ```text
Activity Core ops_run + lease Activity Core ops_run + lease
-> rein-aharness queue adapter (worker identity -> actor agt) -> rein-aharness queue adapter (configured worker_id; principal binding target)
-> Glas pinned execution profile -> Glas pinned execution profile
-> sand-boxer isolated venue -> sand-boxer isolated venue
-> selected rein and model/provider adapter -> selected rein and model/provider adapter
@ -96,7 +102,7 @@ recording evidence does not transfer that authority.
| Concern | Authority / enforcement | Required evidence at the handoff | | Concern | Authority / enforcement | Required evidence at the handoff |
|---|---|---| |---|---|---|
| Schedule and task definition | Activity Core definition owner | definition id, trigger/idempotency key, target repo, bounded task, pinned profile, allowlisted organizational refs | | Schedule and task definition | Activity Core definition owner | definition id, trigger/idempotency key, target repo, bounded task, pinned profile, allowlisted organizational refs |
| Queue identity and lease | Activity Core authenticates the worker; rein-aharness claims, heartbeats, and closes as its configured `worker_id` | ops_run id, claim owner, attempt, lease/heartbeat outcome, final queue state | | Queue caller, identity, and lease | Current: Activity Core authenticates a shared worker caller class; `worker_id` is request-supplied, and rein-aharness claims, heartbeats, and closes with its configured value. Required target: Activity Core binds an approved credential/principal to that configured `worker_id`, rejects mismatches, and rejects heartbeat/completion/failure at or after lease expiry | caller/principal class, binding contract/version, configured and accepted worker id, ops_run id, claim owner, attempt, lease/heartbeat outcome, final queue state |
| Governed actor identity | Channel/rein adapter maps this runtime to `agt`; Glas and sand-boxer validate the governed actor enum | actor plus request/run correlation; queue `worker_id` remains separate | | Governed actor identity | Channel/rein adapter maps this runtime to `agt`; Glas and sand-boxer validate the governed actor enum | actor plus request/run correlation; queue `worker_id` remains separate |
| Organizational authority | Workforce/leadership owners upstream of Activity Core | allowlisted assignment, role, duty, goal, and resource-envelope refs; refs are attribution, not authorization | | Organizational authority | Workforce/leadership owners upstream of Activity Core | allowlisted assignment, role, duty, goal, and resource-envelope refs; refs are attribution, not authorization |
| Execution constellation | Glas profile catalog and resolver | exact profile/rein/model/tool/sandbox revisions, readiness state, resolution outcome | | Execution constellation | Glas profile catalog and resolver | exact profile/rein/model/tool/sandbox revisions, readiness state, resolution outcome |
@ -108,7 +114,7 @@ recording evidence does not transfer that authority.
| Repository grant | Consuming repo manifest/blueprint and the emitted task/profile define the allowed repository and paths | canonical repo identity, baseline, declared path/publish grant | | Repository grant | Consuming repo manifest/blueprint and the emitted task/profile define the allowed repository and paths | canonical repo identity, baseline, declared path/publish grant |
| Repository transaction and acceptance | rein-aharness | transaction id, lease status, baseline and accepted commits, changed paths, clean post-state, remote-ref outcome | | Repository transaction and acceptance | rein-aharness | transaction id, lease status, baseline and accepted commits, changed paths, clean post-state, remote-ref outcome |
| Sandbox execution evidence | Glas normalizes rein and sand-boxer lifecycle facts | compact `ExecutionEvidence`, including outcome/failure stage and teardown; no prompts/tool/provider bodies | | Sandbox execution evidence | Glas normalizes rein and sand-boxer lifecycle facts | compact `ExecutionEvidence`, including outcome/failure stage and teardown; no prompts/tool/provider bodies |
| Queue result | Activity Core allowlists and stores the completion/failure envelope | terminal/reopened state and normalized execution evidence | | Queue result | Activity Core allowlists and stores the completion/failure envelope; it must independently enforce active ownership and an unexpired lease on heartbeat, completion, and failure mutations | terminal/reopened state, mutation acceptance/refusal reason, lease state at mutation, and normalized execution evidence |
| Work history and decisions | State Hub projects progress/decision records; repository workplan files remain work authority | correlation refs and value-safe progress/decision ids | | Work history and decisions | State Hub projects progress/decision records; repository workplan files remain work authority | correlation refs and value-safe progress/decision ids |
| Instance learning/metrics | Consuming repo and kaizen-agentic own the schema; T03 will choose an atomic commit or durable external projection | run/transaction correlation and reconciled projection state | | Instance learning/metrics | Consuming repo and kaizen-agentic own the schema; T03 will choose an atomic commit or durable external projection | run/transaction correlation and reconciled projection state |
@ -123,6 +129,11 @@ the repository-transaction and rein-local tool-policy enforcement point within
a chained grant; it must not weaken or duplicate the authorities at queue, a chained grant; it must not weaken or duplicate the authorities at queue,
profile, credential, sandbox, and provider boundaries.** profile, credential, sandbox, and provider boundaries.**
Operator or SSO authentication is not worker mutation identity. It may cross
that boundary only through an explicit, separately authorized and audited
break-glass contract that records the operator principal, reason, scope, and
expiry; ordinary worker calls must not inherit operator authority.
### 4. Failure classification ### 4. Failure classification
| Failure | Current required disposition | Why | | Failure | Current required disposition | Why |
@ -132,7 +143,7 @@ profile, credential, sandbox, and provider boundaries.**
| Invalid actor or incomplete/ambiguous reachability | Terminal refusal/failure; no host-checkout fallback | Actor and execution venue are governed inputs | | Invalid actor or incomplete/ambiguous reachability | Terminal refusal/failure; no host-checkout fallback | Actor and execution venue are governed inputs |
| Sandbox create, session start/execution/end, credential acquisition, or teardown failure | Terminal profiled attempt with normalized stage evidence; no legacy fallback | Re-running may duplicate effects; a new run may be emitted after repair or explicit policy | | Sandbox create, session start/execution/end, credential acquisition, or teardown failure | Terminal profiled attempt with normalized stage evidence; no legacy fallback | Re-running may duplicate effects; a new run may be emitted after repair or explicit policy |
| Claim/list transport error before ownership | Retry after the configured full polling interval | No repository work has begun | | Claim/list transport error before ownership | Retry after the configured full polling interval | No repository work has begun |
| Heartbeat rejection or confirmed lease loss | Stop dispatch, refuse repository acceptance, clean up, and leave reconciliation evidence | Work must not be accepted after ownership expires; T02 implements this | | Heartbeat rejection or confirmed lease loss | Activity Core rejects heartbeat/completion/failure at or after lease expiry; rein-aharness stops dispatch, refuses repository acceptance, cleans up, and leaves reconciliation evidence | Both queue-side mutation rejection and executor-side cancellation are required; neither boundary can substitute for the other |
| Legacy executor failure | Reopen only when the typed executor explicitly marks it retryable and Activity Core attempts remain; unmatched routes are terminal | Preserves current bounded coexistence without making all errors retryable | | Legacy executor failure | Reopen only when the typed executor explicitly marks it retryable and Activity Core attempts remain; unmatched routes are terminal | Preserves current bounded coexistence without making all errors retryable |
| Required close/evidence API outage after repository mutation | Reconcile the same transaction; do not rerun or create another workload commit | Completion delivery is uncertain, not the workload outcome; T03 implements the outbox/reconciler | | Required close/evidence API outage after repository mutation | Reconcile the same transaction; do not rerun or create another workload commit | Completion delivery is uncertain, not the workload outcome; T03 implements the outbox/reconciler |
| Optional State Hub telemetry outage | Continue only when the event is explicitly labelled best-effort and required evidence remains durable elsewhere | Observability must not masquerade as acceptance authority | | Optional State Hub telemetry outage | Continue only when the event is explicitly labelled best-effort and required evidence remains durable elsewhere | Observability must not masquerade as acceptance authority |
@ -149,6 +160,9 @@ does not reopen profiled failures itself.
runtime wiring remains unchanged. runtime wiring remains unchanged.
- T02 must make Activity Core lease loss observable inside execution and bind a - T02 must make Activity Core lease loss observable inside execution and bind a
repository lock/transaction to the claimed run. repository lock/transaction to the claimed run.
- Before the strategic route is ready, Activity Core must publish and enforce a
worker-principal/`worker_id` binding contract plus fail-closed expired-lease
mutation semantics. A shared caller token is not sufficient identity proof.
- T03 must make repository acceptance and required result delivery - T03 must make repository acceptance and required result delivery
reconcilable. Best-effort Hub telemetry is not sufficient completion proof. reconcilable. Best-effort Hub telemetry is not sufficient completion proof.
- T04 may migrate, but may not expand, the profile-absent compatibility table. - T04 may migrate, but may not expand, the profile-absent compatibility table.
@ -177,4 +191,12 @@ Acknowledgements received:
readiness, outer lifecycle/evidence, rein-local credential resolution, and readiness, outer lifecycle/evidence, rein-local credential resolution, and
no-fallback semantics approved with no edits. no-fallback semantics approved with no edits.
Pending: Activity Core, sand-boxer, and llm-connect. Reviews requiring follow-up:
- Activity Core — message `428abb02-75dc-450d-a7f6-56fc715409ab`: strategic
route and no-fallback posture confirmed, but acknowledgement withheld until
the shared-caller/current-state limitation, principal-to-`worker_id` target,
Activity-Core-side expired-lease rejection, and explicit break-glass boundary
were recorded. Those edits are incorporated in this revision.
Pending: revised Activity Core acknowledgement, sand-boxer, and llm-connect.

View file

@ -112,6 +112,13 @@ and T02T06 can cite stable decisions rather than infer ownership from code.
- Glas approved the proposed boundary without edits in message - Glas approved the proposed boundary without edits in message
`006fa46f-9419-4f61-90ff-0c3b6bc294c1`. Activity Core, sand-boxer, and `006fa46f-9419-4f61-90ff-0c3b6bc294c1`. Activity Core, sand-boxer, and
llm-connect acknowledgements remain pending. llm-connect acknowledgements remain pending.
- Activity Core review `428abb02-75dc-450d-a7f6-56fc715409ab` confirmed the
strategic route and no-fallback posture but correctly rejected an overstated
queue-identity guarantee. ADR-002 now distinguishes the current shared caller
token from the required principal-to-`worker_id` binding, requires Activity
Core itself to reject heartbeat/close mutations at or after lease expiry,
and excludes operator/SSO identity except through an audited break-glass
contract. Revised acknowledgement remains pending.
## Make each repository run a lease-bound transaction ## Make each repository run a lease-bound transaction