feat: remove room synthesize and mycelium catchup#333
Merged
Conversation
Bulk rename across 213 files of `Copyright 2026 Julia Valenti` → `Copyright 2026 Mycelium Contributors` in source-file copyright headers. Year and SPDX license identifier preserved. No code or behavior changes.
Long-standing intent to drop the memory-synthesis system. The narrower
plan_compiler step (consensus → plan/tasks.md) replaced it; the
synthesis "blob summary of accumulated memory" pattern is gone, and
the room directory + compiled plan are the agent briefing now.
Backend
- routes/rooms.py: drop POST /synthesize and GET /catchup
- services/async_coordination.py: removed entirely
- routes/memory.py: drop _check_async_trigger fan-out
- services/metrics.py: drop record_synthesis + record_synthesis_reuse
- models.py + schemas.py: drop Room.coordination_state, Room.trigger_config,
Room.last_synthesis_at; drop RoomCreate.trigger_config; drop
RoomRead.{coordination_state, trigger_config, last_synthesis_at}
- alembic 0017: drop the three columns from rooms
- tests: prune obsolete cases (test_structured_memory entirely;
test_synthesize_session_display_404, test_room_with_trigger,
test_async_room_full_flow, the record_synthesis* tests)
CLI
- commands/room.py: drop `room synthesize`; drop `--trigger` flag on
`room create`; drop `mycelium catchup` hint from `room clone`;
drop the trigger_config row from `room watch` header
- commands/memory.py: drop `mycelium catchup` (`memory_catchup`)
- cli.py: drop the synthesize/catchup top-level shortcuts
Frontend
- api.ts: drop fetchCatchup + trigger_config from createRoom
- create-room-dialog.tsx: drop "Synthesis trigger (memory threshold)" field
- memory-panel.tsx: drop catchup state + derive memory/contributor counts
from the loaded memory list
- event-stream.tsx: drop synthesis_complete case + style entry
- room-card.tsx: deleted (unused, referenced removed coordination_state)
- room/[name]/page.tsx: drop coordination_state from Room interface
Generated client
- openapi.json regenerated from the live FastAPI app
- mycelium-cli/src/mycelium_backend_client + mycelium-client regenerated
- generated synthesize_room*, catchup_room*, *_trigger_config_type_0 files
removed
Docs
- README, CLAUDE, demo-script, stories.html, mycelium-dataflow.html
- mycelium-cli/src/mycelium/docs/{overview, memory, rooms, quickstart,
cognitive-engine, troubleshooting, index, plan, architecture,
guides/structured-memory, concepts/memory}.md
- generate_docs.py: drop "synthesize / catchup / watch" group entry;
index.html/adapters.html/reference.html regenerated
SKILLs + promo
- claude_code + openclaw SKILL.md: strip synthesis trigger flag and
"room synthesize" command
- mycelium-promo: clean — no refs found
…e-catchup # Conflicts: # fastapi-backend/app/services/async_coordination.py # fastapi-backend/tests/test_structured_memory.py # mycelium-frontend/src/components/room-card.tsx
Resolve conflict in docs/index.html (keep the inline session-negotiation
walkthrough; drop the re-added `mycelium synthesize` example and its callout).
CI fixes:
- ruff format alembic_migrations/versions/0017_drop_synthesis_columns.py
- Regenerate openapi.json snapshot + typed clients from the merged backend
(drops stale last_synthesis_at/trigger_config; adds main's /sync-mas route
and its generated client modules)
Tidy main-introduced references to the removed commands:
- cursor mycelium.mdc: drop `room synthesize` + `--trigger` flag, reword the
CognitiveEngine line to "compiles consensus into the room's shared plan"
- claude-code-e2e / cursor-e2e skills: replace `mycelium catchup` with the
`GET /api/rooms/{room}/messages` endpoint
Adds a point-in-time message reader to the room command group, wrapping the existing `list_messages` client call (newest-first, with --limit/--sender/--type and --json). Fills the gap left by removing `catchup`: the backend had the read endpoint and the generated client wrapped it, but no CLI command exposed it — the only way to read messages was `room watch` (live stream) or curl. - Replace the curl message-reads in the e2e/cursor-e2e/claude-code-e2e skills with `mycelium room messages` (uses --type + --json for consensus extraction) - Regenerate docs/reference.html (also picks up main's `room sync-mas` entry, which had not been regenerated) - Add tests covering rendering, filter pass-through, and the empty case
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.
Summary
Long-standing intent: the
room synthesize+mycelium catchupmemory-synthesis system is gone. The narrower plan compiler
(consensus →
plan/tasks.md) replaced it. The synthesis "blob summary ofaccumulated memory" pattern is no longer how new agents get briefed —
they read the room directory and the compiled plan directly.
What changed
Backend
routes/rooms.py: dropPOST /synthesizeandGET /catchupservices/async_coordination.py: deleted entirely (run_synthesis,check_trigger, _llm_synthesize, _notify_synthesis_complete, structured-
context builder)
routes/memory.py: drop_check_async_triggerfan-out after writesservices/metrics.py: droprecord_synthesis+record_synthesis_reusemodels.py+schemas.py: dropRoom.coordination_state,Room.trigger_config,Room.last_synthesis_at; dropRoomCreate.trigger_config; drop those three fields fromRoomReadroomstest_structured_memory.py;removed
test_synthesize_session_display_404,test_room_with_trigger,test_async_room_full_flow, therecord_synthesis*tests)CLI
commands/room.py: droproom synthesize; drop--triggerflag onroom create; dropmycelium catchuphint fromroom clone; drop thetrigger_configrow from theroom watchheadercommands/memory.py: dropmycelium catchup(memory_catchup)cli.py: drop the top-levelsynthesizeandcatchupshortcutsFrontend
api.ts: dropfetchCatchup+trigger_configfromcreateRoomcreate-room-dialog.tsx: drop the "Synthesis trigger (memory threshold)"input
memory-panel.tsx: drop catchup state; derive memory/contributor countsfrom the loaded memory list instead
event-stream.tsx: drop thesynthesis_completeevent case + style entryroom-card.tsx: deleted (unused, referenced removedcoordination_state)room/[name]/page.tsx: dropcoordination_statefrom theRoominterfaceGenerated OpenAPI client
openapi.jsonregenerated from the live FastAPI appmycelium-cli/src/mycelium_backend_client/andmycelium-client/regenerated via
openapi-python-clientsynthesize_room*,catchup_room*,*_trigger_config_type_0filesremoved; net result includes new
task_*models the prior snapshot wasmissing (incidental)
Docs
docs/demo-script.md,docs/stories.html,docs/mycelium-dataflow.htmlmycelium-cli/src/mycelium/docs/{overview, memory, rooms, quickstart, cognitive-engine, troubleshooting, index, plan, architecture, guides/structured-memory, concepts/memory}.mddocs/generate_docs.py: drop the "synthesize / catchup / watch" CLIgroup entry
docs/index.html,docs/adapters.html,docs/reference.htmlregenerated
SKILLs + promo
SKILL.md: strip synthesis trigger flag androom synthesizecommandmycelium-promo/index.html: already clean — no refs foundTest plan
fastapi-backend:pytest tests/ --ignore=tests/test_integration.py→ 277 passedfastapi-backend:ruff check,ruff format --check,ty check→ cleanmycelium-cli:pytest tests/→ 181 passedmycelium-cli:ruff check,ruff format --check,ty check→ cleanmycelium-frontend:pnpm build→ clean (5 routes)synthesize/catchup/trigger_config/coordination_state/last_synthesis_athitsthree columns drop cleanly
field is gone and creation succeeds