Releases: levifig/loaf
Releases Β· levifig/loaf
v2.0.0-dev.49
Fixed
findActiveSessionForBranchnow applies a deterministicfilePathtiebreaker 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 ofreaddirSyncorder.
v2.0.0-dev.47
Fixed
- Branch-fallback session routing no longer rewrites the adopted session's
branch:frontmatter. Previously, everyloaf session logagainst 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 logadopts 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
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.jsonreads and writes from a linked git worktree now follow the SPEC-036 centralization to the main worktree, soloaf release --pre-merge(and other consumers ofloaf.json) no longer fail with "No version files found" when invoked from a migrated linked worktree.agents-confignow 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 byloaf migrate worktree-storage.workflow-pre-prno 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
Fixed
loaf releaserefreshes uv-managed Python release artifacts with package-localuv sync, and refuses to commit unignored.venvfiles created during release artifact refresh.
v2.0.0-dev.44
Added
- Add dedicated handoff skill (b9a97b5)
v2.0.0-dev.43
Added
loaf task list --status <status>filters task output by lifecycle state.
Changed
loaf release --post-mergenow validates release readiness from version files andCHANGELOG.md, so conventional squash subjects likefeat:andfix:are accepted.- Release workflow guidance now calls out post-bump build-artifact verification and stricter changelog curation before publishing.
Fixed
loaf migrate worktree-storagetreats 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 respectsNO_COLORand 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
Added
- Worktree-aware
.agents/storage. Loaf now treats.agents/as project-scoped state rather than branch-scoped content. Running anyloafcommand from a linked git worktree (agit 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;--applyperforms the move. Conflict policy prefers the most-recently-modified version when a file exists in both locations, with--force-from-worktreeand--force-from-mainoverrides. Writes a.moved-toback-pointer in the source location and is idempotent on re-run. EXDEV (cross-filesystem) moves fall back tofs.cpSyncwithpreserveTimestamps.- Pre-A3 refusal nudge. Loaf invocations in a linked worktree with un-migrated content are refused with exit code
2and a single-action instruction: runloaf migrate worktree-storage. The migrate command itself,help/-h/--help, and-v/--versionare always allowed; single-checkout repositories and the main worktree never trigger the refusal. LOAF_DEBUG_RESOLVEenvironment variable. When set to1/true/yes/on(case-insensitive), surfaces git probe diagnostics fromfindAgentsDirthat 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
Added
git-workflowskill β new "Changelog Discipline" section inreferences/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-generatedloaf release --pre-mergeoutput before bumping.
v2.0.0-dev.39
Added
- ADR lifecycle now supports
Rejectedas a fifth status. Full lifecycle:Proposed | Accepted | Rejected | Deprecated | Superseded. ARejectedADR records "the team weighed this option and explicitly chose against it" β useful when the same idea resurfaces.
Changed
architectureskill β Lifecycle section codifies body-section requirements by status.## Deprecatedis required forDeprecated,## Rejectedis required forRejected,## Supersededis optional forSuperseded(thesuperseded_by:linkage suffices).- ADR frontmatter schema finalized as structured what+when:
status,date,accepted_date(optional),rejected_date,deprecated_date,supersedes,superseded_by. Thedeprecated_reasonandmigrated_tofields 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 thatRejectedandDeprecatedADRs require a body section. ADR-004,ADR-006,ADR-009frontmatter cleaned up to match the new schema; body sections preserve all migration content.docs/ARCHITECTURE.mdOperating Principles section gains two new subsections:- Adversarial Review for Substantive Guidance Changes β
loaf:revieweris the baseline (internal-consistency auditor);codex:rescueor 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.
- Adversarial Review for Substantive Guidance Changes β
v2.0.0-dev.38
Changed
architectureskill β 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.architectureskill β "decisions are choices" filter. ADRs require at least one credible alternative considered. Catches principle/manifesto-shaped artifacts at write time and routes them toARCHITECTURE.mdorVISION.mdinstead.architectureskill β 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.architectureskill β Lifecycle nuance. OriginalDecision/Context/Rationale/Consequencessections are immutable post-acceptance; status transitions, frontmatter additions, and append-only## Deprecated/## Supersededsections are the supported lifecycle mechanism. Distinguishes recategorization (deprecate-in-place, content moved elsewhere) from supersession (new ADR replaces old, both linked).architectureskill β 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 thereflectskill's shared template via the build system. docs/ARCHITECTURE.mdβ new Operating Principles section, with theAuthorship Model β Agents Create, Humans Curatesubsection 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.mdNaming Conventions section. - ADR-006 (Agent-Creates, Human-Curates Model) β recategorized as a guiding principle (philosophical/operational rationale, not architectural). Active source:
docs/ARCHITECTURE.mdOperating Principles section. - ADR-009 (Sparks Convention in Brainstorm Documents) β recategorized as workflow lore for the
brainstormskill. Owning skill is the canonical source.