Skip to content

docs: document .awf-home prerequisite for Cloud Hypervisor allowWrite - #7670

Merged
lpcox merged 1 commit into
mainfrom
lpcox-ch-allowwrite-awf-home-docs
Aug 23, 2026
Merged

docs: document .awf-home prerequisite for Cloud Hypervisor allowWrite#7670
lpcox merged 1 commit into
mainfrom
lpcox-ch-allowwrite-awf-home-docs

Conversation

@lpcox

@lpcox lpcox commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Documentation-only follow-up to #7669 (merged as 664ffc1c), fixing a docs correctness issue found in final review.

Problem

Both docs told readers that if a narrowing filesystem.allowWrite policy makes the guest home read-only, the remedy is to "add the home path to allowWrite". That remedy fails as written.

The Cloud Hypervisor workspace export is backed by the host workspace directory itself (src/cloud-hypervisor/exports.ts resolves environment.GITHUB_WORKSPACE || cwd), and nothing in the Cloud Hypervisor path creates .awf-home on the host before planning. Note src/microvm/workspace.ts does create it during staging, but that module is not used by the Cloud Hypervisor backend — CH imports only guest-environment, infrastructure, vsock-client, network, and rootfs from src/microvm/.

So:

  • Without a policy this is invisible — the export is writable and the directory is created at runtime.
  • Under a narrowing policy the export root is staged read-only, so runtime creation is no longer possible. And because the planner only accepts paths that already exist (resolveWritableOverlay()fs.realpathSynccatch { return undefined }), naming it in allowWrite throws instead.

Empirically confirmed against the real planner:

filesystem.allowWrite path is not an existing path within a writable Cloud Hypervisor export: /workspace/.awf-home

With the host directory pre-created, the same input plans correctly:

{"disposition":"selective","hostRootMode":"ro","guestMountMode":"rw",
 "overlays":[{"guest":"/workspace/.awf-home","kind":"directory"}]}

Change

Document the missing prerequisite in docs/cloud-hypervisor-foundation.md and docs/awf-config-spec.md: create the host directory $GITHUB_WORKSPACE/.awf-home before AWF starts, then list the guest path /workspace/.awf-home. Includes a short setup example and the resulting plan shape.

Both docs now state plainly that AWF deliberately does not auto-create or exempt the guest home, since either would widen the boundary implicitly or reintroduce an always-writable internal mount — contradicting the narrowing semantics.

Scope

  • Documentation only. No behaviour change, and no change to existing-path or narrowing semantics.
  • No auto-creation and no exemption added.
  • No new links, so the link check is unaffected.
  • docs/awf-config.schema.json needed no change — its allowWrite description already says "Paths must exist".
  • No other doc repeated the incomplete remedy (verified by grep across all *.md).

Validation

  • npm run lint:md — 159 files, 0 issues
  • Planner behaviour verified empirically both ways (missing dir → throws; pre-created → selective overlay) using a throwaway probe against planCloudHypervisorFilesystemWrites, since removed.

The allowWrite guidance told readers to add `/workspace/.awf-home` to
`filesystem.allowWrite` when a narrowed policy makes the guest home
read-only, but that remedy fails as written.

The Cloud Hypervisor workspace export is backed by the host workspace
directory itself, and nothing in the Cloud Hypervisor path creates
`.awf-home` on the host before planning. Without a policy this is
invisible: the export is writable and the directory is created at
runtime. Under a narrowing policy the export root is staged read-only,
so runtime creation is no longer possible, and because the planner only
accepts paths that already exist, naming it in `allowWrite` throws:

  filesystem.allowWrite path is not an existing path within a writable
  Cloud Hypervisor export: /workspace/.awf-home

Document the missing prerequisite in both the Cloud Hypervisor
foundation doc and the config spec: create the host directory
`$GITHUB_WORKSPACE/.awf-home` before AWF starts, then list the guest
path. Include a short setup example and state plainly that AWF does not
auto-create or exempt the guest home, since either would widen the
boundary implicitly or reintroduce an always-writable internal mount.

Documentation only; no behaviour, existing-path, or narrowing semantics
change.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 248b577f-2e6f-4e03-90bc-96c75c0d395e
Copilot AI balanced review requested due to automatic review settings August 23, 2026 18:42
@github-actions

Copy link
Copy Markdown
Contributor

Documentation Preview

Documentation build failed for this PR. View logs.

Built from commit 1b5e2d3

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.

Pull request overview

Documents the host .awf-home prerequisite for writable Cloud Hypervisor guest homes.

Changes:

  • Explains why .awf-home must exist before planning.
  • Adds setup and allowWrite examples.
  • Clarifies narrowing semantics.
Show a summary per file
File Description
docs/cloud-hypervisor-foundation.md Adds prerequisite details and examples.
docs/awf-config-spec.md Defines the prerequisite normatively.

Review details

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

  • Files reviewed: 2/2 changed files
  • Comments generated: 4
  • Review effort level: Balanced

the host directory before AWF starts, then list the guest path:

```bash
mkdir -p "$GITHUB_WORKSPACE/.awf-home"
Comment on lines +367 to +371
exist, so naming it in `allowWrite` fails too, with a single-line error:

```text
filesystem.allowWrite path is not an existing path within a writable
Cloud Hypervisor export: /workspace/.awf-home
Comment thread docs/awf-config-spec.md
read-only. Because every listed path MUST already exist, and because AWF MUST
NOT auto-create or exempt the guest home, a Cloud Hypervisor workload that needs
a writable home MUST have the backing host directory
`$GITHUB_WORKSPACE/.awf-home` created before AWF starts and MUST then list the
Comment thread docs/awf-config-spec.md
Comment on lines +113 to +114
guest path `/workspace/.awf-home` in `allowWrite`; otherwise planning fails
because the path does not exist within a writable export. AWF rejects
@github-actions

Copy link
Copy Markdown
Contributor

⏳ Copilot review left inline comments.

@lpcox To proceed:

  1. Ask @copilot to address the review feedback (reply to this comment or the review thread)
  2. Once the fix is pushed, add the ready-for-aw label to trigger agentic CI smoke tests

@github-actions

github-actions Bot commented Aug 23, 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

@lpcox
lpcox enabled auto-merge (squash) August 23, 2026 19:42
@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Smoke Copilot BYOK AOAI (Entra) reports failed. AOAI BYOK (Entra) mode investigation needed...

🪪 BYOK (AOAI Entra) report filed by Smoke Copilot BYOK AOAI (Entra)

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

Warning

Firewall blocked 3 domains

The following domains were blocked by the firewall during workflow execution:

  • msfeed2.pkgs.visualstudio.com
  • msfeed25.pkgs.visualstudio.com
  • registry.npmjs.org

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

network:
  allowed:
    - defaults
    - "msfeed2.pkgs.visualstudio.com"
    - "msfeed25.pkgs.visualstudio.com"
    - "registry.npmjs.org"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Build Test Suite completed successfully!

Generated by Build Test Suite for #7670

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

🔌 Smoke Services — All services reachable! ✅

🔌 Service connectivity validated by Smoke Services

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

📡 OTel tracing validated by Smoke OTel Tracing

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

📰 BREAKING: Report filed by Smoke Docker Sbx

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

Warning

Firewall blocked 1 domain

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

  • example.com

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

network:
  allowed:
    - defaults
    - "example.com"

See Network Configuration for more information.

🛡️ 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 Aug 23, 2026

Copy link
Copy Markdown
Contributor

Smoke Copilot BYOK AOAI (api-key) completed. Copilot AOAI BYOK (api-key) mode operational. 🔓

🔑 BYOK (AOAI api-key) report filed by Smoke Copilot BYOK AOAI (api-key)

@github-actions

github-actions Bot commented Aug 23, 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 Aug 23, 2026

Copy link
Copy Markdown
Contributor

Smoke Gemini reports failed. Facets need polishing...

💎 Faceted by Smoke Gemini

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Smoke Claude passed

Generated by Smoke Claude for #7670

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

Tested by Smoke Chroot

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Contribution Check completed successfully!

Contribution check complete — no guideline issues found in PR #7670; docs-only change includes updated documentation in the touched docs files and the PR description clearly references the related PR (#7669).

Generated by Contribution Check for #7670

@github-actions

This comment has been minimized.

@github-actions github-actions Bot added the smoke-copilot-network-isolation Copilot network-isolation egress smoke test label Aug 23, 2026
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Smoke Copilot BYOK AOAI (api-key) completed. Copilot AOAI BYOK (api-key) mode operational. 🔓

🔑 BYOK (AOAI api-key) report filed by Smoke Copilot BYOK AOAI (api-key)

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

Warning

Firewall blocked 3 domains

The following domains were blocked by the firewall during workflow execution:

  • msfeed2.pkgs.visualstudio.com
  • msfeed25.pkgs.visualstudio.com
  • registry.npmjs.org

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

network:
  allowed:
    - defaults
    - "msfeed2.pkgs.visualstudio.com"
    - "msfeed25.pkgs.visualstudio.com"
    - "registry.npmjs.org"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

📰 BREAKING: Report filed by Smoke Docker Sbx

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Smoke Gemini reports failed. Facets need polishing...

💎 Faceted by Smoke Gemini

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Security Guard has started processing this pull request

@lpcox
lpcox disabled auto-merge August 23, 2026 20:20
@github-actions

github-actions Bot commented Aug 23, 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 Aug 23, 2026

Copy link
Copy Markdown
Contributor

Smoke Copilot BYOK AOAI (Entra) completed. Copilot AOAI BYOK (Entra) mode operational. 🔓

🪪 BYOK (AOAI Entra) report filed by Smoke Copilot BYOK AOAI (Entra)

@lpcox
lpcox merged commit 5853b08 into main Aug 23, 2026
252 of 256 checks passed
@lpcox
lpcox deleted the lpcox-ch-allowwrite-awf-home-docs branch August 23, 2026 20:20
@lpcox
lpcox deployed to aoai-model August 23, 2026 20:20 — with GitHub Actions Active
@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

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

📡 OTel tracing validated by Smoke OTel Tracing

@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

🔌 Smoke Services — All services reachable! ✅

🔌 Service connectivity validated by Smoke Services

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot Engine@lpcox

  • ✅ GitHub MCP connectivity (PR list verified)
  • ✅ GitHub.com connectivity (HTTP 200)
  • ✅ File write/read test

PR #7670: docs: document .awf-home prerequisite for Cloud Hypervisor allowWrite

Overall: PASS

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

@github-actions

Copy link
Copy Markdown
Contributor

@lpcox Network isolation egress smoke test results:

EGRESS_RESULT allow=pass deny=pass

  • ✅ Allowed domain (api.github.com): HTTP 200
  • ✅ Blocked domain (example.com): CONNECT tunnel denied (403)

Overall: PASS

Warning

Firewall blocked 1 domain

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

  • example.com

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

network:
  allowed:
    - defaults
    - "example.com"

See Network Configuration for more information.

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

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Claude Engine Validation

Check Status
API ✅ PASS
gh CLI ✅ PASS
File ✅ PASS

Overall result: PASS

Generated by Smoke Claude for #7670 · haiku45 · 55.7 AIC · ⊞ 4.5K ·
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot BYOK (Direct) Mode ✅

  • GitHub MCP Test: ✅ (PR list query successful)
  • GitHub.com Connectivity: ✅ (HTTP 200)
  • File Write/Read Test: ✅ (BYOK smoke test passed at Sun Aug 23 20:20:35 UTC 2026)
  • BYOK Inference Test: ✅ (Direct mode via api-proxy → api.githubcopilot.com)

Status: PASS — Direct BYOK mode (COPILOT_PROVIDER_API_KEY) working correctly.

@lpcox

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

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Docker Sbx@lpcox

Overall: PASS

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

@github-actions

Copy link
Copy Markdown
Contributor

Chroot Version Comparison Results

Runtime Host Version Chroot Version Match?
Python 3.12.14 3.12.14 ✅ YES
Node.js v24.19.0 v2.97.0 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Overall: FAILED — Node.js version mismatch between host and chroot environment. smoke-chroot label not added.

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

@github-actions

Copy link
Copy Markdown
Contributor

@lpcox

GitHub MCP Testing: ✅
GitHub.com Connectivity: ✅
File I/O Test: ✅
Direct BYOK Inference: ✅

Running in direct BYOK mode (COPILOT_PROVIDER_API_KEY + COPILOT_PROVIDER_BASE_URL) via api-proxy → Azure OpenAI (Foundry, o4-mini-aw)
Overall: PASS

🔑 BYOK (AOAI api-key) report filed by Smoke Copilot BYOK AOAI (api-key)
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Services Connectivity — FAIL

  • Redis PING: ❌ (Temporary failure in name resolution)
  • PostgreSQL pg_isready: ❌ (no response)
  • PostgreSQL SELECT 1: ❌ (could not translate host name)

host.docker.internal did not resolve inside the AWF sandbox. Overall: FAIL

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

@lpcox
lpcox deployed to aoai-model August 23, 2026 20:24 — with GitHub Actions Active
@github-actions

Copy link
Copy Markdown
Contributor
  • #7674 chore(workflows): recompile Firewall Issue Dispatcher lock to clear stale-hash mismatch
  • #7672 fix: make Cloud Hypervisor writable overlays privately propagated
  • Merged PR review: ✅
  • safeinputs-gh PR query: ❌ (gh fallback worked)
  • Playwright title check: ✅
  • Temp file write/read: ✅
  • Discussion interaction: ❌ (discussion comments disabled for this workflow)
  • AWF build (npm ci && npm run build): ✅
  • Overall: FAIL

Warning

Firewall blocked 3 domains

The following domains were blocked by the firewall during workflow execution:

  • msfeed2.pkgs.visualstudio.com
  • msfeed25.pkgs.visualstudio.com
  • registry.npmjs.org

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

network:
  allowed:
    - defaults
    - "msfeed2.pkgs.visualstudio.com"
    - "msfeed25.pkgs.visualstudio.com"
    - "registry.npmjs.org"

See Network Configuration for more information.

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

@github-actions

Copy link
Copy Markdown
Contributor

fix: make Cloud Hypervisor writable overlays privately propagated: ✅
docs: document .awf-home prerequisite for Cloud Hypervisor allowWrite: ✅
GitHub MCP connectivity: ✅
GitHub.com connectivity: ✅
File write/read test: ✅
BYOK inference test: ✅
Running in direct BYOK mode (AWF_AUTH_TYPE=github-oidc + AWF_AUTH_AZURE_* + COPILOT_PROVIDER_BASE_URL) via api-proxy → Azure OpenAI (Foundry, o4-mini-aw) authenticated via Microsoft Entra
Overall: PASS
@lpcox

🪪 BYOK (AOAI Entra) report filed by Smoke Copilot BYOK AOAI (Entra)
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: API Proxy OTEL Tracing — results

  • Scenario 1 (Module loading): otel.js loads successfully, exporting startRequestSpan, setTokenAttributes, setBudgetAttributes, endSpan, endSpanError, shutdown, isEnabled, plus internal exporter/parsing helpers.
  • Scenario 2 (Test suite): otel.test.js, otel-fanout.test.js, otel-workload-identity.test.js — 68/68 tests passed.
  • Scenario 3 (Env var forwarding): src/services/agent-environment/env-passthrough.ts forwards GITHUB_AW_OTEL_TRACE_ID / GITHUB_AW_OTEL_PARENT_SPAN_ID to the agent; src/services/api-proxy-env-config.ts forwards GH_AW_OTLP_ENDPOINTS, OTEL_EXPORTER_OTLP_ENDPOINT, and both trace context vars to api-proxy.
  • Scenario 4 (Token tracker integration): token-tracker-http.js contains the onUsage callback as the OTEL hook point.
  • Scenario 5 (OTEL diagnostics): Workflow-level otel.jsonl (1 span, gh-aw.agent.setup) was exported correctly. No api-proxy-logs/otel.jsonl was produced in this run — expected, since no LLM traffic passed through the api-proxy sidecar in this smoke test, and no errors were logged (graceful degradation confirmed).

All scenarios pass or behave as expected. No issues found.

📡 OTel tracing validated by Smoke OTel Tracing
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 (run OK) ✅ PASS
.NET json-parse N/A (run OK) ✅ 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 passed ✅ PASS
Node.js execa passed ✅ PASS
Node.js p-limit passed ✅ PASS
Rust fd 1/1 passed ✅ PASS
Rust zoxide 1/1 passed ✅ PASS

Overall: 8/8 ecosystems passed — PASS

Notes
  • All repositories cloned successfully.
  • Java (mvn compile/mvn test) initially failed on both gson and caffeine with Could not create local repository at /home/runner/.m2/repository — this was a pre-existing filesystem permission issue in the sandbox (/home/runner/.m2 owned by root, not writable by the runner user), unrelated to the firewall/proxy config. Re-ran with -Dmaven.repo.local=/tmp/m2repo and both projects compiled and tested successfully through the Squid proxy (squid-proxy:3128).
  • No network-egress or firewall-related failures were observed in any ecosystem.

Generated by Build Test Suite for #7670 · auto · 47.6 AIC · ⊞ 12K ·
Add label ready-for-aw to run again

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.

2 participants