Skip to content
Draft
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
1963 commits
Select commit Hold shift + click to select a range
d011031
chore: refresh org SBOM inventory
Oct 27, 2026
a556d1d
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
f4146b9
chore: refresh org SBOM inventory
Oct 27, 2026
e462237
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
6b9020d
chore: refresh org SBOM inventory
Oct 27, 2026
13acf0b
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
73f605c
chore: refresh org SBOM inventory
Oct 27, 2026
91a82ac
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
d3d6612
chore: refresh org SBOM inventory
Oct 27, 2026
d120c80
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
9319185
chore: refresh org SBOM inventory
Oct 27, 2026
eb3fedb
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
4a52e1b
chore: refresh org SBOM inventory
Oct 27, 2026
d189d41
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
e1c5c5a
chore: refresh org SBOM inventory
Oct 27, 2026
4fc58f1
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
8311097
chore: refresh org SBOM inventory
Oct 27, 2026
9f89ea8
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
fcf319d
chore: refresh org SBOM inventory
Oct 27, 2026
a58820d
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
ff05794
chore: refresh org SBOM inventory
Oct 27, 2026
73dbd2e
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
18e06ac
chore: refresh org SBOM inventory
Oct 27, 2026
c385408
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
90860e9
chore: refresh org SBOM inventory
Oct 27, 2026
41f8881
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
039105e
chore: refresh org SBOM inventory
Oct 27, 2026
cd76111
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
5e65e11
chore: refresh org SBOM inventory
Oct 27, 2026
5e1fc4a
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
18c5743
chore: refresh org SBOM inventory
Oct 27, 2026
00a5e70
chore: preserve SBOM inventory publication lineage
Oct 27, 2026
0634d5f
chore: refresh org SBOM inventory
Oct 28, 2026
7d52c38
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
309177f
chore: refresh org SBOM inventory
Oct 28, 2026
0ccb7e5
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
e35e746
chore: refresh org SBOM inventory
Oct 28, 2026
a4cfa59
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
de7961b
chore: refresh org SBOM inventory
Oct 28, 2026
c5a1734
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
b311513
chore: refresh org SBOM inventory
Oct 28, 2026
4edf5d7
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
eb7ebd5
chore: refresh org SBOM inventory
Oct 28, 2026
c5c5a58
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
85061de
chore: refresh org SBOM inventory
Oct 28, 2026
63b258d
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
b51d170
chore: refresh org SBOM inventory
Oct 28, 2026
d4c07f5
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
ddced7c
chore: refresh org SBOM inventory
Oct 28, 2026
0e21688
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
85e5d8f
chore: refresh org SBOM inventory
Oct 28, 2026
ffb858e
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
f740999
chore: refresh org SBOM inventory
Oct 28, 2026
8e24069
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
48e0f4b
chore: refresh org SBOM inventory
Oct 28, 2026
2d667d9
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
8733689
chore: refresh org SBOM inventory
Oct 28, 2026
4d441f7
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
0e6a69e
chore: refresh org SBOM inventory
Oct 28, 2026
e020d42
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
c7920a5
chore: refresh org SBOM inventory
Oct 28, 2026
37f8139
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
95807ee
chore: refresh org SBOM inventory
Oct 28, 2026
69d0028
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
236a60c
chore: refresh org SBOM inventory
Oct 28, 2026
a774715
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
5120a9d
chore: refresh org SBOM inventory
Oct 28, 2026
5c9ba03
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
3e67605
chore: refresh org SBOM inventory
Oct 28, 2026
3ea1588
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
5b4f18f
chore: refresh org SBOM inventory
Oct 28, 2026
9c1d440
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
0efd25a
chore: refresh org SBOM inventory
Oct 28, 2026
37a8b05
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
09f8b6a
chore: refresh org SBOM inventory
Oct 28, 2026
27433b6
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
8deadde
chore: refresh org SBOM inventory
Oct 28, 2026
f8f69b3
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
fb2de9f
chore: refresh org SBOM inventory
Oct 28, 2026
cb9e4ac
chore: preserve SBOM inventory publication lineage
Oct 28, 2026
0139175
chore: refresh org SBOM inventory
Oct 29, 2026
60f16a1
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
677c440
chore: refresh org SBOM inventory
Oct 29, 2026
0c1ff5c
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
e82658e
chore: refresh org SBOM inventory
Oct 29, 2026
eca5604
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
1f6ac84
chore: refresh org SBOM inventory
Oct 29, 2026
1e140f4
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
3bc5999
chore: refresh org SBOM inventory
Oct 29, 2026
723d578
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
7a8676f
chore: refresh org SBOM inventory
Oct 29, 2026
1f64cf7
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
9829417
chore: refresh org SBOM inventory
Oct 29, 2026
542016a
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
dedf260
chore: refresh org SBOM inventory
Oct 29, 2026
d4431b4
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
dd9f33d
chore: refresh org SBOM inventory
Oct 29, 2026
130a0b5
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
b6b03d7
chore: refresh org SBOM inventory
Oct 29, 2026
247876c
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
7386f71
chore: refresh org SBOM inventory
Oct 29, 2026
0250c97
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
e582e21
chore: refresh org SBOM inventory
Oct 29, 2026
0f88697
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
b46ba63
chore: refresh org SBOM inventory
Oct 29, 2026
af2c983
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
febad8b
chore: refresh org SBOM inventory
Oct 29, 2026
55c40a0
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
5c7adf3
chore: refresh org SBOM inventory
Oct 29, 2026
cc0ad1c
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
c321882
chore: refresh org SBOM inventory
Oct 29, 2026
e23b3bb
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
bb25a72
chore: refresh org SBOM inventory
Oct 29, 2026
b526815
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
2dacd71
chore: refresh org SBOM inventory
Oct 29, 2026
b3f0a1c
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
2f74a26
chore: refresh org SBOM inventory
Oct 29, 2026
85010ee
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
c1dced7
chore: refresh org SBOM inventory
Oct 29, 2026
0abfd55
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
bdd225e
chore: refresh org SBOM inventory
Oct 29, 2026
c0cb837
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
1404889
chore: refresh org SBOM inventory
Oct 29, 2026
52e3801
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
1a578b8
chore: refresh org SBOM inventory
Oct 29, 2026
1539432
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
604a307
chore: refresh org SBOM inventory
Oct 29, 2026
0d75871
chore: preserve SBOM inventory publication lineage
Oct 29, 2026
ad9a359
chore: refresh org SBOM inventory
Oct 30, 2026
b3eabf6
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
bfc6679
chore: refresh org SBOM inventory
Oct 30, 2026
9137665
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
8806db0
chore: refresh org SBOM inventory
Oct 30, 2026
87ebed9
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
64911f4
chore: refresh org SBOM inventory
Oct 30, 2026
ba12217
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
4e95cfb
chore: refresh org SBOM inventory
Oct 30, 2026
7861792
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
9c7c439
chore: refresh org SBOM inventory
Oct 30, 2026
8a6f6c2
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
d8c6ef7
chore: refresh org SBOM inventory
Oct 30, 2026
dcb0302
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
6c5c71f
chore: refresh org SBOM inventory
Oct 30, 2026
2578c18
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
5c9e8ff
chore: refresh org SBOM inventory
Oct 30, 2026
b8bbe6a
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
258796d
chore: refresh org SBOM inventory
Oct 30, 2026
9640423
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
98901d5
chore: refresh org SBOM inventory
Oct 30, 2026
9ac0074
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
290f6f7
chore: refresh org SBOM inventory
Oct 30, 2026
747ffab
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
8ce8aa5
chore: refresh org SBOM inventory
Oct 30, 2026
5c98ed4
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
9c60d11
chore: refresh org SBOM inventory
Oct 30, 2026
858a92d
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
a50b520
chore: refresh org SBOM inventory
Oct 30, 2026
6b57004
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
eb5e3fc
chore: refresh org SBOM inventory
Oct 30, 2026
607894d
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
0c53ce3
chore: refresh org SBOM inventory
Oct 30, 2026
106ad6a
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
8c0d2c6
chore: refresh org SBOM inventory
Oct 30, 2026
e5abeb0
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
bb5acb0
chore: refresh org SBOM inventory
Oct 30, 2026
afb4d0f
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
a52d1f5
chore: refresh org SBOM inventory
Oct 30, 2026
9827357
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
0dcab2f
chore: refresh org SBOM inventory
Oct 30, 2026
ad7c232
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
c1b93b5
chore: refresh org SBOM inventory
Oct 30, 2026
677255f
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
cc27167
chore: refresh org SBOM inventory
Oct 30, 2026
f7ac352
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
1117b40
chore: refresh org SBOM inventory
Oct 30, 2026
84064a4
chore: preserve SBOM inventory publication lineage
Oct 30, 2026
d4e5fcd
chore: refresh org SBOM inventory
Oct 31, 2026
990ee28
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
3fc3187
chore: refresh org SBOM inventory
Oct 31, 2026
e8d43ce
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
3e40f5f
chore: refresh org SBOM inventory
Oct 31, 2026
13ac019
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
88b084b
chore: refresh org SBOM inventory
Oct 31, 2026
35f9a56
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
3b4b19a
chore: refresh org SBOM inventory
Oct 31, 2026
a3845bb
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
3917a84
chore: refresh org SBOM inventory
Oct 31, 2026
06f98fd
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
dbc466d
chore: refresh org SBOM inventory
Oct 31, 2026
4b0efe3
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
537488f
chore: refresh org SBOM inventory
Oct 31, 2026
c84ce08
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
9815b29
chore: refresh org SBOM inventory
Oct 31, 2026
2bba545
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
9cbee53
chore: refresh org SBOM inventory
Oct 31, 2026
9378a8a
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
87f5188
chore: refresh org SBOM inventory
Oct 31, 2026
86a5c17
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
bb3595c
chore: refresh org SBOM inventory
Oct 31, 2026
e40f018
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
0ec94f2
chore: refresh org SBOM inventory
Oct 31, 2026
e40f304
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
e9812c3
chore: refresh org SBOM inventory
Oct 31, 2026
cafb1f1
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
e9de7a0
chore: refresh org SBOM inventory
Oct 31, 2026
e9134ac
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
5fe7566
chore: refresh org SBOM inventory
Oct 31, 2026
25face2
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
63aa9c5
chore: refresh org SBOM inventory
Oct 31, 2026
ed137fa
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
3c5c96a
chore: refresh org SBOM inventory
Oct 31, 2026
a48c4b9
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
ab376f2
chore: refresh org SBOM inventory
Oct 31, 2026
ee2c194
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
79fc976
chore: refresh org SBOM inventory
Oct 31, 2026
4097555
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
d351022
chore: refresh org SBOM inventory
Oct 31, 2026
6be5fe4
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
36e2d4d
chore: refresh org SBOM inventory
Oct 31, 2026
41bd757
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
688fd9d
chore: refresh org SBOM inventory
Oct 31, 2026
b6c8688
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
bae1e24
chore: refresh org SBOM inventory
Oct 31, 2026
a1dfb26
chore: preserve SBOM inventory publication lineage
Oct 31, 2026
ee9c2e7
chore: refresh org SBOM inventory
Nov 1, 2026
1e154ad
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
eead80e
chore: refresh org SBOM inventory
Nov 1, 2026
b1e8775
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
444b3a6
chore: refresh org SBOM inventory
Nov 1, 2026
3a1446a
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
d3644f1
chore: refresh org SBOM inventory
Nov 1, 2026
6a69fe2
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
2b74e9c
chore: refresh org SBOM inventory
Nov 1, 2026
8e30a9c
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
886bf10
chore: refresh org SBOM inventory
Nov 1, 2026
26240fe
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
9c13188
chore: refresh org SBOM inventory
Nov 1, 2026
50232c8
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
99a30fc
chore: refresh org SBOM inventory
Nov 1, 2026
02c72bd
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
353d583
chore: refresh org SBOM inventory
Nov 1, 2026
76959d2
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
869dfde
chore: refresh org SBOM inventory
Nov 1, 2026
901e034
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
d2f59e6
chore: refresh org SBOM inventory
Nov 1, 2026
3856383
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
1e587f2
chore: refresh org SBOM inventory
Nov 1, 2026
82fcd8f
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
a6da718
chore: refresh org SBOM inventory
Nov 1, 2026
e423cca
chore: preserve SBOM inventory publication lineage
Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 53 additions & 10 deletions .github/actions/noema-review/two_phase.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,16 +167,20 @@ def prepare_verdict(repo: str, number: int, expected_head: str, path: Path) -> i
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,
)
try:
verdict = gate.call_llm(
repo,
number,
pull_request,
diff,
truncated,
expected,
review_context,
changed_paths,
)
except gate.NoemaTransportError as exc:
_emit_transport_capacity_outputs(exc, expected_head=expected)
raise

_write_envelope(
path,
Expand All @@ -196,6 +200,45 @@ def prepare_verdict(repo: str, number: int, expected_head: str, path: Path) -> i
return 0


def _emit_transport_capacity_outputs(
exc: gate.NoemaTransportError,
*,
expected_head: str,
) -> None:
"""Publish typed capacity evidence for the workflow's bounded re-dispatch step."""
retry_attempt = gate.current_transport_retry_attempt()
delay = gate.transport_redispatch_delay_seconds(
transport_retry_attempt=retry_attempt,
head_sha=expected_head,
retry_after_seconds=exc.retry_after_seconds,
)
eligible = bool(exc.capacity_unavailable and delay is not None)
outputs = {
"transport_capacity_unavailable": "true" if exc.capacity_unavailable else "false",
"transport_retry_eligible": "true" if eligible else "false",
"prepared": "false",
}
if type(exc.http_status) is int:
outputs["transport_http_status"] = str(exc.http_status)
if type(exc.provider_attempt_count) is int:
outputs["provider_attempt_count"] = str(exc.provider_attempt_count)
if delay is not None:
outputs["transport_retry_delay_seconds"] = str(delay)
outputs["transport_retry_next_attempt"] = str(retry_attempt + 1)
gate.append_github_output(outputs)
if eligible:
print(
"::notice::Noema provider capacity unavailable after gateway failover; "
f"bounded continuation re-dispatch is eligible in {delay}s "
f"(attempt {retry_attempt + 1}/{gate.MAX_TRANSPORT_REDISPATCH_ATTEMPTS})."
)
elif exc.capacity_unavailable:
print(
"::error::Noema provider capacity unavailable after gateway failover; "
"automatic re-dispatch budget is exhausted. Review remains required."
)


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)
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/orchestrator-free-sidecar/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ inputs:
required: false
default: "false"
catalog_limit:
description: Maximum discovered route catalog size for the sidecar preflight.
description: Maximum discovered route catalog size for the sidecar preflight (a candidate list probed lazily to a readiness target, ADR-0029).
required: false
default: "12"
default: "24"
catalog_account_cap:
description: Maximum routes admitted from one credential account.
required: false
Expand Down
55 changes: 55 additions & 0 deletions .github/workflows/actions-queue-health.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: GitHub Actions queue health

