-
Notifications
You must be signed in to change notification settings - Fork 0
feat(automation): run Wardnet hourly NVIDIA NIM review repair #1070
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
seonghobae
wants to merge
12
commits into
main
Choose a base branch
from
feat/wardnet-hourly-nvidia-nim-review-repair
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
d3376a4
feat(automation): run Wardnet hourly NVIDIA NIM review repair
seonghobae 168b5a5
Merge branch 'main' into feat/wardnet-hourly-nvidia-nim-review-repair
opencode-agent[bot] b1cbe69
Merge branch 'main' into feat/wardnet-hourly-nvidia-nim-review-repair
opencode-agent[bot] 148a3e0
Merge branch 'main' into feat/wardnet-hourly-nvidia-nim-review-repair
opencode-agent[bot] 5f899a4
Reconcile current main for wardnet repair caller
seonghobae 9c752db
ci: refresh pip audit runtime
seonghobae 32760e6
Merge remote-tracking branch 'origin/main' into repair/wardnet-pr1070
seonghobae e1ad150
ci: restack Wardnet hourly repair caller
seonghobae 79b50c4
fix(automation): reserve Wardnet minute 46 org-wide
seonghobae 110b89c
Merge remote-tracking branch 'origin/main' into HEAD
seonghobae 7d45aad
Merge branch 'main' into feat/wardnet-hourly-nvidia-nim-review-repair
seonghobae 5554908
Merge branch 'main' into feat/wardnet-hourly-nvidia-nim-review-repair
seonghobae File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| name: Wardnet Hourly Review Repair | ||
|
|
||
| on: | ||
| schedule: | ||
| # Minute 46 avoids every existing sibling heartbeat. | ||
| - cron: "46 * * * *" | ||
|
|
||
| concurrency: | ||
| group: wardnet-hourly-review-repair | ||
| # A later heartbeat must not cancel an in-flight SOC RCA or repair. | ||
| cancel-in-progress: false | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| dispatch-review-repair: | ||
| permissions: | ||
| contents: read | ||
| id-token: write | ||
|
seonghobae marked this conversation as resolved.
|
||
| uses: ./.github/workflows/pr-review-fix-scheduler.yml | ||
| with: | ||
| target_repository: ContextualWisdomLab/wardnet | ||
|
seonghobae marked this conversation as resolved.
|
||
| base_branch: main | ||
| max_prs: "50" | ||
| max_dispatches: "1" | ||
| retry_hours: "2" | ||
| secrets: | ||
| PR_REVIEW_MERGE_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN }} | ||
| OPENCODE_APPROVE_TOKEN: ${{ secrets.OPENCODE_APPROVE_TOKEN }} | ||
|
seonghobae marked this conversation as resolved.
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,130 @@ | ||
| # Wardnet hourly review-repair caller | ||
|
|
||
| 검토 기준일: **2026-08-17** | ||
|
|
||
| ## Decision | ||
|
|
||
| ContextualWisdomLab operates one protected hourly caller for | ||
| `ContextualWisdomLab/wardnet` (wardnet.io — WAF / IDS / AI SOC / software LB / | ||
| APIM). The caller runs at minute 46, delegates to the product-neutral central | ||
| review-fix scheduler, inspects at most 50 open pull requests targeting | ||
| protected `main`, and dispatches at most one bounded repair per heartbeat. | ||
|
|
||
| A paying buyer of the AI SOC would feel live wardnet pull requests stalling | ||
| while hourly NVIDIA NIM repair scanned only Clearfolio, DiskSage, and | ||
| fast-mlsirm. Live heads such as ContextualWisdomLab/wardnet#76 (adaptive | ||
| orchestrator default) and #72 (externally provisioned admin secret) target | ||
| `main` and never enter those other callers. | ||
|
|
||
| The caller does not implement review or mutation logic itself. Wardnet remains | ||
| standalone; naruon and noema consume its SOC verdicts without owning its | ||
| runtime. Privileged automation stays in `ContextualWisdomLab/.github`. | ||
|
|
||
| ## Root-cause analysis and remediation feasibility | ||
|
|
||
| The reusable worker performs exact-head root-cause analysis and tests | ||
| remediation feasibility before it edits. The reusable worker must: | ||
|
|
||
| 1. Refetch the exact live head, base, reviews, checks, changed paths, and | ||
| writer state. | ||
| 2. Establish the causal chain rather than repeat the terminal symptom. | ||
| 3. Enumerate materially distinct minimal remedies. | ||
| 4. Reject remedies that lack writer authority, cross sealed paths, require | ||
| unavailable credentials or protected-setting changes, violate stack order, | ||
| cannot be verified, or do not alter the diagnosed cause. | ||
| 5. Dispatch at most one feasible repair. Otherwise leave the tree unchanged. | ||
|
|
||
| A queued or pending check remains a merge blocker but is not itself a code | ||
| finding. The independent non-author approval remains an external authorization | ||
| gate and is never synthesized by the repair worker. The worker cannot approve, | ||
| merge, release, resolve review findings by inference, change protection, or | ||
| manufacture passing checks. | ||
|
|
||
| ## Cadence and concurrency | ||
|
|
||
| The caller uses a single concurrency group and `cancel-in-progress: false`. | ||
| This preserves an in-flight bounded RCA instead of discarding SOC evidence when | ||
| the next hourly heartbeat arrives. The reusable scheduler cancels only its own | ||
| superseded short queue scan. | ||
|
|
||
| The caller sets a **two-hour same-head retry floor**. Central OpenCode and | ||
| NVIDIA NIM work, plus wardnet's adaptive-orchestration analysis, can | ||
| legitimately approach two hours. An hourly redispatch of the same unchanged | ||
| head would create duplicate writer pressure rather than faster remediation. | ||
|
|
||
| GitHub scheduled workflows can be delayed under load and execute only from the | ||
| default branch. The cron expression is a heartbeat, not a real-time SLA. | ||
|
|
||
| ## Credential and model boundary | ||
|
|
||
| The caller keeps workflow `GITHUB_TOKEN` at `contents: read` and grants the | ||
| reusable job `id-token: write` so the central scheduler can mint the OpenCode | ||
| GitHub App token from GitHub OIDC when the mapped PAT is absent (GitHub, | ||
| n.d.-c). It maps only `PR_REVIEW_MERGE_TOKEN` and `OPENCODE_APPROVE_TOKEN`. | ||
| It never uses `secrets: inherit`, receives `NVIDIA_NIM_API_KEY`, or introduces | ||
| `COPILOT_GITHUB_TOKEN`. CWE-250 forbids executing the caller with write or | ||
| model privileges it does not need (MITRE, 2026). | ||
|
|
||
| Model execution remains inside the central worker. The model credential is the | ||
| GitHub Secret `NVIDIA_NIM_API_KEY`; the caller does not receive or forward it. | ||
|
|
||
| Before protected-main activation, the repository variable | ||
| `OPENCODE_REPOSITORY_DISPATCH_TARGETS` must contain the exact | ||
| `ContextualWisdomLab/wardnet` target. Missing or mismatched configuration | ||
| fails before mutation credential materialization. | ||
|
|
||
| ## Security, standalone operation, and modularity | ||
|
|
||
| The caller adds no wardnet runtime dependency, database object, network | ||
| endpoint, tenant authority, or product credential. Wardnet continues to run as | ||
| a standalone AI SOC. Naruon, noema, and other CWL services may consume wardnet | ||
| verdicts, but they cannot weaken its local validation, protected-branch, | ||
| exact-head, approval, or security gates. | ||
|
|
||
| ## Verification and rollback | ||
|
|
||
| Machine-checkable contracts require the exact target/base, minute 46 cadence, | ||
| non-cancelling single-flight group, one dispatch, two-hour retry floor, | ||
| explicit secret mapping, read-only contents plus job-scoped `id-token: write`, | ||
| focused path-filter coverage, and absence of model or Copilot credentials. | ||
| Independent `pull_request`, `push`, and `compileall` path blocks must each | ||
| name the caller, doctoring, or contract they own. | ||
|
|
||
| After source integration, closure requires a scheduled or manual | ||
| protected-main consumer run proving the exact wardnet repository and `main` | ||
| base. Source checks alone are not protected-main operational acceptance. | ||
| Merge still requires zero unresolved valid findings and a qualifying | ||
| independent non-author approval. | ||
|
|
||
| Rollback removes the wardnet caller, its focused test, doctoring, and central | ||
| path-filter/documentation entries. It must not remove scheduler dispatch | ||
| validation or affect independent product callers. | ||
|
|
||
| ## APA 7th references | ||
|
|
||
| GitHub, Inc. (n.d.-a). *Events that trigger workflows*. GitHub Docs. Retrieved | ||
| August 17, 2026, from | ||
| https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule | ||
|
|
||
| GitHub, Inc. (n.d.-b). *Reuse workflows*. GitHub Docs. Retrieved August 17, | ||
| 2026, from | ||
| https://docs.github.com/en/actions/how-tos/sharing-automations/reuse-workflows | ||
|
|
||
| GitHub, Inc. (n.d.-c). *Automatic token authentication*. GitHub Docs. | ||
| Retrieved August 17, 2026, from | ||
| https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication#permissions-for-the-github_token | ||
|
|
||
| MITRE. (2026). *CWE-250: Execution with unnecessary privileges*. | ||
| https://cwe.mitre.org/data/definitions/250.html | ||
|
|
||
| National Institute of Standards and Technology. (2022). *Secure software | ||
| development framework (SSDF) version 1.1: Recommendations for mitigating the | ||
| risk of software vulnerabilities* (NIST Special Publication 800-218). | ||
| https://doi.org/10.6028/NIST.SP.800-218 | ||
|
|
||
| NVIDIA. (n.d.). *NVIDIA NIM for large language models documentation*. | ||
| Retrieved August 17, 2026, from | ||
| https://docs.nvidia.com/nim/large-language-models/latest/ | ||
|
|
||
| OpenCode. (n.d.). *OpenCode documentation*. Retrieved August 17, 2026, from | ||
| https://opencode.ai/docs/ |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.