Repository navigation
Conversation
Preserve the current PR393 history and merge develop416ffd7c. Restore before-node attribute scheduling, version previous instance uploads, and retain exact prior-patch upgrade support. Independent review and 2221 core tests passed; original GPU/native acceptance remains in progress.
Consume exact PR393 prerequisite 47e188e and landed develop 924b92f with preserved ancestry. Resolve only the measured starter scaffold hash. Frozen install, 2222 core tests, 87 focused tests, types, lint, builds and budgets pass. Temporal benchmark and quality thresholds remain unchanged; PR398 stays draft pending combined pixels and full acceptance.
Retain verified 176-frame software WebGPU evidence at e48c31b with canonical PR393 input. Instance uploads and zero-velocity negative control now work; original edge/reveal quality gates remain red. Record one-frame recompile instance corner and inspected genuine progress PNG.
The default arm's blend was changed from luminance reweighting to an ordinary mix for one production run, with linear history sampling untouched, so the ablation varied the blend alone. It does not move the warm ghost (.01586 -> .01559 at afterReveal 5), while the cubic pair with the same blend measures 0: the blend is not the cause. The surviving residue is a 2-9 px strip under-resolved on the frame the marker covered. Source reverted to f1b22c0, no product change, both boxes stay open.
…ined candidate The cubic+ordinary arm was run as the shipped default for one production run, then reverted: the three dirty files are back at 563d64a and every capture is retained. Two claims in the previous entry did not hold. The shipped default is linear sampling with the luminance reweighting, not the ordinary blend that entry measured, so the cell it filled was one change away from the default and not the default itself. And because the ordinary blend removes the ghost under cubic sampling but not under linear, the blend's effect depends on the sampling: neither "the blend is not the cause" nor "sampling alone is the cause" is proven, and the one arm that clears the warm bound differs from the default on two axes, sampling and blend. The earlier entry's "32 arms" was a miscount, not a missing capture; the retained f1b22c0 capture holds the same 31 profile keys, and the supersampled references are captured without a scored row. That entry's header date is also the real local date, 2026-10-05. The checkpoint records the combined candidate honestly: the warm bound clears at full resolution (temporal bit-identical to resolve-cubic-strict-ordinary, edge .0555994, stale [.01774, 0, 0, 0, .00027, 0, .00054, .00054]) and still fails at low input (quality-temporal afterReveal 1 at .01908 and 5 at .01747 against .01, edge .0806872 against quality-spatial .0774488). The log records no exit code; it ends in an uncaught ERR_ASSERTION after every profile was retained, with pass false because authoredLinearEquivalent is false once the shipped arm is not linear. pnpm check:docs exit 0; the six prose-lane specs 6 files, 243 tests passed, exit 0. Both Phase 2 ghost boxes, the motion and quality edge boxes and PRD-269's ghosting cost stay open. No browser or native lane was re-run: no runtime change ships.
…ion and revert it The installed TAAUNode's own nine-tap Blackman-Harris current-frame gather was built as an explicit arm, installed as the shipped default and measured alone: history sampling, blend, currentWeight, clipping, rejection, velocity, counter, lifecycle, corpus, scoring and every threshold unchanged. Real run: 33 profiles on nvidia/turing WebGPU (the retained 31, the explicit arm and its matched open-history control), recorded exit 1. The default hashed equal to the explicit gather arm in all 16 frames, so the numbers are that arm's. Full resolution: edge .0641339 against the bilinear .0605459 and the no-AA .0502947, so it is worse than the sample it replaces; instability .0321929 still improves on .0491286; the warm ghost holds at afterReveal 5 .01586. Low input: edge .0812266 against .0493331, instability .0347867 against spatial .0505515, and the .01 reveal bound fails at afterReveal 1, 2 and 6. Causal red excess is 0 in all eight frames and the real GPU counter is published for both arms, so the ghost is neutral brightening. Checks: 11 true, 4 false. It is not the ghost's cause and not its fix, so every touched file is reverted to 8a20ae9 and the default stays bilinear; no browser or native lane re-ran because no runtime change ships. No box is ticked. Also corrects the retained corpus counts: 31 profiles and 19 scored rows, not the earlier 32 and 20.
Map the selected input texel through current jitter, unjittered velocity and previous jitter while preserving the independent centre rejection. Snapshot jitter beside the actual depth matrices before late first-compile synchronization. CPU: 317 affected tests, root TS7, serial workspace and velocity types pass. Original 5% edge and 1% reveal gates remain open; no GPU/native qualification or publication.
…ourhood The generated resolve now gathers the current frame from the input raster's 3x3 neighbourhood with a jitter-aware Gaussian (Blackman-Harris approximation) and reads its variance-clip moments from the same taps, and adds a thin-feature lock that reuses the unclipped history where geometry did not change and the pixel departs from its neighbourhood mean luminance. Measured on the 31-arm corpus (nvidia/turing WebGPU): the reveal ghost falls hard (quality-temporal after-reveal .3437/.2548/.0398/... -> .0489/.0180/ .0035/...); at a 1:1 input the reconstruction is gated off, so the motion reveal sequence is bit-identical. Edge error does not move (temporal .05985, quality-temporal .08148), so both Phase 2 boxes stay open.
Integrate the immutable owner checkpoint with the reviewed CPU repair stack in an owned lane. Retain Gaussian reconstruction, raw moments, ordinary linear coverage and both depth supports. Remove the unsafe raw-history lock, snapshot applied jitter, clamp raw input support and reconstruct either reduced axis. CPU: 324 affected tests across 17 files, root TS7, serial workspace, velocity types, measured 13 scaffolds and scoped lint pass. Original quality, GPU cost, platform and automatic-scale gates remain open. No GPU/native capture or publication.
Replace the depth-gated lock with a colour/luminance change mask: a pixel keeps its unclipped history when it departs from its neighbourhood mean luminance and the reprojected history does not contradict that departure, so a real disocclusion withdraws the lock while a real thin feature keeps accumulating. Drops the redundant two-sided depth test from the validity struct. Measured (31-arm corpus, nvidia/turing WebGPU): the quality reveal ghost falls to .0489/.0180/.0035/.0027/.0035/.0175/.0019/.0032, motion stays .0177/0/0/0/0/.0159/0/0. The edge gate does not move (.06052 / .08135; best arm resolve-cubic-strict-ordinary .05512 vs the .04778 bar) — the cause is architectural (velocity-driven subpixel correction raises the current weight on sub-pixel fences), so both Phase 2 boxes stay open.
Absorb develop1616542: remove the hosted template-nonvisual concurrency cap and update its CI contract. All rendering source, fixtures, build outputs and acceptance thresholds remain identical to qualified73fd4721. Affected CI contracts:233/233 passed on CPU22, one worker.
Clamp the generated starter temporal depth gather to legal integer texels and retain the same bounded coordinate for velocity selection. Preserve the existing depth conversions, tie order and rejection thresholds. Add four real WGSL donor regressions and update the measured starter scaffold fingerprint. Document retained attachment findings and open gates in PRD455; no acceptance checkbox or draft progress is advanced. Validation: regression 4 red / 7 pass before fix, then 11/11 focused pass; strict scoped TS7 and changed-file Biome pass; all 13 scaffolds measured, only starter changes. Related CPU run is 158/159: unchanged temporalAA.ts 210 lines violates the existing <200 readability limit, and the depth file was already over it. Full/new-source runtime, budgets, original quality, cost, native, automatic-scale, current-develop and required CI stay open. Independent read-only applied review passed 10 audit checks. No capture exercises this correction, and no source publication or new CI is requested.
This was referenced Oct 7, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Current reviewed raw4 CPU candidate (2026-10-06)
Published head: 330590cf7c493abb4521a0aa102840b00b90c0fc, based on develop
29fdae8bf. The opt-in candidate keeps the original 426×240 input / 640×360 display, both original .0005 centre OR/point/max depth vetoes, and mandatory RGB clipping. It adds finite raw4 current-footprint weighting with matched visibility, motion and prior four-depth packets. Ordinary opaque PBR RGB remains a pixel-frequency spatial approximation. Default stage/tier selection and the original 31-arm protocol/scorer are unchanged.Fresh independent source/CPU reviews are clean. Validation: 255 distinct focused CPU tests; actual resolve/counter WGSL construction; measured fingerprints for all 13 generated project trees; strict scoped TS7/Biome; root TS7 plus the eight-package typecheck closure; all eight actual package build/declaration/publint scripts. The root check exposed a private-manager test declaration conflict, fixed and reviewed in the final two-file supplement. The normal pre-commit and pre-push hooks ran; lint, 2,495 documentation links, 22 instruction mirrors and scaffold drift checks pass. No hook, force push or admin override was used.
Still draft at 25%. The original recovery gate remains RED:
.11045044 > .1is a CPU replay of historicalc2779e9captured inputs through the ordinary kernel, not a new raw4 GPU output. No new raw4 GPU quality/cost, native/platform, resource plateau or automatic-scaler result is claimed. Both draft PR workflows for this head are skipped, which is not passing required CI. A hardware-correctness diagnostic is being prepared at the original raster; GPU launch is held for the agreed Animals/Strata resource sequence. External image uploads remain held.Earlier entries below describe their own historical source/evidence and do not qualify this candidate.
Current CPU repair and develop integration (2026-10-05)
Published candidate:
c5357e39d8ecd0c29802e3cb2af633a2af40dcaa. Normal merges preserve immutable ownera0830fec4, develop9b3c4824c, and current develop/PR440d3c009e4404abcc2041f58124693edb9c78d802b.Three reproduced CPU defects are repaired: renderer/colour/depth/velocity rejection resets the next valid history frame; fixed and automatic composed RTTs jitter on their own raster; the scaled native assertion floors actual PassNode input dimensions while retaining authored display rounding. Seven controls failed before repair, then 40/40 passed. An isolated rejection-counter edit now selects the temporal integration lane, preserving exact candidate pins, current-attempt receipts and independent animation/native lanes.
PR440's 24 camera/material template paths and the six reviewed temporal repair files are preserved byte-for-byte. All 13 scaffold fingerprints were measured from actual combined generator output, retaining every assertion. Fresh independent merge and formatting-follow-up review is clean.
Validation: 306 affected CPU tests at merged source
6570965aa; all 101 routing/receipt contracts rerun at the published candidate; root TS7, serial workspace and velocity-fixture typechecks pass. The fresh eight-package build/declaration closure at9e9ccc88fremains current because its public source/build/lock inputs are unchanged. Normal pre-push lint, docs, instruction mirrors and 322 drift tests pass. An initial push was correctly blocked by one overlong CI-test line; the final follow-up only applies its formatter line wrap. No hook was skipped.Still draft at 25%. Original PRD269/455 acceptance rows and thresholds are unchanged. Quality/ghosting, representative GPU/render cost, actual lower-raster WorldEnvironment exposure, automatic-scale allocation/cost and combined-source native/platform gates remain open. Skipped draft CI is not passing evidence. No new GPU/native runtime capture or external image upload is claimed for this candidate.
The temporal-toggle lifecycle repair now includes a normal merge of develop
15adf350da53addfa33675c2b3f0e2722e086e37into the published repairb32342b96332b11d2e52367dd2e4a80b7f8a5ba5. Current head:ffa6ea9bbce9f5db4be37b857a135738a5dd85da. The merge preserves incoming fluid/adapter, exposure/fog, asset and render-output ownership changes alongside the attachment cleanup. Both histories remain ancestors.Validation:
7036a173dfc11cb7d0a485c12eca4f3dcee3fa4e20c0a4a010b16741d81b79a2. All 16 migration blocks were independently verified against exact predecessor hashes.Current-source actual hardware result, pinned to
ffa6ea9bbce9f5db4be37b857a135738a5dd85da:velocity-cost.html?from-temporal, NVIDIA/Turing WebGPU/Vulkan, 640x360. Source, installed dependencies and all 355 captured build/evidence inputs remained frozen. The normal shared capture lease was released after the run; no retry was made.resource.cost.p50NoiseExcessMs = +0.0125 msandresource.cost.p95NoiseExcessMs = +1.8125 ms. The unchanged p50/p95 overhead assertions pass numerically, but invalid noisy controls leave temporal-off cost unqualified.The original fixture times wall-clock CPU render submission, including temporal-off reconcile/commit; requestAnimationFrame and the real one-pixel readback/drain await are outside that interval. It uses 30 warmup triplets, all six balanced arm orders and all 150 measured samples per arm. FrameBudget uses nearest-rank percentiles (p50 sample 75, p95 sample 143 of 150) and rounds reported milliseconds to 0.01; the measured clock quantum is 0.1 ms. The unchanged evaluator requires control noise
max(2 * clockQuantum, 2 * abs(A - B)) <= max(0.2, 0.25 * mean(A, B))before an overhead comparison can qualify.Concurrent host observations recorded 1-minute load 33.08–36.81 on 24 logical CPUs, aggregate non-idle CPU 82.5% over 30.54 seconds, and CPU pressure
some avg10rising from 6.97 to 11.59. These are contention evidence, not proof of the sole cause. A further interpretable cost qualification needs a coordinated quiet CPU/GPU window with the same original fixture, assertions, sample count, orders and clock gate. An exclusive GPU/capture lease alone does not reserve CPU scheduling. No thresholds, sample filtering or retry-to-green were introduced.The actual procedural-cube after PNG is retained in the user's Library and is byte-identical to the previously retained image: SHA-256
73419c8f57c9c3c8aed0fdcf5a9c553c0410fed6f004269ad8299174d518d2e7(8,381 bytes). Its new capture provenance is this exact head; identical image bytes do not transfer the older run's qualification to current code.This PR remains draft; original PRD269/455 criterion statuses are unchanged. The earlier capture on lifecycle source
004e4b8afdbd188bc275722bd6d6187943d4c4d4remains historical: 11/12 resource assertions plus diagnostic policy passed, and the original p95 control-noise assertion failed by +0.625 ms. The two runs are retained independently; neither qualifies cost.Current-head CI has 49 completed/skipped checks across CI, Integration lanes and Native runtime release. Skipped draft CI is not passing evidence. Full quality/ghosting, true low-raster reconstruction, native rendering, hardware performance and complete original PRD269/455 acceptance remain open. No additional GPU run, native build, merge or mark-ready action is included in this update.
Previous PR description and pinned evidence
Repeated temporal on/off cycles left a physical velocity attachment on the Three scene pass after its MRT was restored. Subsequent renders then failed WebGPU target validation and produced blank output. The chain now disposes the target while the owned velocity attachment is still registered, detaches only that attachment, and reattaches Three's cached velocity texture on the next enable. Caller-owned velocity textures and the original MRT remain intact.
The fixture also imports
IFrameBudgetSummarythrough the existing@threenative/coreexport and declared dependency, fixing the five TS6059 errors caused by importing core source outside itsrootDir. This is a type-only correction; no public API, dependency, tsconfig, runtime producer, evaluator threshold, or scenario assertion was added or weakened.Repair candidate:
b32342b96332b11d2e52367dd2e4a80b7f8a5ba5, consisting of lifecycle commit004e4b8afdbd188bc275722bd6d6187943d4c4d4and the one-line fixture import correction, on published base24d731cccc4ffd0436c5c4538611a54ed03ef338.Validation:
pnpm typecheckpasses. All 114 focused lifecycle, velocity/history, template and cost/capture proof tests pass.004e4b8afdbd188bc275722bd6d6187943d4c4d4, with source/build inputs frozen, on NVIDIA/Turing at 640x360.resource.cost.p95NoiseExcessMs = +0.625 ms. Baseline p95 values were 2.0 and 2.6 ms; candidate p95 was 1.7 ms. Baseline noise 1.2 ms exceeds the 0.575 ms limit. This is an invalid noisy-control measurement, not demonstrated candidate overhead. Candidate overhead assertions passed, but the cost qualification remains failed. The balanced 150-sample-per-arm fixture measures CPU render submission, not GPU execution time. No retry or threshold change was made.This PR remains draft. The lifecycle repair and typecheck fix do not complete PRD455. Full quality, ghosting, native parity and hardware-performance acceptance remain open; no broad browser/native acceptance run was performed for this repair, and skipped draft CI jobs are not passing evidence.
Previous PR description and evidence
Consolidated temporal work: PRDs 269 and 455
At the owner's request, this draft is now the single review and implementation destination for authored motion history plus temporal AA/reconstruction. Merge commit
0606d8decc2b63252966a47cfab86d6825b78cf0retains both exact source heads: PR398b877de150555661283355a87f8c4969efc48418cand original PR393, its full evidence and discussion73c2a684314b569cbd5059b1d6458e90d6bcbfd8. Original runtime review comment.Still incomplete and not eligible for develop/main:
Preservation and combined-source checks
Canonical scopes: PRD-269 and PRD-455. PR393 is superseded by this combined draft, not individually merged into develop/main. Its branch and original discussion remain available.
Preserved PRD-455 history and evidence
Scope and current behavior
Implements PRD-455 in the requested order: opt-in full-resolution temporal AA first, followed by true low-raster reconstruction once the inputs and quality bar are qualified. Reuses pinned Three.js 0.185.1 TRAANode, RenderChain and VelocityTracker. Reconstruction must retain ResolutionScaler as the single policy.
The generated starter helper now executes, resets/disposes owned history, primes an unjittered velocity matrix before the first material compile, and preserves it when NodeBuilder repeats setup during an active jittered frame. A maintained real WebGPU benchmark measures matching motion sequences and catches remaining image-quality defects. No quality tier enables this helper by default. PR remains draft.
Dependency checkpoint: combined source e48c31b8 explicitly merges canonical PR393 repair 47e188e and landed develop 924b92f. Its three-parent ancestry retains the prerequisite's ownership; the patch is unchanged. This historical checkpoint preceded consolidation; PRD-269 is now included in this PR, with both PRDs retaining their independent acceptance requirements. Combined unchanged 176-frame benchmark run 37004283653 completed and still fails the original quality bar. All 176 named PNG hashes verify; all eleven diagnostics are empty. Exact combined measurements and provenance.
Latest authored resolve experiment and dependency
Source 3afcbc66a, run 37016735368: all 304 PNG hashes verify and all 19 arm diagnostics are empty. Authored-linear output is byte-identical to installed TRAA for all 16 frames, so the cubic comparison is interpretable. The original 208 frame bytes are unchanged. Full measurements, controls and provenance.
Cubic plus strict rejection reduces edge error versus installed temporal (0.05605 vs 0.06001), but still loses to no-AA (0.05061) and the fixed 5% improvement bar. Residual instability is 0.03173; causal red tint is zero. Conservative reveal projection and excursions versus installed temporal still fail. The matched zero-velocity arm correctly worsens moving-edge error (0.04169 vs 0.02470). Quality remains unqualified. Non-strict cubic is diagnostic-only because it lacks its own matched zero-velocity control.
Inspected actual cubic+strict runtime frames, source 3afcbc6, run 37016735368, WebGPU SwiftShader/google. These show measured progress and remaining failure; no native or performance qualification:
Before reveal, frame 27:

Reveal, frame 30 (compare the byte-identical reference and installed temporal ghost frame retained below):

Recovery, frame 36:

Combined source e638fc47 explicitly merges canonical PR393 uploader repair ac7e789, preserving its patch and migration bytes. Frozen install, 199 focused tests, root types/error-level lint, fixture build, docs and evidence budget pass.
The identical combined 304-frame run 37018389700 now confirms the observed recompile defect is repaired in this actual temporal-helper path. All 304 hashes verify; all 19 diagnostics are empty; authored-linear equivalence passes. Recompile pixels, metrics and MRT samples exactly match ordinary temporal across all 16 frames. Frame-23 instance velocity error falls from 0.52156 pixel to 0.00005972 pixel; the sequence maximum is 0.0009863 pixel. GPU current/previous matrix readbacks now match their corresponding CPU values. Only recompile frames 23–36 changed; every other PNG and metric is unchanged, so the original image-quality failures remain. Exact combined provenance and readbacks.
Inspected actual corrected recompile frame 23, source e638fc4/run 37018389700, SwiftShader/google; this verifies motion correctness, not superior AA quality:

Further resolve changes await a fresh critique of the measured remaining image error. This historical dependency is superseded by the consolidation above; both PRDs now travel together and neither is acceptance-complete. Full reconstruction, broader content, native rendering and performance gates remain open.
Phase 1 — History correctness
Phase 2 — Motion stability
Phase 3 — Real frame time
Earlier combined result
The canonical repair reduces instance MRT error to at most 0.000986 pixel; default/dynamic instance PNG sequences are identical. Zero velocity now degrades moving-edge error correctly: 0.04169 versus 0.03024. Overall edge error remains worse than no-AA (0.06001 versus 0.05061), despite 36.5% lower residual instability. Reveal projection remains 22.6% and causal red tint 11.61% one frame later. No threshold or appearance policy changed. Public material recompilation exposes a separate one-frame instance-Y error of 0.522 pixel at frame 23; it was still open at that earlier checkpoint.
Inspected actual combined temporal frame 30, source e48c31b, run 37004283653, SwiftShader/google. The previous no-AA frame is byte-identical, so the matched reference below remains valid. This is measured failure progress, not quality qualification:

Nearest-history causal experiment, source 1270435, run 37006364268: all 208 PNG hashes verify, diagnostics are empty, and the original 176 frames remain byte-identical. Nearest sampling worsens edge error to 0.07036 and instability to 0.03246, so it is rejected as a quality fix. The actual recompile draw retains identical WGSL and correct distinct current/previous CPU matrices; the remaining one-frame GPU discrepancy is narrowed to uploader/binding state. Exact measurements and actual draw evidence.
Inspected actual nearest-history frame 30; diagnostic failure progress only:

Earlier findings and retained diagnostic history
Actual matched runtime frames
Run 36999580189, source 2b9bdf1, WebGPU SwiftShader/google. Full original scores, recompile observations and provenance. All 128 PNG hashes were verified; all eight arms have empty diagnostics. These frames were inspected and share pose/frame 30.
No-AA reference (bytes verified identical in that run):

Current generated temporal helper after projection repair; red residue is still visible on revealed fence edges:

Fixture-only strict edge-rejection comparison; overall quality is still unqualified:

Matching strict-policy frame 30 with the marker never present (source 5c071b4; exact cohort above):

All 176 named frame hashes were verified; all 11 arm diagnostics are empty. The control image was inspected. This causal diagnostic does not replace the original conservative projection gate.
Initial full-resolution reset/recovery evidence, first measured failure, and first-compile repair oracle retain exact source/run/adapter/PNG provenance. All complete sequences remain in workflow artifacts. Software correctness evidence makes no native or GPU-performance claim.
Validation
Canonical PRD-455.