Skip to content

Conversation

@Mossaka
Copy link
Collaborator

@Mossaka Mossaka commented Feb 12, 2026

Summary

Fixes a security vulnerability where sensitive tokens (GITHUB_TOKEN, GH_TOKEN, ANTHROPIC_API_KEY, COPILOT_GITHUB_TOKEN via --env-all) written to /tmp/awf-*/docker-compose.yml in plaintext could be read by code running inside the agent container, since /tmp:/tmp:rw is mounted.

Primary fix: Add a tmpfs overlay on the workDir path (same pattern already used for hiding /tmp/gh-aw/mcp-logs/). The agent container sees an empty in-memory filesystem instead of the real directory containing docker-compose.yml with all tokens. Both normal mode and chroot mode paths are covered. Volume mounts of workDir subdirectories (agent-logs, squid-logs, etc.) map to different container paths, so they are unaffected.

Secondary fix (defense-in-depth): Restrict file permissions on:

  • workDir directory: 0o700 (owner-only access)
  • squid.conf: 0o600 (owner-only read/write)
  • docker-compose.yml: 0o600 (owner-only read/write)

Java workflow fix: Use literal proxy values (squid-proxy:3128) in Maven settings.xml instead of shell variables (${SQUID_PROXY_HOST}/${SQUID_PROXY_PORT}) which AI agents write literally without expansion, causing NumberFormatException.

Changes

  • src/docker-manager.ts: Added workDir to tmpfs overlay list (normal + chroot paths), restricted directory and file permissions
  • src/types.ts: Added tmpfs property to DockerService interface
  • src/docker-manager.test.ts: Added 5 new tests covering tmpfs overlay behavior and file permission restrictions
  • .github/workflows/build-test-java.md: Fixed Maven proxy configuration to use literal values

Test plan

  • All 748 unit tests pass
  • TypeScript compiles successfully
  • ESLint passes (0 errors)
  • CI integration tests pass
  • Verify manually: sudo awf --allow-domains github.com 'cat /tmp/awf-*/docker-compose.yml' should show empty directory

🤖 Generated with Claude Code

Sensitive tokens (GITHUB_TOKEN, ANTHROPIC_API_KEY, etc.) are written in
plaintext to docker-compose.yml inside the workDir (/tmp/awf-*). Since
the agent container mounts /tmp:/tmp:rw, any code inside the container
could read these secrets via `cat /tmp/awf-*/docker-compose.yml`.

Primary fix: Add tmpfs overlay on workDir (same pattern as mcp-logs
hiding) so the agent sees an empty in-memory filesystem instead of the
real directory containing docker-compose.yml with all tokens.

Secondary fix (defense-in-depth): Restrict file permissions on workDir
(0o700) and config files (0o600) so non-root processes on the host
cannot read them either.

Both normal mode and chroot mode are covered with appropriate paths.

Closes #62, closes #206, closes #210

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Copilot AI review requested due to automatic review settings February 12, 2026 05:27
@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

✅ Coverage Check Passed

Overall Coverage

Metric Base PR Delta
Lines 82.25% 82.42% 📈 +0.17%
Statements 82.30% 82.47% 📈 +0.17%
Functions 82.14% 82.14% ➡️ +0.00%
Branches 74.70% 74.80% 📈 +0.10%
📁 Per-file Coverage Changes (1 files)
File Lines (Before → After) Statements (Before → After)
src/docker-manager.ts 83.5% → 84.2% (+0.70%) 82.9% → 83.6% (+0.69%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

@github-actions github-actions bot mentioned this pull request Feb 12, 2026
@github-actions
Copy link
Contributor

Smoke Test Results

Last 2 merged PRs:

✅ GitHub MCP - Read PRs successfully
✅ Playwright - Navigated to github.com (page title: "GitHub · Change is constant. GitHub keeps you ahead. · GitHub")
✅ File Writing - Created test file at /tmp/gh-aw/agent/smoke-test-claude-21934741143.txt
✅ Bash Tool - Verified file content successfully

Overall Status: PASS

AI generated by Smoke Claude

@github-actions
Copy link
Contributor

Bun Build Test Results

Project Install Tests Status
elysia 1/1 PASS
hono 1/1 PASS

Overall: PASS

All Bun projects successfully installed dependencies and passed tests.

AI generated by Build Test Bun

@github-actions
Copy link
Contributor

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

All Deno tests completed successfully.

AI generated by Build Test Deno

@github-actions
Copy link
Contributor

Smoke Test Results

Last 2 merged PRs:

Test Results:
✅ GitHub MCP - Fetched PRs successfully
✅ Playwright - Page title contains "GitHub"
✅ File Writing - Created smoke-test-copilot-21934741139.txt
✅ Bash Tool - File verified

Status: PASS

cc @Mossaka

AI generated by Smoke Copilot

@github-actions
Copy link
Contributor

Node.js Build Test Results

Project Install Tests Status
clsx PASS PASS
execa PASS PASS
p-limit PASS PASS

Overall: PASS

All Node.js projects successfully installed dependencies and passed their test suites.

AI generated by Build Test Node.js

@github-actions
Copy link
Contributor

Go Build Test Results ✅

All Go projects passed successfully!

Project Download Tests Status
color 1/1 PASS ✅
env 1/1 PASS ✅
uuid 1/1 PASS ✅

Overall: PASS ✅

All modules downloaded successfully and all tests passed.

AI generated by Build Test Go

@github-actions
Copy link
Contributor

Rust Build Test Results

Project Build Tests Status
fd 1/1 PASS
zoxide 1/1 PASS

Overall: PASS ✅

All Rust projects built successfully and all tests passed.

AI generated by Build Test Rust

@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

All C++ projects built successfully with CMake and make.

AI generated by Build Test C++

@github-actions
Copy link
Contributor

GitHub MCP ✅ - feat: add release highlights generator agentic workflow | feat: hide /tmp/gh-aw/mcp-logs/ from agent containers
Safeinputs GH CLI ✅ - fix: hide workDir from agent container to prevent secrets exposure | [WIP] Fix Java and .NET runtimes execution in AWF chroot mode
Playwright ✅ - GitHub · Change is constant. GitHub keeps you ahead. · GitHub
Tavily search ❌
File write ✅ - smoke-test-codex-21934741162.txt
Bash cat ✅
Discussion comment ✅
Build AWF ✅
Overall status: FAIL

AI generated by Smoke Codex

@github-actions
Copy link
Contributor

Chroot Test Results

Chroot mode verification comparing host vs container runtime versions:

Runtime Host Version Chroot Version Match?
Python 3.12.12 3.12.3 ❌ NO
Node.js v24.13.0 v20.20.0 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Status: Tests FAILED - Not all runtimes matched between host and container.

Details
  • Python: Version mismatch (3.12.12 vs 3.12.3)
  • Node.js: Version mismatch (v24.13.0 vs v20.20.0)
  • Go: Versions match ✓

The chroot mode successfully accessed host binaries for Go, but Python and Node.js are running different versions, indicating they may be using container-provided binaries instead of host binaries.

AI generated by Smoke Chroot

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR attempts to fix a security vulnerability where sensitive environment variables (GITHUB_TOKEN, ANTHROPIC_API_KEY, etc.) stored in /tmp/awf-*/docker-compose.yml could be read by malicious code running inside the agent container via the /tmp:/tmp:rw mount. However, the implementation contains a critical bug that will break essential container functionality.

Changes:

  • Added tmpfs overlays on workDir to hide docker-compose.yml from agent container (broken implementation)
  • Restricted file permissions on workDir (0o700), squid.conf (0o600), and docker-compose.yml (0o600)
  • Added tmpfs property to DockerService TypeScript interface

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 6 comments.

File Description
src/types.ts Added tmpfs property to DockerService interface for tmpfs mount configuration
src/docker-manager.ts Added tmpfs overlays on workDir paths and restricted permissions on directory and config files
src/docker-manager.test.ts Added 5 unit tests for tmpfs overlay and file permission restrictions
Comments suppressed due to low confidence (1)

src/docker-manager.ts:744

  • Critical bug: The tmpfs overlay on workDir will break volume mounts that depend on subdirectories within workDir.

The agent container mounts several subdirectories from workDir:

  • Line 439: ${config.workDir}/agent-logs${effectiveHome}/.copilot/logs (agent logs persistence)
  • Line 560: ${config.workDir}/chroot-*/hosts/host/etc/hosts (chroot mode DNS resolution)
  • Line 574: ${config.workDir}/ssl/ca-cert.pem/usr/local/share/ca-certificates/awf-ca.crt (SSL bump CA trust)

Docker processes tmpfs mounts before bind mounts. When tmpfs creates an empty in-memory filesystem at workDir inside the agent container, the host's workDir subdirectories become inaccessible. Subsequent volume mount declarations that reference these subdirectories will mount empty directories or fail.

This will cause:

  • Agent logs to not persist (agent-logs mount fails)
  • SSL bump to fail (CA certificate mount fails)
  • Chroot DNS resolution to fail (hosts file mount fails)

Alternative solutions:

  1. Move sensitive files (docker-compose.yml, squid.conf) to a separate subdirectory (e.g., workDir/secrets/) and only tmpfs that subdirectory
  2. Don't use tmpfs - rely only on file permissions (0o600) as defense-in-depth since /tmp mounting is necessary for other functionality
  3. Use a completely separate directory outside /tmp for docker-compose.yml that isn't mounted into containers

Note: The squid container also mounts from workDir (squid.conf, SSL files) but is not affected by agent's tmpfs since each container has independent filesystem configuration.

    tmpfs: config.enableChroot
      ? [
          '/tmp/gh-aw/mcp-logs:rw,noexec,nosuid,size=1m',
          '/host/tmp/gh-aw/mcp-logs:rw,noexec,nosuid,size=1m',
          `${config.workDir}:rw,noexec,nosuid,size=1m`,
          `/host${config.workDir}:rw,noexec,nosuid,size=1m`,
        ]
      : [
          '/tmp/gh-aw/mcp-logs:rw,noexec,nosuid,size=1m',
          `${config.workDir}:rw,noexec,nosuid,size=1m`,
        ],

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 721 to 731
// SECURITY: Hide sensitive directories from agent using tmpfs overlays (empty in-memory filesystems)
//
// 1. Hide /tmp/gh-aw/mcp-logs - prevents agent from accessing MCP server logs
// while still allowing the host to write logs there
//
// 2. Hide workDir (e.g., /tmp/awf-<timestamp>) - prevents agent from reading
// docker-compose.yml which contains all environment variables (tokens, API keys)
// in plaintext. Without this, any code inside the container could extract secrets via:
// cat /tmp/awf-*/docker-compose.yml
// This is the primary fix for the secrets exposure vulnerability.
//
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

The comment incorrectly states that mounting tmpfs over workDir "while still allowing the host to write logs to /tmp/gh-aw/mcp-logs/".

However, workDir is different from /tmp/gh-aw/mcp-logs. The tmpfs overlay on workDir doesn't affect /tmp/gh-aw/mcp-logs at all - they are separate directories with independent tmpfs overlays. This comment conflates two different security measures:

  1. MCP logs hiding: tmpfs on /tmp/gh-aw/mcp-logs
  2. WorkDir hiding: tmpfs on workDir (e.g., /tmp/awf-12345)

The comment should clarify that the host writes to workDir subdirectories (agent-logs, ssl, etc.) which are then mounted as volumes, but these won't work correctly with the tmpfs overlay on the parent directory.

This issue also appears on line 734 of the same file.

Suggested change
// SECURITY: Hide sensitive directories from agent using tmpfs overlays (empty in-memory filesystems)
//
// 1. Hide /tmp/gh-aw/mcp-logs - prevents agent from accessing MCP server logs
// while still allowing the host to write logs there
//
// 2. Hide workDir (e.g., /tmp/awf-<timestamp>) - prevents agent from reading
// docker-compose.yml which contains all environment variables (tokens, API keys)
// in plaintext. Without this, any code inside the container could extract secrets via:
// cat /tmp/awf-*/docker-compose.yml
// This is the primary fix for the secrets exposure vulnerability.
//
// SECURITY: Hide sensitive directories from the agent using tmpfs overlays (empty in-memory filesystems)
//
// 1. MCP logs hiding: mount tmpfs over /tmp/gh-aw/mcp-logs to prevent the agent
// from reading MCP server logs inside the container. This tmpfs only affects
// the container’s view of /tmp/gh-aw/mcp-logs; the host can still write logs
// to its own /tmp/gh-aw/mcp-logs directory on the host filesystem.
//
// 2. WorkDir hiding: mount tmpfs over workDir (e.g., /tmp/awf-<timestamp>) to
// prevent the agent from reading docker-compose.yml, which contains all
// environment variables (tokens, API keys) in plaintext. Without this, any
// code inside the container could extract secrets via:
// cat /tmp/awf-*/docker-compose.yml
// This is the primary fix for the secrets exposure vulnerability.
//
// The host creates subdirectories under workDir (e.g., agent-logs, ssl, etc.)
// and mounts them into the container as volumes. These volume mounts depend
// on the real host directories and will not behave as expected if the parent
// workDir inside the container is overlaid with tmpfs.
//

Copilot uses AI. Check for mistakes.
src/types.ts Outdated
Comment on lines 863 to 868
* In-memory filesystems mounted over directories to hide their contents.
* Used as a security measure to prevent the agent from reading sensitive
* files (e.g., docker-compose.yml containing tokens, MCP logs).
*
* @example ['/tmp/awf-123:rw,noexec,nosuid,size=1m']
*/
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

The documentation states tmpfs is used to hide "directories" but the example shows a directory path. This is technically correct for Docker's tmpfs implementation, but it's important to note that tmpfs can also overlay individual files (not just directories).

Given the critical bug in the actual implementation (see comment on docker-manager.ts lines 734-744), this documentation should be updated to reflect that tmpfs overlays can target both files and directories, and should warn about the implications of overlaying parent directories when subdirectories are mounted as volumes.

Suggested change
* In-memory filesystems mounted over directories to hide their contents.
* Used as a security measure to prevent the agent from reading sensitive
* files (e.g., docker-compose.yml containing tokens, MCP logs).
*
* @example ['/tmp/awf-123:rw,noexec,nosuid,size=1m']
*/
* In-memory filesystems mounted over files or directories to hide or shadow
* their contents. Used as a security measure to prevent the agent from
* reading sensitive files (e.g., docker-compose.yml containing tokens, MCP logs).
*
* Be careful when mounting tmpfs over parent directories (for example, /tmp or
* /workspace) if subpaths are also mounted as bind volumes. A tmpfs overlay on
* the parent directory will hide any underlying files and may also make
* mounted subdirectories inaccessible from inside the container.
*
* @example ['/tmp/awf-123:rw,noexec,nosuid,size=1m']
*/
*/

Copilot uses AI. Check for mistakes.
fs.mkdirSync(config.workDir, { recursive: true });
fs.mkdirSync(config.workDir, { recursive: true, mode: 0o700 });
} else {
fs.chmodSync(config.workDir, 0o700);
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

Potential issue: chmodSync on existing workDir may be too restrictive if the directory was created by a different user or with different intentions.

If workDir already exists (e.g., from a previous run, or manually created), forcing it to 0o700 could:

  1. Break access for other processes that legitimately need to read the directory
  2. Cause issues in multi-user environments
  3. Override intentionally-set permissions

Consider checking the current permissions and only applying chmod if they're too permissive (e.g., world-readable). Alternatively, document that workDir should not be reused between runs, and consider using a unique timestamp-based directory for each run (which appears to already be the case based on the /tmp/awf-* pattern mentioned in comments).

Suggested change
fs.chmodSync(config.workDir, 0o700);
// If the directory already exists, only tighten permissions if it is
// world-accessible. This avoids unexpectedly overriding intentionally-set
// permissions (e.g., in shared or multi-user environments) while still
// preventing access by "others".
const stat = fs.statSync(config.workDir);
const currentMode = stat.mode & 0o777;
if ((currentMode & 0o007) !== 0) {
fs.chmodSync(config.workDir, 0o700);
}

Copilot uses AI. Check for mistakes.
Comment on lines 734 to +744
tmpfs: config.enableChroot
? [
'/tmp/gh-aw/mcp-logs:rw,noexec,nosuid,size=1m',
'/host/tmp/gh-aw/mcp-logs:rw,noexec,nosuid,size=1m',
`${config.workDir}:rw,noexec,nosuid,size=1m`,
`/host${config.workDir}:rw,noexec,nosuid,size=1m`,
]
: ['/tmp/gh-aw/mcp-logs:rw,noexec,nosuid,size=1m'],
: [
'/tmp/gh-aw/mcp-logs:rw,noexec,nosuid,size=1m',
`${config.workDir}:rw,noexec,nosuid,size=1m`,
],
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

Discrepancy: The PR description claims to close #62, #206, and #210, but the linked PR #62 is about "docs: add mermaid diagram rendering for Astro Starlight site" which is completely unrelated to this security fix.

This appears to be a copy-paste error in the PR description. The correct issues that this PR addresses should be verified and the description should be corrected to reference the actual security vulnerability issues.

Copilot uses AI. Check for mistakes.
Comment on lines +868 to 875
// Ensure work directory exists with restricted permissions (owner-only access)
// Defense-in-depth: even if tmpfs overlay fails, non-root processes on the host
// cannot read the docker-compose.yml which contains sensitive tokens
if (!fs.existsSync(config.workDir)) {
fs.mkdirSync(config.workDir, { recursive: true });
fs.mkdirSync(config.workDir, { recursive: true, mode: 0o700 });
} else {
fs.chmodSync(config.workDir, 0o700);
}
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

Missing explicit permissions on agent-logs subdirectory. The agent-logs directory at line 878-882 is created without specifying mode, so it will inherit from the parent workDir's umask.

For consistency with the pattern established for squid-logs (mode 0o777) and mcp-logs (mode 0o777), and considering this directory needs to be writable by the agent container running as awfuser, this should explicitly set appropriate permissions.

However, note that this comment may be superseded by the critical bug in the tmpfs implementation that would prevent this subdirectory from being accessible anyway.

See below for a potential fix:

  // Make directory writable by the agent container user (awfuser)
  const agentLogsDir = path.join(config.workDir, 'agent-logs');
  if (!fs.existsSync(agentLogsDir)) {
    fs.mkdirSync(agentLogsDir, { recursive: true, mode: 0o777 });
    // Explicitly set permissions to 0o777 (not affected by umask)
    fs.chmodSync(agentLogsDir, 0o777);

Copilot uses AI. Check for mistakes.
Comment on lines +1424 to +1455
describe('workDir tmpfs overlay (secrets protection)', () => {
it('should hide workDir from agent container via tmpfs in normal mode', () => {
const result = generateDockerCompose(mockConfig, mockNetworkConfig);
const agent = result.services.agent;
const tmpfs = agent.tmpfs as string[];

// workDir should be hidden via tmpfs overlay to prevent reading docker-compose.yml
expect(tmpfs).toContainEqual(expect.stringContaining(mockConfig.workDir));
expect(tmpfs.some((t: string) => t.startsWith(`${mockConfig.workDir}:`))).toBe(true);
});

it('should hide workDir at both paths in chroot mode', () => {
const configWithChroot = { ...mockConfig, enableChroot: true };
const result = generateDockerCompose(configWithChroot, mockNetworkConfig);
const agent = result.services.agent;
const tmpfs = agent.tmpfs as string[];

// Both /tmp/awf-test and /host/tmp/awf-test should be hidden
expect(tmpfs.some((t: string) => t.startsWith(`${mockConfig.workDir}:`))).toBe(true);
expect(tmpfs.some((t: string) => t.startsWith(`/host${mockConfig.workDir}:`))).toBe(true);
});

it('should still hide mcp-logs alongside workDir', () => {
const result = generateDockerCompose(mockConfig, mockNetworkConfig);
const agent = result.services.agent;
const tmpfs = agent.tmpfs as string[];

// Both mcp-logs and workDir should be hidden
expect(tmpfs.some((t: string) => t.includes('/tmp/gh-aw/mcp-logs'))).toBe(true);
expect(tmpfs.some((t: string) => t.startsWith(`${mockConfig.workDir}:`))).toBe(true);
});
});
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

The tests verify that tmpfs overlays are added, but they don't test for the critical bug where tmpfs on workDir will break volume mounts of subdirectories.

These tests should also verify that essential volume mounts (like agent-logs, SSL certificates, seccomp profile) are not broken by the tmpfs overlay. Consider adding integration tests that actually start containers to verify the tmpfs implementation doesn't interfere with required functionality.

The current unit tests only check that tmpfs entries exist in the configuration but don't validate the runtime behavior or interaction with volume mounts.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Contributor

❌ Build Test: Java - FAILED

Test Results

Project Compile Tests Status
gson - FAILED
caffeine 🚫 - NOT RUN

Overall: FAILED

Error Details

Critical Issue: Maven proxy configuration error prevents builds from completing.

Root Cause: The Maven settings.xml uses literal environment variable syntax ${SQUID_PROXY_HOST} and ${SQUID_PROXY_PORT}, but Maven expects resolved values. Maven's XML parser cannot interpret these as valid integers, resulting in:

NumberFormatException: For input string: "${SQUID_PROXY_PORT}"

Impact: Without proper proxy configuration, Maven cannot download dependencies from Maven Central, blocking all compile and test operations.

Next Steps:

  1. The workflow environment needs to resolve SQUID_PROXY_HOST and SQUID_PROXY_PORT before writing ~/.m2/settings.xml
  2. Alternative: Use envsubst or similar to substitute environment variables in the XML template
  3. Verify AWF firewall containers are running and accessible

Repository Status: ✅ Test repository cloned successfully to /tmp/test-java

AI generated by Build Test Java

- Improve tmpfs comment to clarify two separate security measures
  (mcp-logs hiding vs workDir hiding) and note that volume mounts
  to different container paths are unaffected by the tmpfs overlay
- Update types.ts tmpfs docstring per review feedback
- Fix build-test-java.md: use literal proxy values (squid-proxy:3128)
  instead of shell variables ${SQUID_PROXY_HOST}/${SQUID_PROXY_PORT}
  which AI agents write literally without expansion, causing Maven
  NumberFormatException

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

💫 TO BE CONTINUED... Smoke Claude failed! Our hero faces unexpected challenges...

@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Feb 12, 2026

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

@github-actions
Copy link
Contributor

Node.js Build Test Results

Project Install Tests Status
clsx PASS PASS
execa PASS PASS
p-limit PASS PASS

Overall: PASS

All Node.js projects built and tested successfully.

AI generated by Build Test Node.js

@github-actions
Copy link
Contributor

Go Build Test Results

Project Download Tests Status
color 1/1 PASS
env 1/1 PASS
uuid 1/1 PASS

Overall: PASS

All Go projects successfully built and tested.

AI generated by Build Test Go

@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

All C++ projects built successfully.

AI generated by Build Test C++

@github-actions
Copy link
Contributor

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

All Deno tests completed successfully.

AI generated by Build Test Deno

@github-actions
Copy link
Contributor

Build Test: Rust - FAILED ❌

Status: Test execution blocked

Issue: Rust toolchain (cargo, rustc) is not installed in the execution environment.

Results

Project Build Tests Status
fd - BLOCKED
zoxide - BLOCKED

Overall: FAILED

Error Details

bash: cargo: command not found

Required Action

The workflow execution environment needs the Rust toolchain installed. Consider:

  • Installing Rust during workflow setup: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Using a pre-configured GitHub Actions runner with actions-rust-lang/setup-rust-toolchain@v1

AI generated by Build Test Rust

@github-actions github-actions bot mentioned this pull request Feb 12, 2026
@github-actions
Copy link
Contributor

Bun Build Test Results

Project Install Tests Status
elysia 1/1 PASS
hono 1/1 PASS

Overall: PASS

All Bun build tests completed successfully.

AI generated by Build Test Bun

@github-actions
Copy link
Contributor

✅ GitHub MCP: #197 "feat: add release highlights generator agentic workflow", #706 "feat: hide /tmp/gh-aw/mcp-logs/ from agent containers"
✅ Playwright: github.com title verified
✅ File Write: /tmp/gh-aw/agent/smoke-test-copilot-21935286064.txt created
✅ Bash: File read successful

Overall: PASS

cc @Mossaka

AI generated by Smoke Copilot

@github-actions
Copy link
Contributor

.NET Build Test Results

Project Restore Build Run Status
hello-world PASS
json-parse PASS

Overall: PASS

All .NET projects successfully restored, built, and ran with expected output.

AI generated by Build Test .NET

@github-actions
Copy link
Contributor

Java Build Test Results ✅

All Java projects successfully compiled and tested through the AWF firewall.

Project Compile Tests Status
gson 1/1 PASS
caffeine 1/1 PASS

Overall: PASS

All dependencies were successfully downloaded through the Squid proxy (172.30.0.10:3128) and all tests passed.

AI generated by Build Test Java

@github-actions
Copy link
Contributor

PR titles:

  • fix: only hide credential files if parent directory exists
  • fix: create .copilot/logs mountpoint before docker mount
    Tests: GitHub MCP merged PRs ✅ | safeinputs-gh PR list ✅
    Tests: Playwright title ✅ | Tavily search ❌
    Tests: file write ✅ | bash cat ✅
    Tests: discussion query+comment ✅ | build ✅
    Overall: FAIL

AI generated by Smoke Codex

@github-actions
Copy link
Contributor

Chroot Version Comparison Test Results

Runtime Host Version Chroot Version Match?
Python 3.12.12 3.12.3 ❌ NO
Node.js v24.13.0 v20.20.0 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Overall Result: Some versions do not match between host and chroot environments.

The chroot mode successfully provides access to host binaries, but version mismatches in Python and Node.js indicate that the container's binaries are being used instead of the host's for these runtimes.

AI generated by Smoke Chroot

@github-actions
Copy link
Contributor

Smoke Test Results ✅

Last 2 Merged PRs:

Test Results:

  • ✅ GitHub MCP: Successfully retrieved PR data
  • ✅ Playwright: Page title verified ("GitHub · Change is constant. GitHub keeps you ahead. · GitHub")
  • ✅ File writing: Test file created at /tmp/gh-aw/agent/smoke-test-copilot-21946617661.txt
  • ✅ Bash tools: File content verified successfully

Status: PASS 🎉

cc @Mossaka

AI generated by Smoke Copilot

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