on:
schedule:
- cron: "7 * * * *"

concurrency:
group: github-actions-queue-health
cancel-in-progress: false

permissions:
contents: read
actions: read

jobs:
collect:
name: Collect exact-head queue evidence
runs-on: ubuntu-24.04
timeout-minutes: 30
permissions:
contents: read
actions: read
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
with:
egress-policy: audit

- name: Checkout trusted queue-health source
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- name: Collect read-only repository and runner evidence
env:
GH_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN || secrets.OPENCODE_APPROVE_TOKEN }}
run: |
if [ -z "${GH_TOKEN:-}" ]; then
echo "::error::PR_REVIEW_MERGE_TOKEN or OPENCODE_APPROVE_TOKEN is required for cross-repository queue reads."
exit 1
fi
echo "::add-mask::$GH_TOKEN"
python3 scripts/ci/actions_queue_health.py \
--allowlist config/actions_queue_health_repositories.json \
--output-json "$RUNNER_TEMP/actions-queue-health.json" \
--output-html "$RUNNER_TEMP/actions-queue-health.html"

- name: Upload queue-health evidence
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: github-actions-queue-health-${{ github.run_id }}
path: |
${{ runner.temp }}/actions-queue-health.json
${{ runner.temp }}/actions-queue-health.html
if-no-files-found: error
17 changes: 14 additions & 3 deletions .github/workflows/agent-mention-noema-dispatch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,26 @@ on:
repository_dispatch:
types: [agent-mention-noema]

concurrency:
# Workflow-level admission, for the same reason strix.yml, noema-review.yml,
# opencode-review.yml and opencode-review-dispatch.yml carry theirs at this level:
# a job-level group is never evaluated while the whole run waits behind the
# organization job ceiling, so a superseded mention keeps its queue slot until a
# runner frees up and only then cancels. At workflow level the older run is
# coalesced while both are still queued, which is where the slot is actually held.
# This workflow has a single job, so the group lives here and nowhere else --
# every workflow in this repository that carries a group at both levels
# (strix.yml, opencode-review-dispatch.yml) gives the two levels DIFFERENT names,
# because a job requesting the group its own run already holds would wait on itself.
group: agent-mention-noema-${{ github.event.client_payload.target_repository }}-${{ github.event.client_payload.pr_number || github.run_id }}
cancel-in-progress: true

permissions:
contents: read

jobs:
validate-and-forward:
if: github.repository == 'ContextualWisdomLab/.github'
concurrency:
group: agent-mention-noema-${{ github.event.client_payload.target_repository }}-${{ github.event.client_payload.pr_number || github.run_id }}
cancel-in-progress: true
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
Expand Down
17 changes: 14 additions & 3 deletions .github/workflows/agent-mention-opencode-dispatch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,26 @@ on:
repository_dispatch:
types: [agent-mention-opencode]

