@sjawhar/opencode-legion-envoy 5.6.3 → 5.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/opencode-legion-envoy",
3
- "version": "5.6.3",
3
+ "version": "5.6.5",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "dist/src/server.js",
@@ -170,6 +170,20 @@ and request approval again as this section says. Later waves, re-scoping open ch
170
170
  same Acceptance, and integration-failure children need no spec edit and no new approval, and a
171
171
  child issue's spec is never gated: the root approval covers the tree.
172
172
 
173
+ **A decision block for a read no pod can make.** An acceptance criterion sometimes needs
174
+ evidence from a production or external system before a human can approve it: a measurement, a
175
+ current count, a stored record. Check first whether the evidence is already reachable through a
176
+ credential this tree's own pods carry — the model route every pod already has, and any further
177
+ identity the operator's deployment configuration grants pods (read the pod's own environment,
178
+ for example `AWS_CONFIG_FILE` or `AGENT_SECRETS_URL`, rather than assuming there is none; a
179
+ credential can exist without any skill having told you so). When the evidence genuinely is not
180
+ reachable, do not have a different running session perform the read on this tree's behalf and
181
+ fold the result into the spec as if it were routine: write the missing capability as its own
182
+ decision block — which external system, which read or write, why the spec needs it — addressed
183
+ to the human, in the same spirit as the implementer reports a production-check gap (section 6) and leave it
184
+ open until the human resolves it. A workaround substituted for that record only hides the gap
185
+ from the next tree that hits it.
186
+
173
187
  ## 2. Children in flight
174
188
 
175
189
  Release only the next useful wave. A release is an explicit lifecycle write:
@@ -327,7 +341,7 @@ active phase worker.
327
341
  | A reply on an ask you follow | Interpret the reply in the issue's design context. Answer in its thread (`dispatch_comment` with `reply_to`; under an open ask whose next move is yours, such as the approval request you must revise or hand back, `reply_to_ask` with `turn: "agent"`, since a default-turn reply hands that request back to the human and a corrected `summary` is then refused), then adjust the plan or relay it via `envoy_publish` to the responsible worker's role token; scope and product decisions remain with you. |
328
342
  | `worker-died` | Its `role` and `phase`. That role's claim failed: its launches or prompts ran out. For a phase worker the daemon holds the issue (phase `held`) and starts nothing more on it. Reassess the work, then decide with `retry_or_escalate`: `retry` when the failure looks agent-specific or transient, `escalate` to hand the held issue to the controller when it looks environmental. |
329
343
  | `held` | Its `role` and `phase` (the phase the issue left), or `phase` with `reason: "escalated"`. Without `reason`, that phase's worker ran out of launches or prompts: the issue is held (phase `held`), the `worker-died` that comes with it is yours to answer with `retry_or_escalate` as that row says, and the controller hears of the hold too. With `reason: "escalated"`, it records your own `escalate`: the controller has the issue now, and you start nothing for it. |
330
- | `ready-refused` | Its `version` and `reason`. The merger's READY was refused. A `reason` of `READY refused: approve design version <N> before requesting READY.` (or, with `version` 0, `no design version is approved`) means the design gate is closed: get that version approved (section 1), and the daemon advances the merge and posts the packet the merger sent once it is; nothing else is needed. A `reason` starting `READY_PACKET_MISSING` names a READY refused before the daemon kept packets: that READY is void and the issue stays in merging, so start it over (`park_child` then `rerun_child`, for a child) or end it. |
344
+ | `ready-refused` | Its `version` and `reason`. The merger's READY was refused, and its packet is kept with the completion so no second READY is ever needed. With `version` greater than 0, `reason` reads `READY refused: approve design version <N> before requesting READY.`: the root's spec is already registered at that version, so get it approved (section 1), and the daemon advances the merge and posts the kept packet the moment it is. With `version` 0, `reason` reads `READY refused: no design version is approved; register and approve the tree's spec before requesting READY.`: the root has no spec registered yet, so register it and get it approved (section 1) exactly as above; the daemon releases the kept packet the same way — at registration itself when that opens the gate (`gates.design: off`, or Dispatch already shows the version approved), otherwise the moment a human approves the version you registered. Either way, nothing else is needed once the gate opens. A `reason` starting `READY_PACKET_MISSING` names a READY refused before the daemon kept packets: that READY is void and the issue stays in merging, so start it over (`park_child` then `rerun_child`, for a child) or end it. |
331
345
 
332
346
  ## Escalation judgment
333
347
 
@@ -239,6 +239,17 @@ artifact, not a broken credential. Run credentialed commands from your own bash
239
239
  run that may outlast a minute with `gh run watch` in bash, which redeems once and then runs on the
240
240
  token it got.
241
241
 
242
+ **Other credentials your pod may already carry.** Before reporting that a read is unreachable,
243
+ check for them rather than assuming none exist: `AGENT_SECRETS_URL` and `AGENT_SECRETS_KEY_DIR`
244
+ are set when the deployment enrolls pods with the agent-secrets broker (`docs/kubernetes.md`,
245
+ "Operator configuration"), in which case `agent-secrets <SECRET> -- <command>` runs `<command>`
246
+ with only the secrets this pod generation's grant allows — refuses closed, naming the secret, if
247
+ the rule does not allow it. `AWS_CONFIG_FILE` is set when the deployment's `pod.volumes` carries a
248
+ further projected token beyond the model route's own; read the file it names for what profiles it
249
+ configures before assuming the AWS CLI has nothing to reach. Neither variable existing is a
250
+ guarantee the read you need is covered — a refusal from either still means what it says — but
251
+ neither should be assumed absent without checking.
252
+
242
253
  ## GitHub PR comment attribution
243
254
 
244
255
  Append this exact structured footer to **every** pull-request comment and review that this