Package Changelog
Minor Changes
-
30cd195: Adds
cadence verify phase [phase] [num]— a state-independent, phase-scoped re-derivation of whether a settled phase's recorded AC coverage still holds against the current working tree, using only the phase's committedDRAFT.mdandSUMMARY.json(no active loop state required). The coverage rescan is scoped to the phase's own declared task files, closing a cross-phaseAC-Ntoken collision that an unscoped repo-wide scan would otherwise be vulnerable to.--changed --base <ref>discovers phases viagit difffor CI use; the optionalverification.testCommandre-run reports a separate, suite-wide (not per-AC) pass/fail signal.Adds
cadence init --ci, which scaffolds a GitHub Actions workflow callingcadence verify phase --changedon every pull request, plus prints (never executes) agh apirecipe to make that check required on the default branch. Closes rec-20260709-003. -
42deb4b: Adds
cadence next, a read-only command that answers "what now?" deterministically from live loop state at any position — 1-3 ranked legal moves with exact commands, plus a stable--jsoncontract ({schemaVersion: 1, position, remainingTasks, blockedOn, legalMoves[]}) for agent orchestrators. Sourced from an extendednextAction()(packages/core/src/progress.ts), which now also computes rankedlegalMoves[]alongside its existing{command, reason}shape — strictly additive;cadence progressandcadence quickstartare unchanged. Closes rec-20260721-002.Registers
/cadence-nextas the 15th Claude Code slash command and the matching Codex prompt command (both host adapters share theCOMMAND_GUIDANCEcatalog in@manehorizons/cadence-types).Also narrows
cadence status --jsonandcadence quickstart --json'snextfield to{command, reason}explicitly — both were passingnextAction()'s full return through unnarrowed, so the newlegalMoves[]array would otherwise have silently leaked into those two commands' existing public JSON contracts (mirrors the narrowingcadence progressalready had). -
b2b8b6b: Empty-result and refusal messages across the intelligence-layer CLI surface (
cadence recommend,cadence milestone propose,cadence recommendation promote/convert/list,cadence retro) now state why the result is empty, the concrete unmet precondition, the nearest-miss candidate from the already-loaded ledger, and the exact command that would change the outcome — closing rec-20260721-001.Adds a shared
findNearestCandidateshelper (packages/core/src/intelligence/nearest-candidate.ts, extracted fromcadence next's existing ranking logic with no behavior change) as the preferred mechanism for "nearest eligible candidate" lookups, so a message's suggestion never diverges fromcadence recommend/cadence next's own ranking.cadence milestone proposegets this enrichment on both the CLI and the MCP-tool (cadence_milestone_propose) surfaces, keyed on "zero milestones newly proposed this run" rather than "the ledger is empty" so it still fires correctly when older accepted/deferred/exported milestones already exist.cadence recommendationnot-found errors (5 near-duplicate sites) are consolidated behind one message builder with a nearest-ID suggestion; its 7 promote/convert status-refusal sites now append the exact unblocking command to their existing status text.cadence retronow distinguishes "no settled phases yet" from "phases scanned, zero friction found" instead of one ambiguous message for both.docs/concepts.mddocuments the four-part invariant (why / precondition / nearest candidates / exact command) as the guidance bar for future intelligence-layer commands. -
a09ee46: Adds
cadence milestone reopen <id>, a CLI transition that moves adeferredmilestone back toproposedso its claimed recommendations become eligible for re-clustering again. PreviouslyapplyTransition()had no path out ofdeferred—clusterMilestones()treats any non-proposedmilestone as a permanent survivor and permanently excludes its claimedrecommendationIds, so a deferred milestone stayed stuck forever with no CLI recourse short of hand-editingmilestones.json.reopenrefuses loudly (exit 1, no state mutation) if the milestone isn't currentlydeferred(naming its current status), the id doesn't exist, or the milestone's claimed recommendation(s) collide with another still-live (non-deferred/non-proposed) milestone. -
6e774d5: Adds an opt-in
<id>-UI-SPEC.mdartifact, sibling to the existing pre-DRAFTSPEC.md, for a phase that touches UI surfaces.cadence spec new --uiscaffolds it with a fixed shape — per-componentLayout & TokensandPrecedent Referencesnested under each### <Component>, plus a whole-sliceResponsive & Interactionsection — so a design contract can be locked down before DRAFT tasks are written, closing rec-20260711-004.cadence spec approveruns a new convergentui-spec-reviewgate after the existingspec-reviewgate, only when a sibling UI-SPEC is present: samenextConvergenceprimitive, its own<id>-UI-SPEC-REVIEW.jsonsidecar, its own unconditionalui-spec-review-unconvergedanomaly, and its own independent--allow-ui-spec-review-failurebypass flag.cadence draft newseeds an approved UI-SPEC's content into a new## UI ContractDRAFT section (bold-text rendering, no nested headings) between Acceptance Criteria and Tasks.No new loop position and no
state.jsonschema change — opt-in purely by the UI-SPEC file's own presence, the same pattern the SPEC stage itself uses. The newuiSpecReviewconfig key is wired intocadence config explainandcadence activatealongside the other six provider blocks.
Patch Changes
Published Packages
All public packages are published on npm as 1.50.0:
@manehorizons/cadence-core@manehorizons/cadence-host-claude-code@manehorizons/cadence-host-codex@manehorizons/cadence-types
Verification
- npm publish completed with provenance in the Release workflow.
- Remote tag
v1.50.0is verified before the GitHub Release is created. - npm package versions and GitHub Release metadata are verified after publish.
- Workflow run: https://github.com/manehorizons/cadence/actions/runs/29940930374