@forgeax/engine-render 0.1.23 → 0.1.25
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.
- package/README.md +231 -10
- package/dist/assembly/bundler-contract.d.ts +9 -0
- package/dist/assembly/bundler-contract.d.ts.map +1 -0
- package/dist/assembly/device-feature-admission.d.ts +8 -0
- package/dist/assembly/device-feature-admission.d.ts.map +1 -1
- package/dist/assembly/extended-lighting-fallback.d.ts +13 -0
- package/dist/assembly/extended-lighting-fallback.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +7 -243
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +3 -2
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/standard-layer-projection.d.ts +10 -0
- package/dist/assembly/material/standard-layer-projection.d.ts.map +1 -0
- package/dist/assembly/material/surface-projection.d.ts +24 -0
- package/dist/assembly/material/surface-projection.d.ts.map +1 -0
- package/dist/assembly/material-shader-policy.d.ts +188 -0
- package/dist/assembly/material-shader-policy.d.ts.map +1 -0
- package/dist/assembly/material-shader-prewarm.d.ts +21 -0
- package/dist/assembly/material-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/mesh-ssbo-grow.d.ts +88 -0
- package/dist/assembly/mesh-ssbo-grow.d.ts.map +1 -0
- package/dist/assembly/recovery/device-loss-fanout.d.ts +14 -0
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -0
- package/dist/assembly/recovery/generation.d.ts +46 -0
- package/dist/assembly/recovery/generation.d.ts.map +1 -0
- package/dist/assembly/recovery/recovery-attempt.d.ts +63 -0
- package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -0
- package/dist/assembly/recovery/renderer-recover.d.ts +115 -0
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -0
- package/dist/assembly/renderer-facade.d.ts +10 -0
- package/dist/assembly/renderer-facade.d.ts.map +1 -0
- package/dist/assembly/renderer-frame-transaction.d.ts +17 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-helpers.d.ts +19 -0
- package/dist/assembly/renderer-helpers.d.ts.map +1 -0
- package/dist/assembly/renderer-lifecycle.d.ts +34 -0
- package/dist/assembly/renderer-lifecycle.d.ts.map +1 -1
- package/dist/assembly/shader-prewarm-policy.d.ts +15 -0
- package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-contract.d.ts +9 -0
- package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +55 -0
- package/dist/assembly/webgpu-ready.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +152 -0
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -0
- package/dist/assembly/webgpu-vertex-layouts.d.ts +89 -0
- package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -0
- package/dist/assets/asset-decoders.d.ts.map +1 -1
- package/dist/authoring.mjs +1 -1
- package/dist/{chunk-FF7K3FSO.mjs → chunk-ADHHVYLW.mjs} +89 -89
- package/dist/chunk-ADHHVYLW.mjs.map +1 -0
- package/dist/{chunk-YALPS44A.mjs → chunk-E34VL5VI.mjs} +47 -47
- package/dist/chunk-E34VL5VI.mjs.map +1 -0
- package/dist/{chunk-4L3P6DT5.mjs → chunk-GE3SDD72.mjs} +37 -5
- package/dist/chunk-GE3SDD72.mjs.map +1 -0
- package/dist/{chunk-HZUPSYW7.mjs → chunk-HKXTW355.mjs} +105 -15
- package/dist/chunk-HKXTW355.mjs.map +1 -0
- package/dist/chunk-JSEDTZYS.mjs +413 -0
- package/dist/chunk-JSEDTZYS.mjs.map +1 -0
- package/dist/{chunk-FBC4R44J.mjs → chunk-KM2NOX2I.mjs} +57 -57
- package/dist/chunk-KM2NOX2I.mjs.map +1 -0
- package/dist/{chunk-DIYW3M5D.mjs → chunk-N3RT2EUR.mjs} +2288 -2238
- package/dist/chunk-N3RT2EUR.mjs.map +1 -0
- package/dist/{chunk-ZUWKAZ2I.mjs → chunk-TCLDX7SZ.mjs} +1167 -368
- package/dist/chunk-TCLDX7SZ.mjs.map +1 -0
- package/dist/{chunk-QODA5UKU.mjs → chunk-ZZ4YQ474.mjs} +2 -2
- package/dist/chunk-ZZ4YQ474.mjs.map +1 -0
- package/dist/components/instances.d.ts +13 -31
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +20688 -16314
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +2 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/device/gpu-residency.d.ts +24 -4
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/environment/frame.d.ts +5 -0
- package/dist/environment/frame.d.ts.map +1 -1
- package/dist/environment/inspection.d.ts +7 -0
- package/dist/environment/inspection.d.ts.map +1 -1
- package/dist/environment/lifecycle.d.ts +20 -2
- package/dist/environment/lifecycle.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +58 -2
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +13 -0
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +899 -0
- package/dist/extract/contracts.d.ts.map +1 -0
- package/dist/features/host.d.ts +2 -0
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +3 -0
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts +2 -0
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +34 -1
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +5 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +7 -6
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +7 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +27 -9
- package/dist/index.mjs.map +1 -1
- package/dist/instance-buffer-cache.d.ts +7 -1
- package/dist/instance-buffer-cache.d.ts.map +1 -1
- package/dist/instances.d.ts +101 -0
- package/dist/instances.d.ts.map +1 -0
- package/dist/internal.mjs +6 -6
- package/dist/light-buffer-layout.d.ts +3 -0
- package/dist/light-buffer-layout.d.ts.map +1 -1
- package/dist/materials.d.ts +96 -11
- package/dist/materials.d.ts.map +1 -1
- package/dist/mesh-material-bindings.d.ts +56 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -1
- package/dist/occlusion-proxy.d.ts +4 -0
- package/dist/occlusion-proxy.d.ts.map +1 -0
- package/dist/pbr-pipeline.d.ts +32 -9
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/points-lines/prepare.d.ts +3 -0
- package/dist/points-lines/prepare.d.ts.map +1 -1
- package/dist/points-lines/standard-owner.d.ts +33 -0
- package/dist/points-lines/standard-owner.d.ts.map +1 -0
- package/dist/record/frame-snapshot.d.ts +18 -2
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +14 -2
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +36 -4
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +7 -17
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +11 -3
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/recovery-pipeline.d.ts +30 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -0
- package/dist/record/render-context.d.ts +28 -5
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +11 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +1 -1
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/recovery/render-system-candidate.d.ts +65 -0
- package/dist/recovery/render-system-candidate.d.ts.map +1 -0
- package/dist/render-contract.d.ts +68 -7
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +16 -0
- package/dist/render-system-extract-tail.d.ts.map +1 -0
- package/dist/render-system-extract.d.ts +180 -22
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +131 -4
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +2 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +31 -1
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/systems/skin-palette-allocator.d.ts +6 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -6
- package/dist/temporal/taa-history-store.d.ts +15 -1
- package/dist/temporal/taa-history-store.d.ts.map +1 -1
- package/dist/temporal/transaction.d.ts +5 -0
- package/dist/temporal/transaction.d.ts.map +1 -1
- package/package.json +20 -20
- package/src/__tests__/device-feature-admission.unit.test.ts +6 -0
- package/src/__tests__/device-loss-fanout.unit.test.ts +107 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +21 -0
- package/src/__tests__/environment-generation.integration.test.ts +23 -0
- package/src/__tests__/expose-renderer-errors.unit.test.ts +34 -0
- package/src/__tests__/factory-contract.integration.test.ts +122 -7
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +4 -1
- package/src/__tests__/gpu-scene.unit.test.ts +38 -2
- package/src/__tests__/ibl/face-uniforms.unit.test.ts +2 -0
- package/src/__tests__/ibl-residency-publication.unit.test.ts +113 -0
- package/src/__tests__/instances-store.unit.test.ts +46 -0
- package/src/__tests__/instances-world-ownership.integration.test.ts +62 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +29 -22
- package/src/__tests__/material-cooked-projection.unit.test.ts +19 -1
- package/src/__tests__/material-pass-policy.unit.test.ts +69 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +69 -0
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +29 -0
- package/src/__tests__/material-stride-surface.unit.test.ts +7 -3
- package/src/__tests__/material-surface-authoring.test-d.ts +62 -0
- package/src/__tests__/materials-standard-contract.unit.test.ts +104 -0
- package/src/__tests__/materials-transmission-validation.unit.test.ts +24 -0
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +1 -5
- package/src/__tests__/physical-clearcoat.integration.test.ts +89 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +1 -1
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +1 -1
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +6 -3
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +140 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +127 -18
- package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +47 -0
- package/src/__tests__/renderer-generation-assembly.unit.test.ts +77 -0
- package/src/__tests__/renderer-generation-failure.unit.test.ts +108 -0
- package/src/__tests__/renderer-producer-root-matrix.integration.test.ts +33 -0
- package/src/__tests__/renderer-recovery-capability-matrix.unit.test.ts +59 -0
- package/src/__tests__/renderer-recovery-contract.unit.test.ts +73 -0
- package/src/__tests__/renderer-recovery-lifecycle.unit.test.ts +216 -0
- package/src/__tests__/renderer-target-history-recovery.integration.test.ts +80 -0
- package/src/__tests__/shader-manifest-fixture.ts +13 -16
- package/src/__tests__/shader-stage-surface.unit.test.ts +1 -1
- package/src/__tests__/skin-motion-regression.unit.test.ts +33 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +30 -2
- package/src/__tests__/standard-layer-projection.unit.test.ts +23 -0
- package/src/__tests__/surface-adjacent-regressions.integration.test.ts +60 -0
- package/src/__tests__/surface-standard-pipeline.browser.test.ts +20 -0
- package/src/__tests__/surface-standard-pipeline.dawn.test.ts +20 -0
- package/src/__tests__/surface-standard-pipeline.fixture.ts +132 -0
- package/src/__tests__/surface-variant-provenance.integration.test.ts +33 -0
- package/src/__tests__/transmission-prewarm.unit.test.ts +95 -85
- package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +1 -1
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +3 -1
- package/src/assembly/bundler-contract.ts +9 -0
- package/src/assembly/device-feature-admission.ts +15 -5
- package/src/assembly/extended-lighting-fallback.ts +216 -0
- package/src/assembly/factory.ts +83 -10088
- package/src/assembly/material/__tests__/standard-layer-plan-projection.integration.test.ts +18 -0
- package/src/assembly/material/__tests__/surface-pass-projection.integration.test.ts +62 -0
- package/src/assembly/material/assembly.ts +18 -2
- package/src/assembly/material/standard-layer-projection.ts +16 -0
- package/src/assembly/material/surface-projection.ts +90 -0
- package/src/assembly/material-shader-policy.ts +932 -0
- package/src/assembly/material-shader-prewarm.ts +88 -0
- package/src/assembly/mesh-ssbo-grow.ts +270 -0
- package/src/assembly/recovery/device-loss-fanout.ts +89 -0
- package/src/assembly/recovery/generation.ts +141 -0
- package/src/assembly/recovery/recovery-attempt.ts +800 -0
- package/src/assembly/recovery/renderer-recover.ts +906 -0
- package/src/assembly/renderer-facade.ts +342 -0
- package/src/assembly/renderer-frame-transaction.ts +45 -0
- package/src/assembly/renderer-helpers.ts +99 -0
- package/src/assembly/renderer-lifecycle.ts +159 -0
- package/src/assembly/shader-prewarm-policy.ts +157 -0
- package/src/assembly/webgpu-ready-contract.ts +14 -0
- package/src/assembly/webgpu-ready.ts +4066 -0
- package/src/assembly/webgpu-renderer.ts +4027 -0
- package/src/assembly/webgpu-vertex-layouts.ts +132 -0
- package/src/assets/asset-decoders.ts +27 -4
- package/src/components/camera.ts +1 -1
- package/src/components/instances.ts +14 -197
- package/src/debug-draw-glue.ts +1 -1
- package/src/device/device-scope.ts +35 -6
- package/src/device/gpu-residency.ts +194 -26
- package/src/environment/frame.ts +6 -0
- package/src/environment/inspection.ts +10 -0
- package/src/environment/lifecycle.ts +114 -8
- package/src/errors/recover.ts +76 -5
- package/src/errors/render.ts +17 -0
- package/src/extract/contracts.ts +974 -0
- package/src/features/host.ts +16 -0
- package/src/features/prepared-gpu-work.ts +20 -2
- package/src/features/prepared-graphics-store.ts +17 -0
- package/src/gpu-driven/production-raster.ts +131 -3
- package/src/gpu-scene.ts +87 -31
- package/src/ibl/IblPipelineCache.ts +134 -50
- package/src/ibl/skylight-bind-group.ts +26 -0
- package/src/index.ts +10 -1
- package/src/instance-buffer-cache.ts +14 -1
- package/src/instances.ts +288 -0
- package/src/light-buffer-layout.ts +3 -0
- package/src/materials.ts +365 -53
- package/src/mesh-material-bindings.ts +59 -0
- package/src/occlusion-proxy.ts +64 -0
- package/src/pbr-pipeline.ts +139 -15
- package/src/pipeline-builder.ts +14 -10
- package/src/pipeline-spec.ts +6 -14
- package/src/points-lines/__tests__/cache-recovery.unit.test.ts +22 -0
- package/src/points-lines/prepare.ts +9 -0
- package/src/points-lines/standard-owner.ts +403 -0
- package/src/record/__tests__/frame-targets-recovery.unit.test.ts +60 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +26 -1
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +38 -0
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +124 -0
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +28 -13
- package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +47 -4
- package/src/record/__tests__/temporal-payload.unit.test.ts +22 -43
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +1 -1
- package/src/record/frame-snapshot.ts +34 -2
- package/src/record/frame-targets.ts +11 -1
- package/src/record/frame.ts +37 -4
- package/src/record/helpers.ts +1 -1
- package/src/record/main-pass-geometry.ts +727 -63
- package/src/record/main-pass-material.ts +316 -209
- package/src/record/main-pass-sprite-draws.ts +7 -8
- package/src/record/main-pass.ts +94 -6
- package/src/record/mesh-ssbo.ts +32 -10
- package/src/record/recovery-pipeline.ts +695 -0
- package/src/record/render-context.ts +39 -4
- package/src/record/shadow-pass.ts +46 -99
- package/src/record/typed-frame-graph.ts +45 -1
- package/src/record/view-ubo.ts +3 -3
- package/src/recovery/render-system-candidate.ts +876 -0
- package/src/render-contract.ts +69 -7
- package/src/render-system-extract-tail.ts +3039 -0
- package/src/render-system-extract.ts +177 -3003
- package/src/render-system.ts +906 -662
- package/src/scene/render-scene-types.ts +2 -0
- package/src/scene/render-scene.ts +703 -37
- package/src/systems/skin-palette-allocator.ts +129 -7
- package/src/temporal/frame-coordinator.ts +4 -1
- package/src/temporal/taa-history-store.ts +46 -2
- package/src/temporal/temporal-view.ts +1 -1
- package/src/temporal/transaction.ts +9 -0
- package/src/tilemap-chunk-extract-system.ts +1 -1
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +19 -12
- package/src/transmission/__tests__/surface-compatibility.integration.test.ts +32 -0
- package/dist/chunk-4L3P6DT5.mjs.map +0 -1
- package/dist/chunk-4NPUASZR.mjs +0 -203
- package/dist/chunk-4NPUASZR.mjs.map +0 -1
- package/dist/chunk-DIYW3M5D.mjs.map +0 -1
- package/dist/chunk-FBC4R44J.mjs.map +0 -1
- package/dist/chunk-FF7K3FSO.mjs.map +0 -1
- package/dist/chunk-HZUPSYW7.mjs.map +0 -1
- package/dist/chunk-QODA5UKU.mjs.map +0 -1
- package/dist/chunk-YALPS44A.mjs.map +0 -1
- package/dist/chunk-ZUWKAZ2I.mjs.map +0 -1
package/src/errors/recover.ts
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
// `recover(): Promise<Result<void, RecoverFailure>>`, NOT the onError fanout
|
|
7
7
|
// channel (see render-contract.ts RendererError composition).
|
|
8
8
|
|
|
9
|
-
import type {
|
|
9
|
+
import type { RecoveryGuidance, RecoveryPhase } from '../assembly/renderer-lifecycle';
|
|
10
|
+
import type { DeviceResourceKind, DeviceScopeReceipt } from '../device/resource-types';
|
|
10
11
|
import type { ReflectionFallbackRecoveryAction } from '../inspection-types';
|
|
11
12
|
import type { SsrAdmissionError, SsrOwnerRecoveryAction } from '../ssr/errors';
|
|
12
13
|
|
|
14
|
+
export type { RecoveryGuidance, RecoveryPhase } from '../assembly/renderer-lifecycle';
|
|
15
|
+
export { RECOVERY_PHASES } from '../assembly/renderer-lifecycle';
|
|
13
16
|
export type { ReflectionFallbackRecoveryAction } from '../inspection-types';
|
|
14
17
|
|
|
15
18
|
export function reflectionFallbackRecoveryAction(
|
|
@@ -40,6 +43,15 @@ export function ssrAdmissionRecoveryAction(error: SsrAdmissionError): SsrOwnerRe
|
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
45
|
|
|
46
|
+
/** Closed outcome vocabulary shared by recovery inspection and errors. */
|
|
47
|
+
export type RecoveryOutcome = 'none' | 'succeeded' | 'failed' | 'disposed';
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* `RecoveryPhase` is the stable lower-case hyphenated phase union used by
|
|
51
|
+
* inspect/recovery detail. `RecoveryGuidance` is the closed next-action union:
|
|
52
|
+
* retry the attempt, repair its owner, or rebuild the Renderer.
|
|
53
|
+
*/
|
|
54
|
+
|
|
43
55
|
// ── RecoverError (feat-20260621-renderer-health-recover-skeleton M1) ─────────
|
|
44
56
|
|
|
45
57
|
/**
|
|
@@ -73,13 +85,13 @@ const RECOVER_ERROR_POLICY = {
|
|
|
73
85
|
'recover-not-needed': {
|
|
74
86
|
message: 'recover-not-needed: renderer is not in a degraded state',
|
|
75
87
|
expected:
|
|
76
|
-
'renderer is healthy;
|
|
77
|
-
hint: '
|
|
88
|
+
'renderer is healthy; use state() or inspect() to confirm degraded state before calling recover()',
|
|
89
|
+
hint: 'use state() or inspect().state to confirm degraded state before calling recover()',
|
|
78
90
|
},
|
|
79
91
|
'recover-not-implemented': {
|
|
80
92
|
message: 'recover-not-implemented: self-heal recovery is not yet implemented',
|
|
81
93
|
expected: 'recovery is not yet implemented; self-heal lands in S5',
|
|
82
|
-
hint: 'self-heal recovery lands in S5;
|
|
94
|
+
hint: 'self-heal recovery lands in S5; inspect().state still reflects the lifecycle state',
|
|
83
95
|
},
|
|
84
96
|
'recover-adapter-unavailable': {
|
|
85
97
|
message: 'recover-adapter-unavailable: requestAdapter returned no adapter during rebuild',
|
|
@@ -127,6 +139,60 @@ export class RecoverError extends Error {
|
|
|
127
139
|
}
|
|
128
140
|
}
|
|
129
141
|
|
|
142
|
+
export interface RecoveryFailureDetail {
|
|
143
|
+
/** The bounded phase that produced this failure. */
|
|
144
|
+
readonly phase: RecoveryPhase;
|
|
145
|
+
/** Active generation before the attempt; it changes only on publish. */
|
|
146
|
+
readonly oldGeneration: number;
|
|
147
|
+
/** Candidate generation; it changes only on publish. */
|
|
148
|
+
readonly candidateGeneration: number;
|
|
149
|
+
/** Monotonic explicit recovery attempt number. */
|
|
150
|
+
readonly attempt: number;
|
|
151
|
+
/** Wall-clock duration of this bounded attempt. */
|
|
152
|
+
readonly elapsedMs: number;
|
|
153
|
+
/** Whether the caller may explicitly retry without recreating the Renderer. */
|
|
154
|
+
readonly retryable: boolean;
|
|
155
|
+
/** Next action selected by the recovery owner. */
|
|
156
|
+
readonly guidance: RecoveryGuidance;
|
|
157
|
+
/** Producer or lifecycle owner that must be inspected first. */
|
|
158
|
+
readonly owner: string;
|
|
159
|
+
/** Structured resource category, never a raw GPU handle. */
|
|
160
|
+
readonly resourceKind: DeviceResourceKind;
|
|
161
|
+
/** Terminal outcome of this attempt. */
|
|
162
|
+
readonly lastOutcome: Exclude<RecoveryOutcome, 'none' | 'succeeded'>;
|
|
163
|
+
/** Number of candidate roots committed before publication. */
|
|
164
|
+
readonly rehydratedRoots: number;
|
|
165
|
+
/** Number of late notifications ignored from retired generations. */
|
|
166
|
+
readonly staleLossEvents: number;
|
|
167
|
+
/** Original structured cause retained for diagnostics. */
|
|
168
|
+
readonly cause: unknown;
|
|
169
|
+
/** Cleanup failures that prevented a complete candidate publication. */
|
|
170
|
+
readonly cleanupFailures: readonly unknown[];
|
|
171
|
+
/** Detached lifecycle receipt for the failed candidate. */
|
|
172
|
+
readonly receipt: DeviceScopeReceipt;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Stable structured failure returned by one bounded recovery attempt. */
|
|
176
|
+
export class RecoveryFailedError extends Error {
|
|
177
|
+
readonly code = 'recovery-failed' as const;
|
|
178
|
+
readonly expected = 'one recovery attempt publishes a complete replacement device generation';
|
|
179
|
+
readonly hint = 'inspect detail and follow its guidance';
|
|
180
|
+
readonly detail: RecoveryFailureDetail;
|
|
181
|
+
|
|
182
|
+
constructor(detail: RecoveryFailureDetail) {
|
|
183
|
+
super('renderer recovery failed');
|
|
184
|
+
this.name = 'RecoveryFailedError';
|
|
185
|
+
this.detail = Object.freeze({
|
|
186
|
+
...detail,
|
|
187
|
+
cleanupFailures: Object.freeze([...detail.cleanupFailures]),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export function createRecoveryFailedError(detail: RecoveryFailureDetail): RecoveryFailedError {
|
|
193
|
+
return new RecoveryFailedError(detail);
|
|
194
|
+
}
|
|
195
|
+
|
|
130
196
|
const RENDER_RECOVERY_ERROR_POLICY = {
|
|
131
197
|
'recover-lifecycle-failed': {
|
|
132
198
|
expected: 'the replacement DeviceScope must publish only after lifecycle cleanup succeeds',
|
|
@@ -141,10 +207,15 @@ const RENDER_RECOVERY_ERROR_POLICY = {
|
|
|
141
207
|
export type RenderRecoveryErrorCode = keyof typeof RENDER_RECOVERY_ERROR_POLICY;
|
|
142
208
|
|
|
143
209
|
export interface RenderRecoveryFailureDetail {
|
|
210
|
+
/** Producer/lifecycle owner whose recovery operation failed. */
|
|
144
211
|
readonly owner: string;
|
|
212
|
+
/** Device generation associated with the failed recovery operation. */
|
|
145
213
|
readonly generation: number;
|
|
214
|
+
/** Closed operation kind; no implicit background retry is represented. */
|
|
146
215
|
readonly recovery: 'recover' | 'rebuild' | 'stop';
|
|
216
|
+
/** Lifecycle receipt retained as structured evidence, not a live handle. */
|
|
147
217
|
readonly receipt: DeviceScopeReceipt;
|
|
218
|
+
/** Original structured cause for the failed operation. */
|
|
148
219
|
readonly cause: unknown;
|
|
149
220
|
}
|
|
150
221
|
|
|
@@ -165,7 +236,7 @@ export class RenderRecoveryError extends Error {
|
|
|
165
236
|
}
|
|
166
237
|
}
|
|
167
238
|
|
|
168
|
-
export type RecoverFailure = RecoverError | RenderRecoveryError;
|
|
239
|
+
export type RecoverFailure = RecoverError | RenderRecoveryError | RecoveryFailedError;
|
|
169
240
|
|
|
170
241
|
export type IblCapabilityLossCode = 'ibl-hdr-capability-loss';
|
|
171
242
|
|
package/src/errors/render.ts
CHANGED
|
@@ -27,6 +27,11 @@ import type {
|
|
|
27
27
|
} from '../features/vocabulary';
|
|
28
28
|
import type { SceneDataLane, SceneDataSchemaId } from '../temporal/scene-data';
|
|
29
29
|
import type { TransmissionCapabilityFact } from '../transmission/backdrop';
|
|
30
|
+
import type { RecoveryOutcome, RecoveryPhase } from './recover';
|
|
31
|
+
|
|
32
|
+
// Public render errors keep one machine-readable order: closed `code`,
|
|
33
|
+
// expected state, actionable `hint`, then typed `detail`. Consumers branch on
|
|
34
|
+
// that shape and never use Error.message as a protocol.
|
|
30
35
|
|
|
31
36
|
export interface LifecycleConstructionFailureDetail {
|
|
32
37
|
readonly owner: string;
|
|
@@ -1359,7 +1364,19 @@ export interface RendererOperationDetailByCode {
|
|
|
1359
1364
|
};
|
|
1360
1365
|
readonly 'recovery-failed': {
|
|
1361
1366
|
readonly operation: 'recover';
|
|
1367
|
+
readonly phase: RecoveryPhase;
|
|
1362
1368
|
readonly oldGeneration: number;
|
|
1369
|
+
readonly candidateGeneration: number;
|
|
1370
|
+
readonly attempt: number;
|
|
1371
|
+
readonly elapsedMs: number;
|
|
1372
|
+
readonly retryable: boolean;
|
|
1373
|
+
readonly guidance: 'retry' | 'repair-owner' | 'rebuild-renderer';
|
|
1374
|
+
readonly owner: string;
|
|
1375
|
+
readonly resourceKind: string;
|
|
1376
|
+
readonly lastOutcome: RecoveryOutcome;
|
|
1377
|
+
readonly rehydratedRoots: number;
|
|
1378
|
+
readonly staleLossEvents: number;
|
|
1379
|
+
readonly cleanupFailures: readonly RendererOperationCause[];
|
|
1363
1380
|
readonly cause: RendererOperationCause;
|
|
1364
1381
|
};
|
|
1365
1382
|
readonly 'cleanup-failed': {
|