Skip to content
Open
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
19 changes: 19 additions & 0 deletions src/greatminds/data/roles/DEVELOPER.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,25 @@ DEVELOPER implements backend/product-code tasks planned by ARCHITECT-PLANNER.
5. For `plan.stand_required: true`, files a stand request with
`greatminds stand request ... --evidence-for <task-id>`.
6. Records any stand request id/result/caveat in the implementation block.

**If a prior iter put the stand in `down`** because of a
playbook bug your iter-N fix resolves: after the fix is in
your worktree, send STAND-KEEPER a wake with the canonical
`FIX-LANDED` body shape (SK reads the body verbatim and will
then run `stand up` on its next tick — `greatminds stand up`
is SK-only):

```bash
greatminds inbox send STAND-KEEPER --kind wake \
--task <task-id> \
--body "FIX-LANDED for <task-id> stand-profile <profile>. \
Worktree .worktrees/<task-id>/coordination/stand-profiles/<profile>.yaml \
carries iter-<N> changes: <one-line summary>. Please \
greatminds stand up --reason 'iter-<N> fix landed for <task-id>'."
```

Don't ask MAINTAINER to clear the stand — `stand up` is gated
to STAND-KEEPER and MAINTAINER has no override.
7. If blocked only by named external dependencies:
`greatminds task append-block blocked --id <id> --field
dependencies=<queue>/<id>.yaml,... --field resume_to=feature_dev`
Expand Down
26 changes: 24 additions & 2 deletions src/greatminds/data/roles/STAND-KEEPER.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,30 @@ gone. The singleton stand is driven by `coordination/.stand/state.yaml`.
`preparing` lease on a later tick.
5. **On deploy or infra failure:** run
`greatminds stand down --reason "profile failed: <step>"`, naming
the failed profile step. Queue processing pauses.
After recovery, run `greatminds stand up --reason "<note>"`.
the failed profile step. Queue processing pauses until you run
`greatminds stand up`. While the stand is `down`, **do not act
on bare wake pings or wakes that describe a lease** — there is
no active lease to deploy, and re-running an unfixed playbook
would just re-fail.

**Clearing the `down` state.** Run `greatminds stand up --reason
"<note>"` only after receiving an inbox message whose body
carries an explicit *fix-landed* signal from the implementer
(DEVELOPER) or the holder (TESTER / EXPLORER). The canonical
body shape is:

> `FIX-LANDED for <task-id> stand-profile <profile>. Worktree
> .worktrees/<task-id>/coordination/stand-profiles/<profile>.yaml
> carries iter-<N> changes: <one-line summary>. Please
> greatminds stand up --reason "iter-<N> fix landed for <task-id>".`

Verify the worktree carries the named change (a quick `grep`
or `diff` is enough — you do not need to re-deploy yet), then
transition with `stand up`. If the body lacks the `FIX-LANDED`
prefix or doesn't name a worktree path you can verify, ignore
the message — the stand stays `down` until a properly-shaped
signal arrives. This intentional friction is what prevents a
stray wake from re-running unfixed code.
6. **Never release the holder's active lease.** TESTER or EXPLORER
runs `greatminds stand release --lease-id <lease_id> --result
pass|fail|partial` after its own probes.
Expand Down
21 changes: 21 additions & 0 deletions src/greatminds/data/roles/TESTER.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,27 @@ tests block.
only in the product task's `tests` block. The old
`stand_requests/` -> `stand_wip/` -> `stand_done/` path is removed
from the active workflow.

**When the stand sits in `down`** (e.g. a prior deploy hit a
playbook bug and you've bounced the task to DEVELOPER for a fix):
wait for DEV's inbox info that iter-N has landed. Then, if you
want to drive the recovery yourself, send STAND-KEEPER a wake
with the canonical `FIX-LANDED` body shape:

```bash
greatminds inbox send STAND-KEEPER --kind wake \
--task <task-id> \
--body "FIX-LANDED for <task-id> stand-profile <profile>. \
Worktree .worktrees/<task-id>/coordination/stand-profiles/<profile>.yaml \
carries iter-<N> changes: <one-line summary>. Please \
greatminds stand up --reason 'iter-<N> fix landed for <task-id>'."
```

`greatminds stand up` is SK-only — TESTER cannot call it
directly. The wake's `FIX-LANDED` body is what SK reads to know
the state is safe to clear. Bare wake pings or wakes that talk
about an active lease are not enough; SK will (correctly) ignore
them while the stand is `down`.
6. For `plan.stand_required: true`:
- waits for its lease to become ready via SK's inbox-info,
- probes the stand directly and records lease-based stand evidence,
Expand Down
Loading