You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(teams): a team library you own, editable plans, and halves that prove themselves
Teams were something a model invented once per run and threw away. The Teams
page reported on them, which is why it was empty whenever nothing was running.
A team is not a per-run fact. "The backend is Go, it lives under cmd/ and
internal/, go-worker writes it, `go test ./...` proves it" is true of the
repository, forever — and re-deriving it from a 7–32B model each run gets it
subtly wrong often enough to silently downgrade the whole run to one stream.
- pkg/teams: teams are blocks (kind: team), discovered builtin → user → project.
Six ship. A team carries its globs, its acceptance command, its named seats
AND an open roster of as many agents and skills as its author wants.
- Preselection is deterministic: query keywords, marker files and extensions,
scored with no model call. The manager is the fallback, and is still asked for
the CONTRACT — the one part that is about this request rather than the repo.
- A contract reference that misses by a suffix resolves (`backend` →
`backend-go`); an ambiguous one is refused rather than guessed.
- Studio: create, edit, duplicate, delete, pin; "Try a request" shows which
teams a query would get and why; Activate writes the org chart and pins it.
Teams attach to a pipeline (`teams:`) and to one run (`--team`).
- The approval card now edits everything the harness can apply: task
description, acceptance, priority and depends_on (ordering is dependencies on
a wave board), teams added from the library or removed, and the frozen
contract including renaming a clause without losing its spec.
- The board shows each team, its project manager, what proves its half, and
cross-team waits; cards carry a team badge and a colour derived from the id.
- The live view pins one line above the stream — agent, task, team, model,
tokens, and a clock that keeps ticking, because on a local 30B the next log
line can be four minutes out and silence reads as a hang.
- Each half now RUNS its acceptance command, so green means proved. A command
that cannot start is UNVERIFIED, never red: failing a team for a missing
node_modules sends a corrector to rewrite code that was never at fault.
Six defects the live 30B runs surfaced, each pinned by a test:
- a correction ticket on the seam was stamped with whichever half appeared first
on the board, then denied write access to the other half's files — it sat in
ready_to_dev for the rest of the run;
- a task's team stamp went stale when its files changed, with the same effect;
- the splitter was never shown the ownership boundaries, so it emitted tasks
spanning both halves that could never be assigned to either;
- a team's reviewer and tester were editable and never consulted by routing;
- duplicate tester tasks were never folded, and the dedupe ran before file
reconciliation rewrote the very file sets that define duplication;
- every page except / returned 404 on a browser refresh.
Pages no longer strand themselves in the middle of a large screen: collections
fill the viewport and turn extra width into more columns.
|`pkg/blocks`, `pkg/pipeline`, `pkg/stacks`| YAML building blocks, phase graph, presets, **language detection** (`DetectPack` / `DetectAll` — the only implementation) |
325
+
|`pkg/teams`, `pkg/squads`|`teams` is the persistent library — a team template plus the evidence that selects it, scored with **no model call**; `squads` is one run's org chart, its ownership rules and its frozen contract |
325
326
|`pkg/permissions`, `pkg/hitl`, `pkg/hooks`| write/shell policy, human gates, lifecycle hooks |
326
327
|`pkg/server`| Studio HTTP/SSE API, security policy, review API |
cmd.Flags().Bool("dynamic", false, "run the composer specialist to assemble a task-specific pipeline (default: on)")
388
395
cmd.Flags().Bool("no-dynamic", false, "disable the dynamic pipeline (use the static pipeline)")
389
396
cmd.Flags().StringSlice("skill", nil, "pin/load skill by name (repeatable); also accepts @skill:name in query")
397
+
cmd.Flags().StringSlice("team", nil, "run with this team from the library, whatever the query says (repeatable); see `slmcode block list --kind team`")
0 commit comments