Skip to content

feat(exchange): trust the App installation instead of a fixed owner list - #733

Draft
seonghobae wants to merge 8 commits into
fix/patch-validator-node-24-21from
fix/installation-consent-owner-trust
Draft

seonghobae wants to merge 8 commits into
fix/patch-validator-node-24-21from
fix/installation-consent-owner-trust

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

2026-10-09 merge-queue base-authority repair (authoritative)

  • Draft / Proposed / merge HOLD. Exact repaired head is 92382107de07e40572e63251543fddb1e2907569, tree 229fa400fa31c65f7ee080699ad49bdac44b3c46; both ref updates were expected-head, non-force fast-forwards.
  • RCA: the in-run live PR/Git-ref double-read rejects base movement only while a PR run is active. A later base-only push emits no PR-head synchronize event, and application CI did not subscribe to GitHub's separate merge_group event. The first repair draft also left lockfile change control restricted to pull_request, which would have made merge-queue validation weaker than the ordinary PR lane.
  • RED → smallest GREEN: an executable workflow-contract RED first proved that merge_group/checks_requested and then merge-group lockfile authority were absent. CI now checks out the exact merge-group head_sha, validates canonical base_sha ancestry, feeds that same base SHA to the existing lockfile change-control gate, and runs ordinary release verification on the latest-base synthetic group.
  • Verification: exact remote tree equals the locally verified tree; TypeScript fixture stripping, workflow-contract assertions, YAML parse, Bash syntax, exact stack-base ancestry, and diff checks are GREEN. The repository-owned/full Vitest suite remains unclaimed because the available Node 24.19.0 runtime is rejected by the exact Node 24.21.0 devEngines contract.
  • Remaining authority: source support does not enable or prove a protected-main merge queue. Prerequisite fix(security): upgrade patch validator and bind gateway endpoints #737 must merge ordinarily; the protected-main ruleset must require merge queue plus application CI; then fresh exact-head/merge-group hosted Checks and qualifying independent approval remain mandatory. No merge/auto-merge.

2026-10-07 generated-fixture parse repair (authoritative)

  • Draft / Proposed / merge HOLD. Exact head is 7e0a2f18ec6444ef8b4f7cbd85852fe8d8046973, tree a4ead9eeb17533edfb8d1452252b7a31d3216810; branch advancement was lease-checked and force=false.
  • Correction / RCA: predecessor 539bfe34524ae3a414f58c9a5fbda6e4ad2e5a9a nested two unescaped JavaScript template literals inside the outer TypeScript fixture template. stripTypeScriptTypes failed with ERR_INVALID_TYPESCRIPT_SYNTAX; the preceding direct-syntax GREEN statement was invalid.
  • RED → smallest GREEN: the generated fake gh path and diagnostic now use ordinary string concatenation. The test file differs from the predecessor at only those two expressions; the non-vacuous API/argument oracle is unchanged.
  • Verification: exact parser RED was reproduced. Repaired stripTypeScriptTypes, direct Node syntax, Bash syntax, the two focused files (9/9 via an already-available external Vitest runner), and an independent dependency-free execution of all eight identity scenarios are GREEN. The repository-owned Vitest invocation and full suite remain unclaimed because Node 24.19.0 is rejected by the exact Node 24.21.0 devEngines contract.
  • Hosted exact-head GREEN, prerequisite fix(security): upgrade patch validator and bind gateway endpoints #737, the residual post-completion base-only observer/merge-authority contract, and qualifying independent approval remain required. No merge/auto-merge.

2026-10-07 live base-ref tip repair (authoritative)

  • Draft / Proposed / merge HOLD. Exact repaired head is 539bfe34524ae3a414f58c9a5fbda6e4ad2e5a9a; it advanced the feature branch without force and targets prerequisite base fix/patch-validator-node-24-21@bf2cd03dd817e0db8ec67aa9eb91458aaca36c14.
  • RCA: the prior verifier read .base.sha from the live pull-request response, but that field is still pull-request snapshot metadata and can lag the current base-ref tip. Its test double also ignored gh/git operands, so the oracle could pass vacuously.
  • RED → GREEN: a non-vacuous shell harness failed against the previous verifier. The repaired verifier reads only live (head SHA, base ref) from the PR endpoint, independently resolves refs/heads/{base_ref} through the Git-ref endpoint, checks exact ancestry, and repeats both reads after verification. Test doubles now reject unexpected API and merge-base operands and cover base-SHA-only movement plus non-ancestry.
  • Local evidence: shell harness, bash -n, and direct TypeScript syntax checks are GREEN. Full Vitest is not claimed because this workspace has Node 24.19.0 while the exact tree requires Node 24.21.0.
  • Hosted evidence: reviewer-ci 37585966072, patch-validator-image 37585966262, and ci 37585965869 failed before source execution. Both original attempts and explicit failed-job reruns contain zero steps and their logs return BlobNotFound; therefore hosted GREEN is absent.
  • Residual P0: this delta does not self-invalidate a terminal same-head Check after a later base-only push. A trusted observer/merge-queue contract must bind terminal evidence and merge authority to exact head and exact base SHA. This remains open in docs/product-technical-gap-baseline.md.
  • Prerequisite fix(security): upgrade patch validator and bind gateway endpoints #737, fresh terminal exact-head GREEN Checks, and qualifying independent approval remain required. No merge/auto-merge.

2026-10-03 live PR identity TOCTOU repair (authoritative)

  • Draft / Proposed / merge HOLD. Exact repaired head is 42da900e1fdcd2e436b8865d069771c03f2d2b02 with tree 9d4fbeecf385bbaf47949c93ba283e1566a5628e; it is a non-force fast-forward from 65d3036f18e0b11e281d44245e690a3c550c7461.
  • RCA: CI run 36939785675 admitted stale event base.ref=main after GitHub event 32296185938 had retargeted this PR to fix/patch-validator-node-24-21. Both gates re-resolved the stale ref instead of the live PR identity.
  • RED → GREEN: executable tests now cover unchanged-head retarget, isolated base-ref drift, isolated base-SHA drift, head drift, malformed identity, event-base exclusion, minimum PR-read permission, and post-completion pull_request.edited revalidation. The workflow fetches and compares the live (head SHA, base ref, base SHA) before and after verification.
  • Local evidence: shell syntax, direct TypeScript typecheck, 36 focused/adjacent tests, and diff checks are GREEN. The broader non-environment set is 5,202/5,202 GREEN; the full local run retains known pinned npm/filesystem-environment failures and is not hosted authority.
  • Independent review: no Critical finding; its Important post-completion retarget finding and Minor isolated-field corpus gap are both repaired in this head.
  • Fresh exact-head hosted Checks and qualifying independent approval are not yet evidence. Prerequisite fix(security): upgrade patch validator and bind gateway endpoints #737 must still merge ordinarily before protected-main retarget/revalidation; this PR remains Draft.

2026-10-02 prerequisite merge-forward and stack repair (authoritative)

  • Draft / Proposed / merge HOLD. Exact head is 65d3036f18e0b11e281d44245e690a3c550c7461 with exact tree fc8648d712608e286b3ebce37a96b21e4dbc2696.
  • This is an ordinary two-parent merge of prior feature head cab54e5d6c27768f67361b824feebfb210493397 and current prerequisite fix(security): upgrade patch validator and bind gateway endpoints #737 exact bf2cd03dd817e0db8ec67aa9eb91458aaca36c14; the ref advanced with force=false.
  • RCA: predecessor patch-validator-image run 36681968884, job 109779171456, built Node 24.19.0/Undici 7.29.0 and failed closed on blocking embedded-runtime vulnerabilities. The true-owner fix(security): upgrade patch validator and bind gateway endpoints #737 repair now supplies Node 24.21.0/Undici 7.29.1, exact final-receipt binding, gateway admission, and bounded scanner acquisition.
  • The merge was conflict-free. Combined verification is GREEN: 23 files / 260 tests, direct TypeScript typecheck, and staged diff check.
  • The PR base is retargeted to fix/patch-validator-node-24-21@bf2cd03d…, keeping the installation-consent feature delta bounded to its own 22 files. Fresh exact-head hosted review/Checks, qualifying independent approvals, fix(security): upgrade patch validator and bind gateway endpoints #737 ordinary merge, protected-main retarget/revalidation, immutable release, and downstream consumer repair remain open.

Why

The exchange accepted only callers whose OIDC repository_owner equalled ALLOWED_REPOSITORY_OWNER with one hard-coded owner id, and refused any target_repository outside that owner. Reviewing another organization (e.g. HYOSUNG-ITX-AI-Business-Department) required a code change and a redeploy. The owner asked to remove the fixed repository/owner restriction.

The GitHub App installation is already the owner's consent: installation tokens reach only repositories where an administrator installed the App.

Change (ADR-0019)

  • Unchanged trust anchor: exact central job_workflow_ref/workflow_ref, ALLOWED_WORKFLOW_SHA, issuer, audience, replay guard, rate limit.
  • Owner allowlist removed: repository_owner must be a valid GitHub login and repository_owner_id a numeric id; a well-formed repository claim must belong to that owner. The central workflow owner's id and known repository ids stay pinned.
  • Installation binding: the installation account.login must equal the target owner; for a same-owner caller account.id must equal the OIDC repository_owner_id (defeats org-name reuse). The binding is cached with the installation id and re-checked on every cache hit. A response without account fails closed (502 ERR_GITHUB_API).
  • Target rule unchanged: a caller requests only its own repository; only the central repository may target another.
  • Docs: docs/adr/0019-installation-consent-owner-trust.md, docs/api-spec.md, docs/CONTEXT_MAP.md, docs/onboarding.md.

Tests

  • New test/installation-consent-owner-trust.test.ts (10): foreign-owner mint, account id mismatch, account login mismatch, missing account, cross-org target refusal, non-central workflow refusal, central→installed org, cache-hit re-check (discriminating: a fresh lookup would 502, the cache path returns 403).
  • Existing installation mocks now carry GitHub's real account field; two tests that encoded the old allowlist were rewritten to the new rule (owner/repository claim consistency; an uninstalled outside org mints nothing).
  • tsc --noEmit clean. Full Vitest locally: 5158 passed, 11 failed — the same macOS-only Linux-isolation (codegraph-sandbox-*, codegraph-directory-binding) and Unix-socket (dependency-license-inventory-special-output) tests that fail on unmodified main on this host. Exact-head CI on Linux is the authority.

Not in this PR

  • ContextualWisdomLab/.github noema-review.yml still hard-codes ^ContextualWisdomLab/ target checks and owner: ContextualWisdomLab App-token steps; separate PR.
  • Using Noema from a new organization still needs the App to be installable there and an org admin to install it. A deployment with GITHUB_APP_INSTALLATION_ID set stays pinned to one installation.

🤖 Generated with Claude Code

https://claude.ai/code/session_019hNrSzZrSNyJDUjXpaJMWs

Summary by CodeRabbit

  • 변경 사항
    • 토큰 교환 시 고정된 소유자 허용 목록 대신, 대상 저장소에 GitHub App이 설치되어 있고 설치 계정이 저장소 소유자와 일치하는지 확인합니다.
    • 중앙 워크플로 저장소는 App을 설치한 다른 조직의 저장소를 대상으로 지정할 수 있습니다. 설치 계정 정보가 없거나 소유자 정보가 일치하지 않으면 토큰 교환이 거부됩니다.
    • 저장소 소유자 검증 및 설치 기반 접근 규칙에 관한 문서를 보완했습니다.

Exact-head repair and remaining gates

  • Predecessor RED: CI run 36504105583 on 29bffbb72b43b6d0d5405aa1c0d335063464cca4 executed 5,169 passing tests but failed the 100% coverage gate (99.97% statements). The uncovered fail-closed branches were src/index.ts:658 (invalid OIDC owner login) and src/index.ts:790 (invalid central target owner).
  • Smallest repair: cab54e5d6c27768f67361b824feebfb210493397 adds two exchange-boundary tests for those branches. It changes tests only; hosted GREEN is not claimed while current exact-head runs remain queued.
  • Independent owner blocker: Noema #734 tracks the canonical RED→GREEN→release repair. Predecessor patch-validator run 36504105548, artifact 11031436406, reports the protected-base Node 24.19.0 runtime embedding Undici 7.29.0 with GHSA-3wwx-pv8p-q78v (fixed in Undici 7.29.1). This is a canonical Noema runtime prerequisite rather than a change introduced by this App-installation delta.
  • Current exact-head runs: reviewer-ci 36681968837, Security Scan 36681968857, ci 36681968888, and patch-validator-image 36681968884 are queued.
  • State: Draft / Proposed. No merge eligibility or completion claim until the current exact head has terminal GREEN evidence, the canonical runtime prerequisite is repaired and released, and a qualifying independent approval exists.

The exchange refused every caller and target outside one hard-coded
owner and owner id, so reviewing another organization needed a code
change and a deployment. The GitHub App installation is already the
owner's consent: tokens only reach repositories where an administrator
installed the App.

Keep the exact central workflow ref, SHA pin, issuer, audience, replay
and rate controls. Drop the owner allowlist; require a valid owner
login and numeric id, a repository claim owned by that owner, and an
installation account whose login is the target owner and whose id is
the OIDC owner id for same-owner callers. Cache the binding with the
installation id and re-check it on every hit. A caller still targets
only its own repository; only the central repository may target others.

Signed-off-by: Seongho Bae <me@seonghobae.me>
Commit-Message-Assisted-by: Claude Code (Claude Opus 5.5)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019hNrSzZrSNyJDUjXpaJMWs
@coderabbitai

coderabbitai Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: a4295613-f271-463e-a31b-d458ea30b9da


📥 Commits

Reviewing files that changed from the base of the PR and between 1204a07 and 29bffbb.


📒 Files selected for processing (22)
  • docs/CONTEXT_MAP.md
  • docs/adr/0019-installation-consent-owner-trust.md
  • docs/api-spec.md
  • docs/onboarding.md
  • src/index.ts
  • test/credential-request-helper-coverage.test.ts
  • test/exchange-success-path-coverage.test.ts
  • test/external-json-locked-reader.test.ts
  • test/github-api-content-type-authority.test.ts
  • test/github-api-malformed-json.test.ts
  • test/github-app-explicit-installation-id-validation.test.ts
  • test/github-app-runtime-coverage.test.ts
  • test/github-installation-cache-refresh.test.ts
  • test/github-installation-expiry-defensive-coverage.test.ts
  • test/github-installation-token-expiry-calendar-integrity.test.ts
  • test/github-installation-token-stateless-format.test.ts
  • test/installation-consent-owner-trust.test.ts
  • test/oidc-verification-residual-coverage.test.ts
  • test/outbound-fetch-header-authority.test.ts
  • test/replay-before-token-mint.test.ts
  • test/replay-request-core-coverage.test.ts
  • test/worker.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.



📝 Walkthrough

Walkthrough

OIDC 호출자와 대상 저장소의 소유자 허용 목록 검사를 변경했습니다. GitHub App 설치 응답의 계정 정보를 검증하고, 설치 계정 바인딩을 캐시에 저장해 캐시 조회 시에도 동의 조건을 확인합니다.

Changes

소유자 검증 및 대상 저장소 규칙

Layer / File(s) Summary
OIDC 소유자 확인 및 대상 저장소 규칙
src/index.ts, docs/CONTEXT_MAP.md, docs/api-spec.md, docs/onboarding.md, test/credential-request-helper-coverage.test.ts, test/oidc-verification-residual-coverage.test.ts
호출자의 repository_owner와 repository_owner_id 형식을 확인하고 저장소 클레임과의 일치를 검증합니다. 대상 소유자의 고정 허용 목록 검사를 제거하고, 중앙 워크플로 저장소 소유자 ID 검증은 유지합니다. 관련 문서와 테스트를 갱신했습니다.

설치 동의 기반 소유자 신뢰

Layer / File(s) Summary
설치 계정 바인딩 및 토큰 발급 검증
src/index.ts, docs/adr/0019-installation-consent-owner-trust.md, test/installation-consent-owner-trust.test.ts, test/*installation*.test.ts, test/*github-api*.test.ts, test/exchange-success-path-coverage.test.ts, test/github-app-runtime-coverage.test.ts, test/outbound-fetch-header-authority.test.ts, test/replay-before-token-mint.test.ts, test/replay-request-core-coverage.test.ts, test/worker.test.ts
설치 응답의 계정 로그인과 ID를 검증하고, 설치 ID와 계정 정보를 함께 캐시합니다. 캐시 적중과 설치 조회 경로에서 소유자 바인딩을 확인하며, 테스트 응답과 관련 검증 사례를 갱신했습니다.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant exchange
  participant verifyGithubOidcJwt
  participant createInstallationToken
  participant resolveInstallationId
  participant GitHubAPI
  exchange->>verifyGithubOidcJwt: OIDC 소유자 정보 검증
  verifyGithubOidcJwt->>createInstallationToken: 호출자 소유자 정보 전달
  createInstallationToken->>resolveInstallationId: 대상 저장소와 호출자 전달
  resolveInstallationId->>GitHubAPI: 설치 정보 조회
  GitHubAPI-->>resolveInstallationId: 설치 계정 ID와 로그인 반환
  resolveInstallationId-->>createInstallationToken: 검증된 설치 바인딩 반환
Loading

Merge Risk

Merge Risk: ⚪ Minimal · up to 29bff

The reviewed owner and installation checks preserve the intended token-issuance boundaries. No merge-blocking issue remains after normal checks.

Security Architecture Review

Security architecture risk: 🟡 Moderate · up to 29bff

The change intentionally admits installed organizations that were previously blocked. Identity and repository-scoping checks limit that expansion, and no unauthorized token path was established. Consent freshness and the coordinated rollout with the central workflow still warrant review.

Retained concerns

  • Medium · security · inferred: On a cache hit, the new consent authority is a stored installation-account binding, not a fresh ownership lookup. A successful token mint does not refresh that binding. Any security effect after an ownership or installation change depends on GitHub’s current-state enforcement, which was not established here; an unauthorized mint has not been demonstrated.

Security review details

Security Blast Radius

  • inferred — Independent callers can now originate from organizations outside the former owner restriction, but the exchange requests a token for one target repository and relies on that repository’s App installation. The central repository is the intentional cross-target caller; actual access remains subject to GitHub’s token enforcement.

Security Findings and Attack Paths

  • inferred — No cross-organization token-mint path was established: non-central target changes are rejected, fresh and cached bindings are checked against the target owner, and same-owner calls also require the OIDC owner ID to match. Provider-state freshness on cache hits remains an unresolved condition, not a verified unauthorized-mint finding.

Trust Boundaries and Controls

  • observed — Caller-controlled target selection crosses the signed OIDC boundary, the own-repository or central-repository target rule, the GitHub installation-account check, and a repository-scoped App-token request. Replay usage is claimed before minting; its underlying guard uses a per-token storage transaction.

Resilience and Maintainability Implications

  • observed — A failed installation lookup or malformed account does not issue a token. Replay usage is consumed before the provider call, so a later provider failure is terminal for that OIDC token; this ordering predates the owner-trust change.

Hardening Proposals

  • proposed — Establish and document GitHub’s behavior for token minting after installation removal, repository transfer, suspension, or owner rename. If successful minting cannot serve as a current-consent check, shorten or refresh the cached binding at those transitions.



🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 10.53% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 19 functions across 18 files. (4 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed PR 제목은 고정 owner 목록 대신 GitHub App 설치를 신뢰 경계로 사용하는 핵심 변경을 정확하고 간결하게 설명합니다.

Full details: Docstring Coverage

Explanation

Docstring coverage is 10.53% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 19 functions across 18 files. (4 skipped: 4 unsupported.)



  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR

🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR



Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Contributor Author

Exact-head admission correction — 29bffbb72b43b6d0d5405aa1c0d335063464cca4

Ready is review admission only. Fresh audit against base 1204a075ac15b924e2f907804ba99c337d1a3ac7 found:

  • latest terminal workflow blockers: patch-validator-image 36504105548=failure, ci 36504105583=failure

This PR is moved to Draft/Proposed until the causal owner repair is present on a successor exact head and re-audited. Queued/pending work is neither an additional blocker nor passing evidence. No Close, force push, destructive rebase, manual rerun, synthetic status/approval, merge, auto-merge, or bypass was performed.

@seonghobae
seonghobae marked this pull request as draft September 30, 2026 05:24
Bind the new OIDC-owner and target-owner grammar guards to executable
exchange responses so the repository 100% gate does not leave either
fail-closed branch unmeasured.

No production behavior changes.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head review for cab54e5d6c27768f67361b824feebfb210493397.

I reviewed the complete App-installation consent delta and the two newly added exchange-boundary tests. I found no additional source-level blocker in the claimed boundary: OIDC owner identity remains validated, repository/owner consistency is enforced, installation account login is bound to the target owner, same-owner calls also bind the numeric owner id, cache hits are revalidated, and only the central repository may target another repository.

This is a COMMENT, not an approval. The two new tests have not yet produced hosted GREEN evidence: reviewer-ci 36681968837, Security Scan 36681968857, ci 36681968888, and patch-validator-image 36681968884 are queued. The protected-base Node runtime vulnerability reported by predecessor patch-validator run 36504105548 also remains a canonical Noema prerequisite. Keep this PR Draft / Proposed; do not merge until exact-head Checks are terminal GREEN, that owner prerequisite is resolved through the normal release path, and a qualifying independent approval exists.

Copy link
Copy Markdown
Contributor Author

현재 실패를 exact-head 증거로 갱신합니다.

  • PR feat(exchange): trust the App installation instead of a fixed owner list #733 exact head: cab54e5da052fbb8f22c97702b1af2fae236e395
  • 실패 run/job: 36681968884 / 109779171456
  • 최종 receipt verifier가 blocking embedded runtime vulnerabilities are not allowed로 실패했습니다. 원인은 이 head의 Node.js 24.19.0 내장 Undici 7.29.0 취약점입니다.
  • canonical runtime 보수는 PR #737의 전체 head로 구현되었고, 해당 head는 Git 조상 관계로 PR #736에 완전 carryover된 것을 확인한 뒤 #737을 retirement했습니다.
  • PR #736의 현재 exact head는 81568910dccff168681b9b923e2c7667861b1063입니다. CI/reviewer/security는 GREEN이지만 image 검사는 진행 중이며 독립 승인과 immutable release는 아직 없습니다.

따라서 #733은 Draft/Proposed 상태를 유지합니다. #736의 ordinary merge와 immutable release 전에는 이 PR을 restack/merge하거나 실패 검사를 우회·무의미하게 재실행하지 않습니다. prerequisite release가 생기면 non-force restack 후 새 exact head 전체 검사를 다시 수행합니다.

@seonghobae
seonghobae changed the base branch from main to fix/patch-validator-node-24-21 October 1, 2026 23:15

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head COMMENT review for 65d3036f18e0b11e281d44245e690a3c550c7461 (tree fc8648d712608e286b3ebce37a96b21e4dbc2696). Predecessor image evidence failed on the superseded Node 24.19.0/Undici 7.29.0 runtime. This ordinary two-parent merge integrates current #737 bf2cd03d… without conflict and the PR is retargeted to that prerequisite branch. Combined verification: 23 files / 260 tests, direct TypeScript typecheck, and diff check passed. Fresh hosted exact-head gates and qualifying independent approvals remain required; Draft / Proposed / merge HOLD.

Copy link
Copy Markdown
Contributor Author

Current exact-head hosted evidence — 2026-10-03

  • Exact head: 65d3036f18e0b11e281d44245e690a3c550c7461 on stacked prerequisite base fix/patch-validator-node-24-21@bf2cd03dd817e0db8ec67aa9eb91458aaca36c14.
  • GitHub reports the PR open, Draft, and mechanically mergeable.
  • All four emitted exact-head workflows are terminal SUCCESS: reviewer-ci 36939785685, ci 36939785675, Security Scan 36939785710, and patch-validator-image 36939785723.
  • Combined commit statuses are Devin Review: success and CodeRabbit: success; formal reviews are 2 COMMENTED, 0 APPROVED; unresolved review threads: 0.

Draft / Proposed remains correct because prerequisite #737 is open and unmerged and no qualifying approval exists. This receipt does not claim ordinary merge, immutable release, downstream maturity, or predecessor retirement. No force update, rerun/cancel substitution, no-op commit, self-approval, bypass, merge, release, or Close was used.

Re-fetch the live PR head/base identity before and after verification, rerun on edited PRs, and reject every identity drift without trusting stale event base fields.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head follow-up review for 42da900e1fdcd2e436b8865d069771c03f2d2b02 (9d4fbeecf385bbaf47949c93ba283e1566a5628e).

RCA/RED/GREEN: run 36939785675 proved stale event-base admission after retarget event 32296185938. The repair now fetches the live PR (head SHA, base ref, base SHA) at both gates, rejects each field’s drift independently, grants only pull-requests: read, and subscribes to pull_request.edited so a completed same-head retarget starts fresh verification. Focused/adjacent tests are GREEN; independent local review found no Critical issue, and its Important/Minor findings are incorporated.

This is a COMMENT, not approval or merge authority. Fresh hosted exact-head Checks, qualifying independent approval, prerequisite #737 ordinary merge, and protected-main revalidation remain open; keep Draft.

Copy link
Copy Markdown
Contributor Author

Exact-head hosted evidence — pre-step failure (2026-10-03)

Exact head 42da900e1fdcd2e436b8865d069771c03f2d2b02 produced four terminal failures:

  • ci 37109315001, job 111163987116
  • patch-validator-image 37109315024, job 111163987170
  • reviewer-ci 37109315394, job 111163988957
  • ci 37109333675, job 111164038739 (the later pull_request.edited event, confirming the new revalidation trigger fired)

For every job, GitHub reports zero steps (steps: []). Exact log acquisition returns 404 BlobNotFound; no repository command executed and there is no code/test failure log to repair. I did not blindly rerun. Required hosted GREEN and qualifying independent approval therefore remain absent. Keep Draft / Proposed / merge HOLD; prerequisite #737 ordinary merge and protected-main revalidation also remain open.

Stop treating pull-request .base.sha as current branch-tip authority. Resolve the live base ref independently, strengthen the GitHub and git test doubles, and preserve the remaining post-completion base-push observer gap as Draft/HOLD.

seonghobae commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor Author

Correction and exact-head evidence for 7e0a2f18ec6444ef8b4f7cbd85852fe8d8046973 (Draft / merge HOLD).

The previous 539bfe3… report incorrectly claimed direct TypeScript syntax GREEN. Independent re-fetch showed that its generated fake gh fixture contained two unescaped nested template literals; stripTypeScriptTypes failed before test collection.

RED → GREEN

  • RED: exact predecessor fails with ERR_INVALID_TYPESCRIPT_SYNTAX at the generated Git-ref path.
  • GREEN: replace only the nested path and diagnostic templates with ordinary string concatenation.
  • Exact predecessor comparison confirms only those two code expressions changed; documentation adds only the correction receipts.
  • Fresh checks: repaired TypeScript parser and direct Node syntax pass; Bash syntax passes; focused external Vitest 9/9; independent dependency-free execution covers all 8 identity cases; review findings Critical/Important/Minor 0/0/0.

The repository-owned Vitest command and full suite are not claimed locally because Node 24.19.0 fails the exact Node 24.21.0 devEngines gate. Hosted exact-head GREEN, #737, the post-completion base-only observer/merge contract, and qualifying independent approval remain open. No merge/auto-merge.

Replace nested template literals in the generated gh program with ordinary string concatenation. Record the invalid exact-head syntax claim and the bounded verification evidence.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head COMMENT review for 7e0a2f18ec6444ef8b4f7cbd85852fe8d8046973 / tree a4ead9eeb17533edfb8d1452252b7a31d3216810.

Correction and RCA: predecessor 539bfe3… was not parseable because two unescaped nested JavaScript template literals terminated the outer TypeScript fixture template. The earlier direct-syntax GREEN claim is retracted. This head replaces only those two generated expressions with ordinary string concatenation; exact remote comparison confirms no other test-code change.

Fresh verification: exact predecessor RED is ERR_INVALID_TYPESCRIPT_SYNTAX; repaired stripTypeScriptTypes, direct Node syntax, Bash syntax, focused external Vitest 9/9, and independent dependency-free execution of all eight identity scenarios pass. Independent review reports Critical/Important/Minor 0/0/0. The repository-owned/full Vitest suite is not claimed because available Node 24.19.0 is rejected by exact Node 24.21.0 devEngines.

Hosted exact-head runs are not GREEN: ci 37590609325 and 37590570270, reviewer-ci 37590570255, and patch-validator-image 37590570232 all failed with zero job steps; exact log downloads return 404 BlobNotFound. This is a COMMENT, not approval. Keep Draft / Proposed / merge HOLD pending hosted executable GREEN, #737, post-completion base-only observer/merge authority, and qualifying independent approval.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head COMMENT review for 92382107de07e40572e63251543fddb1e2907569 / tree 229fa400fa31c65f7ee080699ad49bdac44b3c46.

RCA/RED/GREEN: the live PR/Git-ref double-read could not invalidate a terminal same-head result after a later base-only push, and application CI had no merge_group/checks_requested path. The first focused RED also exposed that simply adding the trigger would skip lockfile change control. The repaired workflow checks out the exact merge-group head, requires the canonical event base SHA to be its ancestor, supplies that same base to the existing lockfile comparison, and runs ordinary release verification on GitHub's latest-base synthetic group. GitHub's documented merge-queue behavior supports this source contract; protected-main ruleset enablement remains separate authority.

Exact remote-tree verification is GREEN for TypeScript fixture stripping, executable workflow assertions, YAML parsing, Bash syntax, current prerequisite ancestry, and diff integrity. Full repository Vitest is not claimed locally because Node 24.19.0 is rejected by the repository's exact Node 24.21.0 devEngines contract.

Initial exact-head runs reviewer-ci 37902654458/job 113728573318, ci 37902654453/job 113728573355, and patch-validator-image 37902654447/job 113728574046 failed before source execution: every job has zero steps and each log download returns 404 BlobNotFound. Reviewer and image jobs were explicitly rerun; edited-event CI 37902716056 is queued. This is a COMMENT, not approval. Keep Draft / Proposed / merge HOLD pending #737, hosted GREEN, protected-main merge-queue/ruleset evidence, and qualifying independent approval.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hosted retry follow-up for exact head 92382107de07e40572e63251543fddb1e2907569: edited-event CI job 113728775084, reviewer-ci retry job 113728936876, and patch-validator-image retry job 113728938078 also completed with zero steps. Each exact job-log request returns 404 BlobNotFound. This reproduces the existing pre-source GitHub Actions infrastructure failure; it is not source GREEN and exposes no source log to repair. Keep the lane Draft / HOLD and continue independent work without treating these failures as code evidence.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant