Skip to content

Support pinned AWF installs without runtime attestation lookups - #11558

Merged
lpcox merged 10 commits into
mainfrom
copilot/simplify-awf-installation
Nov 14, 2026
Merged

lpcox merged 10 commits into
mainfrom
copilot/simplify-awf-installation

Conversation

@lpcox

@lpcox lpcox commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

AWF installation repeats online provenance checks even when consumers independently pin the checksum manifest, introducing GitHub authentication and API-quota dependencies. This change separates ordinary CLI installation from privileged-helper provisioning.

  • Pinned CLI installation

    • Add --checksums-sha256 with an explicit release version.
    • Authenticate the manifest before verifying the selected payload; reject missing, malformed, or duplicate checksum entries.
    • Require no gh, token, or attestation lookup. Add --rootless for installation into $HOME/.local/bin.
  • Privileged provisioning

    • Require explicit --install-enclave-storage-helper opt-in.
    • Retain identity, manifest, CLI, and helper attestations—even with a manifest pin.
    • Preserve attestation verification for unpinned installs; never fall back after verification failure.
  • Trust contract and adoption

    • Document provenance verification during trusted pin review and exact-byte verification during installation.
    • Provide gh-aw adoption guidance; downstream implementation remains separate.
bash ./install.sh vX.Y.Z \
  --checksums-sha256 "$REVIEWED_MANIFEST_SHA256" \
  --rootless

The digest must come from independently reviewed configuration, not the executable’s download channel.

lpcox and others added 2 commits November 13, 2026 22:39
…on lookups

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
…rtifact

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
@lpcox lpcox changed the title [WIP] Simplify AWF installation and reduce runtime attestation API dependencies Support pinned AWF installs without runtime attestation lookups Nov 13, 2026
@lpcox
lpcox marked this pull request as ready for review November 13, 2026 22:56
Copilot AI dynamic review requested due to automatic review settings November 13, 2026 22:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Installer failures can bypass diagnostics and Node.js fallback, checksum matching can accept the wrong filename, and helper-reinstallation guidance omits the required flag.

3 open issues
What changed in this PR

Introduces checksum-pinned AWF CLI installation without runtime attestation lookups, while retaining stronger verification for privileged enclave-helper provisioning.

Changes:

  • Add explicit-version manifest pins and rootless installation.
  • Require explicit helper provisioning and preserve its attestation checks.
  • Expand regression coverage and document the trust contract and gh-aw adoption guidance.
File Description
scripts/​ci/​release-bootstrap-provenance.test.ts Covers pinned installs, rootless mode, verification failures, and helper attestations.
README.md Adds installation examples and explains helper opt-in.
install.sh Implements manifest pins, rootless installation, and separate helper provisioning.
docs/​releasing.md Defines verification guarantees, trusted pin review, and downstream adoption.
docs/​enclaves-architecture.md Clarifies explicit provisioning requirements for privileged storage helpers.

Review effort: Max (dynamic)

