Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,25 @@ or an explicit reason for deferral/rejection. A plan is not the execution result
of an implementation request. Only use `handoffs` for troubleshooting or an
explicit follow-up; the original exchange must not depend on a second question.

When one owner sentence asks for a team rather than a single task, answer with
one plan preview before anything is created. The preview names, in this order:
the lanes and the Agent each one runs on; the first bounded Todo per lane with
its declared priority; the quota or cadence envelope that bounds them; the
acceptance signal that ends each lane; and the stop condition that ends the
team. Build every lane from Agents and Todos Core already knows, and from the
capabilities the current profile actually grants. Name a requested lane you
cannot staff as a gap, with the missing registration or grant, instead of
inventing a lane, an Agent, or a capability.

A team preview is a proposal, never an effect. Do not create Todos, register
Agents, set quota, or start work until the owner confirms that exact preview;
state what will be created and which canonical owner creates it — Agent
registration, Todo creation, quota or goal policy — so the owner sees where
each effect lands. After confirmation, apply through those owners only, reuse
the Agent and Todo identities the preview named, and report one readback of
what now exists. Never widen the confirmed scope while applying it, and never
charge quota for the preview itself.

Core owns truth and permissions. This skill supplies reasoning guidance, not
new authority. Keep front-end and group answers within their respective scopes;
give concise, concrete answers with source and coverage notes where they matter.
30 changes: 30 additions & 0 deletions tests/test_manager_team_plan_guidance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""The steward's shipped guidance owns the one-sentence team plan contract."""

from __future__ import annotations

from loopx.chat_manager import manager_skill_text


def test_manager_guidance_orders_one_team_preview_before_any_effect() -> None:
"""A team request is answered with one preview, never with silent creates."""

text = manager_skill_text()

ordered = [
"the lanes and the Agent each one runs on",
"the first bounded Todo per lane",
"quota or cadence envelope",
"acceptance signal",
"stop condition",
]
positions = [text.index(marker) for marker in ordered]
assert positions == sorted(positions), ordered

# The preview gates every effect, and the effects keep their canonical owners.
assert "proposal, never an effect" in text
assert "until the owner confirms that exact preview" in text
assert "Agent\nregistration, Todo creation, quota or goal policy" in text
assert "charge quota for the preview itself" in text
# An unstaffable lane is named as a gap rather than invented.
assert "as a gap, with the missing registration or grant" in text
assert "inventing a lane, an Agent, or a capability" in text
Loading