Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
464 commits
Select commit Hold shift + click to select a range
29b931e
refactor(actions): consolidate hourly review-repair callers (#1673)
seonghobae Sep 2, 2026
fb847d6
docs: make organization profile product-first (#1676)
seonghobae Sep 2, 2026
ecba627
fix(actions): move registry retirement off saturated runner lane
seonghobae Sep 2, 2026
8262a0e
test(actions): pin registry retirement capacity contract
seonghobae Sep 2, 2026
b66ce13
docs(actions): record registry retirement capacity repair
seonghobae Sep 2, 2026
42612f4
test(actions): bind retirement runner assertion to exact job
seonghobae Sep 2, 2026
0f56950
fix(actions): move registry retirement off saturated runner lane (#1684)
seonghobae Sep 2, 2026
daa699d
fix(actions): accept absent retired workflow identities
seonghobae Sep 2, 2026
5eafbe7
test(actions): pin absent registry identity handling
seonghobae Sep 2, 2026
265b5fa
docs(actions): record absent registry identity RCA
seonghobae Sep 2, 2026
6958918
fix(actions): reconcile already-absent legacy workflow identities (#1…
seonghobae Sep 2, 2026
33db5bf
chore(actions): remove completed registry-retirement one-shot (#1691)
seonghobae Sep 2, 2026
04b38b8
seonghobae Sep 2, 2026
a819919
revert: remove accidental empty placeholder file
seonghobae Sep 2, 2026
5c561a6
fix(opencode): retire stale draft/head dispatches without false failu…
seonghobae Sep 2, 2026
e29302c
fix(opencode-review): bound verdict-polling loop by wall clock, not j…
seonghobae Sep 2, 2026
e7283c4
fix(scheduler): bound scan-pr-queue to timeout-minutes: 30 (#1702)
seonghobae Sep 2, 2026
6f70174
fix(scheduler): lengthen scan-pr-queue's own heartbeat, don't drop it…
seonghobae Sep 2, 2026
a2692ee
test(actions): require close-time retirement for quality gate
seonghobae Sep 2, 2026
f8f50e2
fix(actions): retire quality-gate work when PR closes
seonghobae Sep 2, 2026
bbb781d
docs(actions): record merged-PR stale quality-run RCA
seonghobae Sep 2, 2026
445f6be
fix(tests): stub sleep in OpenCode poll regression tests, salvage #17…
seonghobae Sep 2, 2026
2dec188
merge(main): reconcile PR #1708 after #1710
seonghobae Sep 2, 2026
acbb8e7
Merge pull request #1708 from ContextualWisdomLab/fix/quality-gate-cl…
seonghobae Sep 2, 2026
6ba61e7
perf(scheduler): cache active_workflow_runs within one invocation (#1…
seonghobae Sep 2, 2026
f610598
fix(scheduler): don't report a rejected run cancellation as cancelled…
seonghobae Sep 2, 2026
67998ec
fix(scheduler): never let a falsy headRefOid cancel every run for a P…
seonghobae Sep 2, 2026
8f7b8ae
feat(workflows): add reusable r-package-check.yml for kaefa/nonnest2
seonghobae Sep 2, 2026
5d67f70
fix(strix): bound cancel-superseded-pr-runs and publish-manual-pr-evi…
seonghobae Sep 2, 2026
e61eccc
fix(autofix): remove leaf model-compute and evidence heuristics (#1714)
seonghobae Sep 2, 2026
5935c81
fix(noema-review): bound both jobs to a job-level timeout-minutes (#1…
seonghobae Sep 2, 2026
0bcd22d
feat(workflows): add reusable dependency-review.yml for 4 product rep…
seonghobae Sep 2, 2026
8eaa650
fix(workflows): remove job-level timeouts that cap model inference (#…
seonghobae Sep 2, 2026
b4eec00
fix(actions): retire stale Noema token-lifetime quality runs
seonghobae Sep 2, 2026
5aecb9b
docs(workflows): correct r-package-check.yml's caller example to SHA-pin
seonghobae Sep 2, 2026
63bf498
docs(workflows): document the SHA-pin and check-name-collision fixes …
seonghobae Sep 2, 2026
5e838ab
test(workflows): reject caller-authored shell in reusable R check
seonghobae Sep 2, 2026
931c8f3
fix(workflows): bound reusable R pre-check input
seonghobae Sep 2, 2026
6ca3080
test(workflows): bind bounded R pre-check contract
seonghobae Sep 2, 2026
0747ae1
docs(adr): record bounded R workflow security decision
seonghobae Sep 2, 2026
8691ac6
docs(workflows): record reusable R shell-input RCA
seonghobae Sep 2, 2026
9ec686e
Merge 8691ac6c7365c1ee99148bbb5bfbd5d609be0c3c into 63bf49835da44aa82…
seonghobae Sep 2, 2026
6b39b87
docs(gap-baseline): record org-queue-sweep rate-limit investigation, …
seonghobae Sep 2, 2026
f246193
chore(ci): retire completed PR1714/PR1715 source-fix assets (#1723)
seonghobae Sep 2, 2026
5f8e5b2
feat(workflows): add harden-runner and comment_summary_in_pr input fo…
seonghobae Sep 2, 2026
9330d41
docs(workflows): record the 63-repo, 255-file CI workflow duplication…
seonghobae Sep 2, 2026
7827191
fix(opencode): retire superseded verdict polls successfully (#1734)
seonghobae Sep 2, 2026
a28fc2f
fix(noema): remove caller repair deadline and duplicate model call
seonghobae Sep 2, 2026
c2bb59e
refactor(ci): share exact-head coverage quality gate
seonghobae Sep 2, 2026
bbe65f0
feat(actions): centralize orchestrator/free sidecar provisioning (#1736)
seonghobae Sep 2, 2026
7bf98d0
fix(scheduler): admit governance-risk-compliance target
seonghobae Sep 2, 2026
73b250f
fix(sidecar): pin current contextual-orchestrator revision
seonghobae Sep 2, 2026
86ef3e7
docs(noema): clarify retired repair deadline and sandbox timeout
seonghobae Sep 2, 2026
8c08583
fix(scheduler): admit governance-risk-compliance via the org variable…
seonghobae Sep 2, 2026
4eab872
Merge remote-tracking branch 'origin/main' into claude/item15-org-que…
seonghobae Sep 2, 2026
4f95abc
docs(doctoring): record the org's Actions plan concurrency ceiling as…
seonghobae Sep 3, 2026
bf5970d
docs(doctoring): verify loop-brief items 4, 15-18, 38, 39 already res…
seonghobae Sep 3, 2026
7d09388
fix(ci): job-level runner-admission gate for required workflows (#1766)
seonghobae Sep 3, 2026
d302322
docs(doctoring): record codeql-pr.yml required-workflow platform rest…
seonghobae Sep 3, 2026
bf28b5d
fix(actions): let the current-head coalescer finish under push bursts…
seonghobae Sep 3, 2026
76513a2
[QUEUE_SATURATION_CHICKEN_EGG] feat(audit): close CodeQL gap, add per…
seonghobae Sep 3, 2026
cbd1280
fix(actions): coalescer needs queue:max, not just cancel-in-progress:…
seonghobae Sep 3, 2026
64e67ef
[QUEUE_SATURATION_CHICKEN_EGG] fix(ci): restore PR-scoped concurrency…
seonghobae Sep 3, 2026
8141b99
fix(opencode-review): drop head-SHA concurrency scoping, structurally…
seonghobae Sep 3, 2026
87352d9
fix(strix): resolve strix.interface.main package-attribute shadow (#1…
seonghobae Sep 3, 2026
fc6cd63
fix(ci): dedupe strix.yml's cancel-superseded-pr-runs cleanup job (#1…
seonghobae Sep 3, 2026
8122fff
fix(opencode-review): scope concurrency to opencode-review-target onl…
seonghobae Sep 3, 2026
2fb81cc
docs(doctoring): verify item 13's stale-head-cancellation hypothesis …
seonghobae Sep 3, 2026
f109078
docs(doctoring): pr-review-merge-scheduler.yml's trigger surface is b…
seonghobae Sep 3, 2026
ff332ea
docs(gap-baseline): record fresh item 4 evidence -- gateway 500 after…
seonghobae Sep 3, 2026
211f167
docs(adr): 0025 restore central CodeQL as a required workflow via rep…
seonghobae Sep 3, 2026
0e195d3
refactor(codeql): extract the SARIF Medium+ gate into a shared script…
seonghobae Sep 3, 2026
c594efa
feat(codeql): add the native CodeQL scan dispatch handler (#1776)
seonghobae Sep 3, 2026
403da71
feat(codeql): rewrite codeql-pr.yml as dispatch+poll (#1778)
seonghobae Sep 3, 2026
bc9c081
fix(ci): sync stale strix.yml concurrency-format assertion with PR #1…
seonghobae Sep 3, 2026
9899c3d
fix(ci): update test_strix_quick_gate.sh's stale cron assertion from …
seonghobae Sep 3, 2026
62d512e
docs(item23): Noema review-gate failure retrospective and improvement…
seonghobae Sep 3, 2026
0070e37
docs(adr): record ecosystem admin-web architecture (Keyverse SSO + Ke…
seonghobae Sep 3, 2026
122d202
docs(item7): correct "zero work started" claim on EgressWeave/wardnet…
seonghobae Sep 3, 2026
08d83f7
docs(opencode-review): fix stale comment describing the pre-#1781 des…
seonghobae Sep 3, 2026
bd866a2
fix(release): make exact artifact handoff acyclic (#1791)
seonghobae Sep 3, 2026
6b2bc9d
Merge branch 'main' into feat/r-package-check-reusable-workflow
opencode-agent[bot] Sep 3, 2026
0c9a5ab
test(codeql): guard against any branches: filter reappearing on codeq…
seonghobae Sep 3, 2026
09ac636
fix(governance): audit all required code-scanning workflows (#1719)
seonghobae Sep 3, 2026
51b812d
feat(scorecard): centralize default-branch analysis as reusable workf…
seonghobae Sep 3, 2026
232107a
fix(scheduler): defer shared installation rate limits (#1245)
seonghobae Sep 3, 2026
2ed66f2
fix(scheduler): mirror hourly-caller targets against the dispatch all…
seonghobae Sep 3, 2026
d548c19
chore(deps): bump uv from 0.11.25 to 0.12.7 (#1512)
dependabot[bot] Sep 3, 2026
bf21572
chore(deps): bump protobuf from 6.33.6 to 7.36.0 (#1513)
dependabot[bot] Sep 3, 2026
abdc4bd
chore(deps): bump openai-agents from 0.19.4 to 0.22.0 (#1514)
dependabot[bot] Sep 3, 2026
cff0447
chore(deps): bump openai from 2.54.0 to 3.6.0 (#1516)
dependabot[bot] Sep 3, 2026
a7a317d
chore(deps): bump google/osv-scanner-action/osv-reporter-action (#1520)
dependabot[bot] Sep 3, 2026
aee4292
chore(deps): bump google/osv-scanner-action/osv-scanner-action from a…
dependabot[bot] Sep 3, 2026
5afbf58
ci(review): consolidate Noema, OpenCode, and Strix quality bootups (#…
seonghobae Sep 3, 2026
c13fea1
ci(sbom): combine exact artifact quality runners (#1805)
seonghobae Sep 3, 2026
b4221e7
⚡ Bolt: opencode_review_approve_gate.sh 정규표현식 사전 컴파일 최적화 (#1735)
seonghobae Sep 3, 2026
269e5bd
fix(scheduler): fail fast on shared installation rate limits (#1803)
seonghobae Sep 3, 2026
c25be13
fix(ci): close two required-check gaps left open by #1803's scheduler…
seonghobae Sep 3, 2026
bcff4af
perf(ci): O(1) character check bypass for JSON decoding in redact_sen…
seonghobae Sep 3, 2026
0574df2
chore(deps): bump github/codeql-action from v4.37.8 to v4.37.9 (#1801)
seonghobae Sep 3, 2026
72f63c9
perf(ci): add a no-marker fast path to extract_model_prose (#1811)
seonghobae Sep 3, 2026
7c82b66
perf(ci): fetch multiple agent ledger artifacts concurrently (#1813)
seonghobae Sep 3, 2026
07d9ec2
fix(ci): remove dormant nvidia-nim provider block from opencode.jsonc…
seonghobae Sep 3, 2026
f523596
fix(automation): raise hourly-review-repair max_prs from 50 to 200
claude Sep 3, 2026
9129095
docs(automation): correct Clearfolio cancel-in-progress claim
claude Sep 3, 2026
c780268
Merge branch 'main' into feat/r-package-check-reusable-workflow
opencode-agent[bot] Sep 3, 2026
194a30e
docs(gap-baseline): record Actions congestion and noema/strix hot-fil…
claude Sep 4, 2026
37859a4
fix(ci): repoint stale scheduler_file self-test assertions at the cor…
seonghobae Sep 4, 2026
9c79cf7
test(actions): pin org-sweep queue-hygiene owner boundary
seonghobae Sep 4, 2026
7b93e9f
docs(gap-baseline): record 4 more hot-file collision PRs and #1655's …
claude Sep 4, 2026
03a89c7
fix(opencode): break runner-capacity dispatch deadlock (#1823)
seonghobae Sep 4, 2026
72409df
docs(item13): correct the "23h22m queued" Strix run claim, found via …
seonghobae Sep 4, 2026
30425f6
ci(review-repair): limit push quality runs to main (#1825)
seonghobae Sep 4, 2026
c73aadb
merge(main): adopt current queue-control prerequisites
seonghobae Sep 4, 2026
4024a8a
ci(security): consolidate required OSV and Scorecard scans (#1826)
seonghobae Sep 4, 2026
4a9f355
merge(main): adopt consolidated security workflow prerequisite
seonghobae Sep 4, 2026
5ec781d
ci(quality): isolate PR concurrency by repository (#1827)
seonghobae Sep 4, 2026
6c6ca9b
merge(main): adopt repository-isolated quality concurrency
seonghobae Sep 4, 2026
035b3e6
ci(scheduler): reduce organization sweep polling (#1828)
seonghobae Sep 4, 2026
1dd143b
fix(tests): repair required-gate breakage left by #1826 and #1823 (#1…
seonghobae Sep 4, 2026
dafb1e6
fix(coalescer): treat CoalescingRefused as the documented safe no-op …
seonghobae Sep 4, 2026
6382f3f
fix(noema): ground verdicts and classify gateway errors (#1831)
seonghobae Sep 4, 2026
6619f5d
Merge remote-tracking branch 'origin/main' into HEAD
seonghobae Sep 4, 2026
9db155a
ci(opencode): release required runner after dispatch (#1830)
seonghobae Sep 4, 2026
41411c1
fix(tests): sync stale hourly-cron assertion with the current daily c…
seonghobae Sep 4, 2026
b74ac8d
Revert "fix(tests): sync stale hourly-cron assertion with the current…
seonghobae Sep 4, 2026
135264d
fix(tests): sync stale hourly-cron assertion with #1828's daily sweep…
seonghobae Sep 4, 2026
296a1e6
ci: retire duplicate PR security workflows
seonghobae Sep 4, 2026
02bb07e
Merge remote-tracking branch 'origin/main' into codex/retire-standalo…
seonghobae Sep 4, 2026
22a7073
ci: retire duplicate PR security workflows (#1833)
seonghobae Sep 4, 2026
10b28ff
Merge branch 'main' into fix/scheduler-quick-gate-core-file-refs
seonghobae Sep 4, 2026
e9ab98a
ci(security): consolidate PR Gitleaks scanning
seonghobae Sep 4, 2026
e635312
Merge remote-tracking branch 'origin/main' into codex/pr1716-update
seonghobae Sep 4, 2026
816e3e4
feat(workflows): reusable R-CMD-check for kaefa/nonnest2 (#1716)
seonghobae Sep 4, 2026
d738b6d
chore(actions): non-force restack queue owner RED onto current main
seonghobae Sep 4, 2026
fd5cec4
fix(tests): close #1831's stale served_model test, missing docstring,…
seonghobae Sep 4, 2026
6557b9f
Merge remote-tracking branch 'origin/main' into codex/consolidate-git…
seonghobae Sep 4, 2026
d451f19
Merge remote-tracking branch 'origin/main' into codex/pr1834-update
seonghobae Sep 4, 2026
8e7e985
ci: consolidate PR Gitleaks into Security Scan (#1834)
seonghobae Sep 4, 2026
5cf6b2f
chore(actions): adopt current control-plane main without force
seonghobae Sep 4, 2026
3dabaaf
Merge remote-tracking branch 'origin/main' into codex/pr1820-final
seonghobae Sep 4, 2026
0029b5e
test(actions): make queue owner RED executable on exact PR heads
seonghobae Sep 4, 2026
a73f5c9
test(ci): align scheduler wake contracts
seonghobae Sep 4, 2026
0b4a6d9
fix(ci): repoint quick-gate scheduler assertions (#1820)
seonghobae Sep 4, 2026
b306e4a
Merge remote-tracking branch 'origin/main' into codex/pr1821-repair
seonghobae Sep 4, 2026
c78f6cf
ci: retire cross-repository queue cancellation
seonghobae Sep 4, 2026
1cfacad
ci: fold queue ownership check into existing quality job
seonghobae Sep 4, 2026
11bb6a7
Merge pull request #1821 from ContextualWisdomLab/test/1796-org-sweep…
seonghobae Sep 4, 2026
c4dc152
ci(actions): consolidate review repair quality gate
seonghobae Sep 4, 2026
8ec09ba
Merge latest main into hourly review repair cap
seonghobae Sep 4, 2026
87fde45
Merge pull request #1836 from ContextualWisdomLab/codex/consolidate-r…
seonghobae Sep 4, 2026
ec4521f
ci(actions): consolidate commercial readiness quality
seonghobae Sep 4, 2026
b7fe912
Merge pull request #1837 from ContextualWisdomLab/codex/consolidate-c…
seonghobae Sep 4, 2026
e3a8e19
fix(automation): rotate bounded review repair windows
seonghobae Sep 4, 2026
56f315f
Merge latest main into hourly review repair cap
seonghobae Sep 4, 2026
1a96d0a
Merge pull request #1817 from ContextualWisdomLab/fix/hourly-review-r…
seonghobae Sep 4, 2026
0c44363
ci(actions): consolidate SBOM attestation quality
seonghobae Sep 4, 2026
f87bfae
Merge remote-tracking branch 'origin/main' into codex/pr1729-repair
seonghobae Sep 4, 2026
77da414
docs: supersede stale org sweep conclusion
seonghobae Sep 4, 2026
7d44e13
docs: correct historical sweep cost evidence
seonghobae Sep 4, 2026
f8f8f92
Merge pull request #1729 from ContextualWisdomLab/claude/item15-org-q…
seonghobae Sep 4, 2026
2839d29
Merge remote-tracking branch 'origin/main' into codex/pr1838-review
seonghobae Sep 4, 2026
2c5d8ed
ci: skip agent quality runner for changelog-only edits
seonghobae Sep 4, 2026
f0dd406
Merge pull request #1838 from ContextualWisdomLab/codex/consolidate-s…
seonghobae Sep 4, 2026
d57f2ad
Merge remote-tracking branch 'origin/main' into codex/pr1819-repair
seonghobae Sep 4, 2026
f8c3b30
Merge pull request #1819 from ContextualWisdomLab/docs/gap-baseline-a…
seonghobae Sep 4, 2026
baa05ae
fix(actions): group Strix gate outputs
seonghobae Sep 4, 2026
8071969
Merge pull request #1839 from ContextualWisdomLab/codex/strix-group-g…
seonghobae Sep 4, 2026
26cfc33
ci(scheduler): stop required-check completion fanout (#1840)
seonghobae Sep 4, 2026
5d81769
feat(codeql): bootstrap adaptive setup pull requests (#1841)
seonghobae Sep 4, 2026
07db37e
fix(codeql): keep onboarding off pull request heads (#1842)
seonghobae Sep 4, 2026
e64ab9c
fix(actions): deploy current orchestrator runtime (#1843)
seonghobae Sep 4, 2026
ed6d2b5
docs(actions): correct orchestrator pin scope (#1844)
seonghobae Sep 4, 2026
6790cce
fix(actions): admit live review heads before cancellation
seonghobae Sep 4, 2026
d6c636a
Merge pull request #1845 from ContextualWisdomLab/codex/goal13-openco…
seonghobae Sep 4, 2026
b15cb99
fix(actions): recover current startup failures (#1846)
seonghobae Sep 4, 2026
6fb2a1c
ci(scheduler): consolidate empty PR cleanup
seonghobae Sep 4, 2026
9c7d28a
Merge pull request #1847 from ContextualWisdomLab/codex/consolidate-c…
seonghobae Sep 4, 2026
c129aeb
test(actions): sync OpenCode concurrency contract (#1848)
seonghobae Sep 4, 2026
109d79b
ci(actions): replace unsupported queue concurrency
seonghobae Sep 4, 2026
12fe2d1
test(ci): align current-main workflow contracts
seonghobae Sep 4, 2026
df99679
ci(actions): coalesce hourly review admissions
seonghobae Sep 4, 2026
fe59bfe
Merge remote-tracking branch 'origin/main' into codex/repair-current-…
seonghobae Sep 4, 2026
c31d2e5
Merge pull request #1852 from ContextualWisdomLab/codex/repair-curren…
seonghobae Sep 4, 2026
633b4c4
fix(actions): cancel queued superseded model runs
seonghobae Sep 4, 2026
34b7903
Merge pull request #1854 from ContextualWisdomLab/codex/model-workflo…
seonghobae Sep 4, 2026
641297d
docs(actions): start model concurrency runtime proof
seonghobae Sep 4, 2026
b1c353e
docs(actions): include Strix concurrency proof scope
seonghobae Sep 4, 2026
9c7fa72
docs(actions): record first full model run generation
seonghobae Sep 4, 2026
67f3f6e
docs(actions): record native model run cancellation
seonghobae Sep 4, 2026
4aad269
Merge pull request #1855 from ContextualWisdomLab/codex/model-workflo…
seonghobae Sep 4, 2026
7899b48
fix(codeql): restore required startup recovery
seonghobae Sep 4, 2026
fc38e19
Merge remote-tracking branch 'origin/main' into codex/repair-codeql-s…
seonghobae Sep 4, 2026
f893b47
Merge pull request #1856 from ContextualWisdomLab/codex/repair-codeql…
seonghobae Sep 4, 2026
7696915
fix(strix): install required HTTPX2 runtime (#1851)
seonghobae Sep 4, 2026
f871694
fix(scheduler): verify pre-job startup failures (#1859)
seonghobae Sep 4, 2026
3f2f21c
fix(actions): reduce scheduled recovery pressure (#1860)
seonghobae Sep 4, 2026
a23c666
feat(ci): add bounded durable review admission core (#1862)
seonghobae Sep 4, 2026
1114a99
ci(scheduler): connect bounded review admission (#1863)
seonghobae Sep 4, 2026
b5e4b55
fix(noema): preserve gateway and source receipt evidence (#1850)
seonghobae Sep 4, 2026
67fd7e5
fix(noema-review): close item13 stale-head native-cancellation race (…
seonghobae Sep 4, 2026
dcd35b7
fix(codeql): release runners with exact job wake-up (#1865)
seonghobae Sep 4, 2026
e0de9c1
ci(codeql): gate staged default-setup retirement (#1818)
seonghobae Sep 4, 2026
5d55a31
fix(actions): halve current-head coalescer jobs (#1866)
seonghobae Sep 4, 2026
f43dcb8
fix(actions): retire review scans when PRs return to draft (#1869)
seonghobae Sep 4, 2026
a9aeee8
fix(actions): pin opencode-review-dispatch.yml off starved ubuntu-lat…
seonghobae Sep 4, 2026
1b65dbc
fix(actions): remove organization queue sweep (#1878)
seonghobae Sep 5, 2026
b5efbc2
fix(tests): repair changed-scope drift and stale noema cancel-step te…
seonghobae Sep 5, 2026
7ad6d78
fix(strix): remove repository-side scan retries
seonghobae Sep 5, 2026
40e9775
docs(agents): guard event-specific run identity
seonghobae Sep 5, 2026
85f4ef9
ci(actions): fold head coalescing into scheduler
seonghobae Sep 5, 2026
af5932e
Merge pull request #1882 from ContextualWisdomLab/codex/consolidate-c…
seonghobae Sep 5, 2026
cff3907
Merge remote-tracking branch 'origin/main' into codex/actions-run-ide…
seonghobae Sep 5, 2026
bfda38b
Merge pull request #1881 from ContextualWisdomLab/codex/actions-run-i…
seonghobae Sep 5, 2026
fd36a57
Merge branch 'main' into codex/remove-strix-outer-retry
seonghobae Sep 5, 2026
8272e4f
Merge pull request #1880 from ContextualWisdomLab/codex/remove-strix-…
seonghobae Sep 5, 2026
0ee7be8
fix(actions): pin the remaining named-residual workflows off ubuntu-l…
seonghobae Sep 5, 2026
0eb41a3
fix(codeql): isolate language dispatch concurrency (#1888)
seonghobae Sep 5, 2026
8a15cde
fix(actions): verify coalescer cancellation completion (#1887)
seonghobae Sep 5, 2026
3474051
fix(strix): bound scanner runtime to 900 seconds (#1889)
seonghobae Sep 5, 2026
bc59c07
fix(noema): bound model runtime to 900 seconds (#1890)
seonghobae Sep 5, 2026
58c7b04
fix(opencode): bound model runtime to 900 seconds (#1892)
seonghobae Sep 5, 2026
f590a89
fix(noema): restore unbounded model runtime contract (#1891)
seonghobae Sep 5, 2026
1c74d9d
fix(tests): resync opencode-review-dispatch.yml blob-pin after #1892 …
seonghobae Sep 5, 2026
1e84a69
fix(review): restore user-directed model timeout policy (#1895)
seonghobae Sep 5, 2026
947532d
fix(tests): revert opencode-review-dispatch.yml blob-pin after #1895'…
seonghobae Sep 5, 2026
6d7fbeb
fix(tests): stub startup-failure recovery so scheduler tests are GITH…
seonghobae Sep 5, 2026
71dd84d
fix(ci): close the admission-controller coverage/docstring gap on mai…
seonghobae Sep 5, 2026
27d7331
docs(agents): record verification discipline and shared-identity merg…
seonghobae Sep 5, 2026
57210f8
docs(agents): record test-gate regression and stale-PR merge mechanics
seonghobae Sep 5, 2026
b35d1f6
Merge origin/main into docs/test-gate-and-merge-mechanics
seonghobae Sep 5, 2026
0ff7ed2
docs(agents): tighten test-gate rules after adversarial review
seonghobae Sep 5, 2026
e280c4f
docs(agents): name the real categories of forty-hex literal in tests/
seonghobae Sep 5, 2026
525d16b
docs(agents): document how to verify a "superseded" closure claim (#1…
seonghobae Sep 5, 2026
741acc7
Merge origin/main (#1906) into docs/test-gate-and-merge-mechanics
seonghobae Sep 5, 2026
c4a89b3
fix(opencode): stop two echo-only jobs from serializing the review cr…
seonghobae Sep 5, 2026
8aea813
docs(agents): record PR-supersession and constant-change review disci…
seonghobae Sep 5, 2026
6ecc526
Merge origin/main (#1909) into docs/test-gate-and-merge-mechanics
seonghobae Sep 5, 2026
62919d7
docs(items15-17): measure Detect changed scope gate-job runner waste …
seonghobae Sep 5, 2026
a01ffc1
docs(item4): confirm the served_model/phase telemetry fix landed and …
seonghobae Sep 5, 2026
7fcada5
Merge pull request #1914 from ContextualWisdomLab/docs/test-gate-and-…
seonghobae Sep 5, 2026
f250638
fix(ci): restore scheduler CI isolation and contract selection (#1922)
seonghobae Sep 5, 2026
6f8c51d
fix(dispatch): parse the trusted-dispatcher allowlist identically in …
seonghobae Sep 5, 2026
3f88e13
fix(codeql): serialise the dispatched scan matrix with toJSON (#1926)
seonghobae Sep 5, 2026
7f4c5e3
fix(scheduler): hold pre-review branch updates while current-head che…
seonghobae Sep 5, 2026
f2f91b8
fix(review): round-robin catalog fill across accounts within a tier (…
seonghobae Sep 5, 2026
d9eb9f7
fix(sidecar): record the orchestrator's per-attempt trace in the revi…
seonghobae Sep 5, 2026
972b74b
fix(sidecar): let the stream sanitizer pass orchestrator route and ci…
seonghobae Sep 5, 2026
fe827e1
fix(noema): upload the sidecar stderr and preflight report when the v…
seonghobae Sep 5, 2026
96d2600
merge: main@f2f91b80 into #1555 (perf/normalize-label-section-bounds)
seonghobae Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
276 changes: 276 additions & 0 deletions .github/actions/noema-review/two_phase.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,276 @@
#!/usr/bin/env python3
"""Prepare and publish Noema verdicts across short-lived reviewer credentials.

The model phase can legitimately outlive a one-hour GitHub App installation
credential. This trusted helper therefore seals the already validated model
verdict to a runner-local file, then a later workflow step reopens that file
only after the reviewer credential has been refreshed. Publication always
re-fetches the live pull request and verifies its exact head and base before
submitting any review evidence.
"""

from __future__ import annotations

import argparse
import json
import os
import re
import stat
import sys
from pathlib import Path
from typing import Any

ROOT = Path(__file__).resolve().parents[3]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))

from scripts.ci import noema_review_gate as gate # noqa: E402

ENVELOPE_SCHEMA_VERSION = 1
MAX_ENVELOPE_BYTES = 2 * 1024 * 1024
CANONICAL_APP_TOKEN_SOURCE = "noema-review-github-app"
REFRESHED_APP_TOKEN_SOURCE = "noema-review-github-app-refresh"


def _canonical_head(value: str) -> str:
"""Return one canonical lowercase Git SHA or fail closed."""
head = value.strip().lower()
if not re.fullmatch(r"[0-9a-f]{40}", head):
raise RuntimeError("Noema two-phase handoff requires a canonical 40-character Git SHA")
return head


def _canonical_base(pull_request: dict[str, Any]) -> str:
"""Return the exact base commit that defined the reviewed diff/context."""
base = str(pull_request.get("baseRefOid") or "").strip().lower()
if not re.fullmatch(r"[0-9a-f]{40}", base):
raise RuntimeError("Noema two-phase handoff requires a canonical 40-character base SHA")
return base


def _current_actor(*, allow_refreshed_app: bool) -> str:
"""Validate the refresh marker through the existing canonical App gate."""
token_source = os.environ.get("NOEMA_REVIEW_TOKEN_SOURCE")
if not (
allow_refreshed_app
and token_source == REFRESHED_APP_TOKEN_SOURCE
):
return gate.current_actor()

os.environ["NOEMA_REVIEW_TOKEN_SOURCE"] = CANONICAL_APP_TOKEN_SOURCE
try:
return gate.current_actor()
finally:
os.environ["NOEMA_REVIEW_TOKEN_SOURCE"] = token_source


def _reviewer_actor(*, allow_refreshed_app: bool = False) -> str:
"""Return a verified independent reviewer actor for the active token."""
actor = _current_actor(allow_refreshed_app=allow_refreshed_app)
if not actor:
raise RuntimeError("Noema reviewer identity could not be verified")
if actor in gate.PRIMARY_REVIEW_AUTHORS:
raise RuntimeError(
f"Current token actor {actor!r} is already a primary review actor; "
"Noema requires an independent reviewer credential."
)
return actor


def _write_envelope(path: Path, payload: dict[str, Any]) -> None:
"""Create one private, non-following runner-local verdict envelope."""
encoded = (json.dumps(payload, separators=(",", ":"), sort_keys=True) + "\n").encode("utf-8")
if len(encoded) > MAX_ENVELOPE_BYTES:
raise RuntimeError("Noema verdict envelope exceeds the bounded handoff size")
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
if hasattr(os, "O_NOFOLLOW"):
flags |= os.O_NOFOLLOW
fd = os.open(path, flags, 0o600)
try:
file_stat = os.fstat(fd)
if not stat.S_ISREG(file_stat.st_mode) or file_stat.st_nlink != 1:
raise RuntimeError("Noema verdict envelope target is not a private regular file")
view = memoryview(encoded)
written = 0
while written < len(view):
count = os.write(fd, view[written:])
if count <= 0:
raise RuntimeError("Noema verdict envelope write made no forward progress")
written += count
os.fsync(fd)
except BaseException:
os.close(fd)
path.unlink(missing_ok=True)
raise
else:
os.close(fd)


def _read_envelope(path: Path) -> dict[str, Any]:
"""Read and validate one sealed runner-local verdict envelope."""
flags = os.O_RDONLY
if hasattr(os, "O_NOFOLLOW"):
flags |= os.O_NOFOLLOW
try:
fd = os.open(path, flags)
except OSError as exc:
raise RuntimeError("Noema verdict envelope is unavailable for publication") from exc
try:
file_stat = os.fstat(fd)
if not stat.S_ISREG(file_stat.st_mode) or file_stat.st_nlink != 1:
raise RuntimeError("Noema verdict envelope is not a regular single-link file")
if file_stat.st_mode & 0o077:
raise RuntimeError("Noema verdict envelope permissions are broader than owner-only")
if file_stat.st_size <= 0 or file_stat.st_size > MAX_ENVELOPE_BYTES:
raise RuntimeError("Noema verdict envelope size is outside the bounded contract")
chunks: list[bytes] = []
remaining = MAX_ENVELOPE_BYTES + 1
while remaining > 0:
chunk = os.read(fd, min(65536, remaining))
if not chunk:
break
chunks.append(chunk)
remaining -= len(chunk)
raw = b"".join(chunks)
if len(raw) > MAX_ENVELOPE_BYTES:
raise RuntimeError("Noema verdict envelope exceeded the bounded read limit")
finally:
os.close(fd)
try:
payload = json.loads(raw.decode("utf-8"))
except (UnicodeDecodeError, json.JSONDecodeError) as exc:
raise RuntimeError("Noema verdict envelope is malformed") from exc
if not isinstance(payload, dict):
raise RuntimeError("Noema verdict envelope root must be an object")
return payload


def prepare_verdict(repo: str, number: int, expected_head: str, path: Path) -> int:
"""Run model review and seal its verdict without publishing GitHub evidence."""
expected = _canonical_head(expected_head)
pull_request = gate.fetch_pr(repo, number)
try:
gate.require_expected_head(pull_request, expected)
except RuntimeError:
print("Pull request is closed or stale; Noema verdict preparation skipped.")
return 0
expected_base = _canonical_base(pull_request)
actor = _reviewer_actor()
if pull_request.get("isDraft"):
print("PR is draft; Noema verdict preparation skipped.")
return 0
if gate.existing_noema_review(pull_request, actor):
print("Current head already has a Noema review; verdict preparation skipped.")
return 0

diff, truncated = gate.fetch_diff(repo, number)
changed_files = gate.fetch_changed_files(repo, number)
changed_paths = tuple(file_path for file_path, _status in changed_files)
review_context = gate.build_review_context(repo, number, pull_request, changed_files)
verdict = gate.call_llm(
repo,
number,
pull_request,
diff,
truncated,
expected,
review_context,
changed_paths,
)

_write_envelope(
path,
{
"schema_version": ENVELOPE_SCHEMA_VERSION,
"repository": repo,
"pull_request_number": number,
"expected_head": expected,
"expected_base": expected_base,
"verdict": verdict,
},
)
print(
f"Prepared Noema verdict for {repo}#{number} at head {expected} / base {expected_base}; "
"publication is deferred."
)
return 0


def publish_verdict(repo: str, number: int, expected_head: str, path: Path) -> int:
"""Publish a prepared verdict only with fresh exact-head/base reviewer authority."""
expected = _canonical_head(expected_head)
try:
payload = _read_envelope(path)
required_keys = {
"schema_version",
"repository",
"pull_request_number",
"expected_head",
"expected_base",
"verdict",
}
if set(payload) != required_keys:
raise RuntimeError("Noema verdict envelope fields do not match the trusted schema")
if payload["schema_version"] != ENVELOPE_SCHEMA_VERSION:
raise RuntimeError("Noema verdict envelope schema version is unsupported")
if payload["repository"] != repo or payload["pull_request_number"] != number:
raise RuntimeError("Noema verdict envelope target identity does not match publication")
if payload["expected_head"] != expected:
raise RuntimeError("Noema verdict envelope head does not match publication")
expected_base = str(payload["expected_base"]).strip().lower()
if not re.fullmatch(r"[0-9a-f]{40}", expected_base):
raise RuntimeError("Noema verdict envelope base does not contain a canonical Git SHA")
verdict = payload["verdict"]
if not isinstance(verdict, dict):
raise RuntimeError("Noema verdict envelope verdict must be an object")

current_pull_request = gate.fetch_pr(repo, number)
try:
gate.require_expected_head(current_pull_request, expected)
except RuntimeError:
print("Pull request closed or advanced after model review; prepared verdict was not published.")
return 0
if _canonical_base(current_pull_request) != expected_base:
print("Pull request base advanced after model review; stale prepared verdict was not published.")
return 0
actor = _reviewer_actor(allow_refreshed_app=True)
if current_pull_request.get("isDraft"):
print("PR became draft after model review; prepared verdict was not published.")
return 0
if gate.existing_noema_review(current_pull_request, actor):
print("Current head already has a Noema review; duplicate publication skipped.")
return 0
gate.submit_review(repo, number, current_pull_request, actor, verdict)
return 0
finally:
path.unlink(missing_ok=True)


def parse_args(argv: list[str]) -> argparse.Namespace:
"""Parse the trusted two-phase handoff command line."""
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--repo", required=True)
parser.add_argument("--pr-number", required=True, type=int)
parser.add_argument("--expected-head", required=True)
modes = parser.add_mutually_exclusive_group(required=True)
modes.add_argument("--prepare-verdict-file", type=Path)
modes.add_argument("--publish-verdict-file", type=Path)
return parser.parse_args(argv)


def main(argv: list[str]) -> int:
"""Execute the selected prepare or publication phase."""
args = parse_args(argv)
if args.pr_number <= 0:
raise SystemExit("--pr-number must be positive")
if args.prepare_verdict_file is not None:
return prepare_verdict(args.repo, args.pr_number, args.expected_head, args.prepare_verdict_file)
return publish_verdict(args.repo, args.pr_number, args.expected_head, args.publish_verdict_file)


if __name__ == "__main__":
try:
raise SystemExit(main(sys.argv[1:]))
except RuntimeError as exc:
print(f"::error::{exc}", file=sys.stderr)
raise SystemExit(1) from exc
40 changes: 40 additions & 0 deletions .github/actions/orchestrator-free-sidecar/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Orchestrator free sidecar
description: Provision the immutable contextual-orchestrator orchestrator/free gateway for a model-backed workflow.
inputs:
require_zdr:
description: Require an attested Zero Data Retention route for private or internal content.
required: false
default: "false"
catalog_limit:
description: Maximum discovered route catalog size for the sidecar preflight.
required: false
default: "12"
catalog_account_cap:
description: Maximum routes admitted from one credential account.
required: false
default: "8"
runs:
using: composite
steps:
- name: Checkout immutable central sidecar source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: ContextualWisdomLab/.github
ref: ${{ github.action_ref }}
path: ${{ runner.temp }}/cwl-control-plane
persist-credentials: false
- name: Provision contextual-orchestrator orchestrator/free
shell: bash --noprofile --norc -e -o pipefail {0}
env:
CONTEXTUAL_ORCHESTRATOR_REQUIRE_ZDR: ${{ inputs.require_zdr }}
ORCHESTRATOR_CATALOG_LIMIT: ${{ inputs.catalog_limit }}
ORCHESTRATOR_CATALOG_ACCOUNT_CAP: ${{ inputs.catalog_account_cap }}
run: |
set -euo pipefail
control_plane="${RUNNER_TEMP}/cwl-control-plane"
sidecar="${control_plane}/scripts/ci/contextual_orchestrator_review_sidecar.sh"
if [ ! -f "$sidecar" ] || [ -L "$sidecar" ]; then
echo "::error::Immutable central contextual-orchestrator sidecar source is missing or symlinked."
exit 1
fi
bash "$sidecar"

This file was deleted.

38 changes: 0 additions & 38 deletions .github/workflows/afipc-hourly-review-repair.yml

This file was deleted.

Loading
Loading