Skip to content

[Incident] Hourly Product Development blocks its own GitHub API egress #22

Description

@seonghobae

Incident summary

The original failure was a Harden Runner egress parsing defect in the hourly product-development workflow, not an NVIDIA credential failure. Protected-main repairs in PRs #23 and #24 removed the observed GitHub API connection-refused failure while preserving exact egress allowlists, NVIDIA_NIM_API_KEY isolation, credential-free reverification, publisher separation, and the one-proposal authority boundary.

Protected-main evidence already satisfied

Scheduled Hourly Product Development run 31343380043 executed on protected main SHA fb7dab5698ffd24b1a6db0943f1e387f0eda4d31 and completed successfully. The deterministic gh api pull-request gate passed through Harden Runner and exited cleanly with reason=open_pull_request; model, reverification, and publication jobs were correctly skipped because the repository had open PRs.

Therefore closure criteria 1–4 are satisfied:

  1. exact-head repair CI/actionlint/security/review gates passed;
  2. repair reached protected main;
  3. a protected-main scheduled execution passed Harden Runner + GitHub API access;
  4. with an open PR queue, the scheduler exited cleanly at the documented open_pull_request gate.

The canonical documentation graph subsequently reached protected main through PR #25 merge fe9b46f5404f368b311de205c4e647f47db89ab3; PR #29 post-integration audit merged as 59eb6d609a6cbf0699e427e913067d8b0c3beb41.

Remaining closure criterion

Keep this issue open for criterion 5 only:

  • after the PR queue is genuinely drained and release policy permits product development, a protected-main scheduled/manual run must reach the bounded OpenCode/NVIDIA path and either:
    • produce one sealed proposal that passes independent credential-free reverification and the existing publisher boundary, or
    • exit at a documented product/release gate without weakening the deterministic trust boundary.

Do not manufacture an empty PR queue, close valid work prematurely, bypass release blocker #17, broaden egress, expose the NVIDIA key to repository-controlled code, or use COPILOT_GITHUB_TOKEN merely to obtain this proof.

Current dependency order — 2026-08-10

  1. PR fix(release): fail before side effects when Trusted Publishing is unready #30 must finish its exact-head CI/security/review/merge cycle. It adds the repository-side Trusted Publishing release-readiness preflight and ADR-0008.
  2. Release blocker Release operations: complete PyPI Trusted Publishing for 0.2.0 #17 must then complete the external GitHub pypi environment + PyPI Trusted Publisher + public 0.2.0 acceptance path.
  3. Draft PR feat: add incremental mailbox threading with stable identity handoff #20 remains intentionally non-mergeable until Release operations: complete PyPI Trusted Publishing for 0.2.0 #17 closes; after publication it must be refreshed onto the released protected main and fully revalidated.
  4. Only after the truthful product/documentation PR queue is drained and release policy allows model-backed development can criterion 5 execute without violating the product freeze or independent review boundaries.

Queued CI/reviewer/provider time on one item is not an incident blocker for other safe repository work; criterion 5 itself is dependency-gated by the truthful empty-queue/release state above.

Closure evidence required

Close this issue only after criterion 5 records:

  • exact protected source SHA;
  • workflow run/job identities;
  • Harden Runner and model-provider boundary outcome;
  • bounded OpenCode proposal/defer outcome;
  • independent credential-free reverification result when a patch is proposed;
  • publisher/defer result;
  • confirmation that no credential, egress, review-authority, or one-proposal boundary was weakened to obtain the proof.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions