Skip to content

Phase 30: Enterprise readiness & compliance — all 12 exit gates complete#23

Merged
MerverliPy merged 11 commits into
mainfrom
phase-30-enterprise
Jul 6, 2026
Merged

Phase 30: Enterprise readiness & compliance — all 12 exit gates complete#23
MerverliPy merged 11 commits into
mainfrom
phase-30-enterprise

Conversation

@MerverliPy

Copy link
Copy Markdown
Owner

Summary

Completes Phase 30 (enterprise readiness & compliance) across 3 remaining slices.

Air-Gapped Mode

  • AGENT_WORKBENCH_AIRGAPPED=true blocks all external network calls
  • Only loopback addresses (localhost, 127.0.0.1, ::1) allowed
  • Local Ollama inference continues to work
  • createAirGappedFetch() wrapper composes into ProviderRegistry
  • 18 tests for URL validation, fetch blocking, env var checks

Compliance Documentation

  • Security whitepaper — architecture, threat model, compliance mapping
  • SOC 2 readiness checklist — 50-criterion evaluation across all trust categories
  • GDPR addendum — data processing, subject rights, TOMs, data transfers
  • On-prem deployment guide — installation, 5 deployment scenarios, hardening

SBOM Generation

  • bun run sbom — CycloneDX v1.5 software bill of materials
  • bun run sbom:audit — includes dependency vulnerability scanning
  • Self-contained script (no external dependencies)

Docs Restructuring

  • README.md rewritten for end-users (features, config, deployment, safety)
  • CONTRIBUTING.md cleaned up for contributors
  • AGENTS.mddocs/dev/AGENTS.md
  • 22 implementation docs + 17 ADRs archived to docs/dev/
  • CHANGELOG.md updated with Phase 30 entries
  • All package/app READMEs audited, stale badges updated

Closes Phase 30.

Tasks completed:
- 🔧 Expand .dockerignore — Add git/, docs/, tests/, benchmarks/, tools/, decisions/, *.md
- ⚡ Enable bun caching in CI — Remove no-cache: false from setup-bun steps

Note: Tasks 5-7 were already completed in first sprint:
- ✅ repo-health.yml already uses bun commands + checkout@v7
- ✅ All workflows already use actions/checkout@v7
- ✅ eval package already in scripts/build-all.sh Level 1

Second sprint: 2/2 new tasks completed
First sprint: 6/6 tasks completed (CODEOWNERS, dependabot, CHANGELOG,
lint-staged script fix, Dockerfile optimization, test count updates)

Closes: Audit MEDIUM priority findings #5-9
- Air-gapped mode (AGENT_WORKBENCH_AIRGAPPED=true): blocks external
  network calls, allows only loopback services
- SBOM generation: 'bun run sbom' outputs CycloneDX v1.5,
  'bun run sbom:audit' includes dependency vulnerability scanning
- Compliance docs: security whitepaper, SOC 2 readiness checklist,
  GDPR addendum, on-prem deployment guide (docs/compliance/)
- Air-gapped fetch wrapper composed into ProviderRegistry via
  createAirGappedFetch() in @agent-workbench/compliance

Docs restructuring:
- README.md rewritten for end-users (features, config, deployment
  scenarios, safety model, enterprise docs)
- CONTRIBUTING.md cleaned up for contributors
- AGENTS.md moved to docs/dev/ (AI agent build rules)
- 22 implementation/docs phase plans + 17 ADRs archived to docs/dev/
- CHANGELOG.md updated with Phase 30 entries
- All package/app READMEs audited and stale badges updated
Comment thread packages/compliance/src/fips.ts Fixed
- Replace any type with MockRepo interface in eval metrics test (Biome noExplicitAny)
- Conditionally pass fetchImpl only when air-gapped (TS exactOptionalPropertyTypes)
- Use rejection sampling for unbiased CSPRNG string generation (CodeQL modulo bias)
// so only bytes in [0, 247] are fair. Reject bytes >= 248.
while (result.length < length) {
if (bytes[i]! < 248) {
result += chars[bytes[i]! % chars.length];
- Replace any type with MockRepo interface in eval metrics test (Biome noExplicitAny)
- Conditionally pass fetchImpl only when air-gapped (TS exactOptionalPropertyTypes)
- Rejection sampling for unbiased CSPRNG string generation (CodeQL modulo bias)
- biome.json: ignoreUnknown=true for CI compatibility
- biome-ignore comments for intentional any/Function use in eval integrations
- Rename escape -> isEscaped in opencode-config (noShadowRestrictedNames)
- Properly typed mock repos in export+planner tests
- Sync readFileSync in benchmark-runner (no as any cast to Bun.file)
- as Record<string, unknown> in protocol openapi
@MerverliPy MerverliPy merged commit f496642 into main Jul 6, 2026
6 of 10 checks passed
@MerverliPy MerverliPy deleted the phase-30-enterprise branch July 6, 2026 23:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants