fix(opencode): admit exact MLLO console consumers - #2127
Conversation
Preserve dispatcher identity and live allowlist gates. Record local validation and inherited lint findings; runtime authority remains unverified. Signed-off-by: Seongho Bae <me@seonghobae.me> Commit-Message-Assisted-by: Codex (OpenAI Codex)
|
Warning Review limit reachedNext included review available in 38 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (7)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai approve Please independently review the exact current head, including retained dispatcher authority and inherited lint findings. Formal current-head approval and required checks remain mandatory. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '== Current HEAD and working tree =='
git rev-parse HEAD
git status --short
git branch --show-current
echo '== Pull request metadata and checks =='
gh pr view 2127 --repo ContextualWisdomLab/.github \
--json number,title,headRefName,headRefOid,baseRefName,baseRefOid,state,isDraft,mergeStateStatus,reviewDecision,statusCheckRollup
echo '== Changed files against PR base =='
base_oid="$(gh pr view 2127 --repo ContextualWisdomLab/.github --json baseRefOid --jq .baseRefOid)"
git diff --name-status "$base_oid"...HEAD
git diff --check "$base_oid"...HEAD
echo '== Relevant policy/dispatcher references in changed source and documentation =='
rg -n -C 4 --hidden \
-g '!**/.git/**' \
-e 'HYOSUNG-ITX-AI-Business-Department/llm-gateway-console' \
-e 'llm-gateway-console-design' \
-e 'dispatcher' \
-e 'allowlist' \
-e 'private-target' \
.
echo '== Workflow and lint-related changed content =='
git diff -- "$base_oid"...HEAD -- \
'.github/workflows/**' \
'docs/doctoring/hyosung-opencode-consumer-admission.md' \
':!**/node_modules/**'Length of output: 241145 🏁 Script executed: #!/bin/bash
set -euo pipefail
base_oid="fb17ef556f94f673234aa557254ae52779e9a7b0"
echo '== Complete current-head diff =='
git diff --find-renames --find-copies "$base_oid"...HEAD -- \
.github/workflows/opencode-review.yml \
.github/workflows/opencode-review-dispatch.yml \
scripts/ci/opencode_repository_dispatch_targets.json \
tests/test_opencode_agent_contract.py \
tests/test_opencode_hyosung_repository_admission.py \
tests/test_pr_review_autofix_nvidia_nim_contract.py \
docs/doctoring/hyosung-opencode-consumer-admission.md
echo '== Dispatcher authorization and intake sections =='
sed -n '120,215p' .github/workflows/opencode-review-dispatch.yml
sed -n '230,295p' .github/workflows/opencode-review.yml
echo '== Current-head PR checks and reviews =='
gh pr view 2127 --repo ContextualWisdomLab/.github \
--json headRefOid,mergeStateStatus,reviewDecision,statusCheckRollup,reviews \
--jq '{headRefOid, mergeStateStatus, reviewDecision, reviews: [.reviews[] | {author: .author.login, state, commit: .commit.oid}], checks: [.statusCheckRollup[] | {name, status, conclusion, workflowName}]}'
echo '== Protected branch requirements visible to this token =='
gh api repos/ContextualWisdomLab/.github/branches/main/protection \
--jq '{required_status_checks, required_pull_request_reviews, required_signatures, enforce_admins}' \
|| trueLength of output: 25069 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '== Failed current-head OpenCode check =='
gh run view 34708230636 --repo ContextualWisdomLab/.github --log-failed || true
echo '== Current check state =='
gh pr view 2127 --repo ContextualWisdomLab/.github \
--json headRefOid,mergeStateStatus,reviewDecision,statusCheckRollup \
--jq '{headRefOid, mergeStateStatus, reviewDecision, checks: [.statusCheckRollup[] | select(.status != "COMPLETED" or (.conclusion != "SUCCESS" and .conclusion != "SKIPPED" and .conclusion != "NEUTRAL")) | {name,status,conclusion,workflowName,detailsUrl}]}'
echo '== Current workflow file blob IDs =='
git rev-parse HEAD:.github/workflows/opencode-review-dispatch.yml
git rev-parse HEAD:.github/workflows/opencode-review.yml
git rev-parse fb17ef556f94f673234aa557254ae52779e9a7b0:.github/workflows/opencode-review-dispatch.yml
git diff --check fb17ef556f94f673234aa557254ae52779e9a7b0...HEADLength of output: 15977
I reviewed The current-head The documented lint findings are described as inherited, but they do not replace the required current-head verdict and checks. Please obtain the exact-head OpenCode verdict and wait for all required checks to complete successfully. You are interacting with an AI system. |
There was a problem hiding this comment.
Noema LLM review
Changes admit exactly two HYOSUNG-ITX-AI-Business-Department repositories (llm-gateway-console and llm-gateway-console-design) into the canonical OpenCode intake paths. The regexes are anchored and preserve the existing metadata checks (PR number, expected head SHA, dispatch actor/sender, live allowlist). JSON mirror and tests are consistent with the admission scope; the doctoring record correctly notes that the live repository variable and cross-org App permissions still require separate reconciliation/verification. No confirmed regression or security over-admission was found.
Reviewed changed lines
.github/workflows/opencode-review-dispatch.yml:188 (RIGHT): Anchored alternation admits only exact ContextualWisdomLab repo names or the exact Hyosung console/console-design names; trailing suffixes like -extra fail because (-design)? is literal and the pattern is end-anchored. Existing PR number, actor/sender, and metadata checks remain..github/workflows/opencode-review.yml:261 (RIGHT): Required-caller admission uses the same anchored pattern and still requires a 40-char expected head SHA and valid PR number. No unapproved external repository is admitted by this change.scripts/ci/opencode_repository_dispatch_targets.json:57 (RIGHT): Adds the two exact Hyosung targets to the hand-maintained mirror. This is configuration-source parity only; live variable update is explicitly left as a deployment prerequisite.tests/test_opencode_hyosung_repository_admission.py:27 (RIGHT): Negative/positive cases cover exact names, near names, extra suffixes, and other orgs, and align with the blocked guard semantics.
Adversarial validation
.github/workflows/opencode-review-dispatch.yml:188 (RIGHT)falsified: Adding the Hyosung alternation could let names such as llm-gateway-console-extra or llm-gateway-console-design-extra pass the dispatch guard. — The optional (-design)? group only consumes the literal string -design; -extra is not consumed, and the end anchor $ rejects it. Any accepted value still passes the remaining PR_NUMBER, ALLOWED_DISPATCH_TARGETS, actor, and sender checks..github/workflows/opencode-review.yml:261 (RIGHT)falsified: The required-caller guard might admit an unapproved external repository name or skip the live-head protection. — The regex is end-anchored and only matches the exact two Hyosung names or ContextualWisdomLab repos. The same guard still requires PR_NUMBER to be a positive integer and EXPECTED_HEAD_SHA to be a 40-hex SHA before writing admitted=true.- Residual risk: Runtime cross-org access is not proven by this PR: the live OPENCODE_REPOSITORY_DISPATCH_TARGETS variable and OIDC-exchanged App read/comment/status permissions for the Hyosung repos still need deployment-time verification. The changed code fails closed on missing allowlist or metadata mismatch, so the residual risk is operational denial rather than over-admission.
Findings
- No blocking findings.
- Result: APPROVE
- Head SHA:
64c2cf86635391305ae1e24836beb7b07ec9a6b7 - Reviewer credential:
noema-review-github-app-refresh - Actor:
cwl-noema-review[bot]
Problem and change
Canonical OpenCode intake rejects the MLLO console and design owner even when the live dispatch allowlist permits them. Admit only HYOSUNG-ITX-AI-Business-Department/llm-gateway-console and llm-gateway-console-design in both existing intake guards. Dispatcher identity, live target allowlist, PR metadata and private-target checks remain required.
The JSON inventory is a proposed delta, not live permission evidence. Cross-organization App access, formal review publication and required-status authority require a protected-owner canary before consumer adoption. Related Strix admission: #2113.
Validation
128 passed, 1 skipped across focused contracts. Native actionlint workflow validation passed with ShellCheck disabled. Full lint using an isolated repair for actionlint 1.7.12's macOS stdin deadlock completed with 29 inherited findings, byte-for-byte identical to clean protected base fb17ef5; full lint is not green. No installed tool or workflow gate was changed. Details and reproduction are in docs/doctoring/hyosung-opencode-consumer-admission.md.