Comment thread install.sh
@@ -1,9 +1,9 @@
#!/bin/bash
set -e
set -e -o pipefail
Comment thread install.sh Outdated
# Format: "checksum filename" (two spaces) - use exact filename match at end of line
local expected_sum
expected_sum=$(awk -v fname="$BINARY_NAME" '$2 == fname {print $1; exit}' "$checksums_file")
expected_sum=$(awk -v fname="$BINARY_NAME" '$2 == fname || $2 == "*" fname {count++; digest=$1} END {if (count == 1) print digest}' "$checksums_file")
Comment thread install.sh
# Only the authenticated, version-matched helper is authorized, never mount,
# chown, a shell, or an arbitrary Python script.
install_enclave_storage_helper() {
[ "$INSTALL_HELPER" = true ] || return 0
@lpcox

lpcox commented Nov 13, 2026

Copy link
Copy Markdown
Collaborator Author

@copilot address review feedback

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

Copilot AI commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

@copilot address review feedback

Addressed in 6776546: guarded the failing lookups, enforced exact checksum filenames with regression coverage, and updated helper reinstall guidance to require --install-enclave-storage-helper.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Copilot review passed with no inline comments.

@lpcox Add the ready-for-aw label to this PR to trigger agentic CI smoke tests.

@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Documentation Preview

Documentation has been built for this PR.

Download preview artifact

To view locally:

  1. Download the docs-preview-pr-11558 artifact from the workflow run
  2. Unzip and open index.html in your browser

Built from commit 989f363

@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

✅ Smoke Copilot BYOK completed. Copilot BYOK mode operational. 🔓

🔑 BYOK report filed by Smoke Copilot BYOK

@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟

Smoke Codex

Outcome: reported_action

The agent completed and reported one or more actions. The no-op output is a completion signal, not a claim that no action was taken.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Smoke Codex · gpt54 · ~18 AIC · ⊞ 22.5K · ◷

🔮 The oracle has spoken through Smoke Codex

@github-actions

Copy link
Copy Markdown
Contributor

📡 Smoke OTel Tracing is starting OTel tracing validation...

@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅

Smoke Copilot Network Isolation

Outcome: reported_action

The agent completed and reported one or more actions. The no-op output is a completion signal, not a claim that no action was taken.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Smoke Copilot Network Isolation · haiku45 · ~37 AIC · ⊞ 6.0K · ◷

🛡️ Egress verdict from Smoke Copilot Network Isolation

@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

✅ Smoke Claude passed

Generated by Smoke Claude for #11558

@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

🔌 Smoke Services — All services reachable! ✅

🔌 Service connectivity validated by Smoke Services

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Security Guard has started processing this pull request

@github-actions

Copy link
Copy Markdown
Contributor

Testing chroot feature Smoke Chroot is validating functionality...

@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Smoke Cloud Hypervisor completed. Cloud Hypervisor + Copilot passed.

Cloud Hypervisor + Copilot smoke test by Smoke Cloud Hypervisor

@github-actions

This comment has been minimized.

Retain skip-pull for prepared images only when routing is disabled. Capture actual generated AWF arguments in regressions and run CLI flag validation before routing bootstrap.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅

🛡️ Egress verdict from Smoke Copilot Network Isolation

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Security Guard has started processing this pull request

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

✅ Build Test Suite completed successfully!

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • 169.254.169.254

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "169.254.169.254"

See Network Configuration for more information.

Generated by Build Test Suite for #11558

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

📰 BREAKING: Report filed by Smoke Copilot

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟

Smoke Codex

Outcome: reported_action

The agent completed and reported one or more actions. The no-op output is a completion signal, not a claim that no action was taken.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Smoke Codex · gpt54 · ~14 AIC · ⊞ 22.5K · ◷

🔮 The oracle has spoken through Smoke Codex

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Smoke Cloud Hypervisor completed. Cloud Hypervisor + Copilot passed.

Cloud Hypervisor + Copilot smoke test by Smoke Cloud Hypervisor

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

✅ Smoke Copilot BYOK completed. Copilot BYOK mode operational. 🔓

🔑 BYOK report filed by Smoke Copilot BYOK

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Chroot tests passed! Smoke Chroot - All security and functionality tests succeeded.

Smoke Chroot

Outcome: reported_action

The agent completed and reported one or more actions. The no-op output is a completion signal, not a claim that no action was taken.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Smoke Chroot · routed: haiku55 xhigh · ~1 AIC · ⊞ 2.6K · ◷

Tested by Smoke Chroot

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

📡 Smoke OTel Tracing completed. All tracing scenarios validated. ✅

Smoke OTel Tracing

Outcome: reported_action

The agent completed and reported one or more actions. The no-op output is a completion signal, not a claim that no action was taken.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Smoke OTel Tracing · routed: haiku55 xhigh · ~2 AIC · ⊞ 3.0K · ◷

📡 OTel tracing validated by Smoke OTel Tracing

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

🔌 Smoke Services — All services reachable! ✅

🔌 Service connectivity validated by Smoke Services

@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

✅ Smoke Claude passed

Generated by Smoke Claude for #11558

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot engine for PR #11558

Overall: PASS

Author: @lpcox | Assignees: @lpcox, Copilot

📰 BREAKING: Report filed by Smoke Copilot
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Cloud Hypervisor + Copilot smoke test

  1. Merged PR lookup: PASS
  2. github.com connectivity: PASS (HTTP 200)
  3. File write/read: PASS
  4. example.com blocked: PASS (HTTP 000)

Overall: PASS

Cloud Hypervisor + Copilot smoke test by Smoke Cloud Hypervisor
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Merged PRs: chore: refresh canonical model sources; Prevent CI Doctor updater from exhausting its budget without saving progress
PR details: ✅
Playwright title check: ❌
Temp file write/read: ✅
AWF build: ✅
Overall: FAIL

🔮 The oracle has spoken through Smoke Codex
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot BYOK (Direct) Mode ✅ PASS

✅ MCP connectivity verified (gh-aw-firewall recent PRs fetched)
✅ github.com HTTP connectivity (code 200)
✅ File write/read verified
✅ BYOK inference path active (agent → api-proxy → api.githubcopilot.com)

Running in direct BYOK mode via COPILOT_PROVIDER_API_KEY

🔑 BYOK report filed by Smoke Copilot BYOK
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

🏗️ Build Test Suite Results

Ecosystem Project Build/Install Tests Status
Bun elysia ✅ 1/1 passed ✅ PASS
Bun hono ✅ 1/1 passed ✅ PASS
C++ fmt ✅ N/A ✅ PASS
C++ json ✅ N/A ✅ PASS
Deno oak N/A 1/1 passed ✅ PASS
Deno std N/A 1/1 passed ✅ PASS
.NET hello-world ✅ N/A ✅ PASS
.NET json-parse ✅ N/A ✅ PASS
Go color ✅ 1/1 passed ✅ PASS
Go env ✅ 1/1 passed ✅ PASS
Go uuid ✅ 1/1 passed ✅ PASS
Java gson ✅ 1/1 passed ✅ PASS
Java caffeine ✅ 1/1 passed ✅ PASS
Node.js clsx ✅ Script passed ✅ PASS
Node.js execa ✅ Script passed ✅ PASS
Node.js p-limit ✅ Script passed ✅ PASS
Rust fd ✅ 1/1 passed ✅ PASS
Rust zoxide ✅ 1/1 passed ✅ PASS

Overall: 8/8 ecosystems passed — PASS

All 8 repositories cloned successfully. Runner-specific workarounds were needed for three ecosystems. None of them change build or test semantics:

  • .NET: the first-run NuGet migration failed because /run/user/1001 does not exist. I set XDG_RUNTIME_DIR to a private 0700 temp directory.
  • Java: ~/.m2 is root-owned, so Maven used a temp local repo (-Dmaven.repo.local). The JDK cacerts is a dangling symlink with no trusted roots. I built a private truststore from the system CA bundle (121 certs) and kept TLS verification on. The Maven proxy settings.xml was used as specified.
  • Bun / Deno: installed fresh from their official install scripts.

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • 169.254.169.254

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "169.254.169.254"

See Network Configuration for more information.

Generated by Build Test Suite for #11558 · copilot · routed: haiku55 xhigh · ~4 AIC · ⊞ 6.1K · ◷
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Claude Engine Validation

  • API status: ✅ PASS
  • GitHub check: ✅ PASS
  • File status: ✅ PASS

Overall result: PASS

Generated by Smoke Claude for #11558 · claude · haiku45 · ~36 AIC · ⊞ 6.4K · ◷
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke services: ✅ Redis PONG, ✅ pg_isready, ✅ SELECT 1 — PASS

🔌 Service connectivity validated by Smoke Services
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: API Proxy OpenTelemetry Tracing

  • ✅ 1. Module loading: containers/api-proxy/otel.js loads. Exports include startRequestSpan, setTokenAttributes, setBudgetAttributes, endSpan, endSpanError, routerCallTracing, shutdown, isEnabled, plus _-prefixed internals.
  • ✅ 2. Test suite: otel.test.js, otel-fanout.test.js, and otel-workload-identity.test.js pass, 75/75 tests.
  • ✅ 3. Env var forwarding: src/services/agent-environment/env-passthrough.ts forwards GITHUB_AW_OTEL_TRACE_ID, GITHUB_AW_OTEL_PARENT_SPAN_ID, and COPILOT_OTEL_FILE_EXPORTER_PATH. src/services/api-proxy-env-config.ts buildOtelEnv() forwards the OTLP endpoint and header vars, the trace/parent IDs, and OTEL_SERVICE_NAME.
  • ✅ 4. Token tracker integration: onUsage is invoked in containers/api-proxy/token-tracker-http.js (~L476). upstream-token.js calls otel.setTokenAttributes and otel.setBudgetAttributes from that hook.
  • ✅ 5. Diagnostics (informational): /tmp/gh-aw/otel.jsonl contains 1 span, gh-aw.agent.setup, with workflow resource attributes and a parent span ID. No api-proxy gen_ai.* request spans were exported. The agent log shows only health-check and /reflect calls, with no proxied LLM requests, so this is expected for this run.

No unexpected failures, so no issue was filed.

📡 OTel tracing validated by Smoke OTel Tracing
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot Network Isolation ✅

Both egress checks passed successfully.

Check Result Details
Allowed domain (api.github.com) ✅ PASS HTTP 200 response received
Blocked domain (example.com) ✅ PASS Connection rejected with SNI guard

EGRESS_RESULT allow=pass deny=pass

Overall: PASS — Network isolation is working as expected.

🛡️ Egress verdict from Smoke Copilot Network Isolation
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Chroot version comparison

Runtime Host Version Chroot Version Match?
Python Python 3.12.16 Python 3.12.16 ✅ YES
Node.js v24.22.2 v22.23.2 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Result: ALL_TESTS_PASSED=false. Python and Go match, but Node.js differs between host and chroot (v24 vs v22), so the smoke-chroot label was not added.

Tested by Smoke Chroot
Add label ready-for-aw to run again

@lpcox
lpcox merged commit 124debf into main Nov 14, 2026
149 of 151 checks passed
@lpcox
lpcox deleted the copilot/simplify-awf-installation branch November 14, 2026 06:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Simplify AWF installation and reduce runtime attestation API dependencies

3 participants