Skip to content

Releases: levifig/loaf

v2.0.0-dev.49

31 May 01:28
v2.0.0-dev.49
8c3d156

Choose a tag to compare

Fixed

  • findActiveSessionForBranch now applies a deterministic filePath tiebreaker on both the branch-match and most-recent-active fallback paths, so candidates with byte-identical effective timestamps resolve to the same session across repeated calls regardless of readdirSync order.

v2.0.0-dev.47

28 May 09:01
v2.0.0-dev.47
61a3168

Choose a tag to compare

Fixed

  • Branch-fallback session routing no longer rewrites the adopted session's branch: frontmatter. Previously, every loaf session log against a branch with no dedicated session would overwrite the resolved session's origin branch, breaking subsequent routing. The session's origin is now preserved across every adoption.
  • Multi-worktree branch routing now resolves correctly. When several sessions are active simultaneously (orchestrator on one branch, agents on others) and the current branch has no dedicated session, loaf session log adopts the most-recently-updated active session instead of dropping the entry. Previous behavior only fell back when exactly one active session existed.
  • Branch-fallback WARN now names the resolved session file and its origin branch (e.g., WARN: no session for branch 'release/v0.16.0'; logging to most-recent active session '20260101-120000-session.md' (origin branch 'cwt/foo'). Pass --session-id <id> to silence.), so misroutes are visible at a glance. A distinct WARN fires when no active session exists to fall back to.
  • Branch-fallback WARN now distinguishes rename-link adoption (WARN: branch '<new>' appears to be a rename of '<old>'; logging to its session ...) from most-recent-active adoption, so operators can tell why a log landed where it did instead of seeing the inaccurate "most-recent active" wording on every adoption.

v2.0.0-dev.46

28 May 08:38
v2.0.0-dev.46
5692569

Choose a tag to compare

v2.0.0-dev.46 Pre-release
Pre-release

Changed

  • Adopt Common Changelog as Loaf's changelog writing standard (Common Changelog)
  • Let council workflows state the selected composition and spawn directly, while still reserving the final decision for the user

Fixed

  • .agents/loaf.json reads and writes from a linked git worktree now follow the SPEC-036 centralization to the main worktree, so loaf release --pre-merge (and other consumers of loaf.json) no longer fail with "No version files found" when invoked from a migrated linked worktree.
  • agents-config now throws an actionable error (instead of silently writing a stale shadow config) when a linked worktree's recorded main has been removed, mirroring the diagnostic surfaced by loaf migrate worktree-storage.
  • workflow-pre-pr no longer treats backtick-quoted ## [Unreleased] mentions in CHANGELOG prose as the real section header, so PRs whose intro text references the staging area no longer false-block with "empty Unreleased section".

v2.0.0-dev.45

27 May 15:49
v2.0.0-dev.45
62cc805

Choose a tag to compare

Fixed

  • loaf release refreshes uv-managed Python release artifacts with package-local uv sync, and refuses to commit unignored .venv files created during release artifact refresh.

v2.0.0-dev.44

22 May 23:32
v2.0.0-dev.44
4e178b3

Choose a tag to compare

Added

  • Add dedicated handoff skill (b9a97b5)

v2.0.0-dev.43

22 May 10:58
v2.0.0-dev.43
eeb60af

Choose a tag to compare

Added

  • loaf task list --status <status> filters task output by lifecycle state.

Changed

  • loaf release --post-merge now validates release readiness from version files and CHANGELOG.md, so conventional squash subjects like feat: and fix: are accepted.
  • Release workflow guidance now calls out post-bump build-artifact verification and stricter changelog curation before publishing.

Fixed

  • loaf migrate worktree-storage treats identical file contents as already resolved before considering mtimes or overwrite conflicts.
  • Worktree migration diagnostics now surface directory-read failures under LOAF_DEBUG_RESOLVE, and migration output respects NO_COLOR and non-TTY output.
  • Release tags are created with explicit signed-tag mode.
  • Task index rebuild and frontmatter sync preserve valid concurrent entries and unknown spec metadata.
  • Task and session lock staleness detection share one PID/host-aware policy, avoiding false eviction of live same-host lock holders.
  • Linked-worktree migration refusal preserves unknown-command feedback while still nudging users toward loaf migrate worktree-storage.

v2.0.0-dev.42

19 May 17:26
v2.0.0-dev.42
16676aa

Choose a tag to compare

v2.0.0-dev.42 Pre-release
Pre-release

Added

  • Worktree-aware .agents/ storage. Loaf now treats .agents/ as project-scoped state rather than branch-scoped content. Running any loaf command from a linked git worktree (a git worktree add-style checkout) resolves .agents/ to the main worktree's directory instead of the worktree's own copy. Sessions, IDs, knowledge, and ideas converge across all worktrees of a project. Single-checkout repositories see no behavior change. See ADR-013 for the decision rationale and rejected alternatives.
  • loaf migrate worktree-storage. New command that moves a linked worktree's local .agents/ content into the main worktree's .agents/. Dry-run by default; --apply performs the move. Conflict policy prefers the most-recently-modified version when a file exists in both locations, with --force-from-worktree and --force-from-main overrides. Writes a .moved-to back-pointer in the source location and is idempotent on re-run. EXDEV (cross-filesystem) moves fall back to fs.cpSync with preserveTimestamps.
  • Pre-A3 refusal nudge. Loaf invocations in a linked worktree with un-migrated content are refused with exit code 2 and a single-action instruction: run loaf migrate worktree-storage. The migrate command itself, help / -h / --help, and -v / --version are always allowed; single-checkout repositories and the main worktree never trigger the refusal.
  • LOAF_DEBUG_RESOLVE environment variable. When set to 1 / true / yes / on (case-insensitive), surfaces git probe diagnostics from findAgentsDir that are otherwise suppressed. Useful for diagnosing unexpected refusal nudge fires.

Changed

  • Retired convention: "spec on main, tasks+code on branch". Under the worktree-aware storage model, .agents/ content always lives in the main worktree's directory regardless of which branch's PR is in flight. PR templates and project docs that referenced this convention should be updated.

Migration

Users with active git worktree add linked worktrees containing .agents/ content must run loaf migrate worktree-storage --apply once after upgrading. Single-checkout repositories require no action.

v2.0.0-dev.40

02 May 22:36
0ba8fc3

Choose a tag to compare

v2.0.0-dev.40 Pre-release
Pre-release

Added

  • git-workflow skill β€” new "Changelog Discipline" section in references/commits.md. Codifies the rule that user-facing CHANGELOG entries describe what changed from a user/operator's perspective, not how the work was tracked or organized internally. Drops internal terms (spec/task IDs, internal session references, hook IDs that aren't user-facing); keeps references to public artifacts (ADR-NNN, public CLI flags, documented file paths); requires curating auto-generated loaf release --pre-merge output before bumping.

v2.0.0-dev.39

02 May 22:29
5cf95a3

Choose a tag to compare

v2.0.0-dev.39 Pre-release
Pre-release

Added

  • ADR lifecycle now supports Rejected as a fifth status. Full lifecycle: Proposed | Accepted | Rejected | Deprecated | Superseded. A Rejected ADR records "the team weighed this option and explicitly chose against it" β€” useful when the same idea resurfaces.

Changed

  • architecture skill β€” Lifecycle section codifies body-section requirements by status. ## Deprecated is required for Deprecated, ## Rejected is required for Rejected, ## Superseded is optional for Superseded (the superseded_by: linkage suffices).
  • ADR frontmatter schema finalized as structured what+when: status, date, accepted_date (optional), rejected_date, deprecated_date, supersedes, superseded_by. The deprecated_reason and migrated_to fields introduced during the previous deprecation pass are dropped β€” context belongs in the body section's prose, not duplicated in frontmatter.
  • ADR template (content/templates/adr.md) updated with the new schema and a header note that Rejected and Deprecated ADRs require a body section.
  • ADR-004, ADR-006, ADR-009 frontmatter cleaned up to match the new schema; body sections preserve all migration content.
  • docs/ARCHITECTURE.md Operating Principles section gains two new subsections:
    • Adversarial Review for Substantive Guidance Changes β€” loaf:reviewer is the baseline (internal-consistency auditor); codex:rescue or equivalent adversarial reviewer is recommended when available, since the two readers catch different defect classes. Codex is plugin-dependent and optional.
    • Recategorization as a General Lifecycle Pattern β€” distinguishes supersession (the answer changed; new artifact replaces old) from recategorization (the artifact's classification was wrong; the underlying rule still holds; deprecate-in-place and point to new home). Generalizes beyond ADRs.

v2.0.0-dev.38

02 May 21:53
c51785d

Choose a tag to compare

v2.0.0-dev.38 Pre-release
Pre-release

Changed

  • architecture skill β€” tightened bar. ADRs are now reserved for architecturally significant decisions (those affecting the system's structure, key quality attributes, dependencies, interfaces, or construction techniques) OR decisions that are difficult to reverse, per Microsoft Well-Architected canonical phrasing. The skill includes a structured Triage Gate that operationalizes the bar with explicit routing for non-ADR decisions to /shape (SPEC), ARCHITECTURE.md / VISION.md, the owning skill's docs, or session-log.
  • architecture skill β€” "decisions are choices" filter. ADRs require at least one credible alternative considered. Catches principle/manifesto-shaped artifacts at write time and routes them to ARCHITECTURE.md or VISION.md instead.
  • architecture skill β€” cost-of-divergence framing. The skill evaluates decisions by the consequence of casual divergence (now: security regression, contract or interface break, multi-PR coordination; later: foundational shape commitments whose future reversal cost is the reason to record now) rather than by the cost of change alone. Captures security-boundary decisions reversible-by-code and foundational early-project commitments.
  • architecture skill β€” Lifecycle nuance. Original Decision/Context/Rationale/Consequences sections are immutable post-acceptance; status transitions, frontmatter additions, and append-only ## Deprecated / ## Superseded sections are the supported lifecycle mechanism. Distinguishes recategorization (deprecate-in-place, content moved elsewhere) from supersession (new ADR replaces old, both linked).
  • architecture skill β€” maturity-aware bar. The bar is constant; the number of decisions clearing it scales with project maturity. Early/exploratory phases pass foundational shape commitments via the cost-of-divergence framing's "later" prong.
  • ADR template (content/templates/adr.md) β€” HTML-comment header surfaces the bar to agents reading the template; propagates to the reflect skill's shared template via the build system.
  • docs/ARCHITECTURE.md β€” new Operating Principles section, with the Authorship Model β€” Agents Create, Humans Curate subsection as its first principle.
  • docs/knowledge/knowledge-management-design.md β€” new Naming Conventions section.
  • docs/decisions/README.md β€” index updated; missing ADR-012 row added.

Deprecated

  • ADR-004 (Knowledge Naming Convention) β€” recategorized as a project naming convention. Active source: docs/knowledge/knowledge-management-design.md Naming Conventions section.
  • ADR-006 (Agent-Creates, Human-Curates Model) β€” recategorized as a guiding principle (philosophical/operational rationale, not architectural). Active source: docs/ARCHITECTURE.md Operating Principles section.
  • ADR-009 (Sparks Convention in Brainstorm Documents) β€” recategorized as workflow lore for the brainstorm skill. Owning skill is the canonical source.