okstra 0.176.0 → 0.176.1

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": "okstra",
3
- "version": "0.176.0",
3
+ "version": "0.176.1",
4
4
  "description": "Host-aware multi-provider cross-verification orchestrator runtime and agent skills.",
5
5
  "license": "MIT",
6
6
  "author": "devonshin",
@@ -1,5 +1,5 @@
1
1
  {
2
- "package": "0.176.0",
3
- "builtAt": "2026-08-18T08:36:47.903Z",
2
+ "package": "0.176.1",
3
+ "builtAt": "2026-08-18T10:02:18.572Z",
4
4
  "repoRoot": "/home/runner/work/okstra/okstra"
5
5
  }
@@ -176,7 +176,7 @@ class WorkerJob:
176
176
  self.model_execution_value,
177
177
  str(self.prompt_path),
178
178
  self.worktree_path,
179
- self.role,
179
+ self.wrapper_role,
180
180
  str(self.idle_timeout_seconds),
181
181
  "--presentation",
182
182
  self._presentation(),
@@ -190,6 +190,30 @@ class WorkerJob:
190
190
  argv += ["--session-id", self.session_id]
191
191
  return argv
192
192
 
193
+ @property
194
+ def wrapper_role(self) -> str:
195
+ """The canonical role the entrypoint's role positional is read as.
196
+
197
+ `self.role` is the roster label team-state carries (`Antigravity
198
+ worker`) so the report's execution-status row can quote it. The
199
+ entrypoint reads that same position through `normalize_role`, which
200
+ knows only the eleven canonical ids, and compares it against
201
+ `role_for_duty(dutyId)` from the invocation metadata. Handing it the
202
+ label failed that check before the status sidecar was written, so a
203
+ pane worker exited 64 leaving no `.log` and no `.status.json` while
204
+ team-state still read `in-progress`. It also silently denied the
205
+ verifier the toolchain dirs `verifier_extra_dirs` grants by role.
206
+
207
+ A legacy v1 job carries no duty id; the entrypoint skips the metadata
208
+ role check for it, so its existing value is preserved.
209
+ """
210
+ if not self.duty_id:
211
+ return self.role
212
+ try:
213
+ return role_for_duty(self.duty_id)
214
+ except RoleCatalogError:
215
+ return self.role
216
+
193
217
  def _presentation(self) -> str:
194
218
  # A pane is a screen a person watches; a cli-wrapper dispatch's stdout is
195
219
  # a subagent's context window. Progress belongs in the first and not the