Part of #7640. One conversation per person, kept in the forge's database, so talking to the forge never depends on a session that can stall.
Done when:
[ ] A migration adds conversation (id, user_id, claude session id, created/updated) and conversation_turn (id, conversation_id, role person|agent|tool|confirm, text, created_at)
[ ] src/core/conversations.ts opens or returns the person's conversation, appends a turn, and pages turns newest last; plain data in and out
[ ] A person reads only their own conversation; another person's id is not_found (test)
[ ] A test writes turns, reopens the database and reads them back in order
Part of #7640. One conversation per person, kept in the forge's database, so talking to the forge never depends on a session that can stall.
Done when:
conversation(id, user_id, claude session id, created/updated) andconversation_turn(id, conversation_id, role person|agent|tool|confirm, text, created_at)src/core/conversations.tsopens or returns the person's conversation, appends a turn, and pages turns newest last; plain data in and outFiles: src/core/conversations.ts, src/core/migrations/<new>.ts, test/conversations.test.ts
Risks: Turn text can be long: cap it at the boundary (e.g. 20,000 chars) and say so.
Fits: a builder