Structured deferral list addressing critique finding C2. Each entry has: trigger condition, acceptance criteria, target milestone in v1.1+. Cross-linked from
docs/issue-candidates.md. The list closes the loop between v1.0's wedge-tier focus (Team / Pro / Free) and v1.1's GHEC + CIS WorkBench expansion.
Surface: @hulumi/drift/adapters/GithubAuditLogAdapter (analogue of cloudtrail.ts for the GitHub side).
Trigger condition: A wedge-adjacent persona on GitHub Enterprise Cloud asks for full-fidelity drift detection, OR the v1.0 webhook-fallback adapter accumulates >3 user-reported gaps that the audit-log REST API would close.
Acceptance criteria:
- Adapter reads
/enterprises/{enterprise}/audit-logwith classic PAT carryingread:audit_log(the only auth mode GitHub accepts on this endpoint family — see GitHub REST API docs). - Adapter is gated on
GithubWebhookFallbackAdapterArgs.tier !== "ghec"— when GHEC is detected, the audit-log adapter takes precedence; when not GHEC, it never instantiates. OrgFoundationaccepts a secondgithub.Providerinstance dedicated to the classic-PAT auth path (the Hulumi-side runtime decision: GitHub App default + classic-PAT secondary for audit-log surface only).- Verdict matrix
tierDegraded: falsefor GHEC consumers using this adapter. - BDD scenario: classic-PAT auth required — adapter refuses GitHub App token, refuses fine-grained PAT, refuses OAuth-app token (matches GitHub's documented constraint).
Target milestone: v1.1 M1 (treat as a fresh single-milestone runbook hulumi-github-v1.1-audit-log).
Surface: packages/baseline/src/github/org-security-defaults.ts — CodeSecurityConfigurationsBackend issues real POST/PATCH/DELETE against /orgs/{org}/code-security/configurations and …/{config_id}/attach via pulumi.dynamic.Resource with proper REST hooks.
Trigger condition: M2 shipped a thin pulumi.ComponentResource placeholder for the CSC backend because pulumi.dynamic.Resource triggers ERR_TRACE_EVENTS_UNAVAILABLE under vitest's worker pool (the AWS-side documented gotcha). Real REST integration ships once either (a) the dynamic-resource pattern is wired with a vitest-compatible mock fence, or (b) GitHub publishes a first-class @pulumi/github resource for Code Security Configurations (currently absent in v6.13.0; tracked upstream in pulumi/pulumi-github).
Acceptance criteria:
- Real
pulumi.dynamic.ResourceProvidercreate / update / delete hooks issuing REST calls. - Errors surface with HTTP status + endpoint (per M2 forbidden shortcut b: never silent fallback to flat-fields).
- Token-redaction layer (M2
redactTokens) applies to error messages. - Integration test exercises a real sandbox-org CSC create + attach + destroy round-trip.
Target milestone: v1.1 M1 (alongside D1's audit-log adapter, since both rely on REST escape-hatch infrastructure).
Surface: @hulumi/baseline.github.OrgFoundation extension to set EnterpriseSecurityAnalysisSettings when tier is GHEC.
Trigger condition: D1 lands AND a GHEC user requests org-default extensions (secretScanningValidityChecksEnabled, secretScanningPushProtectionCustomLink).
Acceptance criteria:
OrgFoundationArgs.enterpriseSecurityAnalysis: { validityChecksEnabled?: boolean, pushProtectionCustomLink?: string }(only valid when tier is GHEC; runtime check refuses otherwise).- New mappings in
cis-github.tsif WorkBench section access becomes available.
Target milestone: v1.1 M2 (after D1).
Surface: @hulumi/baseline.github.OrgFoundation sub-component org-audit-log-streams.ts writing to S3 / Azure Blob / Azure Event Hubs / Datadog / GCS / Splunk via REST.
Trigger condition: Customer demand from a GHEC user wanting Hulumi-managed streaming destinations alongside D1's adapter.
Acceptance criteria:
- REST escape hatch via
pulumi.dynamic.Resourcemirroring M2's CSC backend pattern. - Classic-PAT-authed (same constraint as D1's adapter — uniform across all
/enterprises/{enterprise}/audit-log/*endpoints). - Six destinations supported (S3, Azure Blob, Azure Event Hubs, Datadog, GCS, Splunk).
- BDD: each destination's create/update/delete REST flow.
- Idempotency: stream-key rotation does not break existing streams.
Target milestone: v1.1 M3 (after D1).
Surface: packages/baseline/src/mappings/cis-github.ts — replace every TODO-WORKBENCH placeholder with verified CIS section IDs.
Trigger condition: CIS WorkBench access secured (membership purchase OR access-grant negotiation OR a public release of the IDs without WorkBench gating).
Acceptance criteria:
- Every component's mapping array contains real CIS GitHub Benchmark v1.2.0 section IDs (no
TODO-WORKBENCHentries). license-boundary-lintextension that rejectsTODO-WORKBENCHonrelease-*git tags (M3 deliverable) is the gate.- BDD scenario: every entry traces to a public CIS resource (e.g., the WorkBench search URL or the published Benchmark PDF table-of-contents).
CisGithubV1Packplaceholder rules become real mandatory rules.
Target milestone: v1.1+ — gated on CIS WorkBench access, which has no fixed timeline.
Surface: skills/hulumi-threat-model/scenarios/github-app-org-admin-scope.json.
Trigger condition: User feedback from v1.0 launch identifies that the four shipped scenarios (OIDC, Actions supply-chain, App tokens, self-hosted runners) miss the "Vercel April 2026"-style scenario where a GitHub App with org-admin permissions is compromised.
Acceptance criteria:
- Scenario JSON + threat-model exemplar following the M1 shape.
- Cites OWASP ATLAS T1195, GitHub App permission model, named 2025–2026 incidents (Vercel April 2026, OpenAI Codex Feb 2026).
- Linked from existing scenarios where overlap exists (the App-token-exposure scenario from M1 forward-references this when D5 lands).
Target milestone: v1.2 (one minor after v1.1's GHEC work).
Surface: packages/policies/src/github/g-oidc-1.ts extension covering Oracle Cloud (OCI) Identity Domains + IBM Cloud Workload Identity Federation.
Trigger condition: User feedback identifies a real customer running Hulumi-for-GitHub against OCI or IBM Cloud (low-probability — AWS / Azure / GCP cover the wedge persona).
Acceptance criteria:
- Two new cloud-specific resource-traversal paths in
G_OIDC_1. - BDD coverage parallel to M3's existing AWS / Azure / GCP variants.
- No regression on existing three-cloud coverage.
Target milestone: v1.2+ — opportunistic.
docs/issue-candidates.mdsynced with this file at every release.AGENTS.mdcross-tool standard alignment IF any new revision lands by v1.1 (track agentskills.io for spec changes).@pulumi/githubmajor-version bump — when Pulumi releases v7.x, the cooling-off CI gate flags it; a coordinated v1.x bump runbook tracks the migration.
Maintainer reviews this file at every release tag. Move "trigger condition met" entries into a fresh single-milestone runbook (hulumi-github-v1.1-<deferral-id>.md). Treat all entries as defer until their trigger condition holds — do not treat the deferral list as a backlog to grind through.