acdream/tests
Erik 0f1660d6ea feat(chat): CT-B1 — bound the transcript by retail's character budget
Campaign CT slice B1.

CORRECTION TO THE PLAN: this slice was written as "the transcript grows for the
life of the session — a slow leak". That was wrong, and the plan said it
because I read the retail-side finding and inferred our side without checking.
ChatLog has always been bounded (ConcurrentQueue, maxEntries default 500, with
a dequeue loop in Append). There was no leak.

The real gap is the UNIT. Retail bounds the rendered transcript by CHARACTERS —
0x2710, beheaded toward 0x1D4C at a newline boundary — while we bounded the
model by messages. Two different things: a window of 500 messages is far more
scrollback than 10,000 characters, and the message cap is a safety limit on the
log rather than a display rule.

So the budget is applied where retail applies it: on the rendered window, not
the model. ChatLog's entry cap stays as the model-level bound.

Two deliberate simplifications, both registered as CT-1 rather than left
implicit:

  - ONE threshold, not retail's two. The hysteresis exists to stop retail
    re-trimming an accumulating buffer on every append; we rebuild the visible
    list each time, so there is nothing to damp, and a second threshold would
    only make the oldest visible line jump around as messages arrive.
  - Whole-line cutting rather than a newline search near an offset — our unit
    already IS the line, which is what retail's newline preference is for.

Filtered-out lines deliberately do not consume budget: a line this window
filters out is not in retail's buffer at all, so counting it would mean turning
a filter OFF silently shortened the visible history.

Solution builds clean; full hermetic gate green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 08:06:18 +02:00
..
AcDream.App.Tests feat(chat): CT-B1 — bound the transcript by retail's character budget 2026-08-21 08:06:18 +02:00
AcDream.Bake.Tests test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
AcDream.Cli.Tests build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Content.Tests fix(world): honour SetOmega — the birds and butterflies fly again 2026-08-21 05:42:59 +02:00
AcDream.Core.Net.Tests fix(chat): announce enchantment expiry; stop double-printing tells 2026-08-21 06:11:33 +02:00
AcDream.Core.Tests feat(chat): CT-A2 — parse retail's inline chat tag markup 2026-08-21 07:23:07 +02:00
AcDream.Core.Tests.Fixtures.HelloPlugin build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Headless.Tests fix(tests): the launcher/headless command-line contract needs executable stubs on Linux 2026-08-19 21:53:19 +02:00
AcDream.Launcher.Core.Tests feat(plugins): enforce apiVersion; launcher plugins default ON with "none" opt-out 2026-08-20 21:28:04 +02:00
AcDream.Launcher.Core.Tests.Fixtures.ConsolelessSupervisorParent build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Launcher.Core.Tests.Fixtures.ConsoleSignalChild build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Launcher.Core.Tests.Fixtures.InstallLeaseHolder build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Launcher.Tests feat(launcher): LU8 — logging in IS the character refresh; put Play above the fold 2026-08-19 20:48:15 +02:00
AcDream.Platform.Tests build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Plugin.Tests.Fixtures.HostPlugin build: make release restore reproducible 2026-08-18 10:29:00 +02:00
AcDream.Plugins.MossTank.Tests feat: regen buffs, wand aura, spellbook assess, indicator press flash 2026-08-20 20:38:28 +02:00
AcDream.Runtime.Tests fix(chat): announce enchantment expiry; stop double-printing tells 2026-08-21 06:11:33 +02:00
AcDream.UI.Abstractions.Tests feat(chat): CT-A3 — a chat line keeps the identity of who said it 2026-08-21 07:27:14 +02:00
Fixtures/campaign-la feat(plugins): enforce apiVersion; launcher plugins default ON with "none" opt-out 2026-08-20 21:28:04 +02:00
Directory.Build.props fix: retail text and golden-string tests must not follow the machine's locale 2026-08-19 19:56:09 +02:00
TestCultureInitializer.cs fix: retail text and golden-string tests must not follow the machine's locale 2026-08-19 19:56:09 +02:00