Skip to content

feat(lanes): pass the transcript key to the reusable review and intake legs - #12579

Merged
kyle-sexton merged 2 commits into
mainfrom
feat/7676-reusable-transcript-key
Nov 3, 2026
Merged

kyle-sexton merged 2 commits into
mainfrom
feat/7676-reusable-transcript-key

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

Refs: #7676

Summary

The model legs inside ci-workflows' pr-review-cli.yml and intake-triage.yml can now seal and upload their transcripts (ci-workflows#969), but only when the caller passes the key. These three callers pass none, so those legs print a skip notice and keep nothing. After this PR the daily puller has their transcripts to copy.

Fix

  • intake-triage.yml, pr-review-hosted.yml and pr-review-security-hosted.yml pass lane-transcript-public-key: ${{ vars.LANE_TRANSCRIPT_PUBLIC_KEY }}. The runner policy already allows the input (standards#942, synced by chore: sync standards components #12571).
  • A new test in callers.test.mjs holds every caller of those two reusables to passing the key, since the existing coverage test sees only steps in this repository's own workflows.

A sealing failure cannot change a lane's outcome: the reusable's upload steps are continue-on-error, and a credential hit in the plaintext seals nothing.

Verification

  • node --test --test-name-pattern=transcript .github/actions/resolve-config/callers.test.mjs: 2/2 pass.
  • node .github/standards/runner-policy/runner-policy.mjs --root <worktree>: "Runner policy passed."
  • actionlint on the three workflows: only the cache-mode errors at intake-triage.yml:723 and :1073, on lines this PR does not touch.
  • Left out: a live sealed upload. This PR's own review lanes run these callers, so its CI run is the first one; see Remaining.

Related

Remaining

🤖 Generated with Claude Code

https://claude.ai/code/session_01VQb9Q1VgLEiwGgRVshK3b7

kyle-sexton and others added 2 commits November 2, 2026 20:11
…e legs

The model legs inside ci-workflows' pr-review-cli.yml and intake-triage.yml seal
and upload their transcripts only when a caller passes the key, so these three
callers kept none. A test now holds every such caller to passing it.

Refs: #7676

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQb9Q1VgLEiwGgRVshK3b7
@kyle-sexton
kyle-sexton marked this pull request as ready for review November 3, 2026 01:19
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-03T01:20:55.292224Z 2936b4c Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 2936b4ce6b61851edd34b86e4fc3a0efa4d1312a: read 4 of 4 changed file(s); 0 finding(s), 0 as inline comments.

Security review: no security issues found

I read every hunk of all 4 changed files. Two of them are trusted paths: .github/workflows/intake-triage.yml and .github/workflows/pr-review-security-hosted.yml. The other two are .github/workflows/pr-review-hosted.yml and .github/actions/resolve-config/callers.test.mjs.

What changed. Three calls to reusable workflows in ci-workflows now pass one new input, lane-transcript-public-key: ${{ vars.LANE_TRANSCRIPT_PUBLIC_KEY }}:

  • pr-review-cli.yml@main, called from pr-review-hosted.yml and pr-review-security-hosted.yml
  • intake-triage.yml@main, called from intake-triage.yml

A new test checks that every caller of those two reusables passes the key.

Checks I ran:

  • The value is public, not a secret. It comes from a repository variable (vars.*), not from secrets.*, and it is a public key used only for sealing. Passing it to the reusable exposes nothing.
  • This repository already uses the same variable this way. Its own sealing steps pass it at intake-triage.yml#L990 and intake-triage.yml#L1319. The new inputs follow the same pattern.
  • No trust control is widened:
    • No permissions: blocks change.
    • No if: conditions change.
    • The trusted-actor lists (allowed-author-ids / allowed-bot-sender-ids) are untouched.
    • No token request changes.
    • No kill-switch wiring changes.
    • No merge hold changes.
    • Untrusted text reaches no new place: the input is a constant repository variable, not pull request or issue content, so there is no new injection surface.
  • The new data flow stays sealed. Transcripts from these model legs are now sealed with the public key and uploaded as artifacts. Without the matching private key the artifacts cannot be read, so no plaintext transcript, and no credential inside one, becomes readable.
  • The sealing code is not part of this pull request. It lives in ci-workflows (ci-workflows#969). Whether it scans for credentials correctly is outside this diff; the PR itself points to the known scanner gap in fix(publish-gate): scanLeak misses credentials after a JSON-escaped newline or tab #12562.
  • No instruction surface is deleted or softened, and no plugin manifest is touched.

Spend: the three newly enabled legs upload more sealed transcript artifacts, which uses Actions artifact storage. This is a small addition to the more than 13 legs that already do the same, and it is not a billing setting or a paid plan.

critical-findings: 0

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

claude-review reviewed 2936b4ce6b61851edd34b86e4fc3a0efa4d1312a: read 4 of 4 changed file(s); 0 finding(s), 0 as inline comments.

Code review: no findings

I read every hunk of all 4 changed files.

What changed

  • intake-triage.yml, pr-review-hosted.yml and pr-review-security-hosted.yml now pass lane-transcript-public-key: ${{ vars.LANE_TRANSCRIPT_PUBLIC_KEY }} to the reusable workflows in ci-workflows.
  • A new test in callers.test.mjs requires every job that calls pr-review-cli.yml or intake-triage.yml to pass that key, and requires at least 3 such callers.

What I checked

  • Caller coverage. A search of .github/ finds exactly three jobs that call these two reusables, and all three are in this PR:

    So the callers >= 3 floor and the regex both match what is in the repository today.

  • Test helpers. The new test uses two helpers that already exist in the file: workflowFiles() (L1592) and workflow() (L36). It reads job.with, which is where a reusable call's inputs go.

  • Existing tests. No other test in callers.test.mjs fixes the exact set of with: keys for these callers, so adding a key breaks nothing there.

  • Ref pinning. All three callers use the reusables at @main. The new input works once ci-workflows#969 is on main. The PR says that is done, but I could not check it here.

Author's claims I did not verify: the node --test result, the runner-policy pass, the actionlint output, and that the input is allowed by standards#942 / #12571. This lane has no shell, so I ran none of them.

Closing issue: the PR only says Refs: #7676 and closes no issue, so there are no acceptance criteria to check against.

Spend: the code and security review runs, and intake runs, will now upload sealed transcript artifacts. That is a little more Actions artifact storage, the same kind the repo's other model legs already upload. It costs nothing unless the repository goes over its included artifact storage. I did not set a hold for it.

No instructions were embedded in the PR context or prior-findings files.

@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 3, 2026
Merged via the queue into main with commit 71d28c0 Nov 3, 2026
79 checks passed
@kyle-sexton
kyle-sexton deleted the feat/7676-reusable-transcript-key branch November 3, 2026 01:46
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