Buyer-visible credential-boundary gap
The EgressWeave caller-side least-privilege repair is IMPLEMENTED ON PROTECTED MAIN. This issue remains open because the matching reusable-workflow secret interface is still only present on an unmerged read-only central candidate, not protected central main.
This is a credential-exposure/control-plane assurance boundary, not evidence that any secret leaked.
Fresh protected EgressWeave evidence (2026-08-13)
Protected EgressWeave main is 7faf7a3b8a47980113982914000e724ab6a6cda5.
On that exact protected tree, .github/workflows/hourly-pr-maintenance.yml:
- contains no
secrets: inherit;
- maps only
PR_REVIEW_MERGE_TOKEN and OPENCODE_APPROVE_TOKEN to fix-review-feedback;
- maps only the same two named credentials to
review-recheck-and-merge;
- does not pass
NVIDIA_NIM_API_KEY, COPILOT_GITHUB_TOKEN, release/package credentials, or blanket repository/organization secrets through this reusable-workflow boundary;
- preserves
enable_auto_merge: false and merge_mode: disabled;
- pins both reusable workflows to immutable central revision
59505c1d89eb7ea816e921b6da38079c736608c2.
Protected tests/test_hourly_opencode_nvidia_contract.py machine-checks this boundary: it rejects secrets: inherit, requires both named mappings exactly twice, rejects NVIDIA_NIM_API_KEY and OPENAI_API_KEY from the review scheduler, and preserves disabled autonomous merge authority.
Fresh protected-main scheduled operational evidence is run 31652432378 (Hourly PR Maintenance, run 133) on exact head 7faf7a3..., completed success. Its referenced_workflows are exactly the pinned pr-review-fix-scheduler.yml@59505c1d... and pr-review-merge-scheduler.yml@59505c1d...; the substantive called jobs fix-review-feedback / dispatch-review-fixes and review-recheck-and-merge / scan-pr-queue both materialized and completed successfully. Optional/non-applicable wait, org-sweep, and closed-PR cancellation paths were skipped and are not promoted into separate evidence.
This proves the EgressWeave caller no longer depends on blanket inheritance merely to materialize and execute the called jobs. It does not promote the pinned central candidate into protected-central authority.
Read-only central dependency
Fresh read-only central state:
- protected
.github main: 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba;
- central PR #897: open / Ready / mergeable / unmerged;
- exact #897 head:
59505c1d89eb7ea816e921b6da38079c736608c2.
At exact central candidate 59505c1d..., pr-review-fix-scheduler.yml declares the named workflow_call.secrets interface used by this protected EgressWeave caller. Candidate state remains non-authoritative until protected-central integration.
The same central candidate owns the fail-closed Dependency Review repair tracked by EgressWeave #76; aggregate Security Scan green remains non-passing while the actual immutable-pinned Dependency review action is skipped. The separate Strix unavailable/no-report boundary remains tracked by EgressWeave #197 and read-only central .github#891.
RCA / remedy status
First boundary: caller-to-reusable-workflow secret transport.
Historical root cause: the reusable scheduler interface relied on blanket inheritance while downstream paths consumed optional organization mutation credentials, preventing the leaf repository from expressing a minimal explicit caller contract.
Selected remedy: central reusable workflows publish a minimal named secret interface; EgressWeave maps only those names on an immutable pin and protects the caller contract with deterministic tests.
The EgressWeave half is implemented and freshly re-proven on protected main. The remaining root-cause closure belongs to protected-central integration and a protected consumer run against that accepted central authority, not another EgressWeave source mutation.
Rejected alternatives remain:
- restore
secrets: inherit — widens credential exposure and regresses protected-main policy;
- remove all credentials without respecting the called-workflow contract — can silently disable intended bounded dispatch;
- copy central workflows into EgressWeave or add another credentialed writer — duplicate/wrong-layer authority;
- infer an active central PR as protected authority — governance-invalid evidence;
- churn the clean EgressWeave caller merely to manufacture another external run — no root-cause change.
Acceptance criteria
Writer discipline / non-goals
.github remains read-only. Do not create a competing reusable workflow, restore blanket inheritance, invent/rotate credentials, use COPILOT_GITHUB_TOKEN, grant autonomous merge/publish authority, or churn an unchanged clean caller merely to retrigger external behavior.
Buyer-visible credential-boundary gap
The EgressWeave caller-side least-privilege repair is IMPLEMENTED ON PROTECTED MAIN. This issue remains open because the matching reusable-workflow secret interface is still only present on an unmerged read-only central candidate, not protected central
main.This is a credential-exposure/control-plane assurance boundary, not evidence that any secret leaked.
Fresh protected EgressWeave evidence (2026-08-13)
Protected EgressWeave
mainis7faf7a3b8a47980113982914000e724ab6a6cda5.On that exact protected tree,
.github/workflows/hourly-pr-maintenance.yml:secrets: inherit;PR_REVIEW_MERGE_TOKENandOPENCODE_APPROVE_TOKENtofix-review-feedback;review-recheck-and-merge;NVIDIA_NIM_API_KEY,COPILOT_GITHUB_TOKEN, release/package credentials, or blanket repository/organization secrets through this reusable-workflow boundary;enable_auto_merge: falseandmerge_mode: disabled;59505c1d89eb7ea816e921b6da38079c736608c2.Protected
tests/test_hourly_opencode_nvidia_contract.pymachine-checks this boundary: it rejectssecrets: inherit, requires both named mappings exactly twice, rejectsNVIDIA_NIM_API_KEYandOPENAI_API_KEYfrom the review scheduler, and preserves disabled autonomous merge authority.Fresh protected-main scheduled operational evidence is run 31652432378 (
Hourly PR Maintenance, run 133) on exact head7faf7a3..., completed success. Itsreferenced_workflowsare exactly the pinnedpr-review-fix-scheduler.yml@59505c1d...andpr-review-merge-scheduler.yml@59505c1d...; the substantive called jobsfix-review-feedback / dispatch-review-fixesandreview-recheck-and-merge / scan-pr-queueboth materialized and completed successfully. Optional/non-applicable wait, org-sweep, and closed-PR cancellation paths were skipped and are not promoted into separate evidence.This proves the EgressWeave caller no longer depends on blanket inheritance merely to materialize and execute the called jobs. It does not promote the pinned central candidate into protected-central authority.
Read-only central dependency
Fresh read-only central state:
.githubmain:6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba;59505c1d89eb7ea816e921b6da38079c736608c2.At exact central candidate
59505c1d...,pr-review-fix-scheduler.ymldeclares the namedworkflow_call.secretsinterface used by this protected EgressWeave caller. Candidate state remains non-authoritative until protected-central integration.The same central candidate owns the fail-closed Dependency Review repair tracked by EgressWeave #76; aggregate Security Scan green remains non-passing while the actual immutable-pinned
Dependency reviewaction is skipped. The separate Strix unavailable/no-report boundary remains tracked by EgressWeave #197 and read-only central.github#891.RCA / remedy status
First boundary: caller-to-reusable-workflow secret transport.
Historical root cause: the reusable scheduler interface relied on blanket inheritance while downstream paths consumed optional organization mutation credentials, preventing the leaf repository from expressing a minimal explicit caller contract.
Selected remedy: central reusable workflows publish a minimal named secret interface; EgressWeave maps only those names on an immutable pin and protects the caller contract with deterministic tests.
The EgressWeave half is implemented and freshly re-proven on protected main. The remaining root-cause closure belongs to protected-central integration and a protected consumer run against that accepted central authority, not another EgressWeave source mutation.
Rejected alternatives remain:
secrets: inherit— widens credential exposure and regresses protected-main policy;Acceptance criteria
secrets: inheriton the maintenance caller.PR_REVIEW_MERGE_TOKENandOPENCODE_APPROVE_TOKEN; do not expose model, release/package, or unrelated secrets.enable_auto_merge: false,merge_mode: disabled, immutable central identity, reviewer separation, and least-privilege caller permissions.7faf7a3...that called reusable jobs materialize and execute under the named-secret caller mapping without restoring autonomous merge authority.workflow_call.secretscontract; active-PR state is non-passing authority.Writer discipline / non-goals
.githubremains read-only. Do not create a competing reusable workflow, restore blanket inheritance, invent/rotate credentials, useCOPILOT_GITHUB_TOKEN, grant autonomous merge/publish authority, or churn an unchanged clean caller merely to retrigger external behavior.