chore(team-server): remove self-hosted server runtime (per #242)#245
Conversation
Per v0 Productization §2 (Notion: 📦 v0 Productization), team mode in v0
is a remote append-only event-log adapter consumed by pull-based CLI
sync — not a self-hosted server. The committed team-server code on dev
is the wrong shape (HTTP /events API + Slack/Notion OAuth + per-source
workers + Docker compose) and we have decided not to ship it.
Deletes:
- team_server/ (entire directory, 26 files: app.py, db.py, schema.py,
config.py, requirements.txt; api/, auth/, extraction/, sync/, workers/)
- events/team_server_bridge.py, events/team_server_consumer.py,
events/team_server_pull.py
- deploy/Dockerfile.team-server, deploy/team-server.docker-compose.yml
- tests/test_team_server_*.py (24 files)
- tests/test_materializer_team_server_pull.py
- plan-priority-c-team-server-{notion-v1,real-extractor-v1,slack-v0,
v0-release-blockers}.md
- docs/research-brief-priority-c-selective-ingest-2026-05-02.md
Repairs (surgical):
- server.py: remove team_consumer_task startup + shutdown blocks (was
imported from events.team_server_consumer; now gone with the rest).
- events/materializer.py: remove the team-server-specific
event_type='ingest' bridge in replay_new_events; the existing
event_type='ingest.completed' handler is unaffected.
Preserved (right shape for v0 productization §2):
- events/__init__.py, events/CLAUDE.md, events/models.py
- events/writer.py — local append-only file writer
- events/materializer.py — local ledger projection (now bridge-free)
- events/transcript_queue.py — SessionEnd hook queue (#156)
- events/team_adapter.py — dual-write adapter shape; will be renamed +
generalized in a follow-up issue when the Drive/S3 backend lands
Verification:
- grep -r 'from team_server|import team_server|events.team_server_' .
→ empty
- ast.parse on server.py + events/materializer.py → clean
- ruff check on modified files → All checks passed!
Closes follow-ups (will become moot when this lands):
- #160 (team-server materializer dispatch bug)
- #161 (channel_allowlist never populated)
- #196 (write decisions to team-server) — superseded by #242 follow-up
Refs #242
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
) The initial commit ab2d45b deleted the team_server/ + events/team_server_* files but left two surgical edits unstaged: - server.py: remove the team_consumer_task startup + shutdown blocks that imported from events.team_server_consumer (now deleted). - events/materializer.py: remove the team-server-specific event_type='ingest' bridge in replay_new_events that imported from events.team_server_bridge (now deleted). CI ruff caught it: server.py:1389 still imported from a deleted module. This commit applies those edits and finishes the surgery. Refs #242 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
First minor since v0.13.9 triage. Cut from dev after BicameralAI#245 (closes BicameralAI#242) and BicameralAI#246 (closes BicameralAI#244) landed the team-server scale-down + v1 HITL/ decision_level scale-down respectively. - pyproject.toml: 0.13.3 → 0.14.0 - RECOMMENDED_VERSION: 0.13.3 → 0.14.0 - CHANGELOG.md: new ## v0.14.0 release header at top of the prior Unreleased content, with a release note documenting which dev Unreleased entries no longer apply (the v1 features removed by BicameralAI#246) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes #242 (when merged).
Summary
Removes the self-hosted team-server runtime per the v0 Productization decision (Notion: 📦 v0 Productization §2). v0's team mode is a remote append-only event-log adapter consumed by pull-based CLI sync — not a long-running HTTP server with workers. The committed code is the wrong shape and we have decided not to ship it.
66 files changed: 64 deletions + 2 surgical edits.
What's deleted
team_server/— entire directory (26 files: HTTP API, Slack/Notion OAuth, workers, extraction pipeline)events/team_server_{bridge,consumer,pull}.pydeploy/{Dockerfile.team-server,team-server.docker-compose.yml}tests/test_team_server_*.py+tests/test_materializer_team_server_pull.pyplan-priority-c-team-server-*.mddocs/research-brief-priority-c-selective-ingest-2026-05-02.mdWhat's edited (surgical repairs)
server.py— removeteam_consumer_taskstartup + shutdown blocks (the only call site of the deletedevents.team_server_consumer). The MCP stdio loop is unaffected.events/materializer.py— remove the team-server-specificevent_type='ingest'bridge inreplay_new_events(). The existingevent_type='ingest.completed'handler is unchanged and still works for non-team-server payloads.What's preserved (v0-conformant, right shape)
events/__init__.py,events/CLAUDE.md,events/models.pyevents/writer.py— local append-only file writer (v0 §2 substrate)events/materializer.py— local ledger projection (now bridge-free)events/transcript_queue.py— SessionEnd hook queue ([P1] SessionEnd capture-corrections hook is silently broken — design pivot to next-session surfacing #156)events/team_adapter.py— dual-write adapter; will be renamed + generalized in a follow-up issue when the Drive/S3 backend landsVerification
grep -r 'from team_server\\|import team_server\\|events\\.team_server_'→ emptypython3 -c 'import ast; ast.parse(...)'on modified files → cleanruff check server.py events/materializer.py→ All checks passedRestoration path
If we ever needed to bring this back (we won't),
git revert <merge-sha-of-this-PR>on a fresh branch offdevreapplies the entire surface mechanically. That's the design intent of shipping this as a deletion-only PR per the #242 PR-structure clarification.Issues becoming moot when this lands
Out of scope (separate follow-up issue, not this PR)
TeamWriteAdapteronce the pluggable backend lands.Test plan
pipx install --force ~/github/bicameral-mcpsmoke test on a non-team install