Skip to content

docs: session handoff 2026-05-27 — borrow deferred-items roundup (humans + machines) - #401

Merged
hyperpolymath merged 1 commit into
mainfrom
core-01/borrow-deferred-items-roundup
May 27, 2026
Merged

docs: session handoff 2026-05-27 — borrow deferred-items roundup (humans + machines)#401
hyperpolymath merged 1 commit into
mainfrom
core-01/borrow-deferred-items-roundup

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

Documents the entire round of work across six open PRs that together cover the four entries in the `lib/borrow.ml` deferred-items comment at lines 1483-1505. Two artefacts, one for each audience.

For humans — `docs/history/SESSION-HANDOFF-2026-05-27.adoc`

`.adoc` per the repo's DOC-FORMAT rule. Sections:

For machines — `.machine_readable/sessions/2026-05-27-borrow-deferred-items.a2ml`

New `sessions/` subdirectory (the existing `.machine_readable/6a2/` is the canonical state-snapshot dir; sessions are per-event records). Schema declared as `a2ml/session-record/v1`. Structured records:

  • One `[[deferred-item]]` per entry in the comment block
  • One `[[open-pr]]` per the six PRs
  • One `[[close-condition]]` per PR with fallback paths
  • `[cleanup]`, `[lessons]` blocks

Cleanup landed alongside

  • `.git/gc.log` removed after `git prune` (the persistent "unreachable loose objects" warning is gone).
  • Two stale parallel-Claude untracked dirs (`affinescript-vite/`, `editors/vscode/node_modules/`) not touched — they're not this session's work.

What's NOT in this PR

Safe-to-close ledger (also in the docs)

PRClose conditionFallback
#395auto-merge fires once CI clearsn/a
#396auto-merge fires once CI clearsif merges without sub-place fix, #399 stays open as follow-up
#397auto-merge fires once CI clearsaudit posted a must-fix; owner can incorporate or file follow-up
#398owner ratifies ADR-022 via the posted one-linerdo-not-close — only deferred-item that needs an architectural change
#399#396 merges with sub-place fixrebase as sub-place soundness correction
#400#395 merges with self-assign-guard + return-escape testrebase as follow-up adding the two missing pieces
this PRsafe to close once mergedn/a — pure docs

Test plan

  • CI green (this PR only touches `docs/` and `.machine_readable/` — no test-relevant code).
  • `asciidoctor docs/history/SESSION-HANDOFF-2026-05-27.adoc` renders without errors (if you have asciidoctor installed; CI doesn't enforce).
  • The `docs/history/SESSION-HANDOFF-2026-05-27.adoc` cross-references in the body resolve to actual PR numbers / file paths in the repo.

🤖 Generated with Claude Code

Documents the entire round of work across six open PRs that together
cover the four entries in the `lib/borrow.ml` deferred-items comment at
lines 1483-1505. Two artefacts:
- `docs/history/SESSION-HANDOFF-2026-05-27.adoc` — human-readable
handoff: what happened, parallel-implementation map, audit findings
(the load-bearing deltas), safe-to-close conditions per PR, and
guidance for the next agent that touches this area.
- `.machine_readable/sessions/2026-05-27-borrow-deferred-items.a2ml`
— structured companion (new sessions/ subdir): one record per
deferred-item, one per open PR, one per close-condition, plus
cleanup record and lessons-learned. Schema declared as
`a2ml/session-record/v1`.
Cleanup landed alongside:
- `.git/gc.log` removed after `git prune` (the persistent
"unreachable loose objects" warning is gone).
Open PRs at handoff: #395, #396, #397 (owner-side, auto-merge SQUASH
ON, BLOCKED on GH Actions queue), #398 / #399 / #400 (mine, draft,
owner-ratify one-liner posted). Review comments on #395 / #396 / #397
flag two real soundness gaps and several coverage gaps.
Nothing in `lib/` changes. Nothing in `test/` changes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath
hyperpolymath enabled auto-merge (squash) May 27, 2026 00:58
@hyperpolymath
hyperpolymath merged commit f6782c4 into mainMay 27, 2026
10 of 17 checks passed
@hyperpolymath
hyperpolymath deleted the core-01/borrow-deferred-items-roundup branch May 27, 2026 01:00
hyperpolymath added a commit that referenced this pull request May 27, 2026
…while/for (Refs #177) (#396)
## Summary
**Rebased reduction.** The original PR coupled loop-soundness with a
StmtAssign clear-on-rewrite. The StmtAssign half is now dropped — that
work landed in #399 with a strictly better `is_whole_place_write`
predicate (whole-place writes clear the move; sub-place writes still
apply `check_use`, which #396's original blanket skip got wrong).
This PR keeps only the loop-soundness piece.
## What lands
- `StmtWhile` / `StmtFor`: run cond+body once, snapshot state-fields,
run cond+body a second time from the post-iter-1 state. Any move the
body didn't restore surfaces as `UseAfterMove` on the 2nd pass.
- State is restored to the iter-1-post snapshot for post-loop analysis
(the loop may execute 0..N times — iter-1-post is the sound choice when
iter-2 doesn't add new conflicts).
- Pairs with #399's clear-on-rewrite so legitimate re-init loops accept:
iter 1 moves and reassigns, iter 2 sees the reassigned state.
## Three new fixtures
| Fixture | Asserts |
|---|---|
| `slice_c_prime_loop_sound.affine` | Counted loop, no moves: Ok
(anti-regression against false positives) |
| `slice_c_prime_loop_reinit_ok.affine` | Move + immediate rebind: Ok
(the #399 × Slice C' interaction) |
| `slice_c_prime_loop_move_persists.affine` | Move without rebind: Error
UseAfterMove (the soundness gain) |
**Suite: 335/335 green** (332 prior + 3 new).
## Comment update
Deferred-items at `lib/borrow.ml:1483` — loop-soundness entry removed;
only Polonius (origin-vars) and captured-linears Slice D remain.
## Coordination
Force-pushed onto current main (post-#395, post-#399, post-#400,
post-#401). GPG-signed.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for freeto 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

@hyperpolymath