From 028920420dc6e2050dec65784d928faafc62ea01 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 12 Aug 2026 10:30:19 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20FA7=20closeout=20=E2=80=94=20Campaign?= =?UTF-8?q?=20FA=20CODE-COMPLETE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The retail four-tab social panel (Fellowship & Allegiance) is code-complete: all six slices landed and reviewed (dual-lens Opus review -> fix round -> narrow re-review each). Fellowship two-session flow proven live (FA6 bot gate PASSED). Closeout bookkeeping: - register AD count 66 -> 67 (AD-87, the deferred allegiance bot gate); - plan status flipped to CODE-COMPLETE with the OWED connected gates + #384 (allegiance-swear ACE non-response) called out; - CLAUDE.md Current-state gains the Campaign FA paragraph (per feedback_claude_md_staleness), pointing at the memory digest. Owed: the user's connected gates (§FA3-§FA6 of docs/research/2026-08-12-campaign-fa-test-script.md) and #384's ACE-console disambiguation. Full suite 13,304/4/0. Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 30 +++++++++++++++++++ .../retail-divergence-register.md | 2 +- ...26-08-11-fellowship-allegiance-campaign.md | 20 ++++++++++++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 7bf9f53a..c18943d4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -175,6 +175,36 @@ Gameplay-buttons half needs the re-gate with the new click logs). Tail: #371, #373, AP-198/199/201/202/203. START at `claude-memory/project_settings_options_digest.md`. +**Campaign FA — the retail social panel (Fellowship & Allegiance) +(`docs/plans/2026-08-11-fellowship-allegiance-campaign.md`) is +CODE-COMPLETE 2026-08-12.** Retail authors ONE four-tab `gmPanelUI` social +panel (Friends / Allegiance / Fellowship / Squelch, host slot +`0x1000018F`, id 12; F3 = Allegiance, F4 = Fellowship, keyboard-only — +Allegiance is the authored DEFAULT tab), mounted with the OP3 Options-panel +recipe. The Fellowship and Allegiance pages are LIVE end-to-end: real wire +(FA1 repaired the never-called H.2 builders + parsers — retail's FOUR +tree-rejection rules, ELEVEN version gates, the byte-decoded `>=9` size and +the truncated XP-share table), two session-scoped Runtime owners +(`RuntimeFellowshipState`/`RuntimeAllegianceState`, both clear at +generation reset — D2 corrected), and the authored panels through +`LayoutImporter`. Friends/Squelch bind read-only to J4.1's owners. +**The fellowship two-session flow is PROVEN over the live wire** — FA6's +automated bot-vs-ACE gate (`testaccount`/`+Acdream` + `testaccount2`/ +`+Horan`) passed: the recruited bot's OWN `RuntimeFellowshipState` flips +`IsInFellowship`. Six FA slices, each dual-lens Opus reviewed → fix round → +narrow re-review; the reviews caught what tests can't (retail's 4th tree +rule, the D2 reset-lifetime inversion, the D6 server-side invite filter, +a seam-map entry that would have re-introduced a fixed bug). OWED: the +user's connected gates (§FA3-§FA6 of +`docs/research/2026-08-12-campaign-fa-test-script.md`, several +`[TWO-CLIENT]`), and **#384** — the allegiance-swear bot gate is +deferred/disabled because ACE returns NOTHING to the `0x001D` swear at +0.005 m (no confirmation, no tree update, no error; needs ACE-console +disambiguation — the swear CODE is done+reviewed, only its automated +two-session proof is unverified; register AD-87). Tail: #383 (installed- +DAT vs committed-fixture drift, found at FA3). START at +`claude-memory/project_fellowship_allegiance_campaign.md`. + **Placement cutover — C4 COMPLETE 2026-08-05, merged to main.** Every placement route now runs through the canonical residence + continuation- executor owner. Routes landed this session: 4b-3 remote teleport/cell-less diff --git a/docs/architecture/retail-divergence-register.md b/docs/architecture/retail-divergence-register.md index 8116927c..445a9b00 100644 --- a/docs/architecture/retail-divergence-register.md +++ b/docs/architecture/retail-divergence-register.md @@ -62,7 +62,7 @@ accepted-divergence entries (#96, #49, #50). --- -## 2. Adaptation (AD) — 66 active rows (AD-86 filed 2026-08-12 at Campaign FA slice FA5, item 4 — ACE's deliberate zeroing of officers/officer titles/MOTD/MOTD-set-by/name-last-set-time/lock/approved-vassal/timeOnline/allegianceAge, dropped past acdream's own parse layer to match retail's own no-widget presentation; AD-85 filed 2026-08-12 at Campaign FA slice FA5 — the Allegiance page's numeric-only fields and its three local confirmation dialogs' unsubstituted-verbatim-or-bare-name text, the same unported `StringInfo` gap AD-81 filed for Fellowship; AD-84 filed 2026-08-12 at Campaign FA slice FA5 — the Swear button's missing "target is a player" gate, the same class as AD-83's Recruit-button gap; AD-83 filed 2026-08-12 at the Campaign FA slice FA4 fix round (mechanism MUST-FIX 5) — the Recruit button's missing "target is a player" gate, previously an inline comment not a row; AD-82 filed 2026-08-12 at the Campaign FA slice FA4 fix round (mechanism MUST-FIX 4/5) — the invented leader-tint/selection-tint colors, the name-text-only row click target, and the page-local (not generic-`UiTemplateListBox`) world→panel selection sync; AD-81 filed 2026-08-12 at Campaign FA slice FA4 — the fellowship roster/create-flow text-composition gap (unported `StringInfo` variable substitution + `ACCharGenData::FormatName`); AD-80 filed 2026-08-12 at Campaign FA slice FA4, D5 — the panel's retail-exact XP-share percentage display versus the currently-targeted ACE server's slightly different actual grant; AD-79 filed 2026-08-12 at Campaign FA slice FA3, D1 — the social panel's Friends/Squelch page action buttons (add/remove friend, appear offline, squelch add/remove/clear) are honest INERT, no wire implemented this campaign; AD-78 filed 2026-08-11 at Campaign OP's gate-2 follow-up (user-directed, verbatim "mark all options that are not implemented now, so I can clearly see what is not implemented") — the shared store-only-caption-dimming convention across the Character/Config option tabs and Configure Keyboard; AD-77 filed 2026-08-11 at the Campaign OP OP3 review-fix round — the client-wide floating-only `gmPanelUI` host divergence (retail also exposes a docked `0x21000017` host) the plan's §5 delegated to the OP3 dual review, scoped to every main panel not just Options; AD-76/AD-75/AD-74 filed 2026-08-11 at Campaign OP slice OP3 — the Options panel's Exit to Character Selection "behaves as Exit Game" adaptation (D6), the Urgent Assistance/Report Abuse dead-URL interface-text short-circuit (D5), and In-Game Help Files' asset-missing inert button (D5); AD-73 filed 2026-08-11 at the Campaign OP OP2 rework — `UiTabPanel`'s dormant-until-`ActivateTabBehavior()` activation model, replacing retail's unconditional per-instance tab-table wiring, so the four already-shipped Type-8 hosts keep their existing controller-owned switching without a double-driver race; AD-72 filed 2026-08-08 at the Slice 5.3 review corrections — `VendorPricing`'s double-precision narrowing versus retail's x87 extended precision, same class as AD-33; AD-65 RETIRED and AD-69 FILED 2026-08-07 at Campaign S S4 — the away-arm now snaps per retail @0x00509c50, while AD-66's byte-confirmed sibling landing is WITHHELD pending #341's measurement-anomaly apparatus, and AD-69 records the seam-frame dist gap the same pass discovered; AD-56 RESTORED 2026-08-07 — the a8a7d64b revert had collaterally DELETED it, the inverse of the AD-55 zombie it also created; its plumb-fall-freeze condition is live again since TS-4’s real retirement at Slice 2B; AD-55 RE-RETIRED 2026-08-07 — its 2026-07-30 retirement at 252e8068 was collaterally resurrected by the a8a7d64b revert of the unrelated TS-4 commit; the code kept the cos(10°) fix throughout; AD-68 filed 2026-08-07 at the #338 closure — the async-residency placeholder mover shape (0.4/0.4 steps + capsule) has no retail counterpart because retail loads synchronously; AD-67 filed 2026-08-07 at the #32 closeout — the narrowed `SetContactPlane` keeps its per-write `ContactPlaneCellId`, which retail writes only at `init_contact_plane`; AD-49 filed 2026-08-06 at the #334 fix — the BSP part-array flood runs its outdoor cell rectangle at seed time rather than only from retail’s residency-gated walk, keeping both registration floods on one residency rule; AD-64 filed 2026-08-05 at the C5b architecture review's D1 fix — AD-60's W2 wire-cell REACHABILITY decision is expressed once per host because the two hosts run parallel non-shared inbound routes; the committed VALUE is single-sourced at `RuntimeEntityObjectLifetime.CommitWireCellRebucket`, and unification is filed as #324; AD-60 CORRECTED the same day — its surviving-channel enumeration presented "the local force path, the missile arm" as exhaustive when the entire no-window host belonged in it; AD-1 RETIRED 2026-08-05, C5a deletion sweep — the legacy outdoor demote/restore lift this row described was `PhysicsEngine.Resolve`'s own body, deleted with zero production callers; AD-42 DELETED 2026-08-04, C4 route 3 — its last surviving citation, the headless portal-arrival resync's two-call Resolve/ResolvePlacement split, was retired by the canonical `RuntimeAcceptedPositionDriveController` portal arm; AD-2 amended same route with the deferred-place timing adaptation, the T8 tolerated-overwrite note, and the leash-anchor nuance; AD-63 filed 2026-08-04, cancelled-park presentation rollback — the rollback restores every presentation registration the park's Withdraw removed EXCEPT the player's selection, which is user intent rather than a projection; AD-62 filed 2026-08-03, C4 route 2 round 2 — a deferred ForcePosition retired without committing is not re-applied and its ack is not sent; AD-61 filed 2026-08-02, C3c review round 1 — the #270 settle compression now covers the local player; AD-59/AD-60 filed 2026-08-02, continuation-executor slice) +## 2. Adaptation (AD) — 67 active rows (AD-87 filed 2026-08-12 at Campaign FA slice FA6 — the allegiance-swear half of the two-bot headless gate is written+wired but `AllegianceGateEnabled=false` (disabled by default), unverified end-to-end over the wire because ACE returns nothing to the `0x001D` swear (ISSUES #384); the FELLOWSHIP two-session gate passed live and ships as FA6's automated proof; AD-86 filed 2026-08-12 at Campaign FA slice FA5, item 4 — ACE's deliberate zeroing of officers/officer titles/MOTD/MOTD-set-by/name-last-set-time/lock/approved-vassal/timeOnline/allegianceAge, dropped past acdream's own parse layer to match retail's own no-widget presentation; AD-85 filed 2026-08-12 at Campaign FA slice FA5 — the Allegiance page's numeric-only fields and its three local confirmation dialogs' unsubstituted-verbatim-or-bare-name text, the same unported `StringInfo` gap AD-81 filed for Fellowship; AD-84 filed 2026-08-12 at Campaign FA slice FA5 — the Swear button's missing "target is a player" gate, the same class as AD-83's Recruit-button gap; AD-83 filed 2026-08-12 at the Campaign FA slice FA4 fix round (mechanism MUST-FIX 5) — the Recruit button's missing "target is a player" gate, previously an inline comment not a row; AD-82 filed 2026-08-12 at the Campaign FA slice FA4 fix round (mechanism MUST-FIX 4/5) — the invented leader-tint/selection-tint colors, the name-text-only row click target, and the page-local (not generic-`UiTemplateListBox`) world→panel selection sync; AD-81 filed 2026-08-12 at Campaign FA slice FA4 — the fellowship roster/create-flow text-composition gap (unported `StringInfo` variable substitution + `ACCharGenData::FormatName`); AD-80 filed 2026-08-12 at Campaign FA slice FA4, D5 — the panel's retail-exact XP-share percentage display versus the currently-targeted ACE server's slightly different actual grant; AD-79 filed 2026-08-12 at Campaign FA slice FA3, D1 — the social panel's Friends/Squelch page action buttons (add/remove friend, appear offline, squelch add/remove/clear) are honest INERT, no wire implemented this campaign; AD-78 filed 2026-08-11 at Campaign OP's gate-2 follow-up (user-directed, verbatim "mark all options that are not implemented now, so I can clearly see what is not implemented") — the shared store-only-caption-dimming convention across the Character/Config option tabs and Configure Keyboard; AD-77 filed 2026-08-11 at the Campaign OP OP3 review-fix round — the client-wide floating-only `gmPanelUI` host divergence (retail also exposes a docked `0x21000017` host) the plan's §5 delegated to the OP3 dual review, scoped to every main panel not just Options; AD-76/AD-75/AD-74 filed 2026-08-11 at Campaign OP slice OP3 — the Options panel's Exit to Character Selection "behaves as Exit Game" adaptation (D6), the Urgent Assistance/Report Abuse dead-URL interface-text short-circuit (D5), and In-Game Help Files' asset-missing inert button (D5); AD-73 filed 2026-08-11 at the Campaign OP OP2 rework — `UiTabPanel`'s dormant-until-`ActivateTabBehavior()` activation model, replacing retail's unconditional per-instance tab-table wiring, so the four already-shipped Type-8 hosts keep their existing controller-owned switching without a double-driver race; AD-72 filed 2026-08-08 at the Slice 5.3 review corrections — `VendorPricing`'s double-precision narrowing versus retail's x87 extended precision, same class as AD-33; AD-65 RETIRED and AD-69 FILED 2026-08-07 at Campaign S S4 — the away-arm now snaps per retail @0x00509c50, while AD-66's byte-confirmed sibling landing is WITHHELD pending #341's measurement-anomaly apparatus, and AD-69 records the seam-frame dist gap the same pass discovered; AD-56 RESTORED 2026-08-07 — the a8a7d64b revert had collaterally DELETED it, the inverse of the AD-55 zombie it also created; its plumb-fall-freeze condition is live again since TS-4’s real retirement at Slice 2B; AD-55 RE-RETIRED 2026-08-07 — its 2026-07-30 retirement at 252e8068 was collaterally resurrected by the a8a7d64b revert of the unrelated TS-4 commit; the code kept the cos(10°) fix throughout; AD-68 filed 2026-08-07 at the #338 closure — the async-residency placeholder mover shape (0.4/0.4 steps + capsule) has no retail counterpart because retail loads synchronously; AD-67 filed 2026-08-07 at the #32 closeout — the narrowed `SetContactPlane` keeps its per-write `ContactPlaneCellId`, which retail writes only at `init_contact_plane`; AD-49 filed 2026-08-06 at the #334 fix — the BSP part-array flood runs its outdoor cell rectangle at seed time rather than only from retail’s residency-gated walk, keeping both registration floods on one residency rule; AD-64 filed 2026-08-05 at the C5b architecture review's D1 fix — AD-60's W2 wire-cell REACHABILITY decision is expressed once per host because the two hosts run parallel non-shared inbound routes; the committed VALUE is single-sourced at `RuntimeEntityObjectLifetime.CommitWireCellRebucket`, and unification is filed as #324; AD-60 CORRECTED the same day — its surviving-channel enumeration presented "the local force path, the missile arm" as exhaustive when the entire no-window host belonged in it; AD-1 RETIRED 2026-08-05, C5a deletion sweep — the legacy outdoor demote/restore lift this row described was `PhysicsEngine.Resolve`'s own body, deleted with zero production callers; AD-42 DELETED 2026-08-04, C4 route 3 — its last surviving citation, the headless portal-arrival resync's two-call Resolve/ResolvePlacement split, was retired by the canonical `RuntimeAcceptedPositionDriveController` portal arm; AD-2 amended same route with the deferred-place timing adaptation, the T8 tolerated-overwrite note, and the leash-anchor nuance; AD-63 filed 2026-08-04, cancelled-park presentation rollback — the rollback restores every presentation registration the park's Withdraw removed EXCEPT the player's selection, which is user intent rather than a projection; AD-62 filed 2026-08-03, C4 route 2 round 2 — a deferred ForcePosition retired without committing is not re-applied and its ack is not sent; AD-61 filed 2026-08-02, C3c review round 1 — the #270 settle compression now covers the local player; AD-59/AD-60 filed 2026-08-02, continuation-executor slice) Recent retirements: AD-3/AD-4 retired 2026-07-31 by exact active/per-candidate visible-cell availability, full-catalog containment-root validation, and the diff --git a/docs/plans/2026-08-11-fellowship-allegiance-campaign.md b/docs/plans/2026-08-11-fellowship-allegiance-campaign.md index dd355ced..787e937c 100644 --- a/docs/plans/2026-08-11-fellowship-allegiance-campaign.md +++ b/docs/plans/2026-08-11-fellowship-allegiance-campaign.md @@ -6,7 +6,25 @@ > read the cited sections before coding; every table this plan references is > committed there in full. -**Status: ACTIVE — planned 2026-08-11. FA1 CLOSED 2026-08-12; FA2 CLOSED +**Status: CODE-COMPLETE 2026-08-12 — all six slices landed and reviewed +(FA7 closeout done). The retail four-tab social panel +(Friends / Allegiance / Fellowship / Squelch, host slot `0x1000018F`, +id 12) mounts via the OP3 recipe; the Fellowship and Allegiance pages are +live end-to-end (real wire, Runtime-owned state, F3/F4 open paths); the +fellowship two-session flow is PROVEN over the live wire (FA6's automated +bot-vs-ACE gate PASSED — the recruited bot's own `RuntimeFellowshipState` +flips). Each slice went through dual-lens Opus review → fix round → +narrow re-review; three design calls were corrected in-flight with dated +addenda (D2 reset-lifetime, D6/D7 server-side invite filter, the CF-1 +`0x001F` subscription). OWED: the user's connected gates over §FA3-§FA6 +of `docs/research/2026-08-12-campaign-fa-test-script.md` (several +`[TWO-CLIENT]` steps), and ISSUES #384 — the allegiance-swear bot gate is +deferred/disabled because ACE returns nothing to the `0x001D` swear +(needs ACE-console disambiguation; the swear CODE is done+reviewed, only +its automated two-session proof is unverified; register AD-87). Final +full suite 13,304/4/0.** + +**History: planned 2026-08-11. FA1 CLOSED 2026-08-12; FA2 CLOSED 2026-08-12 (dual APPROVE-WITH-FIXES → fix round `4272ad0e`/`ded23067`/ `ed8b3ec9` → narrow re-review CLOSED `cc1a319c`, no reopen; CF-1 folded into the corrected FA5 slice row). FA3's dual-lens review landed