Skip to content

quest: delete addresses as identity; addresses stay refused - #628

Merged
kixelated merged 3 commits into
mainfrom
quest-delete/addresses
Nov 7, 2026
Merged

kixelated merged 3 commits into
mainfrom
quest-delete/addresses

Conversation

@kixelated

@kixelated kixelated commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

Deletes the quest Addresses as identity: pointer addresses stay refused, and moq keys its model by explicit ids instead. moq-dev/rust2#596, the quest's PR, is closed.

Why

Three designs for addresses as identity on #596 each left a gap: ids for values outside an Arc that were never freed (so churn aborts at wasm32's 4 GiB, where Rust reuses memory), or pointer comparisons that disagreed with Rust after an address was reused. JS objects have no address and JS copies values, so only a linear-memory model could give exact addresses everywhere. The only consumer at the moq pin is moq-net's model, six reads that use an Arc'd object's address as a map key, and an explicit id does that job in plain Rust.

Changes

Decisions

Settled with the maintainer on 2026-11-07:

  • Scope of pointer addresses: ✅ nothing. Every address read stays refused with a span, and ptr::eq/Arc::ptr_eq/Weak::ptr_eq keep translating as JS identity. Rejected: specific methods (ids only for Arc::as_ptr/Weak::as_ptr/into_raw), ids for an Arc's or Rc's value, and exact addresses everywhere. Plan addresses again once a library other than moq needs them.
  • feat(ts): translate a pointer's address as an id per live object #596: ✅ close it and delete the quest (rejected: keep it open as a draft).
  • moq's address keys: ✅ explicit ids, the same in both builds (rejected: a cfg(rust2_ts) twin; leaving moq's quest).
  • cfg(rust2_ts) twins: ✅ none anywhere in moq (rejected: only dropping the address-key twin).
  • moq's other unsafe (frame ring, NonNull, Segment, kio's log): ✅ decided per item when moq's quest starts (rejected: wait for rust2-ts; safe rewrite in both builds now).

Public API: none.

Validation

quest gate just ci passes locally.

Models

Size: S
Implementer: Claude Code, claude-opus-5-5, high effort

(Written by Claude Opus 5.5 with high effort)

🤖 Generated with Claude Code

Review

Rewritten by quest review after each round.

  • Reviewer: Codex, gpt-6.1-sol, medium effort
  • Session: 01a1b3ed-7271-79b3-b062-a9dd3fcc1012, round 1
  • Head: f7e5c86
  • Base: origin/main at 91a905c
  • Score: 10/10, The exact base-to-head diff only updates quest plans, with no actionable defects or remaining references to the deleted address quest.
  • Findings: none

Conflict-free merge of main at 324a7b70a into 48edaddfd, which needs no new review under the merge exemption.

@pullfrog

pullfrog Bot commented Nov 7, 2026

Copy link
Copy Markdown

Pullfrog  | Review this ➔

@kixelated
kixelated marked this pull request as ready for review November 7, 2026 03:26
@coderabbitai

coderabbitai Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 23 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e5ae95eb-e2b6-40a4-86db-70950a593355
Commits

Reviewing files that changed from the base of the PR and between 324a7b7 and 48edadd.

Files selected for processing: 4

  • quest/m2/ts-model/README.md
  • quest/m2/ts-model/addresses.md
  • quest/m3/ts-runtime-throws.md
  • quest/m3/ts-unsafe/README.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed head f7e5c863d404eb264ac97998a5e7924f29b2b6d8 against base 91a905c94899792e4edade5f89dafa84e16c5034.

No actionable findings in this four-file planning-only delta. The addresses quest and its Required entry are removed together. The model plan records the retained address refusals, explicit consumer IDs, and no cfg(rust2_ts) twins; the unsafe epic reflects the same choice. The runtime-throws quest replaces its deleted address-quest link with the model decision and explicitly excludes those already-refused comparisons. I also confirmed #596 is closed without merging.

Direction: the scoped plan is consistent with retaining exact semantics for supported operations and rejecting unmodeled address reads. This does not add support for previously refused pointer comparisons or implement the separate moq-side ID changes.

Verification limits: GitHub-only static review of the complete diff and surrounding unsafe plan. I did not run quest context, quest validation or CI, reproduce #596's experimental results, or verify the implementation of the separate moq work. GitHub reports mergeable=false; this is not a build or merge-readiness claim.

@kixelated
kixelated added this pull request to the merge queue Nov 7, 2026
Merged via the queue into main with commit 2b10b3a Nov 7, 2026
7 checks passed
@kixelated
kixelated deleted the quest-delete/addresses branch November 7, 2026 03:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant