render: extract cached M2 animation resource observer

This commit is contained in:
2026-07-18 10:23:03 +04:00
parent 3519f183bb
commit df87619220
17 changed files with 1065 additions and 197 deletions
+24 -8
View File
@@ -59,7 +59,8 @@ Runtime и Editor используют facade; planner/scheduler тестиру
`M03-RND-M2-BUILD-QUEUE-001`,
`M03-RND-M2-BUILD-DISPATCH-PLANNER-001`,
`M03-RND-M2-BUILD-RESOURCE-SNAPSHOT-001`,
`M03-RND-M2-STATIC-BUILD-RESOURCE-OBSERVER-001`
`M03-RND-M2-STATIC-BUILD-RESOURCE-OBSERVER-001`,
`M03-RND-M2-CACHED-ANIMATION-RESOURCE-OBSERVER-001`
- Commands: dedicated scheduler/planner/facade/focus/coordinate/manifest/shutdown
headless verifiers; Godot cold editor parse; coordination, documentation and diff gates.
- Results: scheduler `cases=6 iterations=20000 elapsed_ms=10.216`; planner
@@ -283,6 +284,13 @@ Runtime и Editor используют facade; planner/scheduler тестиру
Merge `a043c79` passed post-merge observer (`64.202ms`), snapshot, dispatch,
Mesh pipeline/cache, prototype cache, shutdown, facade, internal-access `30`,
manifest `7/7`, documentation `42`, coordination and checkpoint dry-run `7/7`.
M2 cached animation resource observer passed `cases=33 iterations=20000
elapsed_ms=61.745` with cached-prototype identity, static/pending/missing
lifecycle, stripped case-insensitive allow/deny precedence, exact historical
GLB path order and generated GLB animation/primitive/schema safety fixtures.
All 56 autonomous headless regressions passed; internal-access remained `30`,
documentation covered `43` module specifications and checkpoint dry-run kept
all `7/7` plans. Coordination passed with `34` historical expired-claim warnings.
M02 terrain-query regression
remained green (13 pre-existing expired M00 claim warnings).
- Fidelity comparison: all 16 historical operation limits and drain sites were
@@ -320,6 +328,11 @@ Runtime и Editor используют facade; planner/scheduler тестиру
One build operation now carries the exact normalized path, optional animated
prototype, pending-animation state, optional static Mesh and missing outcome in
a typed snapshot; releasing it never frees either borrowed engine resource.
Cached animated lookup now preserves cached/static/pending priority, empty-
allowlist rejection, denylist precedence, normalized/lowercase/basename path
order, animation presence, primitive cap, accepted empty/`pivot_prefix_v1`
schema rules and request/static-only transitions. Native GryphonRoost remains
first and loader-owned, so selection and visible behavior are unchanged.
WMO cache-key normalization, positive MODF identity with tile/index fallback
and world position/Euler/unclamped-scale transforms are unchanged across
lightweight render, cached-scene and live-prototype paths.
@@ -438,6 +451,8 @@ Runtime и Editor используют facade; planner/scheduler тестиру
stateless M2 build dispatch planner and loader resource-observation/action adapter,
typed M2 build resource snapshot and loader/dispatch/materializer adapters,
static M2 build resource observer and loader/cache/pipeline/snapshot adapters,
cached M2 animation resource observer and loader/prototype/pipeline/snapshot
adapters plus generated GLB metadata regression fixtures,
expanded facade/internal-access/coordinate verifiers; work-package claims and this evidence.
- Remaining risks: worker concurrency and stale-result validation remain
streamer-owned; cancellation stops new permits but does not interrupt
@@ -454,18 +469,19 @@ Runtime и Editor используют facade; planner/scheduler тестиру
culling-driven spatial-cell grouping; M2 rebuild classification and static
request/finalize bookkeeping, prepared Mesh cache ownership and first-Mesh
traversal plus refresh/rebuild/fallback, raw native M2 I/O and prototype/
negative cache state are separated, but synchronous parsing, ResourceLoader,
animation request state and Mesh adoption remain in the loader call path; raw
negative cache state are separated, but synchronous native parsing/build and
Mesh adoption remain in the loader call path; cached animation eligibility/
request admission is extracted while terminal ResourceLoader polling remains;
raw
animated-instance materialization is now separated but remains synchronous
main-thread work; asset-backed traversal/visual/leak/p95/p99 evidence is pending;
static MultiMesh materialization is also separated but remains synchronous;
headless timing does not measure transform upload GPU cost and spatial-cell
batching still needs culling/performance evidence; typed M2 pending state is
separated and dispatch decisions are explicit, while resource observation/
requests, action execution and root cleanup remain in loader; resource state is
typed per operation but its producing service is not yet extracted;
static lookup/request production is extracted, while animated observation and
both ResourceLoader finalize drains remain loader-owned;
separated and dispatch decisions are explicit; static and cached-animation
observers produce typed per-operation state, while native observation, action
execution and root cleanup remain in loader; both ResourceLoader finalize
drains remain loader-owned;
WMO ResourceLoader/FileAccess I/O, live fallback and group materialization
remain in the loader;
asset-backed WMO placement/portal/material/leak/p95/p99 evidence remains pending;