docs(rfc): mcp session trace as the lifecycle event log's first emitter - #7629
Conversation
Opus 4.8 Review — ✅ no blocking findingsReviewed Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
Design Review (Fable 5) — ✅ PASSDesign-level review of Docs-only PR verified: the events package ( Design-Verdict: PASS Deliberate, disclosed, and reversible: settles three package precedents through one grounded emitter, with rollback-by-deletion and the #7366 dependency stated in the index. Suggestions
[DESIGN-REVIEWED] 95d461c |
GPT 5.6 Review — ✅ no blocking findingsGPT 5.6 completed its review of This comment is updated in place on each push. Review detailsFINDING -- docs/request-for-change/rfc-mcp-lifecycle-event-log.md:103 -- False positive or not applicable? A repository writer can comment: |
Problem
The lifecycle event log (
src/kiro_crew/events/, #3808 / #7386) is a validated schema with nolive writer. Its own contract defers the ordering model and the writer to "the first emitter",
and the backfill validator defers the write path to "the first consumer that folds the log".
Whoever emits first therefore sets package-level precedent for every later domain — ordering
scope, writer shape, and failure posture — and today those decisions would be made ad hoc inside
whatever feature PR happens to arrive first.
Separately, #7366's MCP session report leaves three structural residuals: history dies with the
session (a reset's previous generation is unrecoverable, and ACP cannot be re-asked), report
invalidation rests on a projector identity check plus seven courtesy clear call sites, and
nothing about MCP registration is traceable after the fact.
Why it matters
The task-manager and context-panel surfaces named in #3808 will inherit whatever the first
emitter establishes. Deliberate precedents reviewed once beat accidental ones re-litigated per
domain. And the MCP trace itself answers a real operator question — which server failed, when,
across which session generations — that no store can answer today.
Fix
A design-of-record RFC in
docs/request-for-change/, no implementation code. It settles threepackage-level precedents — per-key monotonic
seqassigned by a single gateway-owned writer(global order deliberately unpromised); one append path to
<data_home>/events/lifecycle.jsonlrotated by the existing
jsonl_utilhelper; fail-open posture with the SEL contrast statedonce (an emitter needing fail-closed semantics belongs in SEL) — and exercises them through one
concrete emitter/consumer pair: five
mcp/kinds emitted from #7366's existing capture points(downstream of its ownership predicate and redaction, so attribution guarantees are inherited),
folded into a per-slot MCP trace with labeled prior-generation history. Three additive phases;
rollback at any phase is deletion.
The
docs/request-for-change/README.mdindex gains the corresponding row, audited against1ee69f225per that file's convention.Tests
None — documentation only.
bash scripts/docs-lint.shpasses (252 files scanned, indexconsistency enforced); the brand gate passes on the added lines.
Why no screenshot: documentation-only change; no user-visible surface is touched.
No linked issue: design proposal originating from review of #7366's residual gaps; the RFC
itself is the tracking artifact until accepted.