Skip to content

๐Ÿ”’ ๋ณด์•ˆ ์ทจ์•ฝ์  ํ”ฝ์Šค: subprocess.run์˜ shell=False ๊ฐ•์ œํ™” - #22

Merged
github-actions[bot] merged 16 commits into
mainfrom
fix-subprocess-shell-vulnerability-2445706755684168130
Jun 30, 2026
Merged

github-actions[bot] merged 16 commits into
mainfrom
fix-subprocess-shell-vulnerability-2445706755684168130

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

๐ŸŽฏ ๋ฌด์—‡: subprocess.run ํ˜ธ์ถœ ์‹œ shell=False ๋ฐ check=False๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณด์•ˆ ์ทจ์•ฝ์ (Bandit B603)์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
โš ๏ธ ์œ„ํ—˜: ์•…์˜์ ์ธ ์ž…๋ ฅ๊ฐ’์ด ์ฃผ์ž…๋  ๊ฒฝ์šฐ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์œผ๋กœ ์ธํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ›ก๏ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: shell=False ์†์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‰˜ ์‚ฝ์ž… ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.


PR created automatically by Jules for task 2445706755684168130 started by @seonghobae

@google-labs-jules

Copy link
Copy Markdown

๐Ÿ‘‹ Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a ๐Ÿ‘€ emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode reviewed the current-head bounded evidence and found failing GitHub Checks that need source-backed diagnosis before merge.

  • Result: REQUEST_CHANGES
  • Reason: one or more GitHub Checks failed on current head d5d525c820ddffc5c6c0c4095775f4497e689674.
  • Head SHA: d5d525c820ddffc5c6c0c4095775f4497e689674
  • Workflow run: 27941541762
  • Workflow attempt: 1
Failed checks

Findings

No deterministic missing-string markers or Strix report locations were recognized. Use the failed-check evidence below to map each failed check to exact local source lines before approving.

Failed check evidence for line-specific fixes

Failed GitHub Check Evidence

  • PR: #22
  • Head SHA: d5d525c820ddffc5c6c0c4095775f4497e689674
  • Repository: ContextualWisdomLab/.github

Line-specific repair contract

  • Treat the check logs and annotations below as diagnostic evidence, not as a complete review.

  • For each actionable failed check, inspect the local source or diff and identify the exact file line that must change.

  • OpenCode REQUEST_CHANGES findings must include path, line, root_cause, fix_direction, regression_test_direction, and suggested_diff.

  • Do not request changes with only a GitHub Actions URL or a generic check name.

  • When Strix logs contain multiple Vulnerability Report or Model ... Vulnerabilities ... sections, include every model-reported vulnerability in the review evidence and findings, including model name, title, severity, endpoint, and Code Locations/path:line evidence when present.

  • Create one OpenCode finding per Strix model vulnerability report; do not satisfy two model reports with one combined finding, even when titles or locations match.

Failed check: Strix Security Scan/strix

Failed job steps

  • step 7: Self-test Strix gate script (failure)

Check annotations

  • .github:55-55 [failure] Process completed with exit code 1.

Failed log signal summary

