feat(engine): add guarded mutations and browser response ownership - #287
Merged
Merged
Conversation
|
Warning Review limit reached
On-demand reviews are free for the next 7 days. After that, they cost $0.25 per reviewed file. Or wait 9 minutes for your next included review. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (16)
Comment |
15 tasks
Keep the latest driver name separate from the effective display name so clearing a user override restores current hardware metadata immediately. Rediscovery and guarded refresh update that observation, while metadata-only refreshes preserve it instead of recycling a customized display name. Cover name reset through the registry and device API, including rediscovery, SMBus remapping, rejected refreshes, and preservation of other settings.
Apply color through the existing scene candidate and revision fence, preserving zone metadata, membership, brightness and output power. Replace only the layer stack and reject stale or display-owned targets. Return actual persistence evidence from both stores. Default-scene layers require their exact Written runtime payload; superseded or later overwritten snapshots cannot certify the original operation. Co-Authored-By: Nova (GPT-6) <noreply@openai.com>
Keep the native test notifier out of browser builds so it cannot collide with the real browser event publisher. Move existing installation helpers before the test module to satisfy the all-target lint gate.
Pull browser response chunks only on demand and copy no more than the consumer's reserved capacity into Rust. Retain one browser-owned chunk, release the reader at EOF, and abort pending reads on cancellation. Exercise the real browser stream in WASM tests, including large chunks, failed reads, invalid values, empty responses, and reader ownership. Native fetch integration remains a separate transport change.
hyperb1iss
force-pushed
the
nova/product-experience-engine
branch
from
September 13, 2026 17:12
a3addfe to
1201eea
Compare
hyperb1iss
changed the base branch from
nova/release-user-skill-manifest
to
main
September 13, 2026 17:12
15 tasks
hyperb1iss
marked this pull request as ready for review
September 13, 2026 17:19
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.
What this changes
Device names return to the observed hardware name when an override is cleared. Authenticated integrations can target an exact runtime scene/zone revision and inspect original persistence evidence. The UI gains an owned incremental browser response reader with demand-driven copies and cancellation cleanup.
This layer stacks on #286 (
nova/release-user-skill-manifest). The existing manifest fix stays in its own PR.Why
A cleared custom name could leave a stale display name. Runtime mutations also need to reject stale scene context at the shared mutation boundary, and response streaming needs explicit reader ownership before transports can stop buffering whole bodies.
Verification
just verifypasses locally (full current-head command pending; focused Rust/WASM checks passed)just denypasses (no dependency version or license change; web-sys feature additions are covered by compilation)just ui-testandjust ui-buildpass (five browser tests and all-target WASM Clippy passed; complete UI recipe qualification remains pending)just sdk-lint,just sdk-check, andjust sdk-buildpass (not applicable; no SDK changes)just python-verifypasses (not applicable; no Python changes)just compat-checkpasses (not applicable; no device database changes)just docs-buildpasses (not applicable; no documentation changes)cd docs && zola checkpasses (not applicable; no documentation changes)just e2e-buildpasses with the normal Servo stack (newest combined artifact not qualified)just e2e-build-cpupasses (no new CPU smoke build claimed)just e2epasses against the Servo stack (full current-head journey pending)Notes for reviewers
The runtime guard uses the existing scene mutation/CAS boundary. Default-scene layer durability requires the runtime projection; a later overwritten or superseded snapshot cannot certify the original write. Selected-field scene activation follows in a separate layer.
The response reader retains one browser-provided chunk and copies within the consumer's requested capacity. Browser buffering remains outside that bound. Native fetch integration and whole-transport resource qualification are unfinished; this draft does not advertise streaming support.