Skip to content

fix(workflows): require one paired adversarial review - #511

Merged
andrei-hasna merged 11 commits into
mainfrom
fix/workflow-validator-single-review
Aug 9, 2026
Merged

fix(workflows): require one paired adversarial review#511
andrei-hasna merged 11 commits into
mainfrom
fix/workflow-validator-single-review

Conversation

@andrei-hasna

@andrei-hasna andrei-hasna commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • require a reviewer-agent/review-step pair with an independently owned candidate dependency
  • verifier-gate the finite single-review artifact contract while keeping legacy multi-review fixtures valid
  • align workflow generation with one bounded reviewer and at most two focused remediation cycles
  • add the five required topology regressions and a synthetic non-executing finance fixture with zero payment/provider execution steps

Validation

  • git diff --check
  • cargo fmt --all -- --check
  • staged shield review: No security issues found in staged changes.
  • Rust tests intentionally left to GitHub Actions; no local heavy Rust or Bazel build was run

Task: dd104f0e-5442-48cf-bf2c-181d08427c13

This PR does not merge, publish, install, release, or mutate invoice/payment/provider state.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

[REVIEW] NO_GO — candidate ea0f0b2; current base origin/main 630c010; current merge tree e052b37e19a08aa9cbe20712f07c57114a9a0d07. P1 blocker: the required synthetic finance acceptance run is absent. The only final-candidate evidence is the Rust test validates_synthetic_finance_retry_without_payment_execution_steps in codex-rs/workflows/src/tests.rs, which parses YAML, counts forbidden terms only in step ids and titles, and confirms verifier lists are nonempty. It does not execute a workflow, run artifact verifiers to a terminal state, or observe the payment or banking-provider boundary. Todos records explicitly state that the installed runtime has no production workflow activation service, and the acceptance artifact directory contains only the NON_VERDICT pre-build challenge. Acceptance section D.4-D.5 and the stop condition are therefore unmet. The focused Rust lanes are otherwise supported: workflows 30/0 on run 31276311363 at 8fb041d, with the final remediation touching only the prompt; prompts 7/0 on final-head run 31276472677. No completed applicable check failure reached the diff; broader checks remain a separate merge gate. Focused re-review scope: the named synthetic finance run evidence and direct regressions only. No P2/P3 code findings.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

[REVIEW] NO_GO — #511 @ ea0f0b2 — lens: correctness+security+gates, reviewer unresolved-account002 (1 of 1)

Reviewed:

  • git log --oneline origin/main..HEAD — exit 0; 2 commits.
  • git diff origin/main...HEAD --stat — exit 0; 4 files, 337 insertions, 38 deletions.
  • Full diffs and surrounding source for codex-rs/prompts/src/workflows_tests.rs, codex-rs/prompts/templates/workflows/deep_yaml_system_prompt.md, codex-rs/workflows/src/tests.rs, and codex-rs/workflows/src/validation.rs.
  • Relevant workflow spec types, validator helpers, the legacy dental fixture, and the state-runtime workflow fixtures reached by the failed Bazel lane.

Setup and declared gates:

  • bun install — exit 0; setup only, 521 packages installed. Test pass/fail count: not applicable.
  • The root package.json declares no test script, so this repository declares no package test gate.
  • The root package.json declares no typecheck script.
  • No reviewer-chosen local Rust command was run; repository policy requires codex-rs builds/tests to run remotely.

Forge gate read:

  • gh pr view 511 --repo hasna/codewith --json statusCheckRollup — exit 0; 19 SUCCESS, 2 FAILURE, 3 SKIPPED, 4 IN_PROGRESS.
  • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS
  • cla — SUCCESS
  • Check for spelling errors — SUCCESS
  • Blob size policy — SUCCESS
  • cargo-deny — SUCCESS
  • build-test — SUCCESS
  • Build Codewith Linux CLI — SUCCESS
  • Detect changed areas — SUCCESS
  • python-sdk — SUCCESS
  • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-musl — IN_PROGRESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 1/4 — SUCCESS
  • Format / etc — SUCCESS
  • sdks — SUCCESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 2/4 — SUCCESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 3/4 — FAILURE
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 4/4 — SUCCESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm (native main) — SKIPPED
  • cargo shear — SUCCESS
  • Bazel clippy on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS
  • Argument comment lint package — SKIPPED
  • Bazel clippy on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS
  • Verify release build on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS
  • Argument comment lint - Linux — SUCCESS
  • Verify release build on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS
  • Argument comment lint - Windows — SUCCESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm — FAILURE
  • CI results (required) — SUCCESS
  • [code]smith — SKIPPED

Blocking P0/P1 findings:

  • P1 — the validator breaks the stated legacy multi-review compatibility and the remote Bazel state gate. validate_adversarial_work requires a paired review step before its multi-review compatibility path can succeed. Existing state-runtime fixtures declare multiple adversarial reviewer agents without paired review steps and now fail during save_workflow_spec_yaml. The failed Windows shard reports FAILED: //codex-rs/state:state-unit-tests; representative output is workflow spec is invalid: draft workflows must include at least one independent adversarial review run assigned to a reviewer agent, with summaries including 42 passed; 6 failed. This is caused by the candidate and blocks an applicable build/test gate.

Named remedy:

  • Preserve existing multi-review workflows before applying the stricter single-review topology and finite-artifact checks, add a regression covering a legacy multi-review fixture with no paired review step, and rerun the affected workflow-validator and state-unit-test lanes.

Non-blocking follow-ups:

  • The absence of repository-declared package test and typecheck gates is recorded above. No other P2/P3 follow-up was found.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

Fixed the named legacy-compatibility blocker in 35844a36bd6d814f12361f8946eb4ed7daf71f82.

The validator now preserves v0 workflows with multiple adversarial agents before applying the stricter single-review topology and finite-artifact checks. Added a regression for a legacy multi-review workflow without a paired review step.

Validation before push:

  • cargo fmt -- --config imports_granularity=Item — exit 0.
  • git diff --check — exit 0.
  • shield review on the staged two-file fix — exit 0; No security issues found in staged changes.
  • Pre-push scan covered 1 commit; push to fix/workflow-validator-single-review — exit 0.

Focused remote re-validation is now running for the workflow validator and state-unit-test regressions.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

Correction to the preceding fix comment: the exact pushed commit is 35844a3. The earlier expanded SHA in that comment was wrong; the short prefix 35844a36b referred to this exact commit.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

[REVIEW] NO_GO — focused remediation re-review, cycle 1.

Exact candidate: b11afdd
Parent: 35844a3
Live base: bb2a24f
Merge tree: 304e30689f1a6662068d671e2cb869ae024d6881

The prior P1 is closed. The two-file remediation uses the real workflow parser, StateRuntime persistence and transitions, production artifact_contains verifier, and terminal receipt. Blacksmith run 31278059340 succeeded at the exact candidate with the named zero-finance receipt.

One direct P1 regression blocks this exact head: required check Argument comment lint - Linux failed in run 31277982747, job 93154619215, and the added first-party calls at codex-rs/ext/workflows/src/activation/finance_acceptance.rs:832 and :854 directly violate the enabled lint. Line 832 passes bare None for verdict and bare 0 for finance_calls; line 854 passes bare 0 for finance_calls. The repository lint explicitly rejects uncommented Option::None and numeric literal arguments to first-party functions.

Fix only those named callsites with exact parameter comments, then rerun the affected Argument comment lint - Linux lane at the new exact head. Broader Bazel/rust-ci gates remain executor scope. No other in-scope P0/P1 finding.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

[REVIEW] GO — focused final remediation re-review, cycle 2.

Exact candidate: 58525d7
Parent: b11afdd
Live base: bb2a24f
Merge tree: 151d1a5959b8fd83ec3869ee41b5feb43de43bf1

The commit changes only codex-rs/ext/workflows/src/activation/finance_acceptance.rs and resolves the three named anonymous literal arguments with exact parameter comments: verdict on None and finance_calls on both numeric zero arguments. The comments match the review_artifact signature.

The affected exact-head lane is terminal green: rust-ci run 31278663119, Argument comment lint - Linux job 93156334195, head 58525d7, status completed, conclusion success, annotations []. Diff check is clean.

The closed functional P1 was not reopened. No in-scope P0/P1 finding remains; this bounded review cycle terminates with GO.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

[REVIEW] NO_GO — #511 @ 58525d7 — lens: correctness+security+gates, reviewer unresolved-account002 (1 of 1)

Reviewed candidate and scope

  • Verified HEAD=58525d7a2c6d1efb9fbc70b45d96fe32b9a5c894 and origin/main=bb2a24f5192454bd1d4868e8493a6af47d8c9fe2; worktree was clean before and after setup.
  • Ran git log --oneline origin/main..HEAD (exit 0): five commits.
  • Ran git diff origin/main...HEAD --stat (exit 0): six files, 1,460 insertions and 38 deletions.
  • Read the complete diff for all six changed files and the surrounding activation supervisor, verifier claim/result state runtime, workflow validation, persisted-spec run-start, and app-server workflow API paths.

Declared setup and gates

  • bun install: exit 0; setup only, 521 packages installed. It produced an untracked bun.lock by migrating the pnpm lock; that setup artifact was removed and the candidate remains clean. This is not a test result.
  • The root package.json declares no test script, so this repo declares no test gate.
  • The root package.json declares no typecheck script.
  • Lane's chosen command: none. I did not invent a local Rust/Cargo gate; this repository requires Rust/Bazel validation remotely.
  • gh pr view 511 --repo hasna/codewith --json statusCheckRollup: exit 0. Current counts are 21 SUCCESS, 2 FAILURE, 3 SKIPPED, and 2 IN_PROGRESS across 28 checks:
    • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS, no conclusion.
    • cla — SUCCESS.
    • Check for spelling errors — SUCCESS.
    • Blob size policy — SUCCESS.
    • cargo-deny — SUCCESS.
    • build-test — SUCCESS.
    • Build Codewith Linux CLI — SUCCESS.
    • Detect changed areas — SUCCESS.
    • python-sdk — SUCCESS.
    • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-musl — IN_PROGRESS, no conclusion.
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 1/4 — SUCCESS.
    • Format / etc — SUCCESS.
    • sdks — SUCCESS.
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 2/4 — SUCCESS.
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 3/4 — FAILURE.
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 4/4 — SUCCESS.
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm (native main) — SKIPPED.
    • cargo shear — SUCCESS.
    • Argument comment lint package — SKIPPED.
    • Bazel clippy on ubuntu-24.04 for x86_64-unknown-linux-gnu — SUCCESS.
    • Bazel clippy on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS.
    • Verify release build on ubuntu-24.04 for x86_64-unknown-linux-gnu — SUCCESS.
    • Argument comment lint - Linux — SUCCESS.
    • Verify release build on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS.
    • Argument comment lint - Windows — SUCCESS.
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm — FAILURE.
    • CI results (required) — SUCCESS.
    • [code]smith — SKIPPED.
  • Diagnostic gh run view 31278663098 --repo hasna/codewith --job 93156341235 --log-failed: exit 1 because the GitHub REST API rate limit was exhausted. I did not infer a cause from an unread log. The two explicit FAILURE conclusions mean the forge rollup is not green.

Blocking P0/P1 findings

  1. P1 security — artifact_contains can escape the admitted workspace through a symlink-swap race. In codex-rs/ext/workflows/src/activation.rs:911-924, containment is checked using canonicalize, then file type/size is checked with a separate metadata, then the path is reopened by a separate read. A concurrent workspace writer can atomically replace the checked leaf or an ancestor with a symlink between those operations. Because metadata and read follow symlinks, the host activation service can read a file outside the admitted root; swapping after the size check also defeats the 1 MiB bound and can turn this into unbounded host-side I/O. The verifier outcome is a substring oracle and the digest is logged. The regression at activation/finance_acceptance.rs:739 covers stable ../ traversal, missing files, and a stable oversized file, but not a symlink swap. Fix by opening beneath the admitted root with no-follow semantics for every path component and performing the type, size, bounded read, and digest on the same opened handle; add a race/symlink regression.

  2. P1 compatibility/data integrity — unchanged v0 saved workflows that were valid on origin/main can no longer start. The base's SINGLE_REVIEWER_WORKFLOW_YAML is one reviewer and one review step with no candidate dependency; accepts_single_adversarial_reviewer_and_initial_review_step explicitly accepts it. This PR replaces that fixture and applies the new paired topology whenever reviewer count is not greater than one (codex-rs/workflows/src/validation.rs:787-832) without changing workflow.codex.codewith/v0 or providing a migration/compatibility path. create_workflow_run reparses the persisted source YAML at codex-rs/state/src/runtime/workflows.rs:393, so a spec saved before upgrade remains listable but fails on the documented later thread/workflow/run/start path. Fix by versioning/migrating the stricter contract or preserving the legacy single-review shape on read/start, and add a saved-before-upgrade/start-after-upgrade regression.

Applicable gate blocker

  • The exact-head forge rollup also contains a failed Windows Bazel shard and failed Windows Bazel aggregate. Their cause is unverified because log retrieval hit the REST rate limit, but this is not a green-gates disposition.

Non-blocking follow-ups

  • The repo's absence of a declared test gate and typecheck gate should be addressed separately; I did not use that absence to invent or block on a substitute command.
  • The 1,498-line change exceeds the repository's 800-line review-size guidance. A reviewable split is: artifact verifier runtime and security tests; validator/prompt compatibility; synthetic finance acceptance harness. This is P2 reviewability, not a blocker by itself.

Disposition

The remedy is real cross-platform filesystem-safety and workflow-schema compatibility work, not a small reviewer patch. Leave the PR open; do not merge this head.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

[REVIEW] NO_GO — #511 @ 43fb1c9 — lens: correctness+security+gates, reviewer Hostus (1 of 1)

Candidate and source read:

  • Confirmed HEAD 43fb1c9 and fresh origin/main ae11289.
  • git log --oneline origin/main..HEAD — exit 0; six commits.
  • git diff origin/main...HEAD --stat — exit 0; 8 files, 1,622 insertions, 77 deletions.
  • Read the full diff and surrounding source for:
    • codex-rs/app-server/tests/suite/v2/workflow.rs
    • codex-rs/ext/workflows/src/activation.rs
    • codex-rs/ext/workflows/src/activation/finance_acceptance.rs
    • codex-rs/prompts/src/workflows_tests.rs
    • codex-rs/prompts/templates/workflows/deep_yaml_system_prompt.md
    • codex-rs/state/src/runtime/workflow_orchestrator.rs
    • codex-rs/workflows/src/tests.rs
    • codex-rs/workflows/src/validation.rs
  • Traced the surrounding branch prompt, verifier claim/result transition, workflow snapshot ordering, and verifier schema paths.

Setup and declared gates:

  • bun install — exit 0; setup only, 521 packages installed. This is not a test result.
  • package.json declares no typecheck script.
  • package.json declares no test script. This repository declares no test gate.
  • gh pr view 511 --repo hasna/codewith --json statusCheckRollup — exit 0; 18 SUCCESS, 0 failed, 3 SKIPPED, 6 IN_PROGRESS. The forge rollup is not yet fully terminal/green.
  • Forge checks read by name and conclusion:
    • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS (no conclusion yet)
    • Build Codewith Linux CLI — IN_PROGRESS (no conclusion yet)
    • cla — SUCCESS
    • Check for spelling errors — SUCCESS
    • Blob size policy — SUCCESS
    • cargo-deny — SUCCESS
    • build-test — SUCCESS
    • Detect changed areas — SUCCESS
    • python-sdk — SUCCESS
    • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-musl — IN_PROGRESS (no conclusion yet)
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 1/4 — SUCCESS
    • Format / etc — SUCCESS
    • sdks — SUCCESS
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 2/4 — SUCCESS
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 3/4 — SUCCESS
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 4/4 — SUCCESS
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm (native main) — SKIPPED
    • cargo shear — SUCCESS
    • Bazel clippy on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS (no conclusion yet)
    • Argument comment lint package — SKIPPED
    • Bazel clippy on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS
    • Verify release build on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS (no conclusion yet)
    • Argument comment lint - Linux — IN_PROGRESS (no conclusion yet)
    • Verify release build on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS
    • Argument comment lint - Windows — SUCCESS
    • Bazel test on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS
    • [code]smith — SKIPPED

Blocking P0/P1 findings:

  • P1 — A workflow can reach Completed without an independent review, including when the review artifact says verdict: NO_GO.
    • codex-rs/workflows/src/validation.rs:842 validates only that an artifact_contains verifier lists seven label strings. It does not define or validate the values.
    • codex-rs/ext/workflows/src/activation.rs:898 canonicalizes and bounds the file, then marks it passed solely when every required string is a substring (content.contains at line 930). It does not parse the verdict, require an empty blocking list, compare candidate identity, enforce remediation cycle bounds, or establish who produced the file.
    • The ordinary verifier-result path promotes the step after any Passed verifier result. Therefore a label-complete artifact containing verdict: NO_GO, non-empty blockers, or a stale candidate identity still opens dependent steps and can complete the run.
    • The new app-server integration test demonstrates the provenance bypass directly: codex-rs/app-server/tests/suite/v2/workflow.rs:497-510 commits review.yaml into the source repository before either worker runs, both mocked workers return only plain text, and lines 558-575 assert the run is Completed with both verifiers passed. The reviewer never creates the asserted review artifact.
    • The production branch prompt in codex-rs/workflows/src/branch_prompt.rs carries only run id, step id/title, agent id, and a generic dependency-satisfied sentence. It does not carry the exact candidate, acceptance criteria, dependency artifacts, required review fields, or output path. The newly required reviewer therefore is not given the evidence needed to perform the review the validator claims to require.
    • Reachable impact: a repository can pre-seed a label-complete review.yaml, or a real reviewer can return NO_GO; this runtime still records deterministic review success and permits downstream build/ship steps. That violates this PR's stated acceptance contract and makes the review gate unsafe to rely on.
    • Required remedy: pass the exact candidate identity, acceptance criteria, dependency evidence, output path, and finite review contract into the reviewer execution; bind the accepted artifact to that reviewer execution/fresh candidate; parse the bounded artifact structurally; and keep the workflow from succeeding when verdict is NO_GO, blockers are non-empty, identity mismatches, or the artifact predates the reviewer. Add negative runtime tests for a pre-existing artifact and for a well-formed NO_GO. This is real cross-cutting work, not a safe reviewer-side one-line fix.

Non-blocking follow-ups:

  • The 1,622-line change exceeds the review-size guidance. After the P1 is resolved, consider separating the generic artifact-verifier runtime from the single-review policy/prompt and synthetic-finance acceptance fixture. This is not a blocker by itself.

Disposition:

  • NO_GO on the current head. I did not edit, push, or merge. Leave the PR open until the named P1 is fixed and the affected runtime/app-server lanes plus current forge gates pass.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

Fresh reproduction context from active payroll goal c2de099d-d63c-4954-b212-b3421aa370f9 / plan b40fdee9-8d05-4dba-9008-f95179e00b7e: a protected Terraform apply needed durable execution, but starting a first-class workflow would compete with the existing native goal plan, and current workflows/src/validation.rs still rejects a draft unless it has at least two adversarial agents or two adversarial steps. The active Codewith policy fixes the reviewer set at one and forbids extra reviewer agents, reviewer-per-step gates, and fresh blind review artifacts. We therefore kept this exact apply lane under the existing native goal plan and did not create a competing workflow. This is evidence for PR #511's one paired reviewer contract; no duplicate fixer or task was created. Current PR #511 head 43fb1c9 has all required CI checks successful.

@andrei-hasna

Copy link
Copy Markdown
Contributor Author

[REVIEW] NO_GO — #511 @ 22fcf91 — lens: correctness+security+gates, reviewer unresolved-account001 (1 of 1)

Reviewed candidate

  • Local HEAD: 22fcf91d4a7ed8545dd8fa906aedf53a121bda2c (git rev-parse HEAD, exit 0).
  • Fresh base: origin/main = 6ea4123c4a1a119957426ae52a93e7b46fc9af4f (git rev-parse origin/main, exit 0).
  • git log --oneline origin/main..HEAD: exit 0; seven commits read.
  • git diff origin/main...HEAD --stat: exit 0; 11 changed files, 2,549 insertions, 82 deletions.
  • Read the full diff of every changed file and surrounding workflow parsing, persisted-run creation, activation/verifier, orchestration, app-server, prompt, and test code.
  • The PR later advanced to edd6f754511d111918a1b65577f2719bdf919385. This verdict remains deliberately scoped to the assigned commit above.

Commands and declared gates

  • bun install: exit 0; setup only, 521 packages installed. It generated an untracked bun.lock; I removed only that generated setup artifact and restored the initially clean worktree.
  • Root package.json declares no typecheck script.
  • Root package.json declares no test script, so this repository declares no test gate there. That absence is a finding in its own right; I did not invent a replacement gate.
  • No local Rust build/test command was run: repository policy routes Rust/Bazel gates to remote CI.
  • gh pr view 511 --repo hasna/codewith --json statusCheckRollup: exit 0. The read covered the current forge head edd6f754511d111918a1b65577f2719bdf919385, not the reviewed commit. Counts at read time: 27 checks = 12 SUCCESS, 2 FAILURE, 3 SKIPPED, 10 IN_PROGRESS.
  • Exact assigned-SHA diagnostic: gh run list --repo hasna/codewith --commit 22fcf91d4a7ed8545dd8fa906aedf53a121bda2c ...: exit 0. The retained rust-ci run for that exact SHA concluded FAILURE. gh run view 31283168091 ...: exit 0; its Argument comment lint - Linux job failed and CI results (required) failed.
  • Exact assigned-SHA lint log read: gh run view 31283168091 --repo hasna/codewith --job 93167635089 --log: command exit 0; the CI step itself exited 1 after error: aborting due to 8 previous errors.

Current forge rollup read by name

  • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS
  • Build Codewith Linux CLI — IN_PROGRESS
  • cla — SUCCESS
  • Check for spelling errors — SUCCESS
  • Blob size policy — SUCCESS
  • cargo-deny — SUCCESS
  • build-test — SUCCESS
  • Detect changed areas — SUCCESS
  • python-sdk — SUCCESS
  • Bazel test on ubuntu-24.04 for x86_64-unknown-linux-musl — IN_PROGRESS
  • sdks — IN_PROGRESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 1/4 — SUCCESS
  • Format / etc — SUCCESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 2/4 — IN_PROGRESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 3/4 — IN_PROGRESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard 4/4 — IN_PROGRESS
  • Bazel test on windows-latest for x86_64-pc-windows-gnullvm (native main) — SKIPPED
  • cargo shear — SUCCESS
  • Bazel clippy on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS
  • Argument comment lint package — SKIPPED
  • Bazel clippy on windows-latest for x86_64-pc-windows-gnullvm — IN_PROGRESS
  • Argument comment lint - Linux — FAILURE
  • Verify release build on ubuntu-24.04 for x86_64-unknown-linux-gnu — IN_PROGRESS
  • Verify release build on windows-latest for x86_64-pc-windows-gnullvm — SUCCESS
  • Argument comment lint - Windows — SUCCESS
  • CI results (required) — FAILURE
  • [code]smith — SKIPPED

Blocking P0/P1 findings

  1. P1 — persisted v0 single-review workflows become unstartable after upgrade. On origin/main, SINGLE_REVIEWER_WORKFLOW_YAML was an accepted draft with one reviewer, one review step, depends_on: [], and a review.md verifier requiring GO. This PR replaces that regression fixture instead of preserving it. At codex-rs/workflows/src/validation.rs:784-831, only workflows with more than one reviewer bypass the new topology; a one-review draft must now depend on a distinct non-review candidate and declare the finite YAML artifact contract. At codex-rs/state/src/runtime/workflows.rs:381-394, starting any stored workflow reparses its persisted source_yaml through this changed validator. Therefore a workflow saved under the still-current v0 schema can remain stored/listable but fail when the user starts it after the upgrade. Preserve the old v0 single-review shape through a versioned compatibility/migration path and add an upgrade regression that stores the old shape then starts it under the new runtime.
  2. Required-gate blocker — the exact reviewed SHA fails Argument comment lint - Linux with eight errors in codex-rs/ext/workflows/src/activation/finance_acceptance.rs: six missing /*review_context*/ comments at lines 357, 752, 760, 772, 799, and 810, plus two missing /*finance_calls*/ comments at lines 849 and 979. The required aggregate consequently fails. These are directly prescribed fixes, but they do not resolve finding 1.

Security review

  • The prior symlink-race and review-provenance paths are materially improved at this SHA: artifact opening is anchored/no-follow and finite-review parsing is bound to persisted review context. I found no remaining concrete P0/P1 secret exposure or unsafe-mutation blocker beyond the findings above.

Non-blocking follow-ups

  • None.

Disposition

  • Leave the PR open. Finding 1 needs a compatibility design and upgrade regression; the exact assigned SHA also has a failed required gate. No merge was attempted.

@andrei-hasna
andrei-hasna force-pushed the fix/workflow-validator-single-review branch from 61a18b5 to 2cce0a2 Compare August 9, 2026 00:25
Pair reviewer agents with candidate-dependent review steps, verifier-gate the finite single-review artifact contract, and align workflow generation with the bounded one-review policy.

Task: dd104f0e-5442-48cf-bf2c-181d08427c13

Agent: invoice-payments-coordinator
Task: dd104f0e-5442-48cf-bf2c-181d08427c13

Agent: invoice-payments-coordinator
Agent: invoice-payments-coordinator
Run artifact_contains verifiers against bounded workspace artifacts and add the synthetic finance runtime acceptance receipt.

Agent: invoice-payments-coordinator
Name anonymous literal arguments for the repository lint gate.

Agent: invoice-payments-coordinator
Agent: invoice-payments-coordinator
Agent: invoice-payments-coordinator
Agent: invoice-payments-coordinator
Agent: invoice-payments-coordinator
Agent: invoice-payments-coordinator
Give the real workflow reviewer integration fixture the outer workspace-write authority required by its patch response, and verify the finite artifact is materialized in the reviewer's isolated worktree.

Use the bounded Clippy-safe artifact buffer fallback.

Agent: invoice-payments-coordinator
@andrei-hasna
andrei-hasna force-pushed the fix/workflow-validator-single-review branch from 983d9f9 to 33770fc Compare August 9, 2026 01:18
@andrei-hasna
andrei-hasna merged commit d8016fd into main Aug 9, 2026
29 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 9, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant