Linotype v0.6 – v0.6.3
v0.6 adds LinoLoop, a thin execution wrapper that sits on top of executor briefs (cli/linotype exec ...) and can run one galley or an ordered release list.
v0.6.1 adds worktree-aware execution modes so release runs can be isolated by galley.
v0.6.2 (“Casablanca”) layers movie-themed release naming, per-version release notes, and CLI modularity/tests to keep documentation in lockstep with behavior.
v0.6.3 extends Casablanca with execution-phase guardrails, slug context packs, and per-slug evidence requirements.
This doc covers:
- What changed from v0.5
- How to run LinoLoop for a single galley
- How to run LinoLoop for a release
- Fallback behavior when no loop runner is installed
- v0.6.1 worktree and safety controls
What changed from v0.5
1) LinoLoop runner wrapper
New command:
cli/linoloop <galley-name|release-id>
LinoLoop behavior:
- Generates the executor brief with
cli/linotype exec opencode <galley> - Invokes a loop runner (default:
ralph) to execute iterations until completion or max-iteration limit - Writes logs and lock files under
dist/linoloop/
2) Release-oriented execution
LinoLoop can target a release ID if this file exists:
docs/work/releases/<release-id>/galleys.txt
galleys.txt rules:
- one galley name per line
- blank lines allowed
#comments allowed
3) Manual fallback mode
If the configured loop runner is unavailable, LinoLoop prints the generated executor brief and exits so you can paste it into OpenCode manually.
Running LinoLoop
Single galley
cli/linoloop 20260216-auth-passkeys
Single galley with isolated worktree:
cli/linoloop 20260216-auth-passkeys --mode serial-isolated
Release
cli/linoloop 2026-02-release-a
For releases, --mode auto defaults to serial-isolated.
Where docs/work/releases/2026-02-release-a/galleys.txt might look like:
# release ordering
20260210-auth-passkeys
20260211-login-ui
20260212-session-hardening
Environment knobs
LinoLoop supports these environment variables:
LINOLOOP_AGENT(default:opencode)LINOLOOP_MAX_ITER(default:50)LINOLOOP_RUNNER(default:ralph)LINOLOOP_MODE(default:auto)LINOLOOP_WORKTREE_ROOT(default:dist/linoloop/worktrees)
Example:
LINOLOOP_MAX_ITER=80 LINOLOOP_RUNNER=ralph cli/linoloop 2026-02-release-a
v0.6.1 controls
Common options:
cli/linoloop <target> --mode serial-isolated --worktree-root ../.linotype-worktrees
cli/linoloop <target> --reuse-worktree
cli/linoloop <target> --allow-dirty
cli/linoloop <target> --dry-run
cli/linoloop <release-id> --auto-pr
Modes:
auto- single galley runs in-place (direct), release runs isolated (serial-isolated).direct- run in current working tree.serial-isolated- one worktree and branch (galley/<galley>) per galley.parallel-isolated- reserved; currently falls back to serial with warning.
Release status log:
- For release targets, LinoLoop appends timeline events to
docs/work/releases/<release-id>/status.md. - If
--auto-pris set, it writes manual PR follow-up placeholders (no provider integration in v0.6.1).
Executor brief command:
- Canonical:
cli/linotype exec brief <galley> - Compatibility alias:
cli/linotype exec opencode <galley>
Operational notes
- LinoLoop is orchestration-only; it does not replace slug acceptance checks or commit discipline.
- Agents still follow
docs/ai/_agent-rules.md. - Releases are referencers, not containers: they point to galley IDs rather than duplicating galley content.
v0.6.2 additions
Iconic movie naming
- Each major release gets an unused movie codename (v0.6 = “Casablanca”).
cli/linotype release init <version> <movie>scaffoldsdocs/work/releases/<version>.mdand prevents duplicate movies via the changelog.
Single release file per version
- Projects keep user-facing notes in
docs/work/releases/<version>.mdrather than spreading them across apps. cli/linotype release note <version> "<summary>"appends bullets under the Highlights section.- Cross-link the release file from
CHANGELOG.mdto keep one canonical changelog.
Domain discipline + tests
docs/domain/index.mdships by default; galley run sheets now contain a “Domain updates” section that must be filled (or explicitly marked N/A).cli/check-domain.shand GitHub Actions fail builds if the index is missing or if galleys omit the section.cli/linotypenow sources modular Bash files with bats test coverage, making it easier to extend commands without editing a monolith.
v0.6.3 additions
Execution phases & context packs
docs/ai/_agent-rules.md(and the skeleton) now require behavioural slugs to run through Contract → Implementation → Verify, looping back to Contract if requirements change.- Agents must prepare per-slug context packs (purpose, allowed files, galley constraints, domain links) to limit token usage when running external tools.
- Optional
#phase:contract|build|verifycommit suffixes help reviewers see where a slug stopped.
Evidence discipline
- Slugs cannot move to “done” without listing the commands/tests executed and evidence pointers (files, outputs, hashes) in the slug + galley review.
- Release docs emphasise the single-source changelog:
docs/work/releases/<version>.mdplus the rootCHANGELOG.md.