concurrency:
# Workflow-level admission, for the same reason strix.yml, noema-review.yml,
# opencode-review.yml and opencode-review-dispatch.yml carry theirs at this level:
# a job-level group is never evaluated while the whole run waits behind the
# organization job ceiling, so a superseded mention keeps its queue slot until a
# runner frees up and only then cancels. At workflow level the older run is
# coalesced while both are still queued, which is where the slot is actually held.
# This workflow has a single job, so the group lives here and nowhere else --
# every workflow in this repository that carries a group at both levels
# (strix.yml, opencode-review-dispatch.yml) gives the two levels DIFFERENT names,
# because a job requesting the group its own run already holds would wait on itself.
group: agent-mention-opencode-${{ github.event.client_payload.target_repository }}-${{ github.event.client_payload.pr_number || github.run_id }}
cancel-in-progress: true

permissions:
contents: read

jobs:
validate-and-forward:
if: github.repository == 'ContextualWisdomLab/.github'
concurrency:
group: agent-mention-opencode-${{ github.event.client_payload.target_repository }}-${{ github.event.client_payload.pr_number || github.run_id }}
cancel-in-progress: true
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
Expand Down
57 changes: 52 additions & 5 deletions .github/workflows/agent-review-runtime-quality-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,31 @@ on:
- "tests/test_noema_two_phase_handoff.py"
- "tests/test_noema_refreshed_app_identity.py"
- "tests/test_noema_token_lifetime_stale_run_contract.py"
- "scripts/ci/noema_review_document.py"
- "scripts/ci/noema_hwp_mcp_reader.mjs"
- "scripts/ci/noema-document-reader/package.json"
- "scripts/ci/noema-document-reader/package-lock.json"
- "tests/test_noema_document_review_context.py"
- "docs/doctoring/noema-review-token-lifetime.md"
- "docs/product-technical-gap-baseline.md"
- ".github/workflows/opencode-review-dispatch.yml"
- "scripts/ci/ensure_rust_llvm19.sh"
- "tests/test_opencode_rust_coverage_toolchain_contract.py"
- "scripts/ci/materialize_base_javascript_packages.py"
- "tests/test_javascript_materializer_docstrings.py"
- "tests/test_pr_review_autofix_nvidia_nim_contract.py"
- "docs/doctoring/opencode-rust-coverage-runtime-boundary.md"
- ".github/workflows/strix.yml"
- "docs/doctoring/strix-legal-git-paths.md"
- "docs/doctoring/strix-model-behavior-error.md"
- "docs/doctoring/strix-quality-timeout-fixtures.md"
- "docs/doctoring/strix-evidence-binding-2159-2168.md"
- "scripts/ci/strix_quick_gate.sh"
- "scripts/ci/strix_evidence_binding.py"
- "scripts/ci/test_strix_quick_gate.sh"
- "tests/test_docs_only_pr_runner_admission.py"
- "tests/test_strix_changed_path_policy.py"
- "tests/test_strix_evidence_binding.py"
- "tests/test_strix_model_behavior_error.py"
- "tests/test_strix_nvidia_nim_not_found_fallback.py"
- "tests/test_strix_workflow_dependency_hashes.py"
Expand Down Expand Up @@ -101,6 +111,8 @@ on:
- "docs/doctoring/exact-artifact-sbom-quality-runner-consolidation-20260903.md"
- "CHANGELOG.d/20260903-exact-artifact-quality-runner-consolidation.md"
- "requirements-opencode-review-ci-hashes.txt"
- "requirements-noema-document-ci.txt"
- "requirements-noema-document-ci-hashes.txt"

# PR validation only: a new head cancels only an older run of this workflow
# for the same repository and pull request.
Expand Down Expand Up @@ -136,7 +148,9 @@ jobs:
with:
python-version: "3.14"
cache: pip
cache-dependency-path: requirements-opencode-review-ci-hashes.txt
cache-dependency-path: |
requirements-opencode-review-ci-hashes.txt
requirements-noema-document-ci-hashes.txt

- name: Select affected contract suites
id: affected_suites
Expand Down Expand Up @@ -179,23 +193,33 @@ jobs:
tests/test_noema_two_phase_handoff.py|\
tests/test_noema_refreshed_app_identity.py|\
tests/test_noema_token_lifetime_stale_run_contract.py|\
scripts/ci/noema_review_document.py|\
scripts/ci/noema_hwp_mcp_reader.mjs|\
scripts/ci/noema-document-reader/package.json|\
scripts/ci/noema-document-reader/package-lock.json|\
tests/test_noema_document_review_context.py|\
docs/doctoring/noema-review-token-lifetime.md)
noema_suite=true
;;
.github/workflows/opencode-review-dispatch.yml|\
scripts/ci/ensure_rust_llvm19.sh|\
tests/test_opencode_rust_coverage_toolchain_contract.py|\
scripts/ci/materialize_base_javascript_packages.py|\
tests/test_javascript_materializer_docstrings.py|\
docs/doctoring/opencode-rust-coverage-runtime-boundary.md)
opencode_suite=true
;;
.github/workflows/strix.yml|\
docs/doctoring/strix-legal-git-paths.md|\
docs/doctoring/strix-model-behavior-error.md|\
docs/doctoring/strix-quality-timeout-fixtures.md|\
docs/doctoring/strix-evidence-binding-2159-2168.md|\
scripts/ci/strix_quick_gate.sh|\
scripts/ci/strix_evidence_binding.py|\
scripts/ci/test_strix_quick_gate.sh|\
tests/test_docs_only_pr_runner_admission.py|\
tests/test_strix_changed_path_policy.py|\
tests/test_strix_evidence_binding.py|\
tests/test_strix_model_behavior_error.py|\
tests/test_strix_nvidia_nim_not_found_fallback.py|\
tests/test_strix_workflow_dependency_hashes.py|\
Expand All @@ -206,6 +230,10 @@ jobs:
noema_suite=true
opencode_suite=true
;;
requirements-noema-document-ci.txt|\
requirements-noema-document-ci-hashes.txt)
noema_suite=true
;;
.github/workflows/pr-review-merge-scheduler.yml)
queue_suite=true
review_repair_suite=true
Expand Down Expand Up @@ -321,7 +349,13 @@ jobs:
if: steps.affected_suites.outputs.noema == 'true' || steps.affected_suites.outputs.opencode == 'true' || steps.affected_suites.outputs.review_repair == 'true' || steps.affected_suites.outputs.exact_artifact == 'true'
run: >-
python -m pip install --disable-pip-version-check --require-hashes
-r requirements-opencode-review-ci-hashes.txt
-r requirements-opencode-review-ci-hashes.txt -r requirements-noema-document-ci-hashes.txt

- name: Install exact Noema document dependencies
if: steps.affected_suites.outputs.noema == 'true'
run: >-
python -m pip install --disable-pip-version-check --require-hashes --no-deps
-r requirements-noema-document-ci-hashes.txt

- name: Verify Noema token-lifetime contracts
if: steps.affected_suites.outputs.noema == 'true'
Expand All @@ -331,13 +365,15 @@ jobs:
tests/test_noema_reviewer_token_lifetime.py \
tests/test_noema_two_phase_handoff.py \
tests/test_noema_refreshed_app_identity.py \
tests/test_noema_token_lifetime_stale_run_contract.py
tests/test_noema_token_lifetime_stale_run_contract.py \
tests/test_noema_document_review_context.py
python -m compileall -q \
.github/actions/noema-review/two_phase.py \
tests/test_noema_reviewer_token_lifetime.py \
tests/test_noema_two_phase_handoff.py \
tests/test_noema_refreshed_app_identity.py \
tests/test_noema_token_lifetime_stale_run_contract.py
tests/test_noema_token_lifetime_stale_run_contract.py \
tests/test_noema_document_review_context.py

- name: Verify OpenCode Rust coverage toolchain contract
if: steps.affected_suites.outputs.opencode == 'true'
Expand All @@ -346,6 +382,13 @@ jobs:
python -m pytest -q tests/test_opencode_rust_coverage_toolchain_contract.py
python -m compileall -q tests/test_opencode_rust_coverage_toolchain_contract.py

- name: Verify JavaScript materializer documentation contract
if: steps.affected_suites.outputs.opencode == 'true'
run: |
set -euo pipefail
python -m pytest -q tests/test_javascript_materializer_docstrings.py
python -m compileall -q scripts/ci/materialize_base_javascript_packages.py tests/test_javascript_materializer_docstrings.py

- name: Verify exact-head path policy and syntax
if: steps.affected_suites.outputs.strix == 'true'
env:
Expand All @@ -357,13 +400,16 @@ jobs:
python -m pytest -q \
tests/test_docs_only_pr_runner_admission.py \
tests/test_strix_changed_path_policy.py \
tests/test_strix_evidence_binding.py \
tests/test_strix_model_behavior_error.py \
tests/test_strix_nvidia_nim_not_found_fallback.py \
tests/test_strix_workflow_dependency_hashes.py \
tests/test_strix_quality_timeout_fixture_budget.py
bash scripts/ci/test_strix_quick_gate.sh
python -m compileall -q \
scripts/ci/strix_evidence_binding.py \
tests/test_strix_changed_path_policy.py \
tests/test_strix_evidence_binding.py \
tests/test_strix_model_behavior_error.py \
tests/test_strix_nvidia_nim_not_found_fallback.py \
tests/test_strix_workflow_dependency_hashes.py \
Expand Down Expand Up @@ -425,7 +471,8 @@ jobs:
run: |
python -m coverage run \
--branch \
-m pytest --import-mode=importlib tests/test_organization_commercial_readiness_loop*.py -q
-m pytest --import-mode=importlib \
tests/test_organization_commercial_readiness_loop*.py -q
python -m coverage report \
--include='scripts/ci/organization_commercial_readiness_loop.py' \
--show-missing \
Expand Down
Loading
Loading