You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[ci-maintainer] Stale 'Test' workflow registration (ID 330065644) still active after .github/workflows/test.yml was deleted from main #1411
The Actions workflow registration Test (workflow ID 330065644, path .github/workflows/test.yml) is still in state active, but test.yml no longer exists on main. Current workflows directory on main: architecture-submission.yml, check-links.yml, ci.yml, codeql.yml, create-milestones.yml, deploy-gh-pages.yml, import-architectures.yml, pr-queue-hygiene.yml, refresh-community-people.yml, refresh-radar-reports.yml — no test.yml.
Evidence
gh api repos/cncf/endusers/actions/workflows/330065644
=> {"name":"Test","path":".github/workflows/test.yml","state":"active"}
A stale active registration for a deleted file leaves a ghost entry in the Actions UI and can confuse workflow_dispatch/badge references.
Recommendation
Disable the registration (needs-human: requires Actions write permission on the repo — the contributor-tier GitHub App token used by hive agents cannot disable workflows):
gh api -X PUT repos/cncf/endusers/actions/workflows/330065644/disable
or via the Actions UI: select the orphaned "Test" workflow → "…" → Disable workflow.
Verify afterwards:
gh api repos/cncf/endusers/actions/workflows/330065644 --jq .state
# expected: disabled_manually
Filed by ci-maintainer agent (ACMM L4/L5 — hold-gated mode)
No code change can fix this: the stale registration is repo Actions state, not a file. Still active as of now; a maintainer must run gh api -X PUT repos/cncf/endusers/actions/workflows/330065644/disable (contributor agents are blocked from mutating gh api calls).
Folded finding. This was filed as a separate issue, but 3 open agent-filed issues already cite ci.yml, so it was folded into the oldest of them instead of opening another. Treat this issue as the tracker for that component: prefer one structural fix that covers every folded variant over a PR per variant.
[quality] No test pins the @swc/core-linux-x64-gnu non-optional devDependency that closes CI incident #1426
Finding
@swc/core-linux-x64-gnu is declared as a regular, non-optional devDependency in package.json, pinned to the same exact version as @swc/core (1.16.13 on eff33b5). That declaration is load-bearing, and nothing in the 203-file test suite asserts it.
It landed in dd95946 ("ci: add @swc/core-linux-x64-gnu as explicit devDependency", #1428) to close the repository-side half of CI incident #1426. The mechanism is npm/cli#4828: @swc/core declares every platform binding as an optional dependency, and npm ci against a partially-populated shared ~/.npm cache silently skips an optional package. @swc/core then installs with no ./swc.linux-x64-gnu.node beside it and throws at load. Declaring the binding as a required dependency makes it unskippable and integrity-checked, so a bad install fails loudly at npm ci instead of quietly at test time.
That transpiler is not incidental. tests/tools/jsx-hooks.mjs runs every src/ React module through @swc/core, so when the binding does not load, ~65 JSX-importing tests fail at once and the required Validate repository job dies before asserting anything. The same binding builds the site, so the failure reaches deploy-gh-pages.yml too.
Verified blast radius
The ERR_SWC_NATIVE_CACHE signature has already taken down both lanes, and the failure/recovery split is exactly runner-fleet-shaped:
Error: Failed to load native binding
Error: Cannot find module './swc.linux-x64-gnu.node'
Error: SWC native addon: validate cache root /home/runner/.cache: cache root has a parent
writable by another user without trusted sticky protection.
Why the guard is needed now
Two edits re-open #1426 while every check in the repository stays green until a run happens to land on the self-hosted fleet:
Dropping the pin. It reads like a redundant restatement of an optionalDependency that @swc/core already declares. That is precisely how it gets tidied away.
Skewing the versions.@swc/core refuses a binding built for a different version, so the two specifiers must move in lockstep. Dependabot's dev-dependencies group happens to move both today — chore(deps): Bump the dev-dependencies group with 4 updates #1451 carries 1.16.13 -> 1.16.18 for each — but grouping is a cadence convenience, not a guarantee. An ungrouped security bump of @swc/core, or a local npm run update:pkgs, moves one and leaves the other, and the resulting version-mismatch at load looks nothing like a dependency edit.
This is the same class the repository already writes contract tests for: a one-token change to something no test reads (tests/e2e-coverage-gate.test.mjs, tests/data-gate-contract.test.mjs, tests/refresh-script-wiring.test.mjs).
Recommendation
Add tests/swc-native-binding-contract.test.mjs, pinning the three properties such an edit would break, read from package.json and package-lock.json rather than from a registry:
@swc/core-linux-x64-gnu is declared as a devDependency, at an exact version (no range), equal to @swc/core's.
Fixture cases prove each check actually goes red on the edit it exists to catch, per the repository's "a guard nobody has seen go red is indistinguishable from one that always passes" convention.
Raising both versions in lockstep keeps the guard green — verified against #1451's head (1.16.18/1.16.18, lock not optional).
Scope is deliberately linux-x64-gnu only: every job in .github/workflows declares runs-on: ubuntu-24.04. Other platforms stay optional so contributors on macOS or arm64 are not forced to install a linux binary.
npm run test:unit:coverage:check (the exact gate the required Validate repository job runs) → exit 0; src files 100.00% lines / 100.00% regions unchanged, new file 100.00%/100.00%, and aggregate region coverage rises 96.13% → 96.15%.
npx prettier --check on the new file → clean.
No change to package.json or package-lock.json — this issue adds a guard over the state #1428 already established, and does not relitigate it.
Priority
Impact: high — the unguarded invariant is the only repository-side defence against an incident that has already failed main's deploy and all four CI jobs on a PR.
Effort: low — one new test file, no production or manifest change.
Folded finding. This was filed as a separate issue, but 3 open agent-filed issues already cite ci.yml, so it was folded into the oldest of them instead of opening another. Treat this issue as the tracker for that component: prefer one structural fix that covers every folded variant over a PR per variant.
[quality] unit coverage gate's measurement record is stale and contradicts the residual note it cites
Finding
tests/coverage-gate-thresholds.test.mjs is the unit lane's counterpart to tests/e2e-coverage-gate.test.mjs: it pins the --check* flags in package.json's test:unit:coverage:check to the coverage the suite already
achieves, and carries a prose record of the measurement those floors were
argued from. That record has gone stale, and one clause of it now contradicts
the file it cites.
Measured at maineff33b5 with TZ=UTC node tests/tools/coverage-report.mjs,
twice — on node v22.23.3 (the major ci.yml pins) and on node v26.10.0 —
with both runs agreeing to the region:
row
recorded in the file
measured at eff33b5
all files
99.65% lines / 96.14% regions (58948/59153 lines, 9515/9897 regions)
99.67% lines / 96.14% regions (65628/65843 lines, 10511/10933 regions)
100.00% lines / 99.63% regions (5352/5352 lines, 1870/1877 regions)
100.00% lines / 99.64% regions (5717/5717 lines, 1947/1954 regions)
The node version the record names as "the major ci.yml pins" is v22.21.1; 22.23.3 is the current 22.x, and it is also the version tests/e2e-coverage-gate.test.mjs already cites in its own table.
No floor moves. Every threshold in FLOORS still clears its measurement
(99 ≤ 99.67, 96 ≤ 96.14, 99 ≤ 99.64, 98 ≤ 98.57, and the four 100s are
exact), and npm run test:unit:coverage:check exits 0 at eff33b5. This is a
record that no longer describes the suite, not a gate that has slipped.
The contradiction
The comment above --check-harness-file-regions says:
98.57% is e2e-coverage-report.mjs's ceiling, not a backlog: its 6
uncovered regions are the defensive fallbacks the note at the top of the file
lists as unreachable (#1253 …)
The note it points at, tests/tools/e2e-coverage-report.mjs:60-61, says:
Together they are 7 regions, which caps this file at 98.57% regions;
tests/coverage-gate-thresholds.test.mjs records that ceiling beside --check-harness-file-regions so the floor is never set above it.
Seven is correct: the harness row measures 1947/1954, and the per-file row for tests/tools/e2e-coverage-report.mjs lists six lines (243, 634, 803, 814,
1038, 1117) carrying seven regions — line 243's map.resolvedSources ?? flattened.sources ?? [] is the two-region chain the note describes.
That matters beyond the digit. The note hands this file a job — "records that
ceiling … so the floor is never set above it" — and nothing executes it. The
relationship between the floor and the ceiling is prose on both sides, which is
exactly the drift-by-omission class tests/docs-threshold-parity.test.mjs
closes between the gate and the contributor docs, and tests/audit-gate.test.mjs closes between the allowlist and SECURITY.md. The
stale 6 is the first instance of it landing here, and it landed silently.
Recommendation
One change to one file, tests/coverage-gate-thresholds.test.mjs:
Refresh the three measured rows and the node versions to the numbers
above, and update --check's "next whole percent (99.65)" aside to 99.67.
Stop restating the residual count in prose. Read the count and the
ceiling back out of tests/tools/e2e-coverage-report.mjs's note and
assert --check-harness-file-regions <= Math.floor(ceiling), so the
sentence the floor is argued from can no longer drift from the floor —
and so a rewrite that deletes the note fails here by name instead of
leaving the floor with nothing behind it.
Both halves belong in one commit: the refreshed counts are only trustworthy
once something re-derives the one number that had already gone wrong.
Priority
Impact: medium — no gate is loose today, but the record is the only argument
for why --check-harness-file-regions stops at 98, and a contributor
reconciling "6 unreachable regions" against a 1947/1954 harness row has
nothing that tells them which number to trust.
Effort: low — comment refresh plus one assertion; no floor changes, no
production code.
Disabled the orphaned registration as recommended:
$ gh api -X PUT repos/cncf/endusers/actions/workflows/330065644/disable
$ gh api repos/cncf/endusers/actions/workflows/330065644 --jq .state
disabled_manually
Activity
mrbobbytables commentedon Oct 13, 2026
No code change can fix this: the stale registration is repo Actions state, not a file. Still
activeas of now; a maintainer must rungh api -X PUT repos/cncf/endusers/actions/workflows/330065644/disable(contributor agents are blocked from mutating gh api calls).— hive: backend=copilot model=claude-sonnet-5.5
🐝 Hive Agent:
contributor| SHA:unknownhivecommons-hive commentedon Oct 13, 2026
What to reply
/hive approve: go with the recommendation/hive decision <your instructions>: go ahead, following your instructions/hive help: show these againIf this issue is waiting only for reporter confirmation after a merged fix, the reporter or a maintainer can reply
/fixedinstead.Only a maintainer with write access can un-park; everything else is ignored. Full command reference: https://github.com/hivecommons/hive/blob/v5/src/docs/maintainer-commands.md.
hivecommons-hive commentedon Oct 14, 2026
Folded finding. This was filed as a separate issue, but 3 open agent-filed issues already cite
ci.yml, so it was folded into the oldest of them instead of opening another. Treat this issue as the tracker for that component: prefer one structural fix that covers every folded variant over a PR per variant.[quality] No test pins the @swc/core-linux-x64-gnu non-optional devDependency that closes CI incident #1426
Finding
@swc/core-linux-x64-gnuis declared as a regular, non-optionaldevDependencyinpackage.json, pinned to the same exact version as@swc/core(1.16.13oneff33b5). That declaration is load-bearing, and nothing in the 203-file test suite asserts it.It landed in dd95946 ("ci: add
@swc/core-linux-x64-gnuas explicit devDependency", #1428) to close the repository-side half of CI incident #1426. The mechanism is npm/cli#4828:@swc/coredeclares every platform binding as an optional dependency, andnpm ciagainst a partially-populated shared~/.npmcache silently skips an optional package.@swc/corethen installs with no./swc.linux-x64-gnu.nodebeside it and throws at load. Declaring the binding as a required dependency makes it unskippable and integrity-checked, so a bad install fails loudly atnpm ciinstead of quietly at test time.That transpiler is not incidental.
tests/tools/jsx-hooks.mjsruns everysrc/React module through@swc/core, so when the binding does not load, ~65 JSX-importing tests fail at once and the requiredValidate repositoryjob dies before asserting anything. The same binding builds the site, so the failure reachesdeploy-gh-pages.ymltoo.Verified blast radius
The
ERR_SWC_NATIVE_CACHEsignature has already taken down both lanes, and the failure/recovery split is exactly runner-fleet-shaped:main@3866f251(deploy)buildcncf-c-ubuntu-24.04-...-8cb84-runner-ttp5t...-47zj7,-q4bss,-x4p7m,-gn7rmmain@eff33b5(deploy)main(ci)Why the guard is needed now
Two edits re-open #1426 while every check in the repository stays green until a run happens to land on the self-hosted fleet:
optionalDependencythat@swc/corealready declares. That is precisely how it gets tidied away.@swc/corerefuses a binding built for a different version, so the two specifiers must move in lockstep. Dependabot'sdev-dependenciesgroup happens to move both today — chore(deps): Bump the dev-dependencies group with 4 updates #1451 carries1.16.13 -> 1.16.18for each — but grouping is a cadence convenience, not a guarantee. An ungrouped security bump of@swc/core, or a localnpm run update:pkgs, moves one and leaves the other, and the resulting version-mismatch at load looks nothing like a dependency edit.This is the same class the repository already writes contract tests for: a one-token change to something no test reads (
tests/e2e-coverage-gate.test.mjs,tests/data-gate-contract.test.mjs,tests/refresh-script-wiring.test.mjs).Recommendation
Add
tests/swc-native-binding-contract.test.mjs, pinning the three properties such an edit would break, read frompackage.jsonandpackage-lock.jsonrather than from a registry:@swc/core-linux-x64-gnuis declared as adevDependency, at an exact version (no range), equal to@swc/core's.node_modules/@swc/core-linux-x64-gnuis not markedoptional: true(the marker [BUG] Platform-specific optional dependencies not being included inpackage-lock.jsonwhen reinstalling withnode_modulespresent npm/cli#4828 acts on; npm'sdevOptional: truehere is the expected, non-skippable state), is at the pinned version, and the lockfile's rootdevDependenciesrecord agrees.Raising both versions in lockstep keeps the guard green — verified against #1451's head (
1.16.18/1.16.18, lock not optional).Scope is deliberately
linux-x64-gnuonly: every job in.github/workflowsdeclaresruns-on: ubuntu-24.04. Other platforms stay optional so contributors on macOS or arm64 are not forced to install a linux binary.Verification performed
At
eff33b5, node v26.10.0,TZ=UTC:node --test tests/swc-native-binding-contract.test.mjs→ 12 pass, 0 fail.npm run test:unit:coverage:check(the exact gate the requiredValidate repositoryjob runs) → exit 0;src files100.00% lines / 100.00% regions unchanged, new file 100.00%/100.00%, and aggregate region coverage rises 96.13% → 96.15%.npx prettier --checkon the new file → clean.No change to
package.jsonorpackage-lock.json— this issue adds a guard over the state #1428 already established, and does not relitigate it.Priority
main's deploy and all four CI jobs on a PR.🐝 Hive Agent:
quality| Instance:hosted-available-lke648397-260827-5n31| SHA:eff33b5— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88
hivecommons-hive commentedon Oct 14, 2026
Folded finding. This was filed as a separate issue, but 3 open agent-filed issues already cite
ci.yml, so it was folded into the oldest of them instead of opening another. Treat this issue as the tracker for that component: prefer one structural fix that covers every folded variant over a PR per variant.[quality] unit coverage gate's measurement record is stale and contradicts the residual note it cites
Finding
tests/coverage-gate-thresholds.test.mjsis the unit lane's counterpart totests/e2e-coverage-gate.test.mjs: it pins the--check*flags inpackage.json'stest:unit:coverage:checkto the coverage the suite alreadyachieves, and carries a prose record of the measurement those floors were
argued from. That record has gone stale, and one clause of it now contradicts
the file it cites.
Measured at
maineff33b5withTZ=UTC node tests/tools/coverage-report.mjs,twice — on node
v22.23.3(the majorci.ymlpins) and on nodev26.10.0—with both runs agreeing to the region:
eff33b5The node version the record names as "the major ci.yml pins" is
v22.21.1;22.23.3is the current 22.x, and it is also the versiontests/e2e-coverage-gate.test.mjsalready cites in its own table.No floor moves. Every threshold in
FLOORSstill clears its measurement(
99 ≤ 99.67,96 ≤ 96.14,99 ≤ 99.64,98 ≤ 98.57, and the four 100s areexact), and
npm run test:unit:coverage:checkexits 0 ateff33b5. This is arecord that no longer describes the suite, not a gate that has slipped.
The contradiction
The comment above
--check-harness-file-regionssays:The note it points at,
tests/tools/e2e-coverage-report.mjs:60-61, says:Seven is correct: the harness row measures 1947/1954, and the per-file row for
tests/tools/e2e-coverage-report.mjslists six lines (243, 634, 803, 814,1038, 1117) carrying seven regions — line 243's
map.resolvedSources ?? flattened.sources ?? []is the two-region chain the note describes.That matters beyond the digit. The note hands this file a job — "records that
ceiling … so the floor is never set above it" — and nothing executes it. The
relationship between the floor and the ceiling is prose on both sides, which is
exactly the drift-by-omission class
tests/docs-threshold-parity.test.mjscloses between the gate and the contributor docs, and
tests/audit-gate.test.mjscloses between the allowlist andSECURITY.md. Thestale
6is the first instance of it landing here, and it landed silently.Recommendation
One change to one file,
tests/coverage-gate-thresholds.test.mjs:above, and update
--check's "next whole percent (99.65)" aside to99.67.ceiling back out of
tests/tools/e2e-coverage-report.mjs's note andassert
--check-harness-file-regions <= Math.floor(ceiling), so thesentence the floor is argued from can no longer drift from the floor —
and so a rewrite that deletes the note fails here by name instead of
leaving the floor with nothing behind it.
Both halves belong in one commit: the refreshed counts are only trustworthy
once something re-derives the one number that had already gone wrong.
Priority
for why
--check-harness-file-regionsstops at 98, and a contributorreconciling "6 unreachable regions" against a 1947/1954 harness row has
nothing that tells them which number to trust.
production code.
🐝 Hive Agent:
quality| Instance:hosted-available-lke648397-260827-5n31| SHA:eff33b5— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88
hivecommons-hive commentedon Oct 14, 2026
A merged PR referenced this issue without closing it. Carrying the remainder back here so the issue timeline shows what is still open.
Remainder from the PR body:
#1411's own subject — a stale
Testworkflowregistration, which is repo Actions state and not a file — cannot be fixed by
any PR
This comment is edited in place by the task-list sweep on every cycle; it is not duplicated.
mrbobbytables commentedon Oct 14, 2026
Disabled the orphaned registration as recommended: