intrnl.cloud
Building applications

Sandboxed builds

Immutable build inputs, dependency policy, disposable execution, and signed artifact provenance.
v1 design baseline. This page specifies intended behavior. Delivery and validation are tracked in the implementation plan; it is not a claim that the platform is already implemented.

Build input

Every build is tied to:

organization
application
environment target
immutable source revision
runtime contract version
builder image digest
lockfile digest

No build runs against a moving branch reference such as “whatever main is now.”

Build sandbox

Each build runs in a disposable sandbox with:

  • Fresh filesystem
  • Fixed CPU and memory limits
  • Wall-clock timeout
  • No host mounts
  • No production secrets
  • No runtime database
  • No control-plane credentials
  • Restricted outbound networking
  • Read-only source token
  • One-time artifact upload credential
  • Destruction after completion

The target implementation is:

Kubernetes Job
    ↓
Kata/Firecracker-style microVM RuntimeClass

with gVisor as the fallback candidate if the chosen infrastructure cannot support the preferred KVM-backed model.

The Phase 0 sandbox bake-off must validate:

  • Escape resistance model
  • Cold-start time
  • Nuxt build performance
  • Memory overhead
  • Network enforcement
  • Filesystem destruction
  • Operational upgrade process
  • Density/cost

Supported build contract

For intrnl-managed Nuxt apps:

  • Supported Node version pinned by runtime contract
  • pnpm
  • Frozen pnpm-lock.yaml
  • Fixed builder image
  • Standard build command
  • No arbitrary Dockerfile
  • No privileged build
  • No host socket
  • No nested container daemon

External Git apps must conform to a supported manifest rather than supplying arbitrary infrastructure.

Package installation

Package installation should use a controlled npm proxy/cache.

Benefits:

  • Reduced public registry dependency
  • Repeatability
  • Policy enforcement
  • Better observability
  • Ability to block known packages or sources
  • Reduced arbitrary egress during installation

Post-install scripts remain possible because ecosystem packages sometimes require them, but they execute only inside the disposable sandbox.

Build pipeline

1. Fetch exact source revision
2. Validate repository structure
3. Validate intrnl.config
4. Verify supported runtime/framework version
5. Install locked dependencies
6. Generate dependency inventory/SBOM
7. Run secret scan
8. Run dependency/license/vulnerability policy
9. Type-check/lint as configured
10. Run tests
11. Analyze requested capabilities
12. Analyze migrations
13. Build Nuxt/Nitro Worker bundle
14. Separate and hash static assets
15. Run compatibility smoke test in workerd
16. Create artifact manifest
17. Sign artifact
18. Upload artifact and reports
19. Destroy sandbox

Scanner findings feed policy; they do not automatically prove an application safe.

Artifact manifest

Each artifact records:

{
  "application_id": "app_01K...",
  "source_revision": "def456...",
  "runtime_contract": "2026-09-01",
  "builder_image": "sha256:...",
  "lockfile_digest": "sha256:...",
  "worker_bundle_digest": "sha256:...",
  "static_assets_digest": "sha256:...",
  "migration_set_digest": "sha256:...",
  "sbom_digest": "sha256:...",
  "created_at": "...",
  "signature": "..."
}

The runtime verifies the manifest and signature before activation.

No production secrets at build time

Apps must not require secrets to compile.

Public build-time settings may be supplied through a separate non-secret configuration class.

Production credentials are attached only at runtime.

Signing trust boundary

The pipeline order does not grant the untrusted build process access to an artifact signing key. The trusted signing service must authorize and bind the manifest to the recorded build and source revision. Phase 0 must specify signing protocol, key custody, verification, and revocation behavior.