epiphany(board): E-CONTRACT-NO-SERIALIZE — contracts compile types, membranes serialize#415
Conversation
…embranes serialize Records the architectural vow (user-stated via the medcare-rs consumer session): a contract / BBB-tier crate is a compile-time handshake (shared types + traits), not an outer serialization boundary. JSON emission belongs at the membrane, never on the contract surface. Names the concrete smell: `JsonlAuditSink` + `UnifiedBridge::with_jsonl_audit` in lance-graph-callcenter (a contract-tier crate) emitting JSONL. The `AuditSink` trait + `UnifiedAuditEvent` type are contract-appropriate; the concrete JSON sink should relocate to a membrane/sink crate. Build-time serde codegen (manifest.yaml -> generated types in build.rs) is fine. APPEND-ONLY board hygiene: prepended dated entry, no edits to prior entries. https://claude.ai/code/session_018FqA8TfgRBHy8zF92kx4TW
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughA new architectural epiphany entry was appended to the decision board documenting the principle that contract crates define compile-time type/trait handshakes, not serialization boundaries. JSON emission belongs at the membrane layer. The entry identifies a specific code smell in ChangesArchitectural Epiphany Documentation
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
…serialize-refine epiphany(board): E-CONTRACT-NO-SERIALIZE-2 — correct #415, the audit event stays inside
…serialize epiphany(board): E-CONTRACT-NO-SERIALIZE — contracts compile types, membranes serialize
…event stays inside #415 landed E-CONTRACT-NO-SERIALIZE with "serialize at the membrane" — the user sharpened it ("why should the audit event go outside?"): audit is not membrane traffic at all. It is a witness (merkle -> SPO + Lance tombstone), examined in place by the query engine; the merkle chain IS the tamper-evidence. No JSON by default; the sink is inner, not membrane; off-box copies are an infra concern, not the sink's standing behavior. Board is append-only: prepends a correction entry, leaves the prior entry intact. §1 (contracts compile types, never serialize) stands. https://claude.ai/code/session_018FqA8TfgRBHy8zF92kx4TW
…serialize-refine epiphany(board): E-CONTRACT-NO-SERIALIZE-2 — correct #415, the audit event stays inside
Summary
Prepends an APPEND-ONLY board entry E-CONTRACT-NO-SERIALIZE recording the architectural vow surfaced via the medcare-rs consumer session:
Names the concrete smell it targets:
JsonlAuditSink+UnifiedBridge::with_jsonl_auditliving inlance-graph-callcenter(a contract-tier crate) emitting JSONL. TheAuditSinktrait +UnifiedAuditEventtype stay; the proposed direction is to relocate the concrete JSON sink into a membrane/sink crate. Build-time serde codegen (build.rsparsingmanifest.yaml→ generated types, #412) is explicitly not a violation — that IS "compile types."Board-hygiene: prepended a dated entry, no edits to prior entries. No code change — this is a recorded finding/vow for the next session that touches the audit-sink surface. Cross-references medcare-rs
CLAUDE.mdcommitment #7.Test plan
https://claude.ai/code/session_018FqA8TfgRBHy8zF92kx4TW
Generated by Claude Code
Summary by CodeRabbit