Commit Graph
421 Commits
Author SHA1 Message Date
istosandClaude Opus 5 2a4652a15b tasks: card 63 — a phase in flight is work happening
From a board showing 11 of 14 merged with member 31 in review/ and its
CI still running: the phase was advancing and every surface keyed to a
running agent said the board was idle. The tab title went back to the
plain project name, the live chip fell through to "you, working", and
the member the phase was waiting on wore "waiting on you" — which is
the opposite of true, since the phase merges it by itself on green.

The reading already exists client-side (phasesInFlight()), and the
snapshot already carries running/halted/stopped plus per-member states.
Nothing is missing but the question being asked, in three places that
answer it with runningAgents() instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 11:57:18 +02:00
istosandClaude Opus 5 869b7018b4 tasks: card 62 — running a halted phase again resumes it
Found on a board that was hosted by a shell that got killed: the phase
halted at the member whose agent went down with it, and no number of
presses of run phase could get past that member. What cleared it was
launching the member's work agent by hand and only then running the
phase, which is a two-step the board never mentions.

The runner already intends the opposite — _this_run() scopes the log so
that a new run may relaunch a member whose run died, and says so — but
_member_state() reads any existing branch as evidence the phase already
dealt with the card, and a run that died always leaves one. So the
intent is written down and unreachable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 08:05:15 +02:00
istosandClaude Opus 5 dff4a42a86 site: the redirect is a 307, and card 43's line numbers had moved
Two small corrections found while checking 0.4-alpha's deploy.

wrangler.jsonc claimed the slashless form redirects with a 301; measured
against the live site it is a 307. The code is the host's choice rather
than anything this repo sets, so the post-deploy check now says to
confirm that it redirects at all — the property the site depends on —
and records the observed code beside it rather than asserting one.

Card 43 already describes the two test_boards_sync failures a team-mode
checkout sees, and still describes them correctly; only its pointer into
the test file had drifted — reload() sits at 598 now, not 481.
config.py:53-69 is still exact.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 07:02:41 +02:00
istosandClaude Opus 5 080d2d767e 0.4-alpha: phases
Phases are the release, so AGENTS.md stops burying them. The six sections
that were `###`s inside "Task file format" — where they had split that
section's own prose in half, header table above and Assignee below —
become a `## Phases` section of their own, between "Pull requests" and
"Stages" because that is the order they are learned in. Nothing in them
changed: the diff is a move plus the section's opening paragraph.

Which gives the site three pages to cut rather than a tail nobody would
find at the bottom of "Task files": /concepts/phases/ (the model),
/concepts/running-a-phase/ (the branch, the beat, the halt, the ending)
and /concepts/phases-on-the-board/ (what the Board stops drawing, and the
Phases view that draws it instead). They sit after "PRs and review" in
the Concepts flow, which is the order AGENTS.md now reads in — the
manifest and the source cannot disagree about that without the build
saying so.

The landing page's third reason says it too, since "parallel work, zero
collisions" was only half of what the board now does, and the README's
opening paragraph gains the sentence it was missing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
v0.4-alpha
2026-08-03 06:55:39 +02:00
istos ed1d217c0d board: 61 → done (istos) 2026-08-03 06:40:14 +02:00
istos d069b742e6 board: 55, 54, 46 → done with phase 61 (istos) 2026-08-03 06:40:14 +02:00
Ronald AshriandGitHub 69447f92da Merge pull request #54 from 12vectors/phase/61-what-an-agent-is-told-before-it-starts
61 — Phase: what an agent is told before it starts
2026-08-03 06:39:59 +02:00
istos f3ed4c2b48 board: 61 PR opened (istos) 2026-08-02 18:37:56 +02:00
istos 446bf2cebc board: 46 PR review filed (istos) 2026-08-02 16:52:38 +02:00
istos 50332f5974 board: 54 PR review filed (istos) 2026-08-02 16:51:50 +02:00
istos 783d8c385d board: 61 → review (istos) 2026-08-02 13:43:21 +02:00
istos 6a7534cea2 board: 61 phase log (istos) 2026-08-02 13:43:21 +02:00
istos 21ec786674 board: 61 phase log (istos) 2026-08-02 13:43:19 +02:00
istos e5dee0f868 phase: merge task/46-a-board-with-no-test-command-says-so into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 13:43:17 +02:00
istos eb186cc1ef phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 13:43:15 +02:00
istos cd0000194f board: 46 PR opened (istos) 2026-08-02 13:43:09 +02:00
istos 2f76313d90 board: 46 → review (istos) 2026-08-02 13:43:01 +02:00
istos 5a15a822ec board: 46 Work report filed (istos) 2026-08-02 13:43:01 +02:00
istos 64f3e2b3bd A board whose agents cannot run anything says so
BOARD_AGENT_COMMANDS is the one setting a headless agent cannot work
around, and since the install stopped asking for it a project the
detector does not recognise starts with it empty — correctly, but
silently, until a run ended with an agent explaining it could not verify
its work.

Say it twice, in the two places it is learnable: a quiet `no agent
commands` chip in the header (`--idle`, like the drive's "no driver",
never `--alarm` — nothing is failing, something is unconfigured), and a
note appended to the ticker line of the launches that would have run
those commands, work and act-pr. Neither blocks anything: an agent that
only edits files is still useful.

What counts as empty is answered once, by `config.agent_commands()`,
which splits exactly as the adapters' own `split_commands()` does — so
whitespace and a lone comma are nothing configured on the board as well
as at the launch, and the page reads the server's boolean rather than
the raw setting.
2026-08-02 13:42:38 +02:00
istos 6a58880f7c phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 13:33:33 +02:00
istos d2243ac4f2 board: 61 phase log (istos) 2026-08-02 13:33:01 +02:00
istos f40ba67f44 board: 46 → in-progress (istos) 2026-08-02 13:33:01 +02:00
istos 80f1b10cd6 board: 61 phase log (istos) 2026-08-02 13:33:00 +02:00
istos 0768a866e5 phase: merge task/54-a-work-agent-must-refuse-a-phase-card into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 13:32:58 +02:00
istos 393ab32c9e phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 13:32:56 +02:00
istos b0fcb1373b board: 54 PR opened (istos) 2026-08-02 13:32:45 +02:00
istos 2cc0dd5c7e board: 54 → review (istos) 2026-08-02 13:32:37 +02:00
istos 341edf2132 board: 54 Work report filed (istos) 2026-08-02 13:32:37 +02:00
istosandClaude Opus 5 ccffbec831 A work agent refuses a phase card
`▸ run phase` guarded its own door and left the neighbour's open:
`/api/agent/start` accepted a phase card, cut `task/<stem>` and handed a
list of other cards to a work agent as a brief. It did that once, and the
agent implemented two cards at once in a worktree nobody was watching.

The refusal is a server rule, in `_validate` with the stage check — ahead
of the claim and well ahead of the worktree, so it costs nothing and
leaves nothing to clean up — and it names ▸ run phase rather than just
saying no. Which headless kinds a phase card may host is now decided kind
by kind where the guard lives: ▸ start work and ↻ act on PR refuse it
(both are work agents), while ◔ still true? and ◔ review PR are allowed —
the latter now told the phase's own branch, since its PR is from
`phase/<stem>` and `task/<stem>` was never cut. The guard is about
starting, so a card retyped under a running agent is left alone.

And the card says which state it is in: an `in-progress/` phase nobody has
started read exactly like one mid-run, the header chip being absent in
both cases. It now wears `not started` (or `held`) in the settled
register, with the line under it saying what ▸ run phase would do — never
the accent, the breathing mark or the caret, which mean work is happening.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 13:32:08 +02:00
istos 4a12da8d1b phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 13:07:39 +02:00
istos 8dc83d221b board: 55 PR review filed (istos) 2026-08-02 13:07:16 +02:00
istos 8cb89d8653 phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 12:52:29 +02:00
istos 95ec6df0df board: 61 phase log (istos) 2026-08-02 12:51:57 +02:00
istos f798c17f3a board: 54 → in-progress (istos) 2026-08-02 12:51:56 +02:00
istos 0412c78f39 board: 61 phase log (istos) 2026-08-02 12:51:56 +02:00
istos a5f05ea29d phase: merge task/55-a-headless-run-is-one-turn-and-must-say-so into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 12:51:54 +02:00
istos c6752efc3c phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 12:51:51 +02:00
istos 4d5cd19f7e board: 55 PR opened (istos) 2026-08-02 12:51:48 +02:00
istos eccaa415ed board: 55 → review (istos) 2026-08-02 12:51:40 +02:00
istos 331e5acc21 board: 55 Work report filed (istos) 2026-08-02 12:51:40 +02:00
istosandClaude Opus 5 f676c9fe2a prompts: say that a headless run is one turn
A work agent ended its turn to wait for a four-minute test suite it had backgrounded, and the run ended with it: 314 lines of passing work staged and never committed, an empty branch, a halted phase. Nothing in the prompts said the run was a single non-interactive turn, so waiting looked like a sensible strategy.

All four core prompts now open with the same block: this is one turn, the process exits with your reply, and nothing you meant to finish afterwards survives. It names the trap directly — do not background a command and end the turn to wait for it, do not promise to come back — and each template follows it with what its own run loses: work.md commits around long-running commands, act-pr.md commits and pushes, review-pr.md posts its verdict inside the turn, review.md writes its report there.

The block sits before the task body and carries no braces, so str.format still renders it and the NOT READY / ADDRESSED / PR REVIEW / RELEVANCE REVIEW marker lines keep their place after it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 12:39:07 +02:00
istos 24b7fdd9cf phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 12:37:52 +02:00
istos a445b660b5 board: 50 → archived (istos) 2026-08-02 12:37:29 +02:00
istos 46e4f143d2 board: 51 → archived (istos) 2026-08-02 12:37:26 +02:00
istos 343df6604f board: 52 → archived (istos) 2026-08-02 12:37:22 +02:00
istos d61b06f50c phase: merge origin/main into phase/61-what-an-agent-is-told-before-it-starts 2026-08-02 12:37:18 +02:00
istos a44dfc2fb8 board: 56 → archived (istos) 2026-08-02 12:37:18 +02:00
istos 43ffa1c0ec board: 58 → archived (istos) 2026-08-02 12:37:14 +02:00
istos 88e5e6ea9a board: 59 → archived (istos) 2026-08-02 12:37:12 +02:00
istos 19e134e8f9 board: 53 → archived (istos) 2026-08-02 12:37:01 +02:00