One source chronology in Dave's provider context
The compiled 2-10 lawn exposed duplicate context: the same current events were sent under lawn.sourceStory.events, story.sourceStory.events, and the richer story.observedEvents. The last copy already contains every original event field plus its reached meaning and available original dialogue. This makes long scenes needlessly larger without giving Dave additional knowledge.
Provider message assembly now sends the live source identity/state once in story.sourceStory, with the full chronological events once in story.observedEvents. It removes the two redundant raw lists. Repeated routine executions, interrupted effects, source choices and all reached lines remain. The request used for action validation, billing and notebook persistence is not mutated. Earlier memories, lorebook, persona, model settings, plant conversations and classic lawn facts retain their existing handling.
Measured from the actual EN 2-10 compiled capture with an empty notebook:
- Scene context: 25,525 to 17,796 UTF-8 bytes.
- Total assembled Dave messages: 49,187 to 41,458 bytes (15.7% smaller).
- No provider call is needed for this deterministic comparison. This is not a measured model-latency improvement or proof that the model never invents prose.
Regression first failed on the duplicate source history, then passed with every event and its order intact. Choice wording/native values, unchanged classic facts and nonmutation are also checked. Full repository build (5 tasks), typecheck (8 tasks), and all 393 isolated NPC tests pass. An existing service test now asserts the same loan event in its single interpreted location. Receipts: output-source-projection-build.log, output-source-projection-typecheck.log, and output-source-projection-tests-final.log.
PR237 merged as e95a73d872e68f769d47e1a2717689580030091a and Railway deployment 2a5fb5b7-fbc5-48ae-aff8-c8e6af402866 succeeded on September 21. The public game remains 793e03343a; this is a host-only message-assembly change. Both Actions runs reported startup failure with zero jobs, not passing CI. All changed game-NPC code is already excluded from the OSS export.
