ci(patchwarden): soft-fail advisory review failures #789
No reviewers
Labels
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pdurlej/platform!789
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "codex/orders/patchwarden-review-run-softfail"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Canary status: missing — fire canary 3+3 manually before merge
Canary Context Pack
Product story
Patchwarden client dry-run is supposed to be an operator signal, not a fragile model availability check. The deterministic contract/pr-check artifacts should remain available even when the advisory model lane times out, returns malformed JSON, or a status/comment publication attempt fails technically.
What changed
patchwarden contract-pr --executenow retries once without publication if the execute path exits as a technical failure, preserving dry-run artifacts.patchwarden review-runandpatchwarden resolve-findingsnow fail soft: they writepatchwarden-client-review-error.jsonand keep deterministic artifacts authoritative.Why it changed
Current PRs such as #783, #784, #786, #787, and #788 show red
patchwarden-client-dry-run / dry-rundespite deterministic gates being fresh/clean or manual-class as expected. Local reproduction showedreview-runcan fail on Ollama timeout / invalid JSON, and manual-class PRs may lose artifacts if contract publication fails technically.Files touched
.forgejo/workflows/patchwarden-client-dry-run.ymlcontrol-plane/platformctl/tests/test_pr_sanity.pyRelevant context
.forgejo/workflows/patchwarden-client-dry-run.ymlis the external Patchwarden client dogfood lane.patchwarden-client-dry-run / dry-runcontext for narrow W6d candidates.contract-prandpr-checkremain the merge-safety evidence.Runtime evidence
No runtime mutation. Local simulations only:
contract-pr --executetechnical failure retries as dry-run and exits0with contract/pr-check artifacts.review-runinvalid JSON exits0withpatchwarden-client-review-error.json.Known constraints
This does not make unsafe classes eligible for automerge.
control-plane/,modules/, workflow, runtime, and governance paths remain manual/security-sensitive per existing policy.Explicit out-of-scope
Requested decision
Approve the workflow resilience change so existing PRs can be retriggered against deterministic artifacts instead of being blocked by advisory reviewer transport/format failures.
Merge blockers
contract-prorpr-checkartifacts.Spec sources read
.forgejo/workflows/patchwarden-client-dry-run.yml— failing workflow path.control-plane/platformctl/tests/test_pr_sanity.py— workflow contract tests.control-plane/platformctl/tests/test_automerge_readiness.py— required context behavior for automerge readiness..forgejo/workflows/automerge-pilot.yml— confirmed dry-run context remains required./Users/pd/Developer/patchwarden/src/patchwarden/contract_pipeline.py— local diagnostic only, to understandcontract-prexit behavior./Users/pd/Developer/patchwarden/src/patchwarden/contract_publish.py— local diagnostic only, to understand publication exit behavior.No closing keyword; this is a queue-unblocking CI hardening fix.
Patchwarden PR sanity
advisory_findings7893db949dd304bd274d27a838c6a7daf0e420895e0presentDeterministic findings
infosensitive-path-touchedSensitive path touched —.forgejo/workflows/patchwarden-client-dry-run.yml.forgejo/workflows/patchwarden-client-dry-run.ymlModel reviewers
global-glm/glm-5.1:cloudStatus:
okVerdict:
OKmediumToken environment variable persists during contract-pr retry, may undermine dry-run intentIn .forgejo/workflows/patchwarden-client-dry-run.yml lines 199-205:export "$PATCHWARDEN_TOKEN_ENV=$PATCHWARDEN_COMMENT_TOKEN"is set before the first run, but the retry at line 207 callsrun_patchwarden_contract_prwithout unsetting thunset "$PATCHWARDEN_TOKEN_ENV"before therun_patchwarden_contract_prretry call at line 208.global-deepseek/deepseek-v4-pro:cloudokOKredteam/kimi-k2.6:cloudStatus:
okVerdict:
NOT_OKhighAmbient secret export enlarges token exposure surface.forgejo/workflows/patchwarden-client-dry-run.yml changed from scopedenv "$PATCHWARDEN_TOKEN_ENV=$PATCHWARDEN_COMMENT_TOKEN" patchwarden contract-pr ...toexport "$PATCHWARDEN_TOKEN_ENV=$PATCHWARDEN_COMMENT_TOKEN"followed by multiple( export "$PATCHWARDEN_TOKEN_ENV=$PATCHWARDEN_COMMENT_TOKEN"; run_patchwarden_contract_pr "$@" )so the token is scoped only to the invocation that needs it, or revert to theenvpattern by calling patchwarden directly rather than via a shell fuPolicy notes
PLATFORMCTL_PR_SANITY_REDTEAM_MODELis configured.Patchwarden verdict: BLOCKED
Action: do not merge this head until the blocking module is fixed.
Head
63edc7332d0e61fe7f7343fe9fd0e30dc0944dba.Run
4c5e3d43-dc2f-4612-8dfa-a695cc933bf7.Core stack
patchwarden-core@v0sha256:66bb609e751b2a66ddd4dfb58facff5eed54fa33e1c3c93dfbbc5f3cf0d8c3d4; modules:patchwarden.pr.path_classification,patchwarden.pr.required_checks.Module outcomes:
patchwarden.pr.path_classificationfail (governance_tier_path);patchwarden.pr.required_checkspass.Classification is not passable by local contract run: workflow. Path
.forgejo/workflows/patchwarden-client-dry-run.yml.