@volter/project 0.5.211 → 0.5.213

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/NOTICE +2 -2
  2. package/README.md +8 -15
  3. package/package.json +5 -26
  4. package/schemas/volter-project.schema.json +33 -145
  5. package/schemas/volter-settings.schema.json +11 -49
  6. package/src/adapter/adapter-module.ts +208 -465
  7. package/src/adapter/adapter-surface.ts +4 -32
  8. package/src/adapter/authoring-seam-contract.ts +7 -24
  9. package/src/adapter/authoring.ts +126 -265
  10. package/src/adapter/editor-looks.ts +98 -127
  11. package/src/adapter/finders/registry.ts +6 -21
  12. package/src/adapter/host-context.ts +17 -72
  13. package/src/adapter/index.ts +4 -77
  14. package/src/adapter/manifest-interpreter.ts +7 -50
  15. package/src/adapter/physics-adapter-2d.ts +4 -21
  16. package/src/adapter/root-adapter.ts +37 -111
  17. package/src/adapter/root-seam-contract.ts +3 -6
  18. package/src/adapter/root-stacking.ts +4 -46
  19. package/src/adapter/seam-evidence.ts +0 -16
  20. package/src/adapter/system-adapter.ts +24 -656
  21. package/src/adapter/system-seam-contract.ts +1 -91
  22. package/src/adapter/transform.ts +4 -3
  23. package/src/adapter/workspace-arrangement.ts +33 -49
  24. package/src/manifest/editor-port.ts +10 -36
  25. package/src/manifest/filename.ts +3 -42
  26. package/src/manifest/load-file.ts +9 -15
  27. package/src/manifest/load.ts +44 -179
  28. package/src/manifest/locate.ts +8 -32
  29. package/src/manifest/schema.ts +155 -427
  30. package/src/semver.ts +16 -0
  31. package/src/settings/keys.ts +9 -11
  32. package/src/settings/schema.ts +55 -44
  33. package/schemas/engine-api.json +0 -57
  34. package/schemas/engine-api.md +0 -22
  35. package/src/adapter/binding.ts +0 -445
  36. package/src/adapter/debug-registry-ref.ts +0 -19
  37. package/src/adapter/frame-capture.ts +0 -80
  38. package/src/adapter/ingest/contract-system-slots.ts +0 -28
  39. package/src/adapter/ingest/game-contract-seams.ts +0 -86
  40. package/src/adapter/ingest/game-contract.ts +0 -506
  41. package/src/adapter/ingest/mount-readiness.ts +0 -140
  42. package/src/adapter/loop-gate-report.ts +0 -53
  43. package/src/adapter/native-entry-surface.ts +0 -100
  44. package/src/adapter/render-audio.ts +0 -20
  45. package/src/adapter/render-memory.ts +0 -34
  46. package/src/adapter/renderer-config.ts +0 -84
  47. package/src/adapter/system-slot.ts +0 -301
  48. package/src/core/system-phase.ts +0 -52
  49. package/src/inspection.ts +0 -281
  50. package/src/manifest/configuration-kinds.ts +0 -241
  51. package/src/manifest/kind-modules.ts +0 -58
  52. package/src/manifest/runtime-environment.ts +0 -48
@@ -1,34 +1,6 @@
1
1
  /**
2
- * `AdapterSurface` — the kinds of render surface a world can be (T7.1/T7.3/T6.2).
3
- *
4
- * Moved here from `runtime/game.ts`
5
- * so `adapter/root-adapter.ts`'s kind-tagged `MountedRoot` types can name it
6
- * without a value-level import cycle (`runtime/game.ts` type-imports from
7
- * `adapter/root-adapter.ts` already). This is a leaf module — it imports
8
- * nothing — so anything may import it with zero risk of a cycle.
9
- * `runtime/game.ts` re-exports this SAME type (`export type { AdapterSurface }`),
10
- * so no existing `import type { AdapterSurface } from '@volter/editor-game/runtime/game'` call site
11
- * needed to change.
2
+ * Render surface kinds shared by mounted-root contracts and their consumers.
3
+ * This dependency-free leaf keeps the surface vocabulary available without
4
+ * introducing a value import cycle.
12
5
  */
13
- export type AdapterSurface = 'three' | 'canvas' | 'dom';
14
-
15
- /**
16
- * Exhaustiveness guard for `AdapterSurface` dispatch (v4 architecture-review
17
- * §7.4-2: a hypothetical 4th kind must fail to COMPILE at every kind-dispatch
18
- * site, not silently contribute nothing or silently default to an existing
19
- * kind). Lives here — colocated with the kind vocabulary itself, not in a
20
- * generic util module — so the three call sites that need it
21
- * (`runtime/create-runtime.ts`'s mount loop, `editor/binding-resolver.ts`'s
22
- * `resolveAllRoots`, `editor/play-mode.ts`'s `installMultiRootAuthoring`)
23
- * import it from the same leaf module that defines `AdapterSurface`, keeping the
24
- * type and its guard from drifting apart. The `never` parameter is the
25
- * compile-time half of the guard (TS refuses to call this with anything the
26
- * compiler hasn't already narrowed to zero remaining variants); the thrown
27
- * Error is the runtime half, in case a value's static type lied (e.g. data
28
- * crossing a JSON boundary).
29
- */
30
- export function assertNever(value: never, context?: string): never {
31
- throw new Error(
32
- `Unreachable${context ? ` ${context}` : ''}: unexpected value ${JSON.stringify(value)}`,
33
- );
34
- }
6
+ export type AdapterSurface = 'stage' | 'canvas' | 'dom';
@@ -1,14 +1,12 @@
1
1
  /** Compiler-derived proof requirements for the AuthoringAdapter protocol.
2
2
  *
3
- * This is intentionally adjacent to the interface. Coverage used to enumerate
4
- * only top-level provider names, which allowed `{}` to count as a complete
5
- * provider. These descriptors cover every nested member and encode the
3
+ * This is intentionally adjacent to the interface. Enumerating only top-level
4
+ * provider names would let `{}` count as a complete provider. These descriptors cover every nested member and encode the
6
5
  * weakest evidence that can truthfully verify it.
7
6
  */
8
7
 
9
8
  import type {
10
9
  AssetDropProvider,
11
- AssetSubjectProvider,
12
10
  AuthoringAdapter,
13
11
  BoxEditProvider,
14
12
  ColorSampleProvider,
@@ -36,7 +34,6 @@ export const AUTHORING_ADAPTER_SHAPE = defineSeamShape<AuthoringAdapter>()({
36
34
  selection: { optional: true, kind: 'value', required: 'effect' },
37
35
  transforms: { optional: true, kind: 'value', required: 'effect' },
38
36
  inspector: { optional: true, kind: 'value', required: 'effect' },
39
- assetSubject: { optional: true, kind: 'value', required: 'operation' },
40
37
  related: { optional: true, kind: 'value', required: 'operation' },
41
38
  instances: { optional: true, kind: 'value', required: 'effect' },
42
39
  structure: { optional: true, kind: 'value', required: 'round-trip' },
@@ -57,17 +54,11 @@ export const HIERARCHY_PROVIDER_SHAPE = defineSeamShape<HierarchyProvider>()({
57
54
  roots: { optional: false, kind: 'function', required: 'operation' },
58
55
  node: { optional: false, kind: 'function', required: 'operation' },
59
56
  crossSurfaceStructureSignature: { optional: true, kind: 'function', required: 'operation' },
60
- // A PURE LOOKUP IS AN `operation`, and `effect` is reserved for a member
61
- // whose truth is a side effect a receipt records (orchestrator ruling,
62
- // 2026-09-19). `idForObject3D` was declared `effect` and could therefore
63
- // never be verified: nothing it does is observable anywhere but in its own
64
- // return value, so no consumer has a receipt to record and the hierarchy
65
- // carrier graded `unverified` forever — a false sentence about a member
66
- // that works. It is the inverse of `object3D` and is proven the same way,
67
- // by a read probe that CALLS it and checks the answer against the walk
68
- // (`coverage/authoring-read-probe.ts`).
69
- object3D: { optional: true, kind: 'function', required: 'operation' },
70
- idForObject3D: { optional: true, kind: 'function', required: 'operation' },
57
+ // Pure lookups are operations: verify nativeObject/idForNativeObject by
58
+ // calling them and comparing their return values with the hierarchy walk.
59
+ // Effects require a receipt for an observable side effect.
60
+ nativeObject: { optional: true, kind: 'function', required: 'operation' },
61
+ idForNativeObject: { optional: true, kind: 'function', required: 'operation' },
71
62
  });
72
63
 
73
64
  export const SELECTION_PROVIDER_SHAPE = defineSeamShape<SelectionProvider>()({
@@ -96,11 +87,6 @@ export const INSPECTOR_PROVIDER_SHAPE = defineSeamShape<InspectorProvider>()({
96
87
  remove: { optional: true, kind: 'function', required: 'round-trip' },
97
88
  });
98
89
 
99
- export const ASSET_SUBJECT_PROVIDER_SHAPE = defineSeamShape<AssetSubjectProvider>()({
100
- get: { optional: false, kind: 'function', required: 'operation' },
101
- entries: { optional: true, kind: 'function', required: 'operation' },
102
- });
103
-
104
90
  export const RELATED_SUBJECTS_PROVIDER_SHAPE = defineSeamShape<RelatedSubjectsProvider>()({
105
91
  links: { optional: false, kind: 'function', required: 'operation' },
106
92
  });
@@ -150,8 +136,6 @@ export const STORIES_PROVIDER_SHAPE = defineSeamShape<StoriesProvider>()({
150
136
  storiesFor: { optional: false, kind: 'function', required: 'operation' },
151
137
  active: { optional: false, kind: 'function', required: 'operation' },
152
138
  apply: { optional: false, kind: 'function', required: 'effect' },
153
- isolate: { optional: true, kind: 'function', required: 'effect' },
154
- title: { optional: true, kind: 'value', required: 'shape' },
155
139
  unavailable: { optional: true, kind: 'function', required: 'operation' },
156
140
  });
157
141
 
@@ -207,7 +191,6 @@ export const AUTHORING_PROVIDER_SHAPES: {
207
191
  selection: SELECTION_PROVIDER_SHAPE,
208
192
  transforms: TRANSFORM_PROVIDER_SHAPE,
209
193
  inspector: INSPECTOR_PROVIDER_SHAPE,
210
- assetSubject: ASSET_SUBJECT_PROVIDER_SHAPE,
211
194
  related: RELATED_SUBJECTS_PROVIDER_SHAPE,
212
195
  instances: COMPONENT_INSTANCES_PROVIDER_SHAPE,
213
196
  structure: STRUCTURE_PROVIDER_SHAPE,