acdream/src
Erik 5244e46daa feat(headless): FA6 finalize — ship fellowship-only, defer allegiance behind a flag
Six live runs against local ACE (testaccount/+Acdream as Leader,
testaccount2/+Horan as Recruit) converged on a clean split:

- FELLOWSHIP two-session gate PASSES live, reproduced in three separate
  runs. The decisive cross-session assertion (the Recruit bot's own
  RuntimeFellowshipState — a separate process's canonical Runtime owner,
  not the Leader's local echo — flipping IsInFellowship=true,
  MemberCount=2, LeaderGuid=<Leader>) holds every time. This ships as the
  automated gate.
- ALLEGIANCE swear never completes: ACE returns nothing at all to
  Event_SwearAllegiance (0x001D) — no 0x0274 confirmation, no 0x0020 tree
  update, no WeenieError — even at 0.005 m separation (run6's distance
  diagnostic ruled out retail's 2.0 m swear-distance gate). Ambiguous
  between an FA1 wire-builder defect, an ACE-side rule this test pair
  trips, or a drop; disambiguating needs an ACE server console this
  harness doesn't have. Filed as docs/ISSUES.md #384 and
  docs/architecture/retail-divergence-register.md AD-87.

AllegianceGateEnabled (static readonly, not const, to avoid a CS0162
unreachable-code build error from branching on a literal) gates every
allegiance-dependent stage in BOTH policy classes off by default:
Leader's WaitForVassal (skipped straight to the reconnect+teardown that
only need fellowship state), Recruit's Swear/WaitSwornSeed/Break/
WaitBrokenSeed (same). All of that code stays fully written and wired —
flipping the flag re-enables it for a follow-up investigation once #384
closes. WaitReconnectReseed on both sides now asserts fellowship-only
re-seeding when the flag is off, preserving the reconnect-idempotence
proof independent of the allegiance blocker.

The two live-run diagnostics added while investigating #384 (the
confirmation-arrival log line in HeadlessSessionHost's
OnConfirmationRequest, and LogDistanceToPatron in the Recruit policy) are
kept as permanent, clearly-labeled evidence for whoever reopens #384 —
neither is "TEMP, strip later."

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 10:23:59 +02:00
..
AcDream.App fix(ui): FA5 mechanism-review SF-1 — remove the invented offline-vassal name-grey 2026-08-12 09:07:58 +02:00
AcDream.Bake feat(content): bake and read flat collision assets 2026-07-25 15:22:08 +02:00
AcDream.Cli perf(diag): complete trustworthy Slice A capture tooling 2026-07-24 12:46:51 +02:00
AcDream.Content fix(physics): S2 — static publication emits authored Spheres as Spheres (AP-155 narrowed) 2026-08-07 08:07:02 +02:00
AcDream.Core feat(runtime): FA4 -- fellowship roster enumeration + Social selection source 2026-08-12 04:40:19 +02:00
AcDream.Core.Net fix(net,runtime): FA2 fix-round SHOULD-FIX -- fellowship mechanism parity, lookup reuse, router test, checkpoint defaults 2026-08-12 02:17:56 +02:00
AcDream.Headless feat(headless): FA6 finalize — ship fellowship-only, defer allegiance behind a flag 2026-08-12 10:23:59 +02:00
AcDream.Plugin.Abstractions feat(ui): centralize retail selection state 2026-07-11 00:51:20 +02:00
AcDream.Plugins.Smoke feat(app): wire IGameState+IEvents into Program and SmokePlugin 2026-04-10 20:31:50 +02:00
AcDream.Runtime fix(headless): FA6 — name-match the Recruit bot instead of nearest-any-player 2026-08-12 09:53:46 +02:00
AcDream.UI.Abstractions refactor(settings): OP9 — retire the dead F11 settings surface + fully-superseded GameplaySettings 2026-08-11 13:18:53 +02:00