INTENT ↔ SCOPE Gap Analysis — Post SAND-WP-0003
Date: 2026-06-23
Author: codex
Trigger: SAND-WP-0003 finished (wise-validator extraction); SAND-WP-0001/0002/0008
already complete. SCOPE.md stale (still described bootstrap / not-started state).
Prior assessment: none (first history/ entry for sand-boxer)
1. Executive summary
sand-boxer has crossed from bootstrap to v0 operational for the self-hosted
compose path. The establishment half of the-custodian/e2e-framework/ is migrated
(ext.compose-ssh); the validation half lives in wise-validator (validate run).
Host telemetry and canary self-deploy (SAND-WP-0008) make the repo self-sustained per
INTENT.
Remaining distance to INTENT is migration completion (the-custodian shim),
extension breadth (vm-packer, SaaS), lifecycle depth (TTL enforcement,
snapshots), and operational maturity (sandboxer01, reuse-surface publish,
security runbooks).
Vector movement: D4/A1/C1/R1 (bootstrap) → D5/A3/C3/R3
| Dimension |
Was (SCOPE 2026-06-22) |
Now |
Notes |
| Discovery |
D4 |
D5 |
INTENT, research, meta-framework spec, integration docs |
| Availability |
A1 |
A3 |
CLI + HTTP v0; CoulombCore remote smoke proven |
| Completeness |
C1 |
C3 |
Pillar 1–2 partial; pillars 3–4 (extensions breadth, payments) absent |
| Reliability |
R1 |
R3 |
Remote smoke, telemetry, stale inventory; no TTL auto-reap scheduler |
2. Workplan deliverables (cumulative)
| Workplan |
Status |
Key deliverable |
| SAND-WP-0001 |
finished |
Python scaffold, AGENTS.md, dev workflow |
| SAND-WP-0002 |
finished |
Meta-framework, ext.compose-ssh, CLI, HTTP stub, registry |
| SAND-WP-0003 |
finished |
wise-validator sibling (validate run, schema/runner/reporter) |
| SAND-WP-0008 |
finished |
profile.sandbox-canary, telemetry, inspect / reap-stale |
3. INTENT — four pillars
Pillar 1: Unified establishment API
| Capability |
INTENT |
Status |
Gap |
create / get / list / destroy / recreate |
Required v0 |
Done |
CLI + HTTP |
extend_ttl |
API shape |
Stub only |
No implementation |
snapshot / restore |
Later completeness |
Absent |
SAND-WP-0007 |
active state transition |
Lifecycle |
Absent |
Optional; not wired |
| Consumer attribution |
adm/agt/atm + project |
Done |
— |
| Full HTTP surface |
Parallel to CLI |
Partial |
No recreate, host query param only on create |
Pillar 2: Profile catalog
| Capability |
INTENT |
Status |
Gap |
profile.compose-e2e |
Reference profile |
Done |
Remote-verified |
profile.sandbox-canary |
Self-dogfood |
Done |
SAND-WP-0008 |
| Agent-dev / health-probe profiles |
Future consumers |
Absent |
glas-harness / wise-validator profiles |
ext.vm-packer lineage |
build-machines |
Absent |
SAND-WP-0005 |
| Registry + reuse-surface federation |
Registry-first |
Draft only |
No reuse-surface validate publish |
| Setup metadata / secret refs |
Blitzy pattern |
Schema only |
No resolution at provision boundary |
Pillar 3: Extension platform
| Capability |
INTENT |
Status |
Gap |
ext.compose-ssh |
First self-hosted |
Done |
podman-compose on CoulombCore |
| Extension SDK / author contract |
Near-term outcome #7 |
Absent |
Documented in meta-framework only |
| vm-packer, Daytona OSS, OpenShell |
Self-hosted class |
Absent |
SAND-WP-0005 |
| E2B, Modal, SaaS adapters |
SaaS class |
Absent |
SAND-WP-0006 |
estimate_cost optional hook |
Extension interface |
Absent |
— |
| Routing policy engine |
Multi-backend |
Deferred |
Explicit profile→extension today |
Pillar 4: Payments and metering
| Capability |
INTENT |
Status |
Gap |
| Credits / usage accounting |
SaaS extensions |
Absent |
SAND-WP-0006 |
| BYOK for provider keys |
SaaS |
Absent |
— |
| Self-hosted allocation metering |
Host/duration |
Partial |
Telemetry deltas only; no billing export |
4. INTENT — governing principle (seven questions)
| # |
Question |
Status |
Evidence / gap |
| 1 |
Which sandbox recipe? |
Met |
Profile loader, two profiles |
| 2 |
Which backend? |
Partial |
Single extension; no routing engine |
| 3 |
Where does it run? |
Partial |
Placement env vars; sandboxer01 not live |
| 4 |
How is isolation enforced? |
Partial |
Compose project isolation; network default-deny declarative only |
| 5 |
How reachable? |
Partial |
SSH direct; ops-bridge/warden not integrated in descriptor |
| 6 |
What happened? |
Met |
State Hub events + local store |
| 7 |
What did it cost? |
Not met |
Payments layer absent |
Score: 2 met, 4 partial, 1 not met
5. Self-sufficiency and sibling boundaries
| Criterion |
Status |
Notes |
| Operates without wise-validator |
Met |
sandboxer create / canary / smoke |
| wise-validator optional consumer |
Met |
SAND-WP-0003; one-way dependency documented |
| sand-boxer does not validate |
Met |
Health/test in wise-validator |
| glas-harness / snuggle-inventor contracts |
Partial |
Integration docs only; no consumer smoke |
| Monolith not recreated |
Met |
Provision vs validation split holds |
6. Near-term outcomes (INTENT § Near-term)
| # |
Outcome |
Status |
| 1 |
Charter and research |
Done |
| 2 |
First self-hosted extension |
Done |
| 3 |
Unified API v0 |
Done |
| 4 |
Profile catalog start |
Done |
| 5 |
Registry entry |
Done (draft) |
| 6 |
Sibling integration notes |
Done |
| 7 |
Extension SDK sketch |
Open |
| 8 |
wise-validator |
Done (sibling repo) |
7. Maturity target gaps
| Maturity statement |
Status |
Track |
| glas-harness requests sandboxes without backend choice |
Not yet |
Extension SDK + agent-dev profile |
| wise-validator may request validation environments |
Met |
validate run uses profile.compose-e2e |
| snuggle-inventor build sandboxes with setup metadata |
Not yet |
Secret boundary + profile inputs |
| activity-core / CI bounded venues + visibility |
Partial |
Lifecycle events; no activity-core wiring |
| Operators route self-hosted vs SaaS spend |
Not yet |
SAND-WP-0006 |
| Workstation optional for runtime |
Partial |
Remote path works; custodian shim still default for some |
8. SCOPE.md drift (corrected 2026-06-23)
| SCOPE claim (2026-06-22) |
Actual state |
| "implementation not started" |
v0 shipped |
| "Nothing in this repo provisions sandboxes" |
sandboxer create provisions |
| "registry empty / helix_forge" |
indexed infotech capability |
| "wise-validator migration not complete" |
SAND-WP-0003 done |
Interim make e2e only path |
Still true until SAND-WP-0004 |
9. Remaining gaps (prioritized)
| Prio |
Gap |
Owner / repo |
Proposed track |
| P1 |
the-custodian make e2e REPO= → validate run shim |
the-custodian + wise-validator |
SAND-WP-0004 |
| P2 |
Extension SDK sketch + ext.vm-packer / build-machines |
sand-boxer |
SAND-WP-0005 (INTENT near-term #7 + WP-0002 follow-on) |
| P3 |
TTL enforcement + extend_ttl + activity-core reap hook |
sand-boxer + activity-core |
New workplan after 0005 |
| P5 |
.repo-classification.yaml + reuse-surface validate |
sand-boxer |
Ad hoc or WP task |
| P6 |
Security runbook (blast-radius vs intent enforcement) |
sand-boxer docs |
Ad hoc |
| P7 |
sandboxer01 dedicated host + placement live |
infra / operator |
Outside repo |
| P8 |
SaaS extensions + payments |
sand-boxer |
SAND-WP-0006 |
| P9 |
Snapshot / restore profiles |
sand-boxer |
SAND-WP-0007 |
| P10 |
wise-validator remote smoke sign-off (T09) |
wise-validator |
Operator verification |
Note: SAND-WP-0002 follow-on numbering reserves 0004–0007. Next workplan should be
SAND-WP-0004 (custodian shim) to close the e2e-framework migration arc.
10. Recommended next workplan
SAND-WP-0004 — the-custodian e2e shim and deprecation
Closes P1: operators keep make e2e REPO= while implementation delegates to
validate run (wise-validator + sand-boxer). Updates RUNBOOK pointers; adds
deprecation notice on python -m e2e_framework.
Subsequent: SAND-WP-0005 (ext.vm-packer + extension SDK), then operational
hardening (TTL, reuse-surface publish).
11. Evidence references
workplans/SAND-WP-0002-meta-framework-foundation.md (finished)
workplans/SAND-WP-0003-wise-validator-extraction.md (finished)
workplans/SAND-WP-0008-host-telemetry-and-self-canary.md (finished)
docs/migration-gaps.md
wise-validator/docs/runbooks/validate-compose-e2e.md
- CoulombCore smoke:
scripts/smoke-compose-e2e.sh (SAND-WP-0002-T10)