Skip to content

fix(security): require explicit SANDBOX_ALLOW_FULL_ACCESS to enable FullAccess policy - #516

Closed
gabehamilton wants to merge 5 commits into
nearai:stagingfrom
difflabai:fix/h2-fullaccess-guard
Closed

gabehamilton wants to merge 5 commits into
nearai:stagingfrom
difflabai:fix/h2-fullaccess-guard

Conversation

@gabehamilton

Copy link
Copy Markdown
Contributor

Summary

  • Security fix: FullAccess sandbox policy previously bypassed Docker entirely and ran shell commands directly on the host with just SANDBOX_POLICY=full_access. This could be accidentally enabled via env var misconfiguration, and if prompt injection bypasses tool approval, arbitrary host commands could run.
  • Double opt-in guard: A new SANDBOX_ALLOW_FULL_ACCESS=true env var must also be set for FullAccess to take effect. Without it, the policy is automatically downgraded to WorkspaceWrite with a loud tracing::error! log.
  • Runtime audit logging: Every FullAccess execution now emits a tracing::warn! with the command and working directory, providing visibility into unsandboxed host commands.

Changes

File What
src/sandbox/config.rs Added allow_full_access field to SandboxConfig, documented blast radius on FullAccess variant
src/config/sandbox.rs Added allow_full_access to SandboxModeConfig, reads SANDBOX_ALLOW_FULL_ACCESS env var, downgrades policy in to_sandbox_config() if guard fails
src/sandbox/manager.rs Runtime guard in execute_with_policy() blocks FullAccess without opt-in, tracing::warn! on every FullAccess execution, builder method allow_full_access()
.env.example Documents SANDBOX_ALLOW_FULL_ACCESS with explanation

How to enable FullAccess intentionally

SANDBOX_POLICY=full_access
SANDBOX_ALLOW_FULL_ACCESS=true  # Required second opt-in

Without the second variable, the system logs an error and falls back to WorkspaceWrite.

Test plan

  • cargo clippy --all --all-features -- zero warnings
  • cargo test sandbox -- 60 tests pass
  • New test: test_direct_execution_blocked_without_allow -- verifies FullAccess is rejected without opt-in
  • New test: test_full_access_downgraded_without_allow -- verifies config-level downgrade
  • New test: test_full_access_allowed_with_explicit_opt_in -- verifies happy path
  • Existing tests updated with allow_full_access: true where FullAccess is intentional
  • Manual: set SANDBOX_POLICY=full_access without SANDBOX_ALLOW_FULL_ACCESS and verify error log + downgrade

🤖 Generated with Claude Code

…ullAccess policy

FullAccess policy bypasses Docker entirely and runs commands via sh -c
directly on the host. Previously, setting SANDBOX_POLICY=full_access
alone was sufficient to enable this, which could be triggered
accidentally or via prompt injection if tool approval is bypassed.

This adds a double opt-in guard:

- New SANDBOX_ALLOW_FULL_ACCESS=true env var must ALSO be set for
  FullAccess to take effect. Without it, the policy is downgraded to
  WorkspaceWrite with a tracing::error! log.

- At execution time, every FullAccess command emits a tracing::warn!
  with the command and working directory for audit visibility.

- The FullAccess variant now documents its blast radius (host shell,
  unrestricted filesystem/network/environment).

- SandboxConfig and SandboxModeConfig gain an allow_full_access field,
  wired through from_env() and the builder.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings March 4, 2026 02:48
@github-actions github-actions Bot added scope: sandbox Docker sandbox size: M 50-199 changed lines risk: medium Business logic, config, or moderate-risk modules contributor: new First-time contributor labels Mar 4, 2026
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the security posture of the sandbox by introducing a robust double opt-in mechanism for the highly privileged FullAccess policy. This change mitigates the risk of accidental host-level command execution due to misconfiguration or prompt injection, ensuring that such powerful capabilities are only enabled through explicit intent and are auditable at runtime.

Highlights

  • Enhanced Security for FullAccess Policy: Implemented a double opt-in mechanism for the FullAccess sandbox policy to prevent accidental execution of host commands.
  • Explicit Opt-in Requirement: Introduced a new environment variable, SANDBOX_ALLOW_FULL_ACCESS=true, which must be explicitly set alongside SANDBOX_POLICY=full_access for the FullAccess policy to take effect.
  • Automatic Policy Downgrade: If SANDBOX_POLICY=full_access is set without SANDBOX_ALLOW_FULL_ACCESS=true, the policy is automatically downgraded to WorkspaceWrite with a prominent error log.
  • Runtime Audit Logging: Added tracing::warn! logs for every FullAccess execution, providing visibility and auditing capabilities for unsandboxed host commands.
Changelog
  • .env.example
    • Documented the new SANDBOX_ALLOW_FULL_ACCESS environment variable, explaining its purpose and the implications of FullAccess policy.
  • src/config/sandbox.rs
    • Added allow_full_access boolean field to SandboxModeConfig struct.
    • Set allow_full_access to false by default in Default implementation.
    • Parsed SANDBOX_ALLOW_FULL_ACCESS environment variable into the new field.
    • Implemented logic in to_sandbox_config to downgrade FullAccess policy to WorkspaceWrite if allow_full_access is false, logging an error.
    • Added new unit tests (test_full_access_downgraded_without_allow, test_full_access_allowed_with_explicit_opt_in, test_non_full_access_policy_unaffected, test_readonly_policy_unaffected) to verify the new policy handling.
  • src/sandbox/config.rs
    • Added allow_full_access boolean field to SandboxConfig struct.
    • Set allow_full_access to false by default in Default implementation.
    • Updated the documentation for SandboxPolicy::FullAccess to include a "BLAST RADIUS" warning and mention the SANDBOX_ALLOW_FULL_ACCESS requirement.
  • src/sandbox/manager.rs
    • Added a runtime check in execute_with_policy to prevent FullAccess execution if self.config.allow_full_access is false, returning an error.
    • Introduced a tracing::warn! log for every FullAccess command execution, detailing the command and working directory.
    • Added allow_full_access builder method to SandboxManagerBuilder.
    • Updated existing FullAccess tests to explicitly set allow_full_access: true.
    • Added a new test test_direct_execution_blocked_without_allow to confirm FullAccess is blocked without explicit opt-in.
Activity
  • Ran cargo clippy --all --all-features with zero warnings.
  • Executed cargo test sandbox, resulting in 60 passing tests.
  • Added three new tests: test_direct_execution_blocked_without_allow, test_full_access_downgraded_without_allow, and test_full_access_allowed_with_explicit_opt_in.
  • Updated existing tests to include allow_full_access: true where FullAccess is intentionally used.
  • A manual test is planned to verify error logging and downgrade behavior when SANDBOX_POLICY=full_access is set without SANDBOX_ALLOW_FULL_ACCESS.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request introduces a crucial security enhancement by requiring a double opt-in (SANDBOX_ALLOW_FULL_ACCESS=true) to enable the FullAccess sandbox policy. This effectively mitigates the risk of accidental host command execution. The implementation is robust, with a policy downgrade at configuration time and a hard failure at execution time if the opt-in is missing. The added documentation and warning logs are also excellent for security awareness and auditability. I have one suggestion to improve error semantics for better maintainability, aligning with the practice of creating specific error variants for clearer messages.

Comment thread src/sandbox/manager.rs
Comment on lines +219 to +221
return Err(SandboxError::Config {
reason: "FullAccess policy requires SANDBOX_ALLOW_FULL_ACCESS=true".to_string(),
});

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.

medium

Using the generic SandboxError::Config is acceptable, but for improved error handling and semantics, consider introducing a more specific error variant like FullAccessNotAllowed in src/sandbox/error.rs.

This would make the error type more descriptive and allow callers to match on this specific error condition, which is a good practice for library-like code.

For example, in src/sandbox/error.rs:

// ...
#[error("FullAccess policy is not allowed. Set SANDBOX_ALLOW_FULL_ACCESS=true to enable.")]
FullAccessNotAllowed,
// ...

And then you could use it here like this:

return Err(SandboxError::FullAccessNotAllowed);

This would also require updating the assertion in test_direct_execution_blocked_without_allow to match the new error.

References
  1. Create specific error variants for different failure modes (e.g., DownloadFailed with a URL string vs. ManifestRead with a file path) to provide semantically correct and clear error messages.

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

This PR tightens sandbox security by adding a second explicit opt-in before allowing FullAccess (host execution) and increases visibility when unsandboxed commands are run.

Changes:

  • Introduces allow_full_access configuration (SANDBOX_ALLOW_FULL_ACCESS) as a required second opt-in for FullAccess.
  • Adds config-level downgrade from FullAccess to WorkspaceWrite when the guard is not enabled, plus execution-time enforcement.
  • Adds FullAccess execution auditing via tracing logs and updates examples/tests accordingly.

Reviewed changes

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

File Description
src/sandbox/manager.rs Enforces allow_full_access at execution-time; adds FullAccess audit logging and a builder setter; updates/adds tests.
src/sandbox/config.rs Adds allow_full_access to SandboxConfig and expands FullAccess documentation.
src/config/sandbox.rs Reads SANDBOX_ALLOW_FULL_ACCESS, implements config-level downgrade behavior, and adds tests.
.env.example Documents SANDBOX_ALLOW_FULL_ACCESS and the double opt-in requirement.

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

Comment thread src/sandbox/config.rs Outdated
Comment on lines +75 to +84
/// Full access (no sandbox). Use with extreme caution.
/// This bypasses all isolation and runs directly on host.
///
/// **BLAST RADIUS**: This bypasses Docker entirely and executes commands
/// via `sh -c` directly on the host with the agent process's full
/// privileges. If prompt injection bypasses tool approval, arbitrary
/// host shell commands can run. File system, network, and environment
/// are completely unrestricted.
///
/// Requires `SANDBOX_ALLOW_FULL_ACCESS=true` as a second opt-in.
/// Without it, the sandbox manager will downgrade to `WorkspaceWrite`.

Copilot AI Mar 4, 2026

Copy link

Choose a reason for hiding this comment

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

The FullAccess policy docs state that without SANDBOX_ALLOW_FULL_ACCESS=true the sandbox manager will downgrade to WorkspaceWrite, but the execution-time guard in SandboxManager currently errors instead. Please align this comment with actual behavior (either downgrade consistently or document the refusal/error behavior).

Copilot uses AI. Check for mistakes.
Comment thread src/sandbox/manager.rs Outdated
Comment on lines +224 to +226
command = %command,
cwd = %cwd.display(),
"Executing command directly on host (FullAccess policy -- no sandbox isolation)"

Copilot AI Mar 4, 2026

Copy link

Choose a reason for hiding this comment

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

tracing::warn!(command = %command, ...) will emit the full raw shell command into stderr logs. Commands frequently contain credentials (e.g., curl headers, tokens in URLs), so this can create secret leakage into terminal logs and any log aggregation. Consider logging a safer representation (e.g., command hash/length, argv0 only, or a redacted/truncated command) or route this through the existing leak-detection/redaction pipeline before writing to the fmt layer.

Suggested change
command = %command,
cwd = %cwd.display(),
"Executing command directly on host (FullAccess policy -- no sandbox isolation)"
cwd = %cwd.display(),
"Executing command directly on host (FullAccess policy -- no sandbox isolation; command redacted)"

Copilot uses AI. Check for mistakes.
Comment thread src/sandbox/config.rs Outdated
Comment on lines +14 to +15
/// When `policy` is `FullAccess` but this field is `false`, the manager
/// will downgrade to `WorkspaceWrite` and emit a `tracing::error!` log.

Copilot AI Mar 4, 2026

Copy link

Choose a reason for hiding this comment

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

SandboxConfig docs say that when policy is FullAccess but allow_full_access is false, the manager will downgrade to WorkspaceWrite. However, SandboxManager::execute_with_policy() currently returns a SandboxError::Config in that case (no downgrade). Please update the doc comment to match actual behavior (or implement the downgrade in the manager if that's the intended contract).

Suggested change
/// When `policy` is `FullAccess` but this field is `false`, the manager
/// will downgrade to `WorkspaceWrite` and emit a `tracing::error!` log.
/// If `policy` is set to `FullAccess` while this field is `false`,
/// sandbox execution will fail with a `SandboxError::Config` and emit
/// a `tracing::error!` log. This prevents accidentally granting full
/// host and network access.

Copilot uses AI. Check for mistakes.

@zmanian zmanian left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Review

The double-layer defense (config-level downgrade + runtime guard) is the right architecture. A config-only downgrade would be insufficient since execute_with_policy() accepts a SandboxPolicy argument directly. The 5 new tests cover the important paths well.

Required before merge

1. Document the builder API footgun (Must fix)

SandboxManagerBuilder::new().policy(SandboxPolicy::FullAccess).build() creates a manager that immediately errors at runtime because SandboxConfig::default() has allow_full_access: false. This fails safely (not a security bug) but will produce confusing errors for programmatic users. Add a doc comment on .policy() warning that FullAccess requires .allow_full_access(true).

2. Add correlation ID to audit log (Must fix)

tracing::warn!(
    command = %command,
    cwd = %cwd.display(),
    "Executing command directly on host..."
);

For a security audit trail, this needs a job ID or session ID so operators can trace which request triggered host execution during incident investigation.

Should fix

3. Add a test for the builder path — verify that .policy(FullAccess).build() without .allow_full_access(true) errors at execute time with the expected message.

4. Fix CLAUDE.md discrepancy — CLAUDE.md documents SANDBOX_DEFAULT_POLICY but the actual env var is SANDBOX_POLICY. While in the area, worth correcting.

Note

The asymmetric behavior (config layer silently downgrades, runtime layer hard-errors) is intentional defense-in-depth but worth a code comment explaining the design rationale.

gabehamilton and others added 2 commits March 5, 2026 21:36
- Add doc comment on builder .policy() warning that FullAccess requires
  .allow_full_access(true) or execution will return SandboxError::Config
- Sanitize audit log: log only binary name instead of full command to
  prevent secret leakage; add [FullAccess] prefix for grep-ability
- Add test_builder_full_access_without_allow_returns_error test covering
  the builder path without explicit allow_full_access(true)
- Fix doc comment mismatch: config.rs and SandboxPolicy::FullAccess docs
  said "will downgrade to WorkspaceWrite" but runtime returns
  SandboxError::Config -- aligned docs with actual behavior

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

@gabehamilton gabehamilton left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

All four review items addressed in 8aff1d2:

Fix 1 (Must fix) -- Doc comment on builder .policy():
Added doc comment warning that SandboxPolicy::FullAccess additionally requires .allow_full_access(true), or the manager returns SandboxError::Config at execution time.

Fix 2 (Must fix) -- Audit log correlation + secret sanitization:

  • Added [FullAccess] prefix to the tracing::warn! message so operators can grep for it.
  • Replaced command = %command with binary = %binary (extracts only the first whitespace-delimited token). This prevents secrets embedded in command arguments (e.g. curl -H "Authorization: Bearer sk-...") from leaking into logs.
  • Note: execute_with_policy doesn't have access to JobContext or a job ID. Adding a job_id parameter would be a broader API change. The [FullAccess] prefix + binary name gives operators enough to correlate with surrounding tracing spans.

Fix 3 (Should fix) -- Builder path test:
Added test_builder_full_access_without_allow_returns_error which constructs a manager via SandboxManagerBuilder::new().policy(FullAccess).build() (without .allow_full_access(true)) and asserts that execute() returns an error mentioning SANDBOX_ALLOW_FULL_ACCESS.

Fix 4 (Should fix) -- Doc comment mismatch:
Fixed both locations where docs said "will downgrade to WorkspaceWrite":

  • SandboxConfig::allow_full_access field doc
  • SandboxPolicy::FullAccess variant doc

Both now accurately say "will return SandboxError::Config and refuse to execute."

Also merged upstream/main (no conflicts). All sandbox tests pass. Zero clippy warnings.

@github-actions github-actions Bot added contributor: regular 2-5 merged PRs and removed contributor: new First-time contributor labels Mar 6, 2026
Copilot AI review requested due to automatic review settings March 9, 2026 17:19

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

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


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

Comment thread src/config/sandbox.rs Outdated
Comment on lines +477 to +480
#[cfg(test)]
mod tests {
use super::*;

Copilot AI Mar 9, 2026

Copy link

Choose a reason for hiding this comment

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

This file now contains two separate #[cfg(test)] mod tests blocks with the same module name, which will cause a duplicate-definition compilation error. Merge the newly added FullAccess tests into the existing mod tests (around line ~270), or rename one of the modules (e.g. mod full_access_tests).

Copilot uses AI. Check for mistakes.
Comment thread src/config/sandbox.rs
Comment on lines +11 to +17
/// Explicit opt-in for `FullAccess` policy.
///
/// When `policy` is `full_access` but this is `false`, the policy is
/// downgraded to `workspace_write` with a loud error log. This prevents
/// accidental host-level command execution from a single misconfigured
/// env var.
pub allow_full_access: bool,

Copilot AI Mar 9, 2026

Copy link

Choose a reason for hiding this comment

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

Adding allow_full_access as a required field means any existing SandboxModeConfig { ... } struct literals in this file must now set it (or use ..Default::default()). The existing unit tests later in this file still construct SandboxModeConfig without allow_full_access, which will fail to compile until updated (likely set allow_full_access: false except where FullAccess is intentional).

Copilot uses AI. Check for mistakes.
Comment thread src/sandbox/manager.rs
Comment on lines +223 to +229
// Log only the binary name to avoid leaking secrets embedded in
// command arguments (e.g. tokens in curl headers).
let binary = command.split_whitespace().next().unwrap_or("<empty>");
tracing::warn!(
binary = %binary,
cwd = %cwd.display(),
"[FullAccess] Executing command directly on host (no sandbox isolation)"

Copilot AI Mar 9, 2026

Copy link

Choose a reason for hiding this comment

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

The PR description says each FullAccess execution logs the full command + working directory, but this implementation intentionally logs only the binary name (via split_whitespace().next()) plus cwd. Either update the PR description to match, or consider logging a sanitized/redacted command string if full-command auditability is required.

Copilot uses AI. Check for mistakes.
Comment thread src/sandbox/manager.rs
Comment on lines +215 to +218
tracing::error!(
"FullAccess execution requested but SANDBOX_ALLOW_FULL_ACCESS is not \
enabled. Refusing to execute on host. Falling back to error."
);

Copilot AI Mar 9, 2026

Copy link

Choose a reason for hiding this comment

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

This error log message ends with "Falling back to error.", but the function immediately returns an error (no fallback behavior). Consider rephrasing to something more direct like "Refusing to execute on host" to avoid confusing operators reading logs.

Copilot uses AI. Check for mistakes.
…alizers

After upstream merge, src/config/sandbox.rs had two issues:
- Duplicate mod tests block (upstream's original tests at line 271 + our
  new FullAccess guard tests at line 478) caused E0428 compile error
- Upstream test struct literals for SandboxModeConfig were missing the
  new allow_full_access field (E0063)

Fixes: merge the two mod tests into one; add allow_full_access: false to
the sandbox_mode_config_custom_values and sandbox_mode_to_sandbox_config
test struct initializers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gabehamilton

Copy link
Copy Markdown
Contributor Author

Fixed CI failures in new commit (bb346ae):

After upstream merge, src/config/sandbox.rs had two compile errors:

  1. Duplicate mod tests: The upstream merge introduced upstream's original mod tests block at line 271 and our FullAccess guard tests at line 478 — two mod tests in the same file causes E0428. Merged both into a single block.

  2. Missing allow_full_access field: Two upstream test struct initializers for SandboxModeConfig pre-dated our new field and didn't include allow_full_access. Fixed by adding allow_full_access: false to both.

@henrypark133
henrypark133 changed the base branch from main to staging March 10, 2026 02:31

@zmanian zmanian left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Re-review: fix(security): require explicit SANDBOX_ALLOW_FULL_ACCESS

Verdict: APPROVE (with one documentation fixup)

The double opt-in guard is correctly implemented. All review items addressed:

  1. Builder API footgun documented -- .policy() has clear doc comment warning about .allow_full_access(true) requirement
  2. Audit logging -- Logs binary name, working directory, and FullAccess label. Correlation ID (job_id) was not added because execute_with_policy() lacks a job context parameter -- acceptable, tracking as a future improvement
  3. Builder path test -- test_builder_full_access_without_allow_returns_error verifies the error at execute time
  4. CLAUDE.md discrepancy -- Still uses SANDBOX_DEFAULT_POLICY instead of the actual SANDBOX_POLICY env var name. I'll fix this on staging after merge.

The core security mechanism is solid and well-tested.

@zmanian

zmanian commented Mar 11, 2026

Copy link
Copy Markdown
Collaborator

Opened replacement PR #967 from a writable fork branch.

Reason: I rebased this PR onto current staging, but this credential could not push back to difflabai/ironclaw (403 on push).

#967 carries the same FullAccess hardening and current test/config alignment, so it can be reviewed and merged in place of this blocked branch.

@zmanian

zmanian commented Mar 12, 2026

Copy link
Copy Markdown
Collaborator

Superseded by #967, which has merged into staging.

@zmanian zmanian closed this Mar 12, 2026
@gabehamilton
gabehamilton deleted the fix/h2-fullaccess-guard branch March 12, 2026 18:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contributor: regular 2-5 merged PRs risk: medium Business logic, config, or moderate-risk modules scope: sandbox Docker sandbox size: M 50-199 changed lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants