Repository navigation
v0.3.0 — Orchestration as a Collaboration Charter
orchestra-dsh v0.3.0 — Orchestration as a Collaboration Charter
This release turns orchestra-dsh from "role templates" into a full orchestration layer: an orchestration is a collaboration charter — who does what, who owns each decision, where work goes when done, where disputes go, when loops end, and who declares the team complete.
Highlights
🎼 Orchestration = collaboration charter
- Topology schema v0.1:
controller+roles[](preset / sandbox / runtime / maxRounds / welcome) +protocol.{ownership, routes, completion}. - Hard validation for what the plugin can prove (role-id uniqueness, ownership/routes references, sandbox legality, runtime parameter pairs, preset resolvability); natural-language discipline stays in role prompts — no brittle text parsing, no workflow engine.
- Driver onboarding upgraded: any proposal must pass six completeness tests (reachability, unique power, output consumers, loop exits, dispute destination, single closure owner). Role count is entirely task-driven.
📦 Preset system (Bug #4 root fix)
- Built-in behavior packages:
orchestra-implementer,orchestra-reviewer,orchestra-oracle(persona + tool composition). - Built-in topologies:
duo,trio,oracle, and the newfour-role-dev(implement ⇄ review main loop + on-demand oracle escalation). - Plugin seeds
~/.dsh/orchestra/on first run (never overwrites user content); lookup order: project.orchestra/> global > DSH-native > built-in.
🔄 Team lifecycle & recovery
team.jsonv1.1: teamId / status / controller / controllerHistory / topologyRef / mission / sessionHistory / reports;rounds→reportCount.orchestra_dismiss: immutable archive + state cleanup + archive notice to live roles (role sessions stay alive).orchestra_activate(archive_id): reused / resumed / replaced / failed per role, replacement records + recovery packet, controller takeover,degradedon partial failure.orchestra_teamalways returns{team, archives}.
✉️ Honest delivery receipts
a2a_send/a2a_replyreturn{message_id, target_session_id, accepted_at_ms, delivery_mode}withlive_inbox | durable_inbox | resumed_inbox.- The unreliable
queuedfake-success is gone: truly cold targets are resumed first — resume failure fails the call. a2a_listprogressive disclosure: your cwd first, archived folded by default,limit/offset,current_cwd_teamannotation, full listing in lightweight (no-team) mode.
🐛 Fixes
- Cold-delivery reliability (P0): no pending-item loss on failed resume, no in-memory queue promises.
- Archive activation: dismissed snapshots parse correctly;
orchestra_teamschema accepts populated report lists. - Built-in preset/topology seeding now bypasses the workspace-write fence for the global config root.
/teambubble: the command renders as a normal/team <goal>bubble with a single collapsed notice to the model (no bracket-prefixed user message, no split turns).
Compatibility
- Legacy
team.json/ archives / topologies parse transparently (normalized to v1.1). - Pure-A2A users (no team footprint) are unaffected by cwd filtering.
- The legacy
<cwd>/orchestra/topologies/location is no longer read — move custom templates to.orchestra/topologies/. @deepseek-ai/*remain peerDependencies only (host-provided; double-load protection unchanged).
Verification
- 16 unit assertions (topology validation / team normalization / slug) + 4 headless E2E runs covering the full lifecycle (create → report → dismiss → activate), recovery, team schema, and a2a_list contract — all green on
minimax-cn / MiniMax-M3. - See
scripts/test-v0.3.0.mjs.
Full design spec: reports/spec-v0.3.0.md in the repo (internal, not published on npm).