Files
selune 9e6e0b8df1 Render workspace: complete experimental ribbon, resources and effects integration (#5493) (#5494)
* wip(render): reconcile completed material and image pipeline source with 0.20 (#5493)

Source-only integration reference for staged review, not a merge-ready aggregate.
Donor: 0xlillith/solidcraft@aea20b0115.
Upstream: 858e5995d6.

Retain original CPU/material contracts and explicit GPU donor provenance in
docs/render-materials-lab.md (#2067, #2191, #2780, #3306). Preserve released
format migrations and current navigation/startup/shell behavior. New saved
records use pending descriptors. The physical-card descriptor follows the
maintainer's material-engineering-cards naming request, with a legacy-lab
format-29 regression. Replace raw new panel hosts with shared containers.

Repository checks, complete workspace/all-target Clippy, and the independent
physical/resource authoring checks pass for this source. The fresh full local
CI invocation has reached test compilation and is not yet complete. Do not
transfer donor native output or prior test totals to this integration.

Generated review screenshots, video, package ZIP and machine logs remain at
the immutable personal evidence pin. Uncommitted geometric displacement is
backed up separately, not silently included. No kernel/vendor change, direct
main write, release or independent contributor-branch rewrite.

Co-authored-by: Christian Svensson <blue@cmd.nu>

* test(cli): pin the Compact camera-sample admission diagnostic (#5493)

The bounded request still refuses 1024x1024x64 samples before host initialization and writes no output. Update only the stale expected diagnostic to the existing Compact budget wording; production limits and code are unchanged. Exact-tree CLI regression suite: 14 passed, 0 failed. The full repository gate has been invoked separately and is not yet complete.

* Normalize UI container violation paths across platforms

Report repository-relative paths with forward slashes so diagnostics and the existing nested-package regression assertions agree on Windows and Unix. Keep the container detection rules unchanged.

Validation: official ui-containers gate and all seven focused xtask tests passed; rustfmt and diff checks passed. Only xtask/dependencies were compiled; no application build or heavy tests.
(cherry picked from commit 44b58d8e10)

* fix(render): preserve camera contracts and correct acceptance regressions (#5493)

Preserve Design view.apply semantics with a separate strict Render camera command. Retain existing translations when English-only aliases collide; add material-axis entries and camera-specific pitch labels. Compare complete validated engineering cards and retain job handles before cancellation.

Focused and native acceptance is pinned to tree f8a423b21f. Full CI has been invoked separately and is not claimed green. Landing follows the render integration policy in #5493.

* fix(render): resolve showcase licence and upstream resource hygiene (#5493)

Record SychPL's explicit MIT OR Apache-2.0 grant, retaining source/model bytes and the Ubuntu lettering notice. Remove 80 absent attribution rows, personal fork records, dead delivery attributes and three fork/resource-only workflows. Existing xtask assets now performs bounded offline hash checks and rejects orphan render attribution; no parallel draft CI or package installation. Original authoring reproduction remains explicit. Scoped xtask tests, assets, Clippy, formatting and prepared SELENE validation pass; no application or renderer-wide result is inferred.

* fix(render): align saved bounds and progressive sample resolution (#5493)

Address review r4364211669/r4364211677/r4364211681/r4364211691/r4364211695. Persisted light/frame domains respect the existing 1e9 document bound; related LED/rectangle/direction cases use the same bound. Workstation primary resolve shares the 4096 admission cap and film counters use checked conversions. Exact candidate: 485 CPU render tests, 21 render document tests and strict scoped Clippy pass, including positive boundary round trips and 2048/4096 end-to-end checkpoints. No released format/migration edits, relaxed test limits or full-stack acceptance claim.

* wip(render): isolate optional resources and harden sample handling (#5493)

Review work in progress: opt-in encoded render library with reproducible runtime catalog exports; native-only robust dependency through the workspace; checked bloom slices; per-sample point-light diagnostics; independent area-light spatial/film keys. Resource-module binaries in both configurations, generation, Cargo production feature graphs and attribution checks pass. Full engine/render regression and combined acceptance are pending: do not merge this donor as a constituent or treat scoped resource proof as runtime acceptance.

* fix(gpu): preserve donor allocations through the scope-safety repair (#5722)

Port the native-validated #5723 scope-cleanup correction into the experimental donor, retaining its adaptive, volume, aging, photographic and bloom allocations. Same reverse-drain helper and regression cases; the donor combination still needs its own compile/test gate and is not covered retroactively by render-base results.

* claim: #1369

* Reject unknown pending concepts after format folding (#1369)

* test(render): close bounded sampling and bloom review regressions (#5493)

Validate the optional-resource/lighting/dependency donor at its exact tree. Required Vulkan GPU 127/0/3; CPU renderer 487/0; engine Render 72/0; document render 21/0; lean library 7/0; strict scoped Clippy, assets/layers/lists/containers and lean-engine WASM pass. Preserve original failed controller/typing attempts. This is the draft donor/disposition source, not a replacement for constituent render PRs or final main acceptance.

* wip(render): preserve stable aging target validation candidate

Exact staged source from prior review work on donor 3b892eab5e. This is a recovery/review checkpoint, NOT accepted delivery. An actual command-path regression currently fails because the selected executor refuses ordered surface aging. No assertion, capability or admission limit is weakened. Native/UI/full combination acceptance remains pending. Saved/runtime split adds one pending descriptor and retains original file scope; no main/render branch is changed.

* test(render): preserve numeric setup intent at the admitted coordinate bound

Follow up jyviko review on #5494 without weakening the corrected saved-coordinate contract. The positive clicked fixture uses 1e9 instead of inadmissible 2e9; explicit out-of-range cases still refuse, and the full saved setup round-trips through JSON and the native container. Exact-source Render workspace 95/0 and strict all-target UI Clippy pass. This does not incorporate the separately failing stable-aging candidate or claim full current-render acceptance.

* test(render): use the real GPU executor for saved aging

Move successful native cold-reopen Check/Start coverage from the CPU-backed protocol fixture into the production GPU executor tests. Verify capture-index changes preserve the stable target and that enabling aging changes both PNG and raw EXR output. Retain explicit, allocation-free refusal coverage for executors without aging support. Production capabilities and admission checks are unchanged.

* fix(render): persist stable identities for targeted aging (#5493)

Separate saved RenderBodyTarget identities from captured mesh ordinals. Reject legacy ambiguous targets, resolve Check/Start after visibility changes and preserve native reopening, copies and undo. Unsupported executors still refuse; real AMD Vulkan regression completes saved aging after reordered capture.

Source tree 6b84c8ad passes document 23, engine Render 75, GPU effects 5 and Render UI 95 with no failures; scoped strict Clippy, WASM and repository gates pass. Fresh CLI/native reopen and clean/aged GPU exports pass with identical physical totals and inspected actual images. Whole current-render integration is separate.

* fix(render): reconcile combined CPU/GPU contracts on current upstream

Unify captured resources/status and CPU-vs-GPU request schemas after the real two-parent integration; remove obsolete duplicate Vulkan selector and retain combined platform-filter regression. Deduplicate only identical or superseded test definitions, retaining the stronger card metadata and reserved-executor assertions. No assertions, admission limits or feature refusals are weakened.

All targets of render dependencies, GPU, engine, UI, CLI and native app pass cargo check with raytrace-cpu and bundled-render-library at tree c70d00d1. Native executable tests and full current-source acceptance remain pending. This is a private integration rehearsal for subsequent constituent PRs, not an aggregate official render/main merge.

* test(render): retain one complete host lifetime regression set

Deduplicate byte-identical DropProbe/task-lifetime tests and retain the adapted environment/texture ownership regressions with every assertion and complete memory estimate. Keep the registered-geometry admission regression once; only struct field order differed. Replace a one-element diagnostic loop with its equivalent block, preserving all wrap/width assertions.

Test-only integration repair. Formatting and diff checks pass; refreshed executable validation is required. No production behavior, limits, assertions or ignores changed.

* fix(doc): recognize the proven format-29 card descriptor alias

Normalize only the historical format-29 physical-material-cards spelling, and only when material-engineering-cards is registered. Admission and migration de-duplication use the same identity. Unknown concepts, wrong versions and incapable readers still refuse before mutation. Six controlled-history Rust regressions and actual CLI migration/no-clobber acceptance pass. No version, released migration or CI changes. Refs #5793, #1369, #5493.

* test(render): preserve grounding refusal before explicit instance moves

Update the two Render binding fixtures for upstream first-occurrence grounding. Verify grounded movement refuses without changing document/history, then explicitly unground through the public command before the intended move. Retain every target, resource, copy and persistence assertion. Refs #5493.

---------

Co-authored-by: Christian Svensson <blue@cmd.nu>
Co-authored-by: Victor Santos Oliveira <56417388+Vittuu@users.noreply.github.com>
Co-authored-by: cfaulkingham <colin.faulkingham@gmail.com>
2026-10-24 14:21:59 +00:00

19 KiB

Render integration batch — 2026-10-22

Working contract

Personal repository: 0xlillith/solidcraft. Branch: lab/render-scale-resources; draft PR #7, stacked on #5. The fixed upstream snapshot remains unchanged. All checkpoints in this batch are WIP until their consolidated validation and actual application acceptance are recorded.

The owner requested a larger implementation batch and fewer expensive recompilations. Accordingly, source inspection, formatting, JSON validation and prepared tests are distinguished from compiled or executed results. A recovery push is not permission to merge upstream or publish a release.

Integrated inputs

  • Renderer checkpoint 5cc4d5fd and progressive-HDR reference correction e7f56218.
  • Catalog/SELENE specification branch through 10ada1b4 (PR #3).
  • Original PBR/HDR/light authoring resources through 3ffaa5bd (PR #4).
  • Native resource-conformance tooling through 6d79d44 (PR #6).
  • The resource merge is aafa17f3; both sides' attribution entries and the canonical LF policy were preserved.

The integrated inventory includes 600 material concepts, 280 lighting concepts, 280 environment concepts, 48 authored PBR surfaces with 240 maps, 24 authored HDR fields, 24 lighting rigs and the SELENE demo contracts. Concept definitions and authored bytes are not synonymous with executable runtime features. Original manifests keep their existing readiness labels; runtime adapters must identify their actual supported projection separately.

Implementation slices

Slice Source status Acceptance status
Authored branches integrated with ancestry and notices Done Source/merge checks only in this branch
Explicit CPU Compact/Studio/Workstation envelopes Prepared Consolidated build and runtime validation pending
Profile propagation through saved intent, UI, preflight, capture, BVH, film and host Prepared Regression sources added; not yet executed
Searchable catalog, bounded target search and explicit apply commands Prepared Source/tests only; no executed application acceptance yet
Authored map/HDR consumers, scalar channels and orientation adapters Prepared Native source admission exists; new application/shader tests are not yet executed
Emitter-only/complete rig variants; scene specifications remain gated Prepared partial projections Passive cards, target-role scenes and calibration blockers are not silently simulated
Consolidated native/WASM/GUI and representative-scene validation Deferred until batch freeze No green aggregate result claimed

CPU profile details and limits are in render-cpu-resource-profiles.md. Old files remain Compact; larger profiles require an explicit choice. Logical quotas are not performance results or promises about available physical RAM.

Preserve throughout the batch

Check and Start must resolve the same request. Save must preserve supported intent without a device. Applying a visual resource must not mutate engineering properties. Missing scene bindings, unsupported effects, calibration blockers and ambiguous light-energy ownership must produce explicit outcomes, not silent approximations. Cancellation, final-only export, source hashes and allocation accounting remain active.

The improved SELENE native source still needs its separate source-lock admission. No obsolete body ordinals or older rover file are substituted for it here. Original authoring-only height maps remain distinct from runtime displacement.

Built-in resource projection checkpoint

The source adds a generated, hash-verified lookup for 192 eight-bit PBR maps and 24 HDRs, a bounded library browser and command API, 96 explicit uniform appearance projections, CPU/GPU embedded HDR setup application, exact GPU emitter conversions and GPU four-channel surface bindings. GPU source/decoded payloads are deduplicated by immutable content plus role across up to 128 bodies. Original authoring readiness flags and height-map exclusions remain unchanged. See built-in library.

Source formatting and generated-lookup checks are not compilation or renderer validation. All new regression and GPU oracle cases are prepared for the consolidated gate. The ongoing old-source gate belongs to the original worktree and is not evidence for this branch. It has reported one GPU protocol-test failure and nine UI failures; those are recorded for explicit reconciliation rather than hidden by claiming a green aggregate run.

Result lifecycle and large-image display

The next source slice pins exactly one displayed completed result independently of a newer completion, while retaining original memory accounting. Tab changes clear device texture caches but preserve each tab's result identity. Save/Reload and Return to Design are outside the long options scroll. CPU saved intent preserves inactive area sampling/seed values while lowering only active area controls into execution; an explicitly disabled denoiser does not select GPU execution.

Large-result display admission uses the captured request's resource profile rather than the current draft or the old preview default. The retained PNG and export stay full resolution. A device/cache-limited display is explicitly labelled and native 100% is disabled for that reduced view; tiled full-resolution viewport inspection is still a future unit.

Prepared regression fixes retain the negative assertions: foreign/unfinished pin requests refuse, old displayed PNG bytes remain exact, tab caches cannot leak, hidden invalid saved values still refuse, and a pending picker still blocks ordinary UI model edits. Static and format checks do not substitute for execution.

Consolidated checks observed on 2026-10-22

The implementation source tree c6793cbfb8af475dcebab9097039544f70ea437c has passed the complete workspace/all-target type check and Clippy with warnings denied. The combined production WGSL parses and validates with Naga (21 entry points), including the new scalar-map reference entry point. This is shader validation, not yet hardware execution evidence for the new channels.

The CPU-feature renderer unit suite completed 451 passed, 0 failed. The original cpu_resource_smoke example then executed the CPU image path at 3840 x 2160, produced a real PNG through cpu-raytrace, verified its dimensions/content, and observed zero retained host bytes after dropping the completed result. SHA-256: 12966e41d9fde0171a14d6380a0b94b5375af8eee207fa34daf581ef2a7dd4f0. A separate synthetic 20,000-body / 40,000-triangle admission was accepted under Studio and rejected under Compact; it was not rendered and is not a performance benchmark. Source identity was checked before/after the test/probe sequence.

The old-source full CI (a0a2b5af..., from the prior worktree) had already recorded GPU/UI failures. Its one remaining engine test process was stopped after verifying its parent chain; it is an interrupted failing run, not a pass and not validation of this branch. The logs and interruption receipt were preserved. This avoided continuing obsolete validation while the corrected batch was being checked.

The new engine, UI and GPU regression sources still require execution on this batch. Application-window acceptance, large complex-scene timing, progressive large-image memory, complete scene presets and portable body-bound image resources remain separate gates. No complete CI pass or release is claimed.

Follow-on portability and staging batch

The previous WASM gate for c0069b6b completed with exit code 0 and unchanged source. Hardware map/HDR probe execution on AMD Radeon 8060S/Vulkan completed three retained PNG images (authored four maps, legacy modulation and scalar control), all with validated PNG framing/hashes and zero retained host bytes after release. This is one representative resource combination, not whole-pack visual acceptance.

Persistent built-in surface bindings are now prepared across the saved setup, engine command path and existing Render library. Four source hashes/version and definition/feature/component/occurrence-path identity are saved; frames use local millimetres and are placed again for every request. A changed, hidden or ambiguous target refuses rather than being rebound to another ordinal. This preserves engineering materials and the CAD timeline. Regression sources cover round trips, undo, separate instances, placement, identity/hash rejection and offline removal. No execution claim is made for these new regression sources until the next gate.

Passive stages and index-matched optical limit

Prepared saved render-only finite ground/cards (32 maximum), original rectangle/AABB clearance, complete numeric rigs with their authored passive cards, explicit stage replacement/removal, and one-time world-mm fitting. Product topology/materials/mass are unchanged. CPU remains direct/specular; adding diffuse cards is not CPU GI. The conservative clearance may reject valid hollow/nonconvex placements.

The combined portability/staging sources passed workspace/all-target Clippy with -D warnings (receipt portability-stage-clippy-r2.json, unchanged fingerprint 6283d730c6eae23364c9b5da965bfb3a35502642e52708a1141eddc15e28e3a7). The first pass found an Arc borrowing type error; it was corrected, not suppressed. This pass predates the following optical fix; final combined validation is pending.

An independently identified issue prevented the staged IOR=1 dielectric from being Lambertian at grazing angles: generic Schlick still approached unit Fresnel. The exact matched-index limit is now prepared consistently in isotropic/anisotropic CPU BRDFs, specular continuations, GPU path and viewport. Conductors retain their weighted grazing response. Matched-index coats contribute no reflection/attenuation. Existing proposal PDFs are unchanged; this is not an importance-sampling speedup. New analytic tests cover grazing directions, metal mixtures and coat identity. See ../render-portable-surfaces-and-stages.md for portable-resource boundaries.

Published content recovery and physical-reference browser

Merged the functional SELENE source branch at cf8e651022deee528b26c303fde58bf3eb8a22a5 and the independently published physical data at 0ddbcf2fbfa62a03bdc945cdbb9bcc6d6e2116ad with their ancestry. The exact unchanged supplied source and functional format-28 master, procedural builders, three native Design previews and retained notices are now available together. SELENE's pinned_native lock supersedes the older awaiting-source state. Its author branch's model/motion results are inherited evidence, not reruns on this renderer. No whole-rover PBR image is claimed here.

Physical resources provide 51 reference profiles, 373 attributed numeric records, 42 sources, 600 concept specifications and 48 surface associations. The extended profiles, qualifiers, conditions, unknowns and omitted native fields are retained. The existing Render library now has a prepared read-only physical category and source/condition inspector. Concepts and surfaces expose their exact candidate, constituent or comparison relations. A new native command prepares, but does not execute, a loss-aware material creation plan after explicit acknowledgement and only with one supported point density. No engineering material or body is assigned. Native card admission and the four authoring-source hashes are checked. The exact resource exports are not regenerated or reinterpreted by this UI consumer.

The hosted resource gate on run 39766733982 failed at attribution on both hosts. Investigation found that an earlier integration had removed baseline inventory rows and licence prose. Restored the exact rows/prose from e7f56218, retaining all new resource rows and adapter notes; no author/licence facts were invented and no gate was weakened. The repository's unmodified xtask::assets::run executed through a small standalone harness and now reports 756 files, all attributed. The 38 physical-tool tests, catalog validator and pinned-native SELENE prepared validator passed locally. Updated hosted results must still be checked separately.

Functional SELENE production-render continuation

The latest published functional master remains cf8e6510 / SHA-256 3bd2bfa1c6336394c4a4208d30b52c80d06658a3bd7ea57cc93b774411d1bd68. Physical resources are integrated through 32eda023: 59 referenced profiles, 46 point-density-eligible projections and 13 missing-density refusals. These references do not silently replace SELENE engineering properties.

Recovered the interrupted replacement-consent correction and retained all three inherited fixture edits. A patch cannot erase an old saved HDR, stage or surface authority to bypass explicit replacement consent.

Commit 9ad37e3b prepares a bounded native GPU envelope, actual-device storage checks, up to 32 disjoint optical bodies, matched output/save/display bounds, and an opt-in reusable headless GPU studio. Whole-workspace/all-target type checking, formatting and authored catalog/source checks passed after the grouped changes. No whole-SELENE final render or complete new CI pass is claimed at this checkpoint. The next execution uses one grouped native CLI build, then reuses the evaluated model and GPU for reviewed requests. See docs/render-gpu-production-envelope.md.

Native master execution and optical review

The fresh native CLI built from 895704a2 (SHA-256 3421d538c571647c1f24fd74d63487c4ba4ab597980cfeea111a01c0db94e699) passed the public-command resource workflow. The renderer crate passed 457 tests / 0 failures. The complete GPU suite first passed 93 tests, with two obsolete limit-rejection fixtures failing and three explicitly ignored tests. edfe6291 reconciles only those tests with the new explicit envelope; it does not change production transport or disable hostile-input checks.

The unchanged functional master evaluated to 2,116 bodies, zero timeline errors/warnings, of which 2,094 bodies / 2,144,099 triangles are visible under the original saved visibility. Actual native GPU drafts include all that geometry, 12 certified glass bodies, six authored PBR surface families and a separate two-triangle passive floor. No CAD geometry was simplified or removed. Five low-resolution camera/lighting trials completed; the selected perspective studio variant preserves the orange/charcoal palette, unclipped gripper and controlled metal highlights. These trials are not the final high-resolution deliverable.

The reproducible selected recipe and independent camera-fit regression tests are in tools/render-library/selene_recipe.py and test_selene_recipe.py. The rig's 1/16 radiance gain and HDR fill are explicit authored adjustments, not a claim that the original calibrated reference ratio is unchanged. The final publication must cite its actual image dimensions, sample/depth controls, full PNG hash and source model hash; no full GUI/CI success is inferred from this native workflow.

Completed full-detail SELENE showcase

The actual native 3840x2400 / 1,024-sample / maximum-depth-16 render completed. PNG SHA-256: 40a492e7979137d0f4027300da3d8af7ca1008c1aab2c309259e65d309a17316; 2,388,114 bytes. The exact immutable-source/renderer/resource/request manifest and the deliberately selected shipped export are assets/render/selene/scenes/studio-hero.json and exports/SELENE-studio-4k.png. Whole-frame and four unscaled detail-crop review accepted the composition and retained detail. Residual native-pixel Monte Carlo grain in some glass regions is explicitly disclosed; this is not a convergence certificate. The loaded native studio was closed and the master hash rechecked unchanged.

The official 12-crate WASM check and 95-test hardware GPU suite are green (three GPU tests explicitly ignored); the render crate has 457 passes. Seven pure Python camera/publication tests pass. Assets and icon validation passed before the final two production exports were added; the final export addition must run attribution validation again.

The focused render-workspace harness initially passed 54 tests with three failures. Investigation identified a real header-layout instability when the conditional dirty label moved the Reload and CPU resource controls between pointer events, plus an obsolete 64-binding test after the explicit 128-binding expansion. The stable-height status row and current-capacity boundary fixture recovered all 57 preexisting workspace tests. The new dedicated hit-target regression is being checked separately against the saved setup's exposure authority; full GUI/CI acceptance is not claimed while that final check is pending. UI-only repairs do not change the native executable that generated the published image.

Closing validation and delivery checkpoint

The focused render-workspace harness now passes 58 tests / 0 failures / 0 ignored, including the new independent hit-target stability regression. The fixed-height dirty-state indication prevents Reload and the CPU resource picker moving between pointer events; the existing clicked save/reload, native CPU configuration, preview/final retention, cross-tab isolation and boundary tests pass. The added fixture uses the saved setup exposure authority rather than an inactive runtime field. This is a harness result, not a fresh interactive GUI acceptance session or whole-project CI approval.

The committed selected showcase passed bounded PNG verification and exact identity checks again; all 760 collected resources are attributed. The package tool copies only the unmodified completed PNG, public manifest, README and checksums. .github/workflows/selene-showcase.yml is restricted to the owner's integration branch and uses the existing pinned checkout/upload actions with read-only contents permissions. It compiles nothing and installs no dependencies. Its artifact status must be reported separately from renderer execution.

Final frozen-source confirmation

On source commit fb0d7a42ac30402deef3e5d408fd7d674f4db414, tree 0bec3bc30e91550709d0494a2f7c5b15a7f57d41, the cached Render-workspace harness also passed 58/58 with hardware-only Vulkan policy, followed by whole-workspace/all-target Clippy with -D warnings and the official 12-crate WASM gate. All three passed and the source-before/source-after check was unchanged. These closing checks do not relink or replace the native executable used for the image.

Read-only artifact workflow 39787390664 completed successfully on that same published commit. Artifact 12428754554 contains only the exact native PNG, public manifest, README and checksums. Archive SHA-256: 74b94e95eb226a65853c424ec6622da641c765df6c63f48cf7765a315aa94d56. Its downloaded archive and every inner checksum were verified independently; the PNG hash remains 40a492e7979137d0f4027300da3d8af7ca1008c1aab2c309259e65d309a17316. Packaging success is distribution evidence, not a new render or aggregate-CI certificate.

The selected high-quality native SELENE image is complete and shipped. The broader renderer roadmap remains open: quantitative convergence/adaptive sampling, further noise reduction on transmitted/reflected paths, EXR/linear-output work, complete scene/advanced-material capability coverage, broader native CPU/GPU acceptance and an interactive GUI/full-project gate are not silently marked done. PR #7 stays draft; no upstream branch, main merge or release was changed.