Goal
Maintain a buyer-verifiable patch-validator lifecycle: reviewed source → exact image/runtime/SBOM/vulnerability receipts → protected integration → protected-main operational acceptance → immutable publication/signature/attestation → controlled activation. The validator must not inherit reviewer/model/GitHub-write/provider-routing/quarantine/security/outbound/release authority, and automation must not invent outbound licensing authority.
Protected source truth — 2026-09-08 KST
Protected Noema is GitHub-verified main@699489cdbb8de3404154d9a3d6022c692ce85fd6, the normal #547 documentation-authority integration after #540 toolchain/license repair. The dedicated patch-validator image/runtime/supply-chain implementation entered protected history through #407 and remains preserved by subsequent integrations.
Current protected source retains the fully-static numeric-non-root scratch runtime, no-network/read-only/capability-dropped smoke, exact source/image/receipt binding, pinned Trivy/Syft/Grype tooling, CycloneDX/SBOM/component evidence, reviewed runtime-component provenance, strict identity/applicability checks and fail-closed vulnerability thresholds. #540 removed the historical Wrangler/Miniflare/Sharp/Libvips tooling path in favor of pinned direct source truth without weakening this boundary.
#547 exact 30b7e7e5cdab8de65715834a16f994b2047eafa6 subsequently reached all four terminal GREEN gates before normal merge, including patch-validator-image run 34165467851. That image job completed every static runtime, smoke, SBOM, Grype/Syft component and exact-receipt step successfully. This is strong current PR-head verification, but it is still not protected-main operational acceptance or immutable publication.
A live performance/RCA finding exposed why successive sibling PR image runs remained cold despite type=gha,scope=noema-patch-validator-image: the workflow ran only on PR branches/dispatch, while GitHub Actions cache visibility does not let one sibling PR restore another sibling's branch cache. #540 run 34155490034 spent about 104 minutes in the exact image build; later sibling #547 again spent about two hours building the same static runtime.
Draft #558 repairs that causal boundary. It adds protected-main cache seeding only when image-authority paths change, while retaining workflow_dispatch and every security/isolation/receipt gate. After #547 changed protected ancestry, #558 was ordinary/non-force converged to f2aa8570d952cc0a371da161e651472c080e00ce, behind_by=0. Hosted CI 34172635652, job 101895784847, then produced a real RED after checkout, live-base verification, lockfile control, install and typecheck: the legacy patch-validator-workflow test incorrectly required bare pull_request: to be directly adjacent to workflow_dispatch: and rejected the intentionally added sibling push: trigger. The run reported 1 failed / 4121 passed tests.
Current #558 exact is 2f91bf8641212ecae435b5fbcc9084cc0acd6295. The minimum causal repair changed only the stale test contract so it still proves pull_request: has no nested filters while allowing an independent sibling event trigger. Production workflow, permissions, scanner/isolation gates and publication authority were not weakened. Fresh compare against protected 699489c... is ahead-only, behind_by=0, merge-base exactly protected main, with effective changes limited to .github/workflows/patch-validator-image.yml, test/patch-validator-image-build-cache.test.ts, and test/patch-validator-workflow.test.ts. A wholly fresh application/reviewer/Security/image generation is running; predecessor results do not transfer.
A normal #558 merge necessarily changes the image workflow path, so the resulting protected merge commit will run the full image workflow once on main and seed a default-branch BuildKit cache available to later sibling PRs; unrelated main merges will not enqueue the 150-minute lane.
The GitHub release collection remains empty. No historical PR-head image receipt, current candidate image check, package version or issue text counts as an immutable released artifact.
Completed source/image criteria
Remaining executable boundary
Protected-main operational acceptance and cache seed
Publication / signature / provenance
Licensing / transfer rights
Activation / buyer proof
Guardrails
Do not weaken #27, fabricate #29/#227 identity provisioning, configure #40 by documentation, synthesize #3 production KPI evidence, choose an outbound license, or write central .github, contextual-orchestrator, quarantine or egress source from this owner lane.
Related: #5, #9, #27, #29, #40, #73, #227, #407, #531, #558.
Goal
Maintain a buyer-verifiable patch-validator lifecycle: reviewed source → exact image/runtime/SBOM/vulnerability receipts → protected integration → protected-main operational acceptance → immutable publication/signature/attestation → controlled activation. The validator must not inherit reviewer/model/GitHub-write/provider-routing/quarantine/security/outbound/release authority, and automation must not invent outbound licensing authority.
Protected source truth — 2026-09-08 KST
Protected Noema is GitHub-verified
main@699489cdbb8de3404154d9a3d6022c692ce85fd6, the normal #547 documentation-authority integration after #540 toolchain/license repair. The dedicated patch-validator image/runtime/supply-chain implementation entered protected history through #407 and remains preserved by subsequent integrations.Current protected source retains the fully-static numeric-non-root scratch runtime, no-network/read-only/capability-dropped smoke, exact source/image/receipt binding, pinned Trivy/Syft/Grype tooling, CycloneDX/SBOM/component evidence, reviewed runtime-component provenance, strict identity/applicability checks and fail-closed vulnerability thresholds. #540 removed the historical Wrangler/Miniflare/Sharp/Libvips tooling path in favor of pinned direct source truth without weakening this boundary.
#547 exact
30b7e7e5cdab8de65715834a16f994b2047eafa6subsequently reached all four terminal GREEN gates before normal merge, including patch-validator-image run34165467851. That image job completed every static runtime, smoke, SBOM, Grype/Syft component and exact-receipt step successfully. This is strong current PR-head verification, but it is still not protected-main operational acceptance or immutable publication.A live performance/RCA finding exposed why successive sibling PR image runs remained cold despite
type=gha,scope=noema-patch-validator-image: the workflow ran only on PR branches/dispatch, while GitHub Actions cache visibility does not let one sibling PR restore another sibling's branch cache. #540 run34155490034spent about 104 minutes in the exact image build; later sibling #547 again spent about two hours building the same static runtime.Draft #558 repairs that causal boundary. It adds protected-main cache seeding only when image-authority paths change, while retaining
workflow_dispatchand every security/isolation/receipt gate. After #547 changed protected ancestry, #558 was ordinary/non-force converged tof2aa8570d952cc0a371da161e651472c080e00ce,behind_by=0. Hosted CI34172635652, job101895784847, then produced a real RED after checkout, live-base verification, lockfile control, install and typecheck: the legacypatch-validator-workflowtest incorrectly required barepull_request:to be directly adjacent toworkflow_dispatch:and rejected the intentionally added siblingpush:trigger. The run reported 1 failed / 4121 passed tests.Current #558 exact is
2f91bf8641212ecae435b5fbcc9084cc0acd6295. The minimum causal repair changed only the stale test contract so it still provespull_request:has no nested filters while allowing an independent sibling event trigger. Production workflow, permissions, scanner/isolation gates and publication authority were not weakened. Fresh compare against protected699489c...is ahead-only,behind_by=0, merge-base exactly protected main, with effective changes limited to.github/workflows/patch-validator-image.yml,test/patch-validator-image-build-cache.test.ts, andtest/patch-validator-workflow.test.ts. A wholly fresh application/reviewer/Security/image generation is running; predecessor results do not transfer.A normal #558 merge necessarily changes the image workflow path, so the resulting protected merge commit will run the full image workflow once on
mainand seed a default-branch BuildKit cache available to later sibling PRs; unrelated main merges will not enqueue the 150-minute lane.The GitHub release collection remains empty. No historical PR-head image receipt, current candidate image check, package version or issue text counts as an immutable released artifact.
Completed source/image criteria
node_patch_verify_v1, exact source/image/receipt binding, supply-chain pinning and credential-free isolation.Remaining executable boundary
Protected-main operational acceptance and cache seed
2f91bf8641212ecae435b5fbcc9084cc0acd6295on one unchanged head with application CI, reviewer-ci, required Security and patch-validator-image terminal success, clean review authority and current-base ancestry; normal merge only.pushimage run executes against the exact fix(ci): seed patch-validator cache from protected main #558 merge commit and retains its exact artifact/run identities. This run is both the required protected-main operational acceptance opportunity and the first reusable default-branch BuildKit cache seed.Publication / signature / provenance
Licensing / transfer rights
Activation / buyer proof
Guardrails
Do not weaken #27, fabricate #29/#227 identity provisioning, configure #40 by documentation, synthesize #3 production KPI evidence, choose an outbound license, or write central
.github, contextual-orchestrator, quarantine or egress source from this owner lane.Related: #5, #9, #27, #29, #40, #73, #227, #407, #531, #558.