Repository navigation
Send approved project lessons to Room rounds (#174) - #250
Merged
Merged
Conversation
`room round` (foreground and --detach) and `start` now list the project's approved lessons before a round and take --skip-lesson / --no-lessons; `start` also forwards them to its single-agent run. The CLI resolves them and hands (id, text) pairs to RoomCoordinator.run_round(lessons=); the coordinator never opens the board. A detached worker receives exactly the listed pairs over a second anonymous inherited fd and refuses a malformed payload. Every member gets the lessons each round, after the untrusted peer checkpoint and right before the task. Checkpoint excerpts are budgeted around them and memory context gives way first; prompts without lessons are byte-identical to before. A round prompt that leaves no room for them is caught in the preview with the coordinator's own fit check. The round conversation record moves to schema_version 2 with the selected lesson ids and each member's delivery; readers accept v1. compare, export and the TUI show them. A resumed conversation keeps what earlier rounds sent it, so a round that would resume one in a room with earlier lessons adds a note about --fresh-session. TUI-launched rounds send no lessons yet and show the same note. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #245 (#174 PR 2): Room rounds now receive the project's approved lessons. #174 stays open for the TUI work (recording a verdict, promoting and choosing lessons from the TUI) and goal-scoped lessons in rooms.
What changes
Showing and choosing, before the round
room round(foreground and--detach) andstartlist the lessons a round will use, where each came from, and take--skip-lesson ID(repeatable) and--no-lessons.startalso forwards both flags to its single-agent run, including the compare-to-single fallback; with--trialthey are refused.cli._show_round_lessons, sharing_show_lessonswithrun, whose output is unchanged). The coordinator never opens the board: it receivesRoundLesson(id, text) pairs throughRoomCoordinator.run_round(lessons=).rooms.round_lessons_fit. Only a task within about 4 KB of the size limit leaves no room; then the preview names them as left out and none are sent, so it never promises a delivery that cannot happen.--lessons-fd), staged like the prompt fd: unlinked before writing, full-write loop, rewound. Lesson text never reaches argv. A staging or spawn failure closes both fds and removes the config snapshot. The worker refuses a malformed payload,nullincluded, before any round state changes, and one cleanup scope owns both fds and the snapshot.In the prompt
--- APPROVED PROJECT LESSONS ---. When lessons are present, the checkpoint preamble says to follow the approved lessons and the current task after the separators, instead of "only the task".candidates/omittedmetadata together with the prompt.pre_188fixture still passes).Recording and showing
rounds.conversation_jsonmoves toschema_version2:lessons.selected(canonical uuids, each once) plus each member'slessonsdelivery (included/dropped/none). The shared validator keeps strict per-version key sets and accepts v1 records.selected == []iff every member isnone. An older syncmill reports a v2 record as unreadable (noted in CHANGELOG).room compare/room export/ TUI Rooms evidence: the round line lists the selected ids and per-candidate deliveries;nullfor v1 rounds, distinct from a v2 round's[]. JSON addsrounds[].conversation.lessonsandcandidates[].conversation.lessons.History in resumed conversations
RoomCoordinator.resumes_with_lesson_history(read-only) is true when the round would resume at least one member's stored session in a room where an earlier v2 round selected lessons. The CLI then adds one note pointing to--fresh-session, and the TUI shows a notify naming the fresh lineage and the CLI flag. The note names no lesson and claims nothing about what a conversation holds. It reflects the room as of the listing, a limit the guides state.Design and review
nullworker payload accepted as "no lessons" (Major), plus two doc wordings.lessons none/not recordedin every compact TUI candidate cell. That cell is already a summary that leaves out fields such as candidate ids, and the Details view (conversation_label) carries the full state, so the cell shows lessons only when they were included or dropped.Tests
tests/test_room_lessons.py(61 tests):round_lessons_fitbounds andround_lessonsvalidation;resumes_with_lesson_historycases;startforwarding and the--trialrefusal.tests/test_tui.py: the launch note, and that a failed history read after launch is never shown as an error._recordchecks the v2 lesson fields;lessons: null/ "not recorded";startfakes gained a board-off config and the new coordinator methods.docs/assets/tui/11-rooms-details.svgand12-rooms-compare.svg(the round conversation label grew).startforwarding and thenullguard.test_discovery_reads_known_files_and_never_runs_themfails on case-insensitive filesystems, onmaintoo.ruff check .passes.Docs
CLAUDE.md, CHANGELOG,
docs/user-guide.md+.ko.md(Rooms lessons and the conversation record),docs/architecture/board.md, README.🤖 Generated with Claude Code