Skip to content

Explain Codex sandbox restrictions before pstack setup probes [#124] - #129

Merged
mergify[bot] merged 4 commits into
mainfrom
factory/issue-124
Oct 4, 2026
Merged

mergify[bot] merged 4 commits into
mainfrom
factory/issue-124

Conversation

@mast-factory

@mast-factory mast-factory Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Summary

Make /setup-pstack explain blocked or unknown Codex-parent permissions before external CLI checks/probes, offer an explicitly confirmed native-only configuration or deliberate restart, and independently check both actual configuration destinations before writing. Honor CODEX_HOME rather than treating all outside-workspace writes as forbidden.

After execution, enrich only plain child-failed results without a provider-reported reason when the runner's own Codex-parent environment has CODEX_SANDBOX_NETWORK_DISABLED=1. Preserve child launch, schema, status/exit 70, requested models/efforts, and raw sidecars. No permission escalation, execution skip, fallback, or new runtime module.

Fixes #124 (implementation; required exact-head live gates remain pending before merge).

Coordination

Build handoff

  • Assigned branch: factory/issue-124; configured base: main.
  • Pushed HEAD: a9e8ac95538b342c147f9aec22cf19623f5cbb56.
  • Phase 1: accepted operator evidence from issue comment 5978003550 (Codex CLI 0.160.0, restricted vs. full access); captured expected pre-fix fake-child failure without pushing a failing commit.
  • Phase 2 checkpoint: fb3cb90b48821b0e7fac1c46dadfba61d9106428 (setup and shared prerequisite documentation).
  • Phase 3 checkpoint: a9e8ac95538b342c147f9aec22cf19623f5cbb56 (post-failure diagnostics and boundary tests).
  • Codex default sandbox blocks external pstack lanes; setup should detect and explain it #124-specific diff against the Fix Grok read-only cancellation and preserve runner failure evidence #78 checkpoint changes exactly the four approved files. No receipt types/schema, CLI tests, bootstrap tests, or Mergify changes.

Test plan and actual automated evidence

Executed on the pushed HEAD using Bun 1.4.0 and Claude Code 2.1.283. Script commands run from plugins/pstack/skills/poteto-mode/scripts; other commands from repository root.

Command Result / exit status
Pre-fix bun test runner/run.test.ts -t 'names likely Codex sandbox cause after child failure' Expected failure: 0 pass, 1 fail; receipt only said child exited with status 1; exit 1
bun install --frozen-lockfile exit 0
Same named regression after fix 1 pass, 0 fail; exit 0
bun test runner/run.test.ts 60 pass, 0 fail, 346 assertions; exit 0
bun run test 192 pass, 0 fail across 11 files, 888 assertions; exit 0
bun run typecheck Strict no-emit watch-pr, runner, and check-plan checks; exit 0
PSTACK_STATIC_ONLY=1 bash tests/skill-collision-repro.sh All static invariants passed; exit 0
bun -e 'for (const path of [".claude-plugin/marketplace.json", ".agents/plugins/marketplace.json", "plugins/pstack/.claude-plugin/plugin.json", "plugins/pstack/.codex-plugin/plugin.json"]) JSON.parse(await Bun.file(path).text())' Four manifests parse; exit 0
claude plugin validate ./plugins/pstack --strict Validation passed; exit 0
Setup prose review Nine checks passed; exit 0; not a live behavioral test
git diff --check exit 0; checkout clean

Focused diagnostics suite: 13 tests cover parent-marker eligibility, scrubbed child environment with actual child execution, bounded evidence prefix, raw sidecars, provider-reason precedence, cancellation, successful children, missing/non-1 markers, Claude parents, unavailable-model, unauthenticated, and timed-out results. Initial focused test fixtures were corrected before the final passing run.

Raw command output and exit statuses are preserved locally under .git/issue-124-evidence/: pre-fix-runner-regression.log, runner-regression.log, runner-tests.log, bun-tests.log, strict-typecheck.log, static-invariants.log, manifest-validation.log, plugin-validation.log, setup-prose-review.log, and permission-evidence.json. These are untracked local artifacts, not shipped files. The interrupted typecheck stream was followed by log verification and a fresh successful acceptance run.

Live acceptance: PENDING, not claimed

The operator's Phase 1 observation establishes the marker and required-path behavior, not candidate acceptance. Codex and Grok CLIs are absent in this build sandbox. Per the operator's request, run the matrix after review, with the exact candidate installed; do not merge until required evidence and live-gate status are posted.

  • Restricted Codex workspace-write, network off, external assignments: explanation and two choices precede external CLI invocation; no configuration writes.
  • Same parent with explicitly confirmed native-only assignments: native-only probes and no implicit substitutions.
  • Full-access Codex with authenticated assigned providers: unchanged routing and requested efforts.
  • Permitted native probes but denied final destination: before/after byte comparison; first run creates neither artifact; assess actual CODEX_HOME destinations.
  • Claude-parent setup with required provider prerequisites: unchanged assigned-pair routing and probes.
  • Permission-information-unavailable branch: operator could not produce a real session. Per approval conditions, record this gap and cover it with setup-prose review: unknown remains unknown, absent markers do not prove full access, and unresolved external access stops probes. This is not claimed as real-session execution.

Record installed version, candidate SHA, surface, action, permission evidence, tool invocation order, confirmed choices, and configuration outcomes without secrets. Repeat after rebases/head changes.

Assumptions and open questions

  • Effective parent permission instructions and verified actual paths govern setup; missing environment markers do not prove full access.
  • Runner hint is a likely cause, never a capability decision or proof of every DNS/write failure.
  • Scope excludes prior finding GITHUB-1345013588-100 at .mergify.yml:queue_rules: queue-head invalidation does not cause the sandbox setup defect. Existing exact-head live gates still apply.
  • No implementation questions remain. Operator live verification and dependent/overlapping PR integration remain pending. This handoff does not authorize merge or a stage transition.

Findings

None

Known observation (not repaired)

  • run.test.ts, issue78 terminal results: the exit-1 malformed-terminal test asserts an exact message. It fails when the suite runs inside a Codex network-disabled sandbox, because the new sandbox hint is appended. The fix is to clear CODEX_SANDBOX_NETWORK_DISABLED in that block, as the neighbouring diagnostics block does. It is waived as fails-loudly at head e257bad and will be fixed with the next change to these files.

@mergify

mergify Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Merge Protections

🟢 All 2 merge protections satisfied — ready to merge.

Show 2 satisfied protections

🟢 Queue ready pull requests

Automatically queue non-draft pull requests targeting main after verify, Unfret, and live-gate pass on the head.

  • -draft
  • check-success=Unfret
  • check-success=live-gate
  • check-success=verify

🟢 🚦 Auto-queue

When all merge protections are satisfied and these conditions match, this pull request will be queued automatically.

  • -files~=^\.github/
  • base = main

@greptile-apps

greptile-apps Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

[Medium risk] Adds sandbox diagnostics and error handling for external model providers.

The PR appears safe to merge from this code review, though the missing Grok sandbox hint should be fixed.

Findings

  1. P2 Grok sandbox hint goes missing ▶

Summary

/setup-pstack checks parent permissions before external CLI probes and checks both configuration destinations before writing. The runner adds clearer failure receipts and saves raw model output in private sidecar files.

  • Blocked or unknown Codex access now leads to an explicit restart or native-only choice.
  • Receipts preserve provider-reported failure details and can point to raw stdout and stderr.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[Parent selects routes] --> B[Setup checks access]
  B --> C[Probe assigned lanes]
  C --> D[Check both write targets]
  D --> E[Write configuration]
  C --> F[Runner captures child streams]
  F --> G[Parse provider result]
  G --> H[Write output or failure receipt]
Loading

Reviews (1) · Last reviewed commit: "fix: explain likely Codex sandbox child ..."

Comment on lines +126 to +132
const message = errors.join("\n") || nullableString(result.error)
|| nullableString(object(result.error)?.message) || nullableString(result.result)
|| `grok reported ${result.subtype}`;
const cancelled = result.stop_reason === "cancelled" || result.stop_reason === "canceled"
|| result.subtype === "cancelled" || result.subtype === "canceled"
|| /^(?:User cancel(?:led|ed) the execution|PermissionCancelled)/i.test(message);
throw new ProviderResultError(message, cancelled ? "cancelled" : "child-failed", metadata);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Grok sandbox hint goes missing

When Grok sends an error event without a reason, parseGrok makes up a message such as grok reported api_error. The runner treats it as Grok's reason and skips the Codex sandbox hint. That leaves the operator with a generic error instead of the likely cause. Only a reason Grok actually sent should suppress the hint.

Knowledge Base Used: Poteto runner and orchestration

@unfret-eal

unfret-eal Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

✅ Accepted risk

Accepted by ericlitman: GH-124 (authority 48fa77b)

🟡 Medium · Restored Codex marker breaks later runner test

Advisories (1)
  • Sandbox hint not suppressed by Claude provider-reported errors
    Not blocking because: The incorrect likely-cause text is confined to failure diagnostics. The lane still returns child-failed/70, publishes no successful output, and retains the provider response in raw sidecars; routing, permissions, and dropout classification remain unchanged.
Details

Run: GET /unfret/run/panel:cb1cfbd9fb330bb56aa791e854f7fc6b6884f9d9:1wb2FRgjYla:gEWs_7wnfno.

@unfret review · @unfret status · @unfret help

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 1 blocking finding
🟡 Medium · Grok nonzero exits with non-terminal stdout become malformed-output
Check

Comment on lines +820 to +821
if (result.cancelledBy !== null || result.timedOut || providerFailure !== null
|| (result.exitCode !== 0 && parseError === null)) {

@unfret-eal unfret-eal Bot Oct 4, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium · Grok nonzero exits with non-terminal stdout become malformed-output

Lines 810-811 parse every Grok run that exits nonzero with non-empty stdout. If parsing fails with a generic error, (result.exitCode !== 0 && parseError === null) on line 821 is false. The failure branch is skipped, and line 862 rethrows the error as malformed-output/65. Trigger: Grok streams assistant or tool events, then crashes, is OOM-killed, or aborts on a sandbox or network error and exits 1 without a type:"result" event. Printing a plain-text error line to stdout has the same effect. - Before this diff, any nonzero exit went through unavailableStatus. That yields child-failed/70, or unauthenticated/unavailable-model. - Now the receipt says malformed-output with the message "grok result did not contain a terminal event" (or "non-JSON event"), and unavailableStatus is never consulted. - The new Codex-sandbox hint is also suppressed, because status is no longer child-failed. This contradicts the doc's "sandbox-startup refusal remains child-failed (exit 70)" whenever Grok has written any stdout first. The existing exit-1 test covers only a present-but-invalid result event, not the case where no terminal event exists.

Withdrawn in the latest review.

Explain effective parent permissions before assigned external probes, preserve an explicit native-only choice, and guard actual configuration destinations independently.

Co-Authored-By: mastra-platform[bot] <284800079+mastra-platform[bot]@users.noreply.github.com>
Keep provider-reported reasons authoritative and preserve child-failed receipts while surfacing the confirmed network-disabled parent marker after execution.

Co-Authored-By: mastra-platform[bot] <284800079+mastra-platform[bot]@users.noreply.github.com>
@mast-factory
mast-factory Bot force-pushed the factory/issue-124 branch from a9e8ac9 to e257bad Compare October 4, 2026 09:08
@mast-factory

mast-factory Bot commented Oct 4, 2026

Copy link
Copy Markdown
Author

Rebased only the two #124 commits onto issue #78 head ef6c5c439fe3cea47fc880d68803af5f9c0609cc using the requested --onto boundary. Range-diff matches both original commits. No independent runner-classification fix was added; classification is inherited from #78.

New candidate: e257bad2c7567bd5108c5c654ac27dc920efa5cc. Phase commits: setup/docs 42a8be8281168f17cd2f10db00be472d2d5fcfa7; runner diagnostics/tests e257bad2c7567bd5108c5c654ac27dc920efa5cc. Pushed only factory/issue-124 with an explicit force-with-lease against its verified old head.

Acceptance checks rerun at this exact candidate, all exit 0: frozen-lockfile install; fake-child regression; focused Codex diagnostics; runner tests (64 pass); full Bun tests (196 pass); strict typecheck; static invariants; manifest JSON validation; strict Claude plugin validation; setup-prose review; git diff --check. Logs and per-command exit statuses are saved locally under .git/issue-124-evidence/rebase-e257bad/.

Real Codex/Grok live acceptance remains pending operator execution after review; it is not claimed. The permission-information-unavailable branch remains prose-reviewed only. Exact-head live evidence must be collected for this new candidate. The #56 shared-prerequisites coordination remains unchanged.

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 1 blocking finding
🟡 Medium · Exit-1 malformed-terminal test fails when run inside a Codex network-disabled sandbox
Check

Comment on lines +623 to +624
sessionId: null, error: { message: exitCode === 0
? "grok result did not contain a valid terminal status" : "child exited with status 1" },

@unfret-eal unfret-eal Bot Oct 4, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium · Restored Codex marker breaks later runner test

When the suite starts with CODEX_SANDBOX_NETWORK_DISABLED=1, this nested cleanup restores that marker after the diagnostics block, while the file-level setup does not clear it. The later exit-1 malformed-terminal test then receives the newly appended sandbox hint but still expects exactly child exited with status 1, causing the repository-required bun run test command to fail in a Codex network-disabled sandbox. This reproduces as 202 passing and 1 failing test. Also reported for this defect: - Marker isolation scoped to new block; pre-existing exact-message test fails in Codex sandbox (plugins/pstack/skills/poteto-mode/scripts/runner/run.test.ts:288-291): Carried repair v1:2937dc7d (run.test.ts ~623) still holds at this head. The runner now appends the sandbox hint whenever parent is codex and the inherited CODEX_SANDBOX_NETWORK_DISABLED is "1" (run.ts:574-575, 852). The save/clear of that variable exists only in this describe block's hooks (288-299). The file-level beforeEach (228-257) does not clear it, and neither does the issue78 block. That block's test keeps malformed terminal data distinct after child exit 1 runs a codex-parent Grok lane that exits 1 and asserts error.message is exactly "child exited with status 1". Scenario: a Codex agent in the default workspace-write session runs bun run test as AGENTS.md requires; that session exports the marker (provider-dispatch.md:76). The message becomes "child exited with status 1; likely cause: Codex parent sandbox has network disabled; ...", so the assertion fails. The suite exits nonzero there and passes elsewhere. run.test.ts changes are confined to lines 285-461, so nothing visible repairs ~623; a fix outside the visible diff cannot be ruled out, but the PR body lists it as not repaired. Any other pre-existing exact child-failed assertion with a Codex parent is exposed the same way. - Inherited Codex marker makes the Bun suite fail (plugins/pstack/skills/poteto-mode/scripts/runner/run.test.ts:623): When bun run test runs inside Codex's default network-disabled sandbox, CODEX_SANDBOX_NETWORK_DISABLED=1 remains set outside the new diagnostics block. The later keeps malformed terminal data distinct after child exit 1 case runs a Grok lane with parent codex, so the runner correctly appends the new sandbox hint, but this line still exact-matches child exited with status 1. The repository-required test suite therefore fails in that environment despite the behavior being valid. - Exit-1 malformed-terminal test fails when run inside a Codex network-disabled sandbox (plugins/pstack/skills/poteto-mode/scripts/runner/run.test.ts:623-624): The new test keeps malformed terminal data distinct after child exit 1 runs a Grok lane with parent codex. It asserts error.message is exactly "child exited with status 1". The neighbouring "Codex parent sandbox diagnostics" block saves and clears CODEX_SANDBOX_NETWORK_DISABLED. The issue78 terminal results block does not, and neither does the file-level beforeEach. Codex exports CODEX_SANDBOX_NETWORK_DISABLED=1 to commands in its default workspace-write session. Scenario: a Codex agent runs bun run test, as AGENTS.md requires before opening a PR. - executeLane computes parentNetworkDisabled = true. - The generic parse error on exit 1 yields plain child-failed. - The message becomes "child exited with status 1; likely cause: Codex parent sandbox has network disabled; see provider-dispatch.md#host-and-parent-prerequisites". - The toMatchObject assertion fails, so the suite exits nonzero in that environment and passes elsewhere. The hint and this exact-message assertion are both introduced by this diff.

Now at plugins/pstack/skills/poteto-mode/scripts/runner/run.test.ts:297

Also affects:

@ericlitman

Copy link
Copy Markdown
Owner

Unfret waiver for head e257bad. Ticket GH-124 is GitHub issue #124.

Finding v1:2937dc7d7daeff05c0951a9eb2a799ec236e1a83a01ec477effee72b6e3d86a0 ("Exit-1 malformed-terminal test fails when run inside a Codex network-disabled sandbox") is class fails-loudly.

  • Trigger: running bun run test inside a Codex workspace-write session that exports CODEX_SANDBOX_NETWORK_DISABLED=1.
  • Consequence: one test's exact-message assertion fails visibly in that environment. Runner behavior is correct there: the hint is the intended output. CI's verify and every unsandboxed run pass. There is no wrong decision, no shipped behavior change, and no security, data or gate impact.
  • Not repaired under the consequence rules. The follow-up is to clear CODEX_SANDBOX_NETWORK_DISABLED in the issue78 terminal results block, as the neighbouring diagnostics block already does. That belongs with the next real change to these files.

@ericlitman

Copy link
Copy Markdown
Owner

Live test, Codex half (head e257bad)

Result: the Codex half passes. The Claude half has not run yet, so I have not set the live-gate status.

Installed version. Open Pstack 1.5.0 from ref e257bad (full SHA in each marketplace config). I installed it into fresh, throwaway CODEX_HOME directories with Codex CLI 0.160.0. SHA-256 of the installed setup-pstack/SKILL.md matches the candidate.

Session (interactive Codex TUI, GPT-6.1 Sol) Action Observed
codex --sandbox workspace-write -c sandbox_workspace_write.network_access=false "Use the pstack setup-pstack skill for this Codex parent with the default first-run assignments." Setup stopped before any probe: "Setup is blocked by this parent's restricted network access … No probes ran and no configuration files were created." It named the external families, Claude Opus and Grok, and offered exactly two paths: restart with suitable permissions, or explicitly choose native-only assignments. It quoted the skill's rule against changing sandbox settings. CODEX_HOME held no pstack-models.md or AGENTS.md afterwards. The session's env showed CODEX_SANDBOX=seatbelt and CODEX_SANDBOX_NETWORK_DISABLED=1, and curl failed DNS.
Same session "I choose path 2: native-only …" Setup listed every role change, wrote pstack-models.md and the bounded AGENTS.md block in CODEX_HOME, and verified exact bytes. The native Sol probe, panel smoke and cross-judge passed. No external CLI ran.
codex --sandbox danger-full-access (fresh home) Setup with Opus roles reassigned to Sol, because the Claude CLI on this Mac is logged out, and Grok defaults kept No restriction message. The external Grok probe ran through the installed runner and passed: grok-4.7@xhigh, 3.2 s. The mixed-panel smoke and cross-judge passed, and the sheet and integration were written.

Not covered on the real surface:

  • The runner's post-failure hint. From a network-disabled Codex parent, a Grok lane stops at preflight (unavailable-model/69), and Claude's preflight needs a logged-in CLI. So I couldn't produce a plain model-stage child-failed there. The Bun tests cover the hint.
  • A refused final write. Under workspace-write, $CODEX_HOME was writable, so no real session refused the final write.
  • Unknown permission information. No real session produced it.

Review state: Unfret shows Accepted risk on this head. One test-isolation finding is waived as fails-loudly, and it is noted in the PR body.

Still pending: the Claude Code parent check. It needs a logged-in Claude Code CLI.

Co-Authored-By: mastra-platform[bot] <284800079+mastra-platform[bot]@users.noreply.github.com>

# Conflicts:
#	plugins/pstack/skills/poteto-mode/references/provider-dispatch.md
@mast-factory

mast-factory Bot commented Oct 4, 2026

Copy link
Copy Markdown
Author

Merged origin/main (2334d6f506f2e6df1bd1034849a317dd09cb084e, including merged #126 and #125) into factory/issue-124 with a normal merge commit. No rebase or force-push was used for this update. Resolved the shared prerequisites conflict by retaining main guidance and all #124 additions.

New tested and normally pushed head: 1d9776a27658ca13b8ab42d6fbf0c94cee006a8c. Merge parents are previous published #124 head e257bad and main 2334d6f. Diff against main contains only #124 changes in setup SKILL.md, provider-dispatch.md, runner/run.ts and runner/run.test.ts (204 insertions, 5 deletions). Runner classification remains inherited from #78.

Check at new head Exit status
Frozen-lockfile install 0
Fake-child regression (1 passed) 0
Focused sandbox diagnostics (13 passed) 0
Runner tests (64 passed) 0
Full Bun tests (196 passed) 0
Strict typecheck 0
Static invariants 0
Manifest JSON validation 0
Strict Claude plugin validation 0
Setup-prose review, including preserved main prerequisites/write procedure 0
Diff whitespace check 0

Local logs: .git/issue-124-evidence/merge-1d9776a/. Real Codex/Grok live matrix remains pending operator execution on this exact head. Permission-information-unavailable coverage remains prose review only, not a claimed real-session test.

Co-Authored-By: mastra-platform[bot] <284800079+mastra-platform[bot]@users.noreply.github.com>
@mast-factory

mast-factory Bot commented Oct 4, 2026

Copy link
Copy Markdown
Author

Merged latest origin/main (44179007264ab30ac639b608cb0724b3837e8172, including #113) normally and conflict-free. No rebase or force-push. Final tested and pushed head: cb1cfbd9fb330bb56aa791e854f7fc6b6884f9d9. Merge parents: previous #124 head 1d9776a and main 4417900.

Diff against main remains only #124 changes in its four files (204 insertions, 5 deletions). Main launcher updates are retained.

Check Exit status
Frozen-lockfile install 0
Fake-child regression (1 passed) 0
Focused sandbox diagnostics (13 passed) 0
Runner tests (71 passed) 0
Full Bun tests (203 passed) 0
Strict typecheck 0
Static invariants 0
Manifest JSON validation 0
Strict Claude plugin validation 0
Setup-prose review 0
Diff whitespace check 0

Logs: .git/issue-124-evidence/merge-cb1cfbd/. Real Codex/Grok live checks remain pending operator execution at this exact head; unknown-permission coverage remains prose-reviewed only. Pushed once normally, verified remote head, and will not push again unless the operator asks.

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 1 blocking finding
🟡 Medium · Restored Codex marker breaks later runner test
Check

@ericlitman

Copy link
Copy Markdown
Owner

Waiver re-applied for head cb1cfbd (queue update of e257bad).

Unfret waiver for head e257bad. Ticket GH-124 is GitHub issue #124.

Finding v1:2937dc7d7daeff05c0951a9eb2a799ec236e1a83a01ec477effee72b6e3d86a0 ("Exit-1 malformed-terminal test fails when run inside a Codex network-disabled sandbox") is class fails-loudly.

  • Trigger: running bun run test inside a Codex workspace-write session that exports CODEX_SANDBOX_NETWORK_DISABLED=1.
  • Consequence: one test's exact-message assertion fails visibly in that environment. Runner behavior is correct there: the hint is the intended output. CI's verify and every unsandboxed run pass. There is no wrong decision, no shipped behavior change, and no security, data or gate impact.
  • Not repaired under the consequence rules. The follow-up is to clear CODEX_SANDBOX_NETWORK_DISABLED in the issue78 terminal results block, as the neighbouring diagnostics block already does. That belongs with the next real change to these files.

@ericlitman

Copy link
Copy Markdown
Owner

Live tests and live-gate (head cb1cfbd)

This head is level with main: the builder merged main after #126 and #113 merged, with no force-push. Unfret shows Accepted risk. I ran both harnesses on this exact head. Both pass, and I set live-gate to success on cb1cfbd9fb330bb56aa791e854f7fc6b6884f9d9.

Codex

  • Installed version: Codex CLI 0.160.0, with the candidate installed from --ref cb1cfbd9fb330bb56aa791e854f7fc6b6884f9d9 into fresh CODEX_HOMEs. Each home's auth.json is a symlink to the operator's real login.
  • Surface: codex exec sessions.
Session Action Observed
--sandbox workspace-write, network off setup-pstack with the default first-run assignments Setup stopped before any probe and quoted CODEX_SANDBOX_NETWORK_DISABLED=1. It named the blocked external assignments (claude:opus@max, grok:grok-4.7@xhigh) and offered exactly two paths: restart with suitable permissions, or explicitly choose native-only assignments. "Neither configuration file was created", which I confirmed.
--sandbox danger-full-access setup-pstack with the defaults, write confirmed Sol max native, Opus max through the external runner and Grok xhigh through the external runner all passed. The mixed-panel smoke, cross-judge and byte readback passed, and the sheet and AGENTS.md block were written under the resolved home.

Claude Code

  • Installed version: Claude Code 2.1.289, with the candidate loaded via --plugin-dir from a checkout of exactly cb1cfbd9fb330bb56aa791e854f7fc6b6884f9d9 and the installed pstack turned off for the session.
  • Surface: a claude -p session in a fresh directory.
  • Action: setup-pstack's environment check and live probes for the parent's current assignments, writing no configuration.
  • Observed:
    • The environment check passed.
    • The external Grok probe (--parent claude) completed with grok-4.7-build verified.
    • The external Codex probe (--parent claude) completed.
    • Opus routes natively, through the pstack-opus-max agent.
    • SHA-256 of ~/.claude/pstack-models.md and ~/.claude/CLAUDE.md was identical before and after: the Claude parent's routing and configuration are unchanged.
  • Observation, not changed by this PR: the Codex probe receipt has modelVerified: false with no reportedModel. Explain Codex sandbox restrictions before pstack setup probes [#124] #129 doesn't touch Codex output parsing.

@mergify

mergify Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • ✅ Entered queue — 2026-10-04 12:05 UTC · Rule: default · triggered by merge protections
  • ✅ Checks skipped · PR is already up-to-date
  • ✅ Merged — 2026-10-04 12:05 UTC · at cd43478bd6c9fa38d884f45b36a4202191a3b188 · merge

This pull request spent 8 seconds in the queue, including 1 second running CI.

Required conditions to merge

@mergify
mergify Bot merged commit cd43478 into main Oct 4, 2026
5 checks passed
mast-factory Bot pushed a commit that referenced this pull request Oct 4, 2026
…#120]

Preserve #129 permission guidance and #120 config-home rules in their respective setup steps.

Co-Authored-By: mastra-platform[bot] <284800079+mastra-platform[bot]@users.noreply.github.com>
andrewfree pushed a commit to andrewfree/open-pstack that referenced this pull request Oct 4, 2026
Build the combined setup fix on the approved ericlitman#126/ericlitman#129 dependency history.

Co-Authored-By: mastra-platform[bot] <284800079+mastra-platform[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Codex default sandbox blocks external pstack lanes; setup should detect and explain it

1 participant