Skip to content

Specify scope arenas, dynamic reuse, and global anchors - #147

Closed
TheLazyCat00 wants to merge 16 commits into
mainfrom
agent/fix-host-overwrite-reuse
Closed

Specify scope arenas, dynamic reuse, and global anchors#147
TheLazyCat00 wants to merge 16 commits into
mainfrom
agent/fix-host-overwrite-reuse

Conversation

@TheLazyCat00

@TheLazyCat00 TheLazyCat00 commented Jul 25, 2026

Copy link
Copy Markdown
Member

What changed

  • Split each scope arena into two lazy, non-overlapping chunk chains: fixed-size storage and dynamic backing stores.
  • Move anchors into one runtime-global pool of equal-sized 8-byte cells with a single free-address stack.
  • Let an anchor target either a hosted payload or another anchor.
  • Preserve an anchored destination host’s identity during a move: a distinct source anchor becomes a runtime forwarding anchor to the destination anchor, so both existing guest sets remain valid without guest enumeration or repointing.
  • Canonicalize copied or passed guests to the terminal payload anchor and permit runtime path compression.
  • Apply the same identity-merging rule recursively to hosted reference values inside relocated representations and dynamic backing stores.
  • Define rehosting as copying the complete hosted representation into destination-owned storage: inline bytes move into the destination host, dynamic backing stores relocate into equal-size destination-region allocations, and the old source storage ceases to be live.
  • Turn the moved-from host-capable slot into a guest that stores the terminal tether while retaining enough storage to host another value later.
  • Retire terminal payload anchors when their hosting identity ends; retire forwarding anchors when their former source scope drains.
  • Define byte-based power-of-two dynamic blocks beginning at 128 bytes, with exact-size stack lookup before frontier allocation.
  • Define blocks larger than 1 MiB as dedicated contiguous oversized spans addressed by one base segmented offset and size class.
  • Align the normative memory model, glossary, focused memory story, and document index.

Why

Fixed-size values and hosts should remain densely inline, while variable-sized backing stores need relocation and intra-scope reuse. Rehosting must not leave a destination handle pointing into a source scope that may drain. Copying every owned byte into destination-owned regions gives the destination an independent lifetime.

When both source and destination already have guests, destroying the destination occupant still leaves two existing anchor identities that must reach the replacement. Runtime forwarding preserves both promises without introducing a source-language move restriction: the destination anchor remains terminal and the source anchor forwards to it. New guest copies use the terminal identity, while older guests may follow the forwarding chain until their original scope drains.

Validation

  • Moves remain legal when both source and destination have existing guests.
  • Existing source guests follow forwarding anchors; destination guests and newly minted guests use the terminal destination anchor.
  • Forwarding edges point toward same- or longer-lived destination identities and cannot cycle.
  • Forwarding anchors cannot newly escape their former source scope because assigning or passing a guest canonicalizes its tether.
  • Rehosting copies inline storage and every owned dynamic backing store before source storage is retired.
  • Destination handles never retain source-scope backing-store offsets.
  • The old source host-capable slot becomes a guest through the terminal tether.
  • Anchor bookkeeping never enumerates guests; physical relocation remains proportional to the bytes, elements, and contained hosts moved.
  • Dynamic allocation checks the exact-size stack before the frontier.
  • Ordinary blocks never cross a 1 MiB boundary; larger blocks use dedicated contiguous spans.
  • Global anchor allocation checks one free-address stack before its frontier.
  • Anchor reuse requires no generation counter because each anchor is returned only after no live guest can still name it.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The memory model now defines separate fixed-size and dynamic regions per scope, a runtime-global anchor pool, unified segmented offsets, scoped allocation reuse, and stable anchor identity across moves and rehosting.

Changes

Memory model

Layer / File(s) Summary
Region and offset model
spec/memory.md, spec/glossary.md
Defines scope-owned fixed-size and dynamic regions, exclusive chunk mapping, segmented offsets, sentinel handling, host-capable storage, and placement semantics.
Allocation and backing-store layout
spec/memory.md, stories/memory.md, README.md
Specifies fixed-region teardown, power-of-two dynamic blocks with exact-size LIFO reuse, oversized spans, backing-store transfer, and updated allocation documentation.
Promotion and anchor-cell behavior
spec/memory.md, spec/lifetimes.md, spec/glossary.md, stories/memory.md
Describes lazy global anchor allocation, stable anchor identity, payload-offset updates during moves and rehosting, guest-liveness move restrictions, and revised host/guest terminology.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

  • zane-lang/spec#149: Updates overlapping memory, glossary, and lifetime rules for global anchors and guest-liveness move restrictions.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the core changes: scope arenas, dynamic reuse, and global anchors.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/fix-host-overwrite-reuse

Comment @coderabbitai help to get the list of available commands.

@TheLazyCat00 TheLazyCat00 changed the title Clarify that host overwrites reuse storage Specify scope arena regions and dynamic backing-store reuse Jul 25, 2026
@TheLazyCat00
TheLazyCat00 marked this pull request as ready for review July 25, 2026 12:57

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
spec/memory.md (1)

413-418: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Do not lose source-scope anchor paths during promotion.

Promotion can leave source tethers using the old cell while destination tethers use a newly minted cell. With only one backpointer, later moves update one cell and stale the other. Define forwarding/multi-anchor semantics or prohibit re-anchoring/movement while the old cell remains live.

  • spec/memory.md#L413-L418: correct the normative promotion algorithm.
  • stories/memory.md#L106-L110: align the explanation with that algorithm.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@spec/memory.md` around lines 413 - 418, The promotion semantics in
spec/memory.md lines 413-418 and stories/memory.md lines 106-110 must preserve
all live source-scope anchor paths. Define forwarding or multi-anchor behavior
so subsequent moves update both the old source cell and any newly minted
destination cell, or explicitly prohibit re-anchoring and movement while the old
cell remains live; make both sections describe the same normative algorithm.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@spec/memory.md`:
- Around line 304-316: Define the representation and allocation rules for
dynamic blocks exceeding one chunk in the normative allocator section around the
dynamic block growth rules in spec/memory.md:304-316, including contiguous
multi-chunk spans and how their handles address them, or explicitly cap blocks
at one chunk. Apply the same oversized-block behavior in the corresponding
narrative at stories/memory.md:80-82 so both documents remain consistent.

---

Outside diff comments:
In `@spec/memory.md`:
- Around line 413-418: The promotion semantics in spec/memory.md lines 413-418
and stories/memory.md lines 106-110 must preserve all live source-scope anchor
paths. Define forwarding or multi-anchor behavior so subsequent moves update
both the old source cell and any newly minted destination cell, or explicitly
prohibit re-anchoring and movement while the old cell remains live; make both
sections describe the same normative algorithm.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: zane-lang/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 38120942-bcee-4ab5-9075-0622b78dc8c5

📥 Commits

Reviewing files that changed from the base of the PR and between 89083ff and 905cc5b.

📒 Files selected for processing (2)
  • spec/memory.md
  • stories/memory.md

Comment thread spec/memory.md Outdated
@TheLazyCat00 TheLazyCat00 changed the title Specify scope arena regions and dynamic backing-store reuse Specify scope arenas, dynamic reuse, and global anchors Jul 25, 2026
@TheLazyCat00

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@spec/memory.md`:
- Line 230: Update the headings in spec/memory.md, including “3.1 Scope arenas,
the global anchor pool, and segmented offsets” and the additionally identified
headings, by inserting one blank line between each heading and its following
content to satisfy markdownlint MD022.
- Around line 403-407: Clarify the move/rehosting rules in section 4.5 for
destinations with existing anchored guests. Define how the source and
destination anchor identities and both guest sets are preserved, or explicitly
forbid this move; align the result with section 2.2 and ensure no anchor
identity can be recycled while referenced.
- Around line 274-276: Clarify the anchor-page reclamation contract in the
free-address stack description: either require wholly free anchor pages to
remain mapped while their offsets are retained, or specify that unmapping
removes all offsets for the page and updates the chunk directory and any reused
chunk IDs before reclamation. Ensure later allocations cannot pop an offset
referring to an unmapped or repurposed page.
- Around line 261-263: Align anchor-cell representation with segmented-offset
encoding by choosing and documenting either 8-byte physical cell stride/padding
or a 4-byte offset unit. Update spec/memory.md lines 261-263 to define
anchor-page addressability and alignment, reconcile the anchor-cell width and
12-byte logical cost in spec/memory.md lines 338-351, and mirror the normative
representation in stories/memory.md lines 63-69; revise all affected memory-cost
and capacity claims consistently.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: zane-lang/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ff6870d4-96b8-4599-87ee-389081f9015e

📥 Commits

Reviewing files that changed from the base of the PR and between 905cc5b and 4eeedb4.

📒 Files selected for processing (2)
  • spec/memory.md
  • stories/memory.md

Comment thread spec/memory.md
Comment thread spec/memory.md Outdated
Comment thread spec/memory.md Outdated
Comment thread spec/memory.md Outdated

@TheLazyCat00 TheLazyCat00 left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

dont rewrite the entire story

* docs: fix review defects in the arena and global-anchor change

Repair the integration half of the memory-model revision and the
cross-references it left stale.

- Restore the story pointer at memory.md §3.6; it named a chapter
  heading that no longer exists, so the link resolved to nothing.
- Point the sections whose rules the revision changed (§3.1, §3.2,
  §3.6, §4.1, §4.5, §4.6) at the new story chapter; §4.6 had no
  pointer at all.
- Restore the story's placement chapter to its previous wording: the
  chapter predates this change, and its in-prose spec reference is a
  commit-pinned permalink rather than a living relative link.
- Update the glossary entries for anchor cell and arena placement,
  which still described a scope-local anchor region.
- Record the both-sides-guests move restriction in lifetimes.md, the
  home of move legality, as §1.10 with a summary row.
- Restore the arena-granularity latitude and the destruction-timing
  distinction dropped from §3.1 and §3.2, and note that the
  fixed-size region reclaims nothing individually.
- State how the anchor pool avoids issuing identity 0, restore the
  address formula, drop a contrast with storage the language has no
  form for, and square the segmented-offset diagram.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016YnNCXtguHg4tSbLCtTT2c

* docs: sharpen the scope-drain guarantee and the move-liveness summary

Address review on the promotion and move-liveness wording.

- State the drain guarantee as reachability: a scope's memory is
  released at drain and no guest resolves into released memory, with
  an escaping value promoted out first and its guests following the
  canonical anchor. The previous phrasing claimed source-arena memory
  outlives every guest that can reach it, which promotion breaks.
- Say in the glossary that promotion copies the fixed-size bytes —
  the inline payload or the handle — while a dynamic backing store
  transfers without being copied.
- Complete the move-liveness summary row with the case where neither
  side has live guests: a moved-from slot that stays readable anchors
  lazily.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016YnNCXtguHg4tSbLCtTT2c

---------

Co-authored-by: Claude <noreply@anthropic.com>
@TheLazyCat00

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@spec/memory.md`:
- Line 314: Define a consistent lifetime mechanism for dynamic backing stores:
update spec/memory.md lines 314-314 and 357-357 so promotion and move/rehosting
allocate or retain storage in an arena covering every possible destination, or
relocate/copy it before source teardown; qualify spec/glossary.md lines 188-189
so ownership is not always attributed to the creating scope’s dynamic region;
and update stories/memory.md lines 122-124 to describe the same backing-store
lifetime and promotion behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: zane-lang/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 34f998ec-ff77-455e-8f20-55fc7f346a89

📥 Commits

Reviewing files that changed from the base of the PR and between 4eeedb4 and b5cab00.

📒 Files selected for processing (5)
  • README.md
  • spec/glossary.md
  • spec/lifetimes.md
  • spec/memory.md
  • stories/memory.md

Comment thread spec/memory.md Outdated
Define rehosting as copying the complete hosted representation into destination-owned storage. Inline bytes move into the destination slot, dynamic backing stores relocate into equal-size destination-region allocations, old source storage ceases to be live, and the source host-capable slot becomes a guest through the canonical tether.

Keep anchor bookkeeping O(1) in the number of guests while stating the physical relocation cost explicitly. Align the normative memory model, glossary, and design story, and complete the glossary's verb list with operators and lambdas.
@TheLazyCat00
TheLazyCat00 force-pushed the agent/fix-host-overwrite-reuse branch from 0bcc770 to 6140d1a Compare July 28, 2026 14:44

Copy link
Copy Markdown
Member Author

Addressed the remaining review on dynamic backing-store lifetime.

Rehosting now relocates the complete hosted representation into destination-owned storage before the source can drain: inline bytes are copied into the destination slot, each dynamic backing store moves into an equal-size destination-region block or oversized span, and the old source allocation is returned to its exact-size stack. The old source payload then ceases to be live, while its host-capable slot becomes a guest through the canonical tether.

The normative memory model, glossary, and story now use the same rule. They also distinguish O(1) anchor bookkeeping in the number of guests from physical relocation, whose cost is proportional to the bytes or elements moved.

Copy link
Copy Markdown
Member Author

@coderabbitai Please implement the following design change and commit it directly to the current PR branch (agent/fix-host-overwrite-reuse), not as a stacked PR.

Replace the user-visible “two-live-guest” move rejection with a purely runtime forwarding-anchor mechanism. This is not a source-language concept and must not add a language restriction.

Required semantics:

  1. An 8-byte anchor cell stores a u32 target plus a kind/tag identifying either:
    • a terminal payload target, or
    • another anchor target (a forwarding anchor).
  2. On an ordinary overwrite from a newly materialized value, preserve the destination host’s existing terminal anchor and update it to the replacement payload, as before.
  3. On a move into a fresh/untethered destination, carry the source terminal anchor to the destination. If no anchor exists but the moved-from source slot must become a guest, allocate one lazily.
  4. On a move into an already-anchored destination, the destination anchor remains terminal because the destination host identity survives replacement. If the source has a different anchor, convert the source anchor into a forwarder to the destination anchor. Existing source guests follow the chain; destination guests and newly minted guests use the terminal destination anchor. Do not enumerate or repoint guests.
  5. Apply the same identity-merging behavior recursively to hosted reference-type fields/elements contained in a relocated representation.
  6. Tether resolution follows forwarding cells until a terminal payload anchor. Chains must not cycle; resolving may path-compress them.
  7. Copying/rebinding a guest through a forwarding tether should store the terminal anchor identity, so an obsolete forwarding identity cannot newly escape its original lexical scope.
  8. A terminal payload anchor is returned when its final hosting lineage ends. A forwarding anchor remains until the lexical scope of its former source host drains, at which point all pre-existing guests capable of storing that identity are dead. No reference counting or guest enumeration is needed.
  9. Remove spec/lifetimes.md §1.10 and the summary-table “Move guest liveness” row entirely. Moves with guests on both sides are legal.
  10. Update spec/memory.md, spec/glossary.md, and the latest relevant chapter in stories/memory.md consistently. Replace claims such as “no forwarding cells,” “one canonical identity,” and “rehosting adds no forwarding hop.” Keep the story change focused; do not rewrite unrelated historical chapters.
  11. Update the PR description so it no longer says forwarding is unnecessary or that two-live-guest moves are rejected.
  12. Remove the temporary file .github/workflows/tmp-forwarding-anchor-update.yml; it was only an unsuccessful editing workaround and must not remain in the PR.

Preserve the existing decisions about global anchor pages, 8-byte slots, destination-owned backing-store relocation, exact-size dynamic reuse, and immediate free-stack reuse once the relevant anchor retirement event is reached.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== Branch and working tree =='
git branch --show-current
git status --short

printf '%s\n' '== Candidate files =='
fd -t f -a '^(memory|lifetimes|glossary)\.md$' spec stories || true
fd -t f -a '^tmp-forwarding-anchor-update\.yml$' .github || true

printf '%s\n' '== Markdown outlines =='
ast-grep outline spec/memory.md --items all 2>/dev/null || true
ast-grep outline spec/lifetimes.md --items all 2>/dev/null || true
ast-grep outline spec/glossary.md --items all 2>/dev/null || true
ast-grep outline stories/memory.md --items all 2>/dev/null || true

printf '%s\n' '== Semantics and obsolete-claim references =='
rg -n -i -C 4 \
  'forward|anchor|tether|canonical identity|one canonical|rehosting.*hop|two.live.guest|Move guest liveness|guest liveness|path.compress|terminal|overwrite|relocat|retir|drain|free.stack' \
  spec/memory.md spec/lifetimes.md spec/glossary.md stories/memory.md README.md 2>/dev/null || true

printf '%s\n' '== Temporary workflow content, if present =='
workflow=$(fd -t f -a '^tmp-forwarding-anchor-update\.yml$' .github | head -n 1 || true)
if [ -n "$workflow" ]; then
  cat -n "$workflow"
fi

printf '%s\n' '== Current PR body =='
gh pr view 147 --repo zane-lang/spec --json title,body,url --jq '"URL: \(.url)\nTitle: \(.title)\n\n\(.body)"'

Length of output: 164785


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== Validate stale claims after edits =='
rg -n -i \
  'no forwarding cells|forwarding is unnecessary|two.live.guest|Move guest liveness|rehosting adds no forwarding hop|moves with guests on both sides.*rejected' \
  spec/memory.md spec/lifetimes.md spec/glossary.md stories/memory.md README.md .github 2>/dev/null || true

printf '%s\n' '== Confirm temporary workflow removal =='
if fd -t f -a '^tmp-forwarding-anchor-update\.yml$' .github | grep -q .; then
  echo 'Temporary workflow is still present.'
  exit 1
fi
echo 'Temporary workflow is absent.'

printf '%s\n' '== Changed-file review =='
git diff --check
git diff -- spec/memory.md spec/lifetimes.md spec/glossary.md stories/memory.md README.md .github/workflows/tmp-forwarding-anchor-update.yml

Length of output: 4426


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== Obsolete semantics must be absent =='
if rg -n -i \
  'no forwarding cells|forwarding is unnecessary|two.live.guest|Move guest liveness|rehosting adds no forwarding hop|moves with guests on both sides.*rejected' \
  spec/memory.md spec/lifetimes.md spec/glossary.md stories/memory.md README.md .github; then
  echo 'Obsolete forwarding or move-restriction wording remains.' >&2
  exit 1
fi

printf '%s\n' '== Required forwarding semantics must be present =='
rg -n -i -C 2 \
  'terminal.*anchor|forwarding.*anchor|path.compress|rebind|copying.*guest|scope drains|recursive|contained reference' \
  spec/memory.md spec/glossary.md stories/memory.md

printf '%s\n' '== Temporary workflow must be absent =='
if fd -t f -a '^tmp-forwarding-anchor-update\.yml$' .github | grep -q .; then
  echo 'Temporary workflow is still present.' >&2
  exit 1
fi

git diff --check
git diff -- spec/memory.md spec/lifetimes.md spec/glossary.md stories/memory.md .github/workflows/tmp-forwarding-anchor-update.yml

Length of output: 4648


@TheLazyCat00: Validation failed conclusively because the forwarding-anchor update has not been applied in the checked-out branch.

The obsolete behavior remains in:

  • spec/memory.md — Lines 430, 464, and 521.
  • spec/lifetimes.md — Line 219 (§1.10) and Line 281 (summary row).
  • .github/workflows/tmp-forwarding-anchor-update.yml — still present.

The command stopped before it could validate required forwarding semantics or the final diff. After the planned edits and PR-description update are applied, rerun the validation script to confirm the old restriction and temporary workflow are gone.

Copy link
Copy Markdown
Member Author

@coderabbitai autofix

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Note

Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.

The agent ran but didn't make any changes. The issues may already be fixed or require manual intervention.

@TheLazyCat00

Copy link
Copy Markdown
Member Author

Closing without merging — continued in #151.

Nothing here is dropped. #151 is branched from this PR's head (agent/fix-host-overwrite-reuse, ff46f0f) and targets main directly, so all 16 commits of arena and anchor work travel with it unchanged: the fixed-size and dynamic regions, the runtime-global recyclable anchor pool, and forwarding anchors for merged host identities, along with the stories/memory.md chapter that records them.

What #151 adds on top is the guest-source restriction — a bare symbol is no longer a legal source for a new & — and the 'T borrow mode that rule made necessary. That change sits above the anchor machinery and does not alter it.

The consolidation is deliberate: reviewing the source restriction against a base that already carries the anchor design is more useful than reviewing the two separately, and it leaves one PR to merge instead of a chain.


Generated by Claude Code

@TheLazyCat00
TheLazyCat00 deleted the agent/fix-host-overwrite-reuse branch July 31, 2026 09:51
@TheLazyCat00
TheLazyCat00 restored the agent/fix-host-overwrite-reuse branch July 31, 2026 09:51
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