A team-leading starter at the top, the picker in ladder order, and ⇧⏎ line breaks - #239
Merged
Merged
Conversation
**"Lead a team toward a goal"** — the eleventh starter and the first in the list, because this is what most work turns into: one loop that understands the goal, splits it into goal loops for the independent pieces and timed loops for anything that needs checking rather than finishing, and stays to put the pieces back together. A Main loop on purpose (MAIN_LOOP.md names this as the orchestration path) that cuts no worktree — a coordinator reads and steers while its children write. The brief is about the task. The Artifactory appears in it as the team's inbox: where the plan is posted for loops that don't exist yet, where children post what they finished, and the record of every message between them. Every command it names — node create, artifactory post/watch/sync, node send --follow-up — is verbatim from the CLI help. **The picker no longer sorts starters alphabetically.** The Starters group is a ladder — lead a team, then Goal, then Timed, then the rest — and alphabetical scrambled it (it would have put "Get the build green" above everything). They now keep their shipped order via `StarterTemplates.priority(of:)`; a starter the app no longer ships goes last rather than nowhere. **Your own templates get their own section**, "Your templates", below the starters and sorted by name. The two are kept apart for good — scaffolding and somebody's library are different things, and the earlier fold-away rule would have buried the shipped ones once a library grew. **Seeding is now per-starter.** The marker records the ids it has seeded, so an install that already has beta2's ten still receives this one, and nothing it deleted comes back. beta2 and beta3 wrote an empty marker; that is read as "the first ten", which is exactly what those installs seeded. **⇧⏎ inserts a line break** in every prose brief — Main's note, Goal's "what does done look like", Timed's task, Turn's first instruction. ⏎ stays the dialog's primary action, as its button says. The insert goes through the field editor so it lands at the caret and the binding updates the ordinary way. 1486 tests (up from 1482). swiftlint 0 errors, swift-format clean. The picker order was checked from a headless render, not from the code. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MJR8Wuwc4qnaSBUMcYf7Af
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
"Lead a team toward a goal"
The eleventh starter and the first in the list, because this is what most work turns into: one loop that understands the goal, splits it into goal loops for the independent pieces and timed loops for anything that needs checking rather than finishing, and stays to put the pieces back together.
A Main loop on purpose —
MAIN_LOOP.mdnames this as the orchestration path — and it cuts no worktree: a coordinator reads and steers while its children write. Tokens:{goal}and{topic}; the topic is the human's handle on the effort, sographcode artifactory list <project-path> --search <topic>from a shell shows the whole thread.The brief is about the task. The Artifactory appears in it as the team's inbox — where the plan is posted for loops that don't exist yet, where children post what they finished, and the record of every message between them:
Every command in it is verbatim from the CLI help; a test asserts each one is present.
The picker, in ladder order
Starters no longer sort alphabetically — that put Get the build green above everything. They keep their shipped order: lead a team → Goal ×3 → Timed ×2 → the rest. A starter the app no longer ships goes last rather than nowhere.
Your own templates get their own section, Your templates, below the starters and sorted by name. The two stay apart for good: scaffolding and somebody's library are different things, and the earlier fold-away rule would have buried the shipped ones once a library grew.
Rendered headless with the library handed over reversed — the order held.
Seeding is per-starter now
The marker records the ids it has seeded, so an install that already has beta2's ten still receives this one, and nothing it deleted comes back. beta2/beta3 wrote an empty marker; that is read as "the first ten", which is exactly what those installs seeded.
⇧⏎ line breaks
In every prose brief — Main's note, Goal's what does done look like, Timed's task, Turn's first instruction. ⏎ stays the dialog's primary action, as its button says. The insert goes through the field editor so it lands at the caret and the binding updates the ordinary way. Keyboard behaviour can't be exercised headless — this one wants a real keypress before it's trusted.
Verification
swiftlint lint— 0 errors;swift format lint --strict— clean🤖 Generated with Claude Code
https://claude.ai/code/session_01MJR8Wuwc4qnaSBUMcYf7Af