docs: FA4 review — correct D6/D7 (server-side invite filter) + record D8 account/proximity

D6 asserted the client consumes IgnoreFellowshipRequests/
FellowshipAutoAcceptRequests on the invite path; the FA4 mechanism review
(913e35cd MUST-FIX 2) byte-verified retail reads NEITHER bit client-side
(Handle_Character__ConfirmationRequest @0x005640A0, RecvNotice_
FellowshipRequest @0x00490880, MakeFellowRequestDialog @0x00490620) — ACE
filters both server-side. Same class as the D2 reset-lifetime correction.
D6/D7 corrected in-place with dated addenda: the client-side intercept is
removed, the invite dialog always shows, and the two un-dims revert
(dimmed 31->33). D8 records the user-provided second account
(testaccount2/testpassword2) and the recruit-proximity requirement.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-12 07:06:22 +02:00
parent e202fbef6e
commit e6d97516e5

View file

@ -150,22 +150,48 @@ served by the single inbound wiring site.
acdream's `RetailDialogFactory`/`GameplayConfirmationController` acdream's `RetailDialogFactory`/`GameplayConfirmationController`
already match the constants and its own comment names these types as already match the constants and its own comment names these types as
awaiting FA. The missing third message of the triple is completed in awaiting FA. The missing third message of the triple is completed in
FA1. The invite-receive path consumes `IgnoreFellowshipRequests` / FA1. ~~The invite-receive path consumes `IgnoreFellowshipRequests` /
`FellowshipAutoAcceptRequests` (auto-decline / auto-accept before the `FellowshipAutoAcceptRequests` (auto-decline / auto-accept before the
dialog), giving those two dimmed rows their real consumers. dialog), giving those two dimmed rows their real consumers.~~ **[FA4
mechanism-review correction, 2026-08-12 (`913e35cd` MUST-FIX 2): retail's
client does NOT read either option bit on the invite/confirmation path —
byte-verified across `Handle_Character__ConfirmationRequest @0x005640A0`,
`RecvNotice_FellowshipRequest @0x00490880`, and `MakeFellowRequestDialog
@0x00490620` (whose ONLY guard is `m_fellowRequestContext`), plus a
whole-file sweep of both accessors: zero option reads anywhere on the
path. ACE filters both bits SERVER-SIDE. So there is NO client-side
auto-response: the fellow-invite dialog (type 4) always shows through the
generic `GameplayConfirmationController`, exactly as retail does. The
client-side intercept FA4 shipped is removed. `IgnoreFellowshipRequests`
defaults TRUE, so a client-side intercept would additionally have
silently swallowed real invites against any server that didn't filter —
a real hazard, not just a fidelity nit.]**
- **D7 — dimming resolves per lane-C/D verdicts.** Un-dim (with the AD-78 - **D7 — dimming resolves per lane-C/D verdicts.** Un-dim (with the AD-78
conformance-test flow) exactly the rows that gain consumers: conformance-test flow) exactly the rows that gain consumers:
`IgnoreFellowshipRequests`, `FellowshipAutoAcceptRequests` (D6), and ~~`IgnoreFellowshipRequests`, `FellowshipAutoAcceptRequests` (D6), and~~
the fellowship share rows consumed by the create flow/panel display. the fellowship share rows consumed by the create flow/panel display.
`IgnoreAllegianceRequests` and `DisplayAllegianceLogonNotifications` `IgnoreAllegianceRequests` and `DisplayAllegianceLogonNotifications`
stay dimmed PERMANENTLY and faithfully — retail's own client has no stay dimmed PERMANENTLY and faithfully — retail's own client has no
consumer for either (pure server-side filters); AD-78's register row consumer for either (pure server-side filters); AD-78's register row
gains an addendum saying so. gains an addendum saying so. **[FA4 mechanism-review correction,
2026-08-12: following D6's correction, `IgnoreFellowshipRequests` and
`FellowshipAutoAcceptRequests` ALSO stay dimmed PERMANENTLY and
faithfully — they are pure server-side filters exactly like the two
allegiance bits, with no client consumer. FA4's un-dim of these two
REVERTS (dimmed count 31 → 33 of 50); only the fellowship SHARE rows the
create flow/panel genuinely reads stay un-dimmed. AD-78's addendum names
the corrected set.]**
- **D8 — bot-vs-ACE gates are first-class.** A second ACE - **D8 — bot-vs-ACE gates are first-class.** A second ACE
account/character (user-provided when FA6 arrives) + a account/character + a role-discriminated headless policy let one bot
role-discriminated headless policy let one bot recruit/swear at recruit/swear at another, with the decisive assertion on the RECRUITED
another, with the decisive assertion on the RECRUITED bot's own bot's own snapshot. All six FA option names are already tier-1
snapshot. All six FA option names are already tier-1 allow-listed. allow-listed. **[User-provided 2026-08-12: the second account is
`testaccount2` / `testpassword2` on the same local ACE. RECRUIT REQUIRES
PROXIMITY — the recruiting character must be quite close to the recruit
target, so the FA6 bot gate must position the two bot characters near
each other (same landblock/adjacent) BEFORE the recruit command, or the
recruit fails; the FA4 §FA4 [TWO-CLIENT] recruit step notes the same for
the manual path.]**
- **D9 —** ~~the 8 missing fellowship WeenieError strings are added in FA1 - **D9 —** ~~the 8 missing fellowship WeenieError strings are added in FA1
(two are on ACE's live send paths today; all resolve from the DAT (two are on ACE's live send paths today; all resolve from the DAT
string tables, never invented).~~ **[FA1 fix-round addendum, 2026-08-12: string tables, never invented).~~ **[FA1 fix-round addendum, 2026-08-12: