- Add dialogue prompt file writing for audit/debugging - Update README install instructions - Add new RFCs (0053, 0055-0059, 0062) - Add recorded dialogues and expert pools - Add ADR 0018 dynamodb-portable-schema - Update TODO with hook configuration notes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.7 KiB
[PERSPECTIVE P01: The developer who touches this code tomorrow is the missing stakeholder]
Every Round 0 expert argued from the perspective of system architecture, but nobody examined who actually calls these storage functions today. The current alignment_db.rs exposes 30+ free functions taking &Connection directly -- get_dialogue(conn, id), register_perspective(conn, ...), create_round_with_metrics(conn, ...) -- with zero trait indirection. RFC 0053's DialogueStore trait exists only on paper. The real migration cost is not DynamoDB-vs-PostgreSQL; it is refactoring every call site in dialogue.rs (and its 27 imports from alignment_db) away from bare rusqlite::Connection. Until that refactoring is done, neither RFC 0058 nor a hybrid architecture can ship, and that refactoring effort is identical regardless of which backend wins. The supersession debate is premature because the prerequisite -- RFC 0053's trait boundary actually existing in code -- has not been started.
[PERSPECTIVE P02: DynamoDB Local's test fidelity gap is the silent third option nobody priced] Scone called the RFC 0051 schema a "legitimate mismatch" for DynamoDB, and Strudel identified the encryption parity gap, but neither quantified the DynamoDB Local behavioral divergence cost. DynamoDB Local does not enforce IAM conditions, does not simulate throttling, returns different error shapes for TransactWriteItems conflicts, and does not support DynamoDB Streams triggers -- meaning the audit hash chain's append-only guarantee (enforced via condition expressions in production) is untestable locally. If the parity promise is "the code you test is the code you ship," the honest version is: "the code you test, minus IAM, minus throttling, minus conditional-write failure modes, is the code you ship."
[TENSION T01: Prerequisite inversion] The panel is debating which storage backend to select, but RFC 0053's trait boundary -- the mechanism that makes the backend swappable -- does not exist in the codebase yet, making the selection decision load-bearing on a foundation that has not been poured.
[REFINEMENT: Croissant's trait-as-resolution is correct in principle but absent in fact]
Croissant's P01 that RFC 0053 makes the backend a "pluggable detail" is architecturally sound, but the current codebase has 30+ direct rusqlite::Connection call sites with no trait indirection, so the plug does not yet exist to plug into.
[CONCESSION: Strudel's schema reframing is the deepest insight in Round 0] Strudel is right that the relational DNA of RFC 0051 is the root cause; an event-sourced redesign would dissolve most tensions in Cluster A, though it would also reset the implementation clock to zero.