docs: close #297-#299 with SHAs; session handoff
Marks #297 (9b1e6fc6), #298 (bc0077a5) and #299 (88348f67) DONE per the issue-tracking rule, and adds a handoff covering what landed, what still needs the user's eyes, and the route 4 decision waiting on them. Three items are implemented and suite-green but NOT user-verified: collision with PKLite players (including the equip/unequip case round 1 got wrong), melee/bow on a PKLite player plus the auto-target guard, and combat-camera tracking of a PKLite opponent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
bc0077a55f
commit
b17f5cee49
2 changed files with 97 additions and 3 deletions
94
docs/research/2026-08-03-session-handoff.md
Normal file
94
docs/research/2026-08-03-session-handoff.md
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# Session handoff — 2026-08-03
|
||||
|
||||
Branch `claude/acdream-physics-divergence-5aa784`. `main` is still at `c7d5fc14`;
|
||||
nothing here is merged. Complete Release suite green at **10,904 passed /
|
||||
4 skipped / 0 failed** (session start: 10,844).
|
||||
|
||||
## What landed
|
||||
|
||||
| Commit | What |
|
||||
|---|---|
|
||||
| `9966b531` | **C4 route 2 — ForcePosition** through the canonical placement |
|
||||
| `69ba9486` | Retail `@pklite` client command (`EnterPkLite` 0x028F) |
|
||||
| `3ef61eb6` | Route 2 visual gate, rewritten with the real recipe |
|
||||
| `d980456f` | Route 2 connected gate **user-accepted** |
|
||||
| `e3b766d9` | Filed #297-#299 |
|
||||
| `40f57213` | **Route 4 scoping — budget failed, stop and re-plan** |
|
||||
| `88348f67` | **#299** mover-side `IsImpenetrable` exemption branch |
|
||||
| `9b1e6fc6` | **#297** keep the PWD bitfield live so PK status reaches the client |
|
||||
| `bc0077a5` | **#298** admit player targets to melee/missile attack and the camera |
|
||||
|
||||
## Needs your eyes (nothing below is user-verified)
|
||||
|
||||
Route 2 is accepted. These three are not:
|
||||
|
||||
1. **Collision with PKLite players** (#297). Both parties `@pklite`, walk into
|
||||
each other — you should now collide instead of phasing through. Then have
|
||||
them **equip or unequip something** and try again: that is the case round 1
|
||||
got wrong, and the fix is specifically about surviving it.
|
||||
2. **Melee/bow on a PKLite player** (#298). Select them, attack. Should work
|
||||
now. Also confirm auto-target still refuses to acquire a player — pull a
|
||||
monster with a PKLite player nearby and check auto-target picks the monster.
|
||||
3. **The combat camera** (#298). With `ViewCombatTarget` on (default), attacking
|
||||
a PKLite opponent should now track them. Retail gates the camera on the same
|
||||
predicate as the attack; we were using the narrow one.
|
||||
|
||||
Recipe for getting into PK Lite is in
|
||||
[`2026-08-03-c4-route-2-visual-gate.md`](2026-08-03-c4-route-2-visual-gate.md).
|
||||
Remember PK Lite is a **one-way** character state.
|
||||
|
||||
## The decision waiting for you: route 4
|
||||
|
||||
I stopped rather than starting it. After route 2 I pinned a falsifiable budget —
|
||||
*if route 4 also costs ~900 production lines, the bet is dead* — and scoping came
|
||||
back at **1,500-2,500 lines** plus ~1,700 lines of test re-modelling.
|
||||
|
||||
The seam generalises fine; route 2 just was not a representative unit (1 entity
|
||||
vs N, 1 disposition vs 4, 1 execution path vs 2, 2 duplicate authorities vs 6).
|
||||
|
||||
**Recommendation: split route 4 into 4a and 4b.** 4a = near/interpolate +
|
||||
airborne no-op — the observable win, no park hazard. 4b = teleport/far/cellless,
|
||||
where the parks, the service-window guard, N3 and #277 all live.
|
||||
|
||||
Full analysis, including four findings that change the campaign plan (route 4's
|
||||
Create half is already done; AP-131 cannot be retired by route 4; #277's safety
|
||||
bound breaks; N3 stops being latent) is in
|
||||
[`2026-08-03-c4-route-4-scoping.md`](2026-08-03-c4-route-4-scoping.md).
|
||||
|
||||
## Open follow-ups filed this session
|
||||
|
||||
- **#300** — `Properties.Ints[134]` vs `PublicWeenieBitfield` mirror gap.
|
||||
- **#301** — retail's `OnStatUpdated` also rewrites radar blip colour and radar
|
||||
behaviour; acdream ignores both. #297 for the radar.
|
||||
- **#302** — `PortalProjectionTests.ClipToRegion_FrameOwnedStore_ReusesExactResultArray`
|
||||
is flaky, ~1 run in 6, a `GC.GetAllocatedBytesForCurrentThread` assertion.
|
||||
**A green suite is not proof this is gone.**
|
||||
- **#303** — `LiveEntityPvpBitfieldSync` is App-resident but touches only
|
||||
Runtime-owned state.
|
||||
- **#304** — `SelectionInteractionController.GetSelectedOrClosestCombatTarget`
|
||||
has no production caller; one of #298's two widened call sites is dead code.
|
||||
- **#305** — `HeadlessGameplayOperations` has #298's bug unpatched, so the
|
||||
graphical and headless hosts now diverge.
|
||||
|
||||
Register rows added: **AP-134** (the replicated PWD-bitfield coherence
|
||||
invariant). **TS-23**'s retirement narrative corrected — it claimed since July
|
||||
that every mover-flags site read the mover's "real" PK bits; the bits existed but
|
||||
their source was frozen, so that only became true at #297.
|
||||
|
||||
## Process notes worth keeping
|
||||
|
||||
- **Four implementation passes and five review rounds on route 2, and every
|
||||
intermediate state was green** — 10,848, 10,853, 10,856, 10,858. The suite
|
||||
caught none of the four real defects. Two of them were introduced *by* the
|
||||
fixes for the other two.
|
||||
- **Demanded regression tests found root causes that review missed.** #297's
|
||||
"assert the flags survive an appearance rebuild" test is what exposed the
|
||||
second snapshot store.
|
||||
- **Three false claims reached documentation and were retracted before
|
||||
commit** — a "retail fidelity gain" that was a fixture artifact, an
|
||||
acceptance-coverage claim in the cutover plan, and an IA-19 citation covering
|
||||
a divergence it does not reach. Each would have become the thing a future
|
||||
session trusted.
|
||||
- **Go to the bytes when the decompiler is ambiguous.** #299 turned on whether
|
||||
`if (state_1 < 0)` was a 0x80 or 0x8000 test; decoding the PDB-paired binary
|
||||
settled it (`test al,al; js`).
|
||||
Loading…
Add table
Add a link
Reference in a new issue