ADR-0008: ALL resource scope and prospective object identity
Date: 2026-09-20 Status: Accepted; clarifies Master PlanningScope collection semantics.
Decision
For a nonempty resource filter an object is selected only if its resource list is nonempty and all its resource IDs occur in the filter. Preserve existing behavior: this is containment of the object's complete resource footprint, not any-overlap discovery. Omitted/null adds no resource restriction; [] selects nothing. Other dimensions intersect. Selection never grants read, plan or execute capability.
| Object resources | Filter | Selected |
|---|---|---|
| A, B | omitted/null | yes |
| A, B | [] | no |
| A | A | yes |
| A, B | A | no |
| A, B | A, B, C | yes |
| A, B | C | no |
| none | A | no |
ANY would include objects partly outside the resource boundary; a future discovery query may add explicit ANY semantics through a new decision, not silently alter PlanningScope.
Prospective versus existing
PlanningObject.id is a planning identity. revision=None means a prospective target in the planning context; Some(revision) represents already-existing external state. CREATE requires a prospective target. MOVE/UPDATE/DELETE require existing state. The mock stores both together for testability. A real provider CREATE must not require that the prospective target already exists remotely; it returns external identity/revision. No premature ExternalEvent refactor or provider ID schema is introduced. Atomic revision checks, idempotency replay and executor authorization remain required.
Verification and compatibility
Nine scope/wire tests cover the table, all optional filter dimensions and absent mutation grants. Integration tests cover promotion after CREATE and rejection of action/revision mismatches. The adapter adds a guard; valid CPIR 0.1 behavior is unchanged. Master · Review resolution
