acdream/tests/AcDream.Runtime.Tests
Erik fe1e68e5fe feat(quest): QT6 — plugins can read the contract tracker
The last piece of QT6's own scope: r10-quest-dialogs.md §11.6's contract half.
IGameState.Contracts exposes what the client structurally knows about quests,
which — per that same research — is the tracker and nothing else. The rest of
§11.6 (chat stream, tells, give, use, confirmations) is other features and
stays out of this campaign.

A pull-through source rather than a pushed mirror. Contracts change rarely and
are already owned canonically, so a second copy would only be a thing to keep
in step; reading through means a plugin cannot observe a stale list.

Both hosts implement it. The headless one carries contract id, stage and
progress but no names — a bot has no dat access — because losing the TEXT is
expected while losing the QUEST would leave a bot silently unable to see what
it is on. Same rule covers a contract the installed dat has never heard of: it
still projects, with empty text and a correct status, rather than vanishing.

The interface member is defaulted so a host predating this campaign still
satisfies IGameState.

Two lazy catalog loads exist (the panel's and this one) rather than one shared
instance. That is deliberate: threading a shared ContractCatalog through three
composition records to avoid reading a 322-row immutable table at most twice
per session would be plumbing for no correctness or performance gain, and the
comment at the call site says so.

Campaign QT is complete; the connected user gate is owed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 15:22:22 +02:00
..
CharGen fix(chargen): Campaign CC CC5 review fix round — F1-F14 2026-08-16 01:13:52 +02:00
Chat feat(chat): CT-B2 — "/r " expands to a tell at whoever last told you 2026-08-21 08:10:39 +02:00
Entities fix(review): close the C5b architecture-review findings (D2/D3/D4, L1-L5, S1) 2026-08-05 22:08:46 +02:00
Gameplay feat(quest): QT6 — plugins can read the contract tracker 2026-08-21 15:22:22 +02:00
Physics test: stabilize load-sensitive release contracts 2026-08-18 11:50:23 +02:00
Session feat(session): the in-world logoff — LogOut animation, reverse wormhole, live return to character select 2026-08-17 14:02:40 +02:00
Support fix: retail text and golden-string tests must not follow the machine's locale 2026-08-19 19:56:09 +02:00
World feat(session): the in-world logoff — LogOut animation, reverse wormhole, live return to character select 2026-08-17 14:02:40 +02:00
AcDream.Runtime.Tests.csproj build: make release restore reproducible 2026-08-18 10:29:00 +02:00
GameRuntimeContractTests.cs test: replace campaign labels with behavior names 2026-08-18 12:25:00 +02:00
GameRuntimeTests.cs feat(quest): QT3 — the contract tracker becomes state, and the events get routed 2026-08-21 14:46:53 +02:00
NoWindowGameRuntimeHostTests.cs fix(chat): CH1 review fixes — sbb-idiom channel catch-all, command-output typing 2026-08-09 16:03:13 +02:00
packages.neutral.lock.json build: make release restore reproducible 2026-08-18 10:29:00 +02:00
RuntimeDependencyBoundaryTests.cs feat(platform): Campaign LA LA0 — extract ApplicationPathSet to AcDream.Platform 2026-08-14 15:19:02 +02:00
RuntimeGenerationResetTests.cs fix(net,runtime): FA2 fix-round MUST-FIX -- allegiance clears at reset, 0x027C stops seeding 2026-08-12 02:17:04 +02:00
RuntimeSimulationFixtureHostTests.cs fix: retail text and golden-string tests must not follow the machine's locale 2026-08-19 19:56:09 +02:00