strix	Self-test Strix gate script	2026-06-22T09:12:28.5520831Z FAIL: opencode approval gate refuses to approve invalid model output when peer checks and human threads are clean (missing 'it will not approve without source-backed current-head review evidence')
strix	Self-test Strix gate script	2026-06-22T09:12:28.5537915Z FAIL: opencode model-failure fallback requests changes instead of approving invalid model output (missing 'no valid source-backed review output was available')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6076725Z FAIL: opencode config declares MCP servers (missing '"mcp"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6095059Z FAIL: opencode config declares the CodeGraph MCP server (missing '"codegraph"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6114177Z FAIL: opencode config declares the DeepWiki MCP server (missing '"deepwiki"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6135908Z FAIL: opencode config declares the Context7 MCP server (missing '"context7"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6157733Z FAIL: opencode config declares the web search MCP server (missing '"web_search"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6180563Z FAIL: opencode config points DeepWiki at the official remote MCP endpoint (missing '"url": "https://mcp.deepwiki.com/mcp"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6201361Z FAIL: opencode config pins the Context7 MCP package (missing '"@upstash/context7-mcp@3.1.0"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6219257Z FAIL: opencode config pins the web search MCP package (missing '"@guhcostan/web-search-mcp@1.0.5"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6236819Z FAIL: opencode config launches CodeGraph in MCP mode (missing '"serve", "--mcp"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6255002Z FAIL: opencode config uses a reachable DeepSeek V3 small model (missing '"small_model": "github-models/deepseek/deepseek-v3-0324"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6272186Z FAIL: opencode config defines GitHub Models GPT-5 with full model id (missing '"openai/gpt-5"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6290183Z FAIL: opencode config defines DeepSeek R1 fallback (missing '"deepseek/deepseek-r1-0528"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6308188Z FAIL: opencode config defines DeepSeek V3 fallback (missing '"deepseek/deepseek-v3-0324"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6326701Z FAIL: opencode config uses the GitHub Models GPT-5 200k context window (missing '"context": 200000')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6345127Z FAIL: opencode config uses the GitHub Models GPT-5 100k output window (missing '"output": 100000')
strix	Self-test Strix gate script	2026-06-22T09:15:25.4541035Z ##[error]Process completed with exit code 1.

Failed log excerpt

strix	Self-test Strix gate script	๏ปฟ2026-06-22T09:12:27.8289188Z ##[group]Run bash "$TRUSTED_STRIX_GATE_TEST"
strix	Self-test Strix gate script	2026-06-22T09:12:27.8289787Z ^[[36;1mbash "$TRUSTED_STRIX_GATE_TEST"^[[0m
strix	Self-test Strix gate script	2026-06-22T09:12:27.8335458Z shell: /usr/bin/bash -e {0}
strix	Self-test Strix gate script	2026-06-22T09:12:27.8335742Z env:
strix	Self-test Strix gate script	2026-06-22T09:12:27.8335970Z   FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
strix	Self-test Strix gate script	2026-06-22T09:12:27.8336334Z   pythonLocation: /opt/hostedtoolcache/Python/3.13.14/x64
strix	Self-test Strix gate script	2026-06-22T09:12:27.8336779Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.13.14/x64/lib/pkgconfig
strix	Self-test Strix gate script	2026-06-22T09:12:27.8337237Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.14/x64
strix	Self-test Strix gate script	2026-06-22T09:12:27.8337627Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.14/x64
strix	Self-test Strix gate script	2026-06-22T09:12:27.8338018Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.14/x64
strix	Self-test Strix gate script	2026-06-22T09:12:27.8338406Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.13.14/x64/lib
strix	Self-test Strix gate script	2026-06-22T09:12:27.8339169Z   TRUSTED_WORKSPACE: /home/runner/work/_temp/trusted-workspace
strix	Self-test Strix gate script	2026-06-22T09:12:27.8339718Z   TRUSTED_STRIX_GATE: /home/runner/work/_temp/trusted-workspace/scripts/ci/strix_quick_gate.sh
strix	Self-test Strix gate script	2026-06-22T09:12:27.8340430Z   TRUSTED_STRIX_GATE_TEST: /home/runner/work/_temp/trusted-workspace/scripts/ci/test_strix_quick_gate.sh
strix	Self-test Strix gate script	2026-06-22T09:12:27.8365812Z ##[endgroup]
strix	Self-test Strix gate script	2026-06-22T09:12:28.5520831Z FAIL: opencode approval gate refuses to approve invalid model output when peer checks and human threads are clean (missing 'it will not approve without source-backed current-head review evidence')
strix	Self-test Strix gate script	2026-06-22T09:12:28.5537915Z FAIL: opencode model-failure fallback requests changes instead of approving invalid model output (missing 'no valid source-backed review output was available')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6075569Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6076725Z FAIL: opencode config declares MCP servers (missing '"mcp"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6093007Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6095059Z FAIL: opencode config declares the CodeGraph MCP server (missing '"codegraph"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6110959Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6114177Z FAIL: opencode config declares the DeepWiki MCP server (missing '"deepwiki"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6132971Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6135908Z FAIL: opencode config declares the Context7 MCP server (missing '"context7"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6155264Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6157733Z FAIL: opencode config declares the web search MCP server (missing '"web_search"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6177696Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6180563Z FAIL: opencode config points DeepWiki at the official remote MCP endpoint (missing '"url": "https://mcp.deepwiki.com/mcp"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6198551Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6201361Z FAIL: opencode config pins the Context7 MCP package (missing '"@upstash/context7-mcp@3.1.0"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6216530Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6219257Z FAIL: opencode config pins the web search MCP package (missing '"@guhcostan/web-search-mcp@1.0.5"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6234784Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6236819Z FAIL: opencode config launches CodeGraph in MCP mode (missing '"serve", "--mcp"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6252611Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6255002Z FAIL: opencode config uses a reachable DeepSeek V3 small model (missing '"small_model": "github-models/deepseek/deepseek-v3-0324"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6269974Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6272186Z FAIL: opencode config defines GitHub Models GPT-5 with full model id (missing '"openai/gpt-5"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6287526Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6290183Z FAIL: opencode config defines DeepSeek R1 fallback (missing '"deepseek/deepseek-r1-0528"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6305879Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6308188Z FAIL: opencode config defines DeepSeek V3 fallback (missing '"deepseek/deepseek-v3-0324"')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6324216Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6326701Z FAIL: opencode config uses the GitHub Models GPT-5 200k context window (missing '"context": 200000')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6343052Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6345127Z FAIL: opencode config uses the GitHub Models GPT-5 100k output window (missing '"output": 100000')
strix	Self-test Strix gate script	2026-06-22T09:12:28.6360461Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6376442Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:28.6392903Z grep: /home/runner/work/_temp/trusted-workspace/opencode.jsonc: No such file or directory
strix	Self-test Strix gate script	2026-06-22T09:12:29.1104811Z NO_CONCLUSION
strix	Self-test Strix gate script	2026-06-22T09:12:29.3064856Z NO_CONCLUSION
strix	Self-test Strix gate script	2026-06-22T09:12:29.4291034Z NO_CONCLUSION
strix	Self-test Strix gate script	2026-06-22T09:15:25.4520139Z test_strix_quick_gate: 17 failure(s)
strix	Self-test Strix gate script	2026-06-22T09:15:25.4541035Z ##[error]Process completed with exit code 1.

@opencode-agent

opencode-agent Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 12aecdd3bc3ee8082d7bba3cfe24a6aa26845758
  • Workflow run: 28412107445
  • Workflow attempt: 1
  • Gate result: APPROVE (approval step)

Pull request overview

OpenCode model attempts did not emit a usable current-head control block, but the deterministic approval fallback verified this is a no-diff or central review-process-only change with same-head peer checks green.

Findings

No blocking findings.

Changed-file evidence

  • no changed files; PR head tree is already represented in the base branch

Summary

Reviewed the bounded no-diff or central review process change list and peer GitHub Checks for current head 12aecdd3bc3ee8082d7bba3cfe24a6aa26845758. This fallback is limited to no-diff PR heads or the central OpenCode/Strix workflow and CI-gate files, after coverage evidence succeeded, peer checks completed without failures, mergeability was checked, and unresolved human review threads were absent.

Verification posture: Linter/static: peer GitHub Checks completed without source-backed failures before fallback approval. TDD/regression: central CI gate tests are part of the changed review-process files and peer checks completed. Coverage: Coverage execution evidence job result was success and completed before approval. Docstring coverage: Coverage evidence handled configured docstring gates or advisory status. DAG: Change Flow DAG maps central review workflow/script changes to required review checks and fallback approval path. PoC/execution: peer GitHub Checks and coverage evidence were re-queried for this exact head before approval. DDD/domain: no product domain code is in the fallback allowlist. CDD/context: structural scope is restricted to the central review process files listed above. Similar issues: repeated OPENCODE_REVIEW_UNAVAILABLE outcomes for this head motivated this fallback path. Claim/concept check: no PR metadata claims were accepted beyond GitHub diff and check APIs. Standards search: not applicable for this process-only fallback. Compatibility/convention: fallback reuses existing create_pull_review, check, mergeability, and human-thread gates. Breaking-change/backcompat: limited to central review workflow behavior. Performance: no runtime product path changed. Developer experience: maintainers get a review-state outcome instead of a silent tooling-stability dead end. User experience: PR readers get an explicit approval reason and changed-file evidence. Security/privacy: approval token and pull_request_target review boundaries remain unchanged.

  • Result: APPROVE
  • Reason: no-diff or central review-process-only fallback after repeated unusable OpenCode model output and green same-head peer evidence.
  • Head SHA: 12aecdd3bc3ee8082d7bba3cfe24a6aa26845758
  • Workflow run: 28412107445
  • Workflow attempt: 1

Change Flow DAG

flowchart LR
  Evidence["OpenCode evidence"] --> Review["Current PR review path"]
  Review --> Verify["Required checks"]
Loading

@seonghobae

Copy link
Copy Markdown
Contributor Author

@jules ํ˜„ ์ƒํƒœ๋Š” ๋ฆฌ๋ทฐ์–ด ์š”์ฒญ (๋กœ๋ด‡ ๋ฆฌ๋ทฐ ํฌํ•จ)์ด ์žˆ๊ฑฐ๋‚˜ Merge Conflicts๊ฐ€ ์žˆ์–ด์„œ Merge ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ์–ด ์š”์ฒญ์„ ํŒŒ์•…ํ•˜์—ฌ ๋ฐ˜์˜ํ•˜๊ฑฐ๋‚˜ base branch ๋‚ด์šฉ์„ fetch ํ•˜์—ฌ ์ถฉ๋Œ์„ ํ•ด์†Œํ•˜์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

@google-labs-jules

Copy link
Copy Markdown

@jules ํ˜„ ์ƒํƒœ๋Š” ๋ฆฌ๋ทฐ์–ด ์š”์ฒญ (๋กœ๋ด‡ ๋ฆฌ๋ทฐ ํฌํ•จ)์ด ์žˆ๊ฑฐ๋‚˜ Merge Conflicts๊ฐ€ ์žˆ์–ด์„œ Merge ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ์–ด ์š”์ฒญ์„ ํŒŒ์•…ํ•˜์—ฌ ๋ฐ˜์˜ํ•˜๊ฑฐ๋‚˜ base branch ๋‚ด์šฉ์„ fetch ํ•˜์—ฌ ์ถฉ๋Œ์„ ํ•ด์†Œํ•˜์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

์ฝ”๋“œ ์ถฉ๋Œ(Merge Conflicts)์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด base branch(main)์˜ ์ตœ์‹  ๋‚ด์šฉ์„ fetchํ•˜์—ฌ ๋ณ‘ํ•ฉ(merge)์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์ด ํ•ด์†Œ๋˜์—ˆ์œผ๋ฉฐ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ๋ฌด์—‡: subprocess.run ํ˜ธ์ถœ ์‹œ shell=False, check=False๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณด์•ˆ ์ทจ์•ฝ์ (Bandit B603)์„ ํ•ด๊ฒฐํ•˜์˜€์œผ๋ฉฐ, main ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ถฉ๋Œ(Merge Conflict)์„ ํ•ด์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.
โš ๏ธ ์œ„ํ—˜: ์•…์˜์ ์ธ ์ž…๋ ฅ๊ฐ’์ด ์ฃผ์ž…๋  ๊ฒฝ์šฐ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์œผ๋กœ ์ธํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, PR ๋ณ‘ํ•ฉ ์ถฉ๋Œ๋กœ ์ธํ•ด ๋ฐฐํฌ๊ฐ€ ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ›ก๏ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: shell=False ์†์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‰˜ ์‚ฝ์ž… ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ , base branch fetch ๋ฐ merge๋ฅผ ํ†ตํ•ด ์ถฉ๋Œ ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
Copilot AI review requested due to automatic review settings June 23, 2026 22:44

Copilot AI 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.

Pull request overview

This PR hardens and expands the organizationโ€™s PR governance automation by tightening subprocess usage and by strengthening the OpenCode/Strix evidence gating and scheduler behavior (with accompanying tests and workflow updates).

Changes:

  • Adds/extends the centralized PR review/merge scheduler policy (Strix-first dispatch, branch update behavior, failure gating) and documents the governance contract.
  • Tightens OpenCode approval normalization/gating (changed-file evidence, verification posture labels, coverage evidence) and adds extensive regression tests.
  • Updates Strix/OpenCode gate scripts and workflows (timeouts, PR-head materialization, manual Strix status publishing) plus adds evidence redaction and richer failed-check fallback findings.

Reviewed changes

Copilot reviewed 20 out of 21 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
scripts/ci/pr_review_merge_scheduler.py Scheduler logic for merge readiness, Strix/OpenCode dispatch, branch updates, and CLI/self-test.
tests/test_pr_review_merge_scheduler.py Unit tests covering scheduler helpers and decision logic.
scripts/ci/opencode_review_normalize_output.py Strengthens approval validation/repair, changed-file evidence checks, and coverage/label requirements.
tests/test_opencode_review_normalize_output.py Tests for approval normalization/repair and structural-approval checks.
scripts/ci/opencode_review_approve_gate.sh Python gate snippet updated to pass shell=False explicitly to subprocess.run.
scripts/ci/strix_quick_gate.sh Adds additional โ€œretryable inconsistencyโ€ heuristics and refines path extraction patterns.
scripts/ci/test_strix_quick_gate.sh Extends Strix gate self-test assertions and adds multiple new scenarios.
scripts/ci/collect_failed_check_evidence.sh Adds log redaction and improves superseding-success handling.
scripts/ci/emit_opencode_failed_check_fallback_findings.sh Adds deterministic fallback findings for pytest failures and cancelled checks; improves default fallback guidance.
.github/workflows/strix.yml Materializes PR-head policy files as data, adds timeouts, and publishes same-head manual Strix status.
.github/workflows/pr-review-merge-scheduler.yml Adds an update_branches input and wires it through to the scheduler CLI.
README.md / PR_GOVERNANCE_AUDIT.md Documents the expanded governance policy and operational audit trail.
requirements-opencode-review-ci.txt / pyproject.toml Adds coverage/interrogate/pytest and configures 100% coverage/docstring thresholds.
opencode.jsonc / ci-review-prompt.md / .jules/sentinel.md Updates review tooling configuration/prompt and records the B603 hardening note.
fix_merge.py Adds a one-off local merge/conflict helper (should not ship).

๐Ÿ’ก Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread scripts/ci/pr_review_merge_scheduler.py Outdated
Comment thread scripts/ci/opencode_review_normalize_output.py
Comment thread fix_merge.py Outdated
Comment thread README.md Outdated
@seonghobae

Copy link
Copy Markdown
Contributor Author

@jules ํ˜„ ์ƒํƒœ๋Š” ๋ฆฌ๋ทฐ์–ด ์š”์ฒญ (๋กœ๋ด‡ ๋ฆฌ๋ทฐ ํฌํ•จ)์ด ์žˆ๊ฑฐ๋‚˜ Merge Conflicts๊ฐ€ ์žˆ์–ด์„œ Merge ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ์–ด ์š”์ฒญ์„ ํŒŒ์•…ํ•˜์—ฌ ๋ฐ˜์˜ํ•˜๊ฑฐ๋‚˜ base branch ๋‚ด์šฉ์„ fetch ํ•˜์—ฌ ์ถฉ๋Œ์„ ํ•ด์†Œํ•˜์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode reviewed the current-head evidence but cannot approve because required coverage evidence did not pass.

Findings

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove 100% test and docstring coverage

  • Problem: The OpenCode approval path reached an APPROVE control result while the separate coverage-evidence job result was cancelled.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves both test coverage and docstring coverage at 100%, or reports not applicable because no supported source files or package manifests exist. Missing, partial, failed, skipped, unavailable, unsupported-tooling, or below-100 evidence is a blocker.

  • Fix: Install or configure the repository coverage/docstring coverage tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with 100% coverage or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was cancelled, so 100% current-head test/docstring coverage was not proven for 1a0cea97cef12113e3acc9ede6060592bc391056.

  • Head SHA: 1a0cea97cef12113e3acc9ede6060592bc391056

  • Workflow run: 28354344313

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Change Flow DAG

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: sentinel.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: sentinel.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["CI script: opencode_review_approve_gate.sh"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script: opencode_review_approve_gate.sh"]
  R2 --> V2["bash -n plus Strix self-test"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode model attempts did not emit a usable current-head control block, so the approval gate used deterministic current-head evidence instead of model prose.

Findings

No blocking findings.

Summary

  • Result: APPROVE
  • Reason: coverage-evidence passed, peer GitHub Checks completed without failures, mergeability was clean, and no unresolved human review threads remained.
  • Deterministic evidence: current-head changed-file evidence (bounded current-head evidence); coverage-evidence result success; peer checks from statusCheckRollup excluding this OpenCode check.
  • Model outcomes: primary=failed, fallback=failed, second_fallback=failed, catalog_fallback=unknown.
  • Head SHA: ab05c58bd7f5c4e3779bc3983e5bf8cf42df1454
  • Workflow run: 28385485687
  • Workflow attempt: 1

Deterministic fallback approval was used only after model-output instability and did not bypass coverage, failed-check, mergeability, or human-review gates.

Change Flow DAG

flowchart LR
  Evidence["OpenCode evidence"] --> Review["Current PR review path"]
  Review --> Verify["Required checks"]
Loading

@seonghobae
seonghobae enabled auto-merge (squash) June 29, 2026 21:30
@github-actions
github-actions Bot disabled auto-merge June 29, 2026 21:39
@seonghobae
seonghobae enabled auto-merge (squash) June 29, 2026 21:40
@github-actions
github-actions Bot disabled auto-merge June 29, 2026 21:45

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode model attempts did not emit a usable current-head control block, but the deterministic approval fallback verified this is a no-diff or central review-process-only change with same-head peer checks green.

Findings

No blocking findings.

Changed-file evidence

  • no changed files; PR head tree is already represented in the base branch

Summary

Reviewed the bounded no-diff or central review process change list and peer GitHub Checks for current head 12aecdd3bc3ee8082d7bba3cfe24a6aa26845758. This fallback is limited to no-diff PR heads or the central OpenCode/Strix workflow and CI-gate files, after coverage evidence succeeded, peer checks completed without failures, mergeability was checked, and unresolved human review threads were absent.

Verification posture: Linter/static: peer GitHub Checks completed without source-backed failures before fallback approval. TDD/regression: central CI gate tests are part of the changed review-process files and peer checks completed. Coverage: Coverage execution evidence job result was success and completed before approval. Docstring coverage: Coverage evidence handled configured docstring gates or advisory status. DAG: Change Flow DAG maps central review workflow/script changes to required review checks and fallback approval path. PoC/execution: peer GitHub Checks and coverage evidence were re-queried for this exact head before approval. DDD/domain: no product domain code is in the fallback allowlist. CDD/context: structural scope is restricted to the central review process files listed above. Similar issues: repeated OPENCODE_REVIEW_UNAVAILABLE outcomes for this head motivated this fallback path. Claim/concept check: no PR metadata claims were accepted beyond GitHub diff and check APIs. Standards search: not applicable for this process-only fallback. Compatibility/convention: fallback reuses existing create_pull_review, check, mergeability, and human-thread gates. Breaking-change/backcompat: limited to central review workflow behavior. Performance: no runtime product path changed. Developer experience: maintainers get a review-state outcome instead of a silent tooling-stability dead end. User experience: PR readers get an explicit approval reason and changed-file evidence. Security/privacy: approval token and pull_request_target review boundaries remain unchanged.

  • Result: APPROVE
  • Reason: no-diff or central review-process-only fallback after repeated unusable OpenCode model output and green same-head peer evidence.
  • Head SHA: 12aecdd3bc3ee8082d7bba3cfe24a6aa26845758
  • Workflow run: 28412107445
  • Workflow attempt: 1

Change Flow DAG

flowchart LR
  Evidence["OpenCode evidence"] --> Review["Current PR review path"]
  Review --> Verify["Required checks"]
Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants