Changed
- Adopted three retrospective improvement proposals (002fa6c6, d7662676, 4aa8d058):
/implement
Step 2 gains the dedicated-worktree fallback for an unavailable/dirty main checkout; CLAUDE.md's
plugin-refresh instruction is replaced with the verified version-keyed-cache procedure (purge +
lazy extraction + verification);/implementStep 1 and theworkflow-orchestratoroutput style
now apply thedelegatedtrait at Delegated/Parallel classification sodelegation-metadata
notes are schema-visible.
Added
- Mid-session config re-sync. The plugin now pushes a project's
.taskorchestrator/config.yaml
to the server's per-root config store as soon as the file changes, not just at session start — the
session-start.mjsSessionStart hook now returnshookSpecificOutput.watchPathsfor the
discovered config file, and a newFileChangedhook entry re-runsconfig-sync.mjswhen it's
edited mid-session. Requires Claude Code ≥ 2.1.220. - New
needs-test-authortrait separates test authoring from implementation. Adds a
test-authorskill and a three-note gate (test-planat queue,test-manifestat work,
test-independence-auditat review) so scenarios and oracles are frozen before implementation
exists rather than derived from it./implementgains a dedicated test-author wave between the
implementation wave and orchestrator verification;review-qualitygains an independence
verification check. Applied by default tobug-fix; opt-in forfeature-taskvia the
/implementStep 1 trigger rule. Direct tier uses a temporal-only degraded mode (single actor,
ordering-only separation) instead of a second dispatch.
Changed
-
Plugin:
/review-proposalsdispositions now write back to the source trend item. Rejecting a
proposal appends a do-not-re-graduate line to the trend that graduated it; accepting one whose
change is applied/landed retires the trend (gate-freecancel); the maintainer tracked-only path
leaves the trend active until a later retrospective verifies the change. Closes the loop the
trend-memory MCP migration made possible — previously the skill could not touch file-based trends. -
Plugin: retrospective trend memory moved from a per-project memory file into MCP work items.
/session-retrospectivepreviously read and rewrote a whole-filememory/retrospectives.md
(~55k tokens at steady state, exceeding the 25k read cap on a single call) on every run; trend
patterns now live as items under a process-globalRetrospective Trendscontainer, with one
evidence note per recurrence. Active-trend reads are now a targetedquery_itemslist-mode call
(title + summary only) instead of a whole-file load — roughly an 80% reduction in token cost for a
typical retrospective's trend read. Retirement is gate-free viaadvance_item(trigger="cancel"),
with nostart/completeever used on trend items, so the lifecycle stays safe under any user's
schema config. A one-time automatic migration ships in the skill: it runs at each project's next
/session-retrospectiveinvocation, migrating any existingmemory/retrospectives.mdentries into
the new container and rewriting the file to a pointer stub. -
Plugin: retrospective dispatch directives are now durable, not immediate. The
retro-trigger
hook'smode: dispatchdirective previously said "dispatch now", so orchestrators launched (and
later surfaced) the background retrospective mid-session while implementation subagents were still
running — no Claude Code hook event signals "all background tasks finished", and the model is the
only party that knows. The directive and theworkflow-orchestratoroutput style now instruct
dispatch at the next run boundary: hold while background tasks/subagents are in flight, merge any
directives that accumulate while holding into one dispatch covering the union of their roots.
Nudges gain a matching "background tasks still running" skip condition. The known trade-off — a
held directive is lost if the session is killed or compacts first (recover with a manual
/session-retrospective) — is documented inconfig-format.md§Retrospective. -
Bumped plugin version to 3.6.0 (minor): adds a
FileChangedhook for mid-session config re-sync,
the pattern-driven schema advisor inmanage-schemaswith 12 workflow profiles, and the
retrospective trend-memory migration to MCP items.
Fixed
- Lease-interval history close comparisons now normalize timestamp shapes with
datetime(): Exposed
timestamp columns store fractional seconds whiledatetime('now')is second-precision, so a hold
lapsing inside the current second could compare as unexpired in SQLite's lexicographic TEXT
comparison — skipping the expiry clamp and recordingreleasedinstead ofexpired. Sub-second
window, audit view only (beta field report). - Plugin:
skill-enforcementhook no longer nags in a loop. The hook'sadditionalContext
previously told the model to "abort this call, invoke the skill, then retry" — the model obeyed,
retried, and re-triggered the same warning forever, since the hook kept no state and its 200-char
substantive floor was unreachable for concise-by-design notes bound to a smallmaxLength.
Now: advisory-once semantics (a per-session/item/key marker suppresses a repeat warning for the
same note), amaxLength-aware substantive floor (scales down when a key's configured
maxLengthis small), and honest wording that no longer claims the call is blocked and adds an
"Unknown skill" escape hatch for invalid skill pointers. Also documented the skill-pointer
exact-name rule (qualified vs. bare names, built-in name collisions likereview) in
config-format.md, and added amanage-schemasvalidatecheck that flagsskill:values
colliding with built-in skill names (review,plan,run,init). advance_itemgate-blocked results now name the blocked transition. The gate-block error JSON
gains structuredpreviousRole/targetRolefields alongsidemissingNotes, so a rejected
transition identifies which phase's note set it failed instead of leaving the caller to infer it
from the trigger. The tool description now also states thatstart's gate is scoped to the item's
CURRENT phase — successivestartcalls gate different note sets as the role advances, which is
deterministic and not timing-dependent — and that a transition can cascade a parent to terminal
when the parent's downstream gates are already satisfied by prefilled notes. MCP surface only: the
REST422 gate_blockedpayload already carriedtargetRoleand does not yet carrypreviousRole.manage_items(update)now honors the top-leveltraitsparameter. It was previously accepted
and silently ignored — the call returned{updated:1, failed:0}having merged nothing, with no
error — because the update branch never read the parameter, whilecreatealways had. Precedence
now matchescreate: a per-itemtraitsfield overrides the shared top-level default, and traits
absent at both levels leave the item's existing traits untouched. Merge semantics are replace, not
union. The per-item form (items: [{itemId, traits: "..."}]) was never affected and needs no
migration.
Behavior change:traits: ""on update now clears an item's traits, where it was
previously a silent no-op. Because trait-derived note requirements merge into an item's resolved
schema, clearing traits also drops their gates — a caller that passes an emptytraitsstring on
update (e.g. a template that always sets the field) will now strip both. Omit the field entirely
to leave traits unchanged.
What's Changed
- fix: normalize timestamp shapes in lease-history clamp comparisons by @jpicklyk in #267
- feat: adopt Claude prompt-engineering guide recommendations across tool descriptions, skills, and plugin prompts by @jpicklyk in #268
- docs(retro): point the trend file at MCP for proposal state instead of mirroring it by @jpicklyk in #269
- docs(retro): add a one-time migration for legacy trend-memory files by @jpicklyk in #270
- feat(plugin): add pattern-driven schema advisor to manage-schemas skill by @jpicklyk in #271
- docs(plugin): route needs-security-review to the built-in security-review skill + expand trait library by @jpicklyk in #272
- fix(plugin): defer retrospective dispatch to the run boundary by @jpicklyk in #274
- feat(plugin): re-sync per-root config mid-session via watchPaths + FileChanged by @jpicklyk in #282
- feat(plugin): two-path improvement-proposal handling (GitHub feedback + auto-apply) by @jpicklyk in #273
- feat(plugin): move retrospective trend memory to MCP items with one-time migration by @jpicklyk in #283
- feat(plugin): review-proposals dispositions write back to source trend items by @jpicklyk in #284
- fix(plugin): skill-enforcement hook — advisory-once semantics, maxLength-aware floor, exact-name skill-pointer docs by @jpicklyk in #285
- chore(skills): adopt proposals 002fa6c6/d7662676/4aa8d058 by @jpicklyk in #286
- feat(skills): separate test authoring from implementation (needs-test-author trait + test-author role) by @jpicklyk in #287
- fix(advance-item): name previousRole/targetRole on gate-blocked results by @jpicklyk in #288
- fix(items): honor top-level traits on manage_items update by @jpicklyk in #289
- docs(changelog): record #288 and #289 under Unreleased by @jpicklyk in #291
- release: v3.13.1 — advance_item gate-block naming and manage_items traits fix by @jpicklyk in #292
Full Changelog: v3.13.0...v3.13.1