feat(router): Task 3.2 — NarrationTrigger + buildNarrationContext + RouterFacade.narrate

- Add NarrationTrigger(kind, instruction) model to core:router
- Add RouterContextBuilder.buildNarrationContext: minimal ContextPack
  (system + workflow status + L2 + trigger instruction); excludes
  conversationHistory and L3 recalled memory
- Add RouterFacade.narrate: emits RouterNarrationEvent with content,
  latencyMs, tokensUsed; skips event on blank inference; never writes
  ChatTurnEvent or l3MemoryStore.store
- Add RouterNarrationTest covering all acceptance criteria
- Add narrate default to RouterContextBuilder interface so existing
  anonymous test stubs compile without a stub override
This commit is contained in:
2026-06-03 15:52:08 +04:00
parent 432226c544
commit 38b007a6cd
5 changed files with 532 additions and 0 deletions
@@ -647,6 +647,8 @@ class RouterFacadeTest {
object : RouterFacade {
override suspend fun onUserInput(sessionId: SessionId, input: String, mode: ChatMode): RouterResponse =
impl.onUserInput(sessionId = sessionId, input = input, mode = chatMode)
override suspend fun narrate(sessionId: SessionId, trigger: com.correx.core.router.model.NarrationTrigger) =
impl.narrate(sessionId = sessionId, trigger = trigger)
}
}