ci: schedule NVIDIA OpenCode maintenance agent - #121
Conversation
📝 WalkthroughWalkthroughChanges시간별 OpenCode 유지보수
Exact-head PR 판정
ETL 해시 및 커버리지 검증
Jackson 보안 버전 고정
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant GitHubActions
participant OpenCodeCLI
participant GitHubAPI
GitHubActions->>OpenCodeCLI: 검증된 CLI 설치 및 실행
GitHubActions->>OpenCodeCLI: NVIDIA 모델과 GitHub 토큰 전달
OpenCodeCLI->>GitHubAPI: 열린 PR·검사·리뷰 상태 조회
OpenCodeCLI->>GitHubAPI: 제한된 변경 및 PR 생성 또는 갱신
Possibly related issues
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 2📝 Generate docstrings 💡
🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Comment |
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
Queued @cwl-noema-review ; Rejected @opencode-agent: repository is absent from OPENCODE_REPOSITORY_DISPATCH_TARGETS for PR #121 at head |
|
Queued @cwl-noema-review ; Rejected @opencode-agent: repository is absent from OPENCODE_REPOSITORY_DISPATCH_TARGETS for PR #121 at head |
|
Queued @cwl-noema-review ; Rejected @opencode-agent: repository is absent from OPENCODE_REPOSITORY_DISPATCH_TARGETS for PR #121 at head |
|
Queued @cwl-noema-review ; Rejected @opencode-agent: repository is absent from OPENCODE_REPOSITORY_DISPATCH_TARGETS for PR #121 at head |
|
Queued @cwl-noema-review for PR #121 at head |
|
Queued @cwl-noema-review ; Rejected @opencode-agent: repository is absent from OPENCODE_REPOSITORY_DISPATCH_TARGETS for PR #121 at head |
|
Queued @cwl-noema-review ; Rejected @opencode-agent: repository is absent from OPENCODE_REPOSITORY_DISPATCH_TARGETS for PR #121 at head |
|
Fresh read-only dependency revalidation for unchanged mightyETL head The previously cited central repair PRs are no longer active: The current central replacement is RCA disposition stays |
|
Fresh read-only dependency reconciliation for unchanged mightyETL head
RCA disposition: central dependency-review fail-open and literal-head Trivy source identity are distinct control-plane defects with distinct remedies. #897 is the active fail-closed dependency-review remedy; a separate protected-main change is still required for literal-head Trivy (and any acceptance-sensitive Scorecard source identity). No mightyETL source change can repair either root cause. Keep |
2026-08-10 central dependency refresh (read-only)Revalidated the organization control plane from protected Hard scanner/source-identity boundary remains unresolved on protected central main. The current Current bounded central repair for the dependency-review fail-open is Primary OpenCode formal-review route is also still non-operational from protected central main for a separate, source-proven reason. Central For mightyETL #121 itself, exact source head remains Classification remains |
Summary
NVIDIA_NIM_API_KEYthrough OpenCode'sNVIDIA_API_KEYprovider variable;Authority boundaries
maintain-repositoryis the only job that checks out source or runs OpenCode and has read-only GitHub authority:actions: read,checks: read,contents: read,issues: read,pull-requests: read,security-events: read, andstatuses: read. OpenCode may inspect, test, and create local commits but has no remote branch, pull-request, workflow-run, review, or merge write authority.publish-agent-branchreceives no model credential and does not check out repository source throughactions/checkout. It is the solecontents: writeholder. It validates checksum-bound bundle metadata, exact predecessor state, protected-base stability, non-destructive ancestry, commit/file bounds, policy-path exclusion,git diff --check, and the post-push exact SHA before one non-forced feature-branch publication.publish-agent-pull-requestreceives no model credential and executes no repository source. It is the solepull-requests: writeholder and may only create one validated draft pull request or identify the updated validated pull request after re-verifying its exact head and bounded paths.authorize-exact-head-checksreceives no model credential and executes no repository source. It is the soleactions: writeholder and may authorize onlyaction_requiredor waitingpull_requestworkflow runs associated with both the expected PR number and unchanged head SHA. It cannot approve or merge a pull request.The root
AGENTS.mdpolicy cannot expand these workflow permissions. The existing independent review-agent credential contract is unchanged.COPILOT_GITHUB_TOKENis not used.Exact current identity
develop;622e5e6c3d534f230c390f10e3832efadfc01825;75265fae9fcf5faac6f8b9cab63247ac86f23dd4;be3fe2072a0a165c895c307881a2b740a08f4f0c;automerge-workflow,manual-merge.Every check, status, review, approval, thread conclusion, or synthetic merge from a predecessor head is stale and does not transfer.
Root cause and scheduler feasibility loop
The scheduler's earlier nonblocking-progress repair changed root
AGENTS.md, while the actualPROMPTpassed directly toopencode runretained older work-selection conditions. Open pull-request existence could therefore keep scheduled runs focused on an externally blocked PR even when no repository-local source defect was executable by this writer. The root cause was instruction-path drift, not the queued check, missing approval, provider wait, or central dependency itself.The runtime prompt and repository policy now require: exact-state observation → RCA → bounded remediation options → feasibility classification against live permissions, protection, tooling, runtime/compute limits, dependencies, path ownership, and writer leases → execute the highest-impact safe
execute_nowoption → rerun the exact failing test or gate → verify state changed → otherwise keep the unresolved gate fail-closed and continue with the next safe non-overlapping action. A proposal, retry, aggregate-green result, or predecessor-head result is never resolution evidence.Current TDD acquisition-evidence slice
A subsequent acquisition/security audit found a second concrete drift:
docs/doctoring/github-token-exact-head-check-authorization-evidence.mdstill described an older topology in which the model job held repository write authority and published branches itself, while the executable workflow had already separated those capabilities into deterministic jobs. Stale authority documentation is an audit and acquisition-diligence defect because it overstates the untrusted model's privilege and can misdirect remediation of the current Scorecard finding.RED
Commit
b1afefd9a8264c4cf7f5c409f853abebfe70dc17addedHourlyOpenCodeAuthorityDocumentationTestbefore changing the doctoring. Literal-head CI run31266495903, macOS job93125370929, checked out that exact SHA and ran 317etl-servicetests. Exactly the two new authority-documentation tests failed:documentsModelJobAsReadOnlyGitHubAuthority;documentsSeparatedBranchPullRequestAndActionsWriters.The failure reached the intended documentation/executable-authority boundary rather than a setup, import, or fixture error. Predecessor checks do not transfer.
GREEN
Exact current head
75265fae9fcf5faac6f8b9cab63247ac86f23dd4rewrites the authoritative GitHub-token doctoring to match the deployed model-read-only / deterministic-writer topology, documents exact time-of-check/time-of-use controls, and records materially distinct remediation options for the sensitivecontents: writecapability without pretending the capability was removed.Fresh literal-current-head CI run
31266626369succeeded on Ubuntu, macOS, and Windows. macOS ran all 317etl-servicetests with zero failures and the two new authority-documentation tests green; JaCoCo reported all configured coverage checks met. Thecdc-servicesuite ran 106 tests successfully and the gateway suite ran 3 tests successfully.Exact-current-head gate state
Accepted on literal head
75265fae9fcf5faac6f8b9cab63247ac86f23dd4:31266626369: success; Ubuntu, macOS, and Windows each completed exact-source checkout and exact-SHA verification;31266626334: success;31266626333: success;31266626347: success;The conditional
test_self_hostedCI job is skipped and is not counted as positive evidence. If repository policy ever makes that skipped context required, it remains blocking.Not accepted / still blocking:
31266626345is aggregate-green, but its hard Trivy job93125705118checked out and scanned synthetic mergebe3fe2072a0a165c895c307881a2b740a08f4f0crather than literal head75265fa...; the soft Scorecard job93125705100used the same synthetic source identity. OSV did perform explicit base/head checkout and dependency review ran, but the aggregate required Security Scan is not accepted because its hard filesystem scanner is synthetic-merge-only;PRRT_kwDOM_CJBs6XYldqis resolved after exact-head RCA as a necessary-capability disposition. The underlying finding remains factually true: the isolated deterministicpublish-agent-branchjob requires job-scopedcontents: writeto persist one same-repository feature ref. Thread resolution is not evidence that the Scorecard condition disappeared and does not make Security Scan acceptable;contents: writedestroys autonomous branch persistence; moving it into the model expands untrusted authority; inventing a PAT/App is rejected without a real independently proven narrower credential. The currently executable narrow design is the isolated deterministic branch publisher with bundle-digest, exact-ancestry, live-ref, path, commit-count, and post-write-SHA validation; andAPPROVEDreview on the exact current head.Queued, pending, skipped-required, neutral-required, absent, cancelled, failed, stale-head, predecessor-head, and synthetic-merge-only evidence remain not passing.
Approval-path RCA
The missing formal approval is not treated as an unexplained external wait. Live review state has no qualifying
APPROVEDsubmission on this exact head, no requested individual or team reviewer, and no standard repositoryCODEOWNERSroute. Historical COMMENTED reviews, status contexts, reactions, textual approval language, author reviews, and predecessor-head evidence do not qualify.The current central review architecture provides two legitimate autonomous reviewer stages, but the first stage is not operational for this repository in the current organization configuration:
Required OpenCode Reviewworkflow is a non-privileged placeholder; the actual formal-review path is the default-branchOpenCode Review Dispatchworkflow;OPENCODE_REPOSITORY_DISPATCH_TARGETSallowlist and binds supplied base/head metadata to the live pull request;@opencode-agentbecauseContextualWisdomLab/mightyETLis absent fromOPENCODE_REPOSITORY_DISPATCH_TARGETS;@cwl-noema-reviewis queued, but the current Noema gate requires a qualifying current-head primary OpenCodeAPPROVEDreview before it can perform and submit its independent verdict.Accordingly, the primary autonomous approval path is classified
read_only_dependency: its correction owner is the separately leased central.githubcontrol plane. No self-approval, synthetic approval, random reviewer spam, invented PAT/App, credential reuse, or review-gate weakening is an acceptable workaround. Noema remainsdefer_until_triggeruntil the primary exact-head approval exists. This is not yet classified as the sole external-human gate because literal-head scanner evidence is independently still unavailable.Read-only organization dependencies
The literal-head scanner and autonomous-review control planes are outside this repository writer lease. Fresh comparison against protected
.githubmain@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dbashows:ContextualWisdomLab/.github#813, head1779da411ef2f4c2f20e05a3035f0ff1c43600e8, is diverged from livemain: 8 commits ahead, 31 behind, merge basee71fdab2ab088001f218765ecb5e3b7fabfee11a;ContextualWisdomLab/.github#799, heada6cd746e86c07452d03e0f5cef8e8d13c22f28c6, is diverged from livemain: 26 commits ahead, 31 behind, with the same merge base.Current protected central
security-scan.ymlstill leaves the hard Trivy filesystem scanner and soft Scorecard posture scanner on the pull-request event's default synthetic-merge checkout rather than explicitly binding them to the literal pull-request head. Its dependency-review support probe separately treats HTTP 403/404 assupported=falseand exits successfully instead of failing closed. Therefore the central main advance does not supply the literal-head/fail-closed scanner evidence required here; the dedicated.githubloop must reconcile its diverged repair branches with current protected main.This mightyETL loop must not mutate the central branches, variables, review dispatch configuration, or PRs. Once the central review allowlist and scanner control-plane changes integrate, re-run the unchanged mightyETL exact head through the formal OpenCode→Noema approval chain and literal-head scanner path. No old review or scanner evidence transfers across a mightyETL head change.
Stack integrity
PR #121 remains the only dependency-eligible mightyETL stack item. Draft replacement #138 is still invalid against this exact predecessor: comparison of
75265fae9fcf5faac6f8b9cab63247ac86f23dd4to #138 head778956039f6e41d9d8f264097c6ebf14cd3306f3isdiverged, with merge baseb24bed946d3da2e62d89ded828d877dac2f3c65c, #138 eight commits ahead of that merge base and 33 commits behind the exact current predecessor. Do not deepen or repair the downstream stack until #121 is eligible. Old downstream checks, reviews, approvals, and base snapshots do not transfer across a future repair.Merge policy
This PR changes
.github/workflows/**and carriesautomerge-workflow. Keepmanual-mergeuntil every exact-current-head branch-protection and security gate succeeds, literal-head scanner evidence exists, the necessary-capability security disposition remains documented, and a qualifying independent non-author formalAPPROVEDreview is anchored to the unchanged exact head. Remove the hold only immediately before an expected-head protected merge. Never bypass protection, approval, tests, security gates, exact-head binding, realistic-feasibility checks, writer leases, or stack integrity.