Skip to content

Releases: eas4ai/sudus

4.5.0

Choose a tag to compare

@eas4ai eas4ai released this 15 Oct 20:03

Spec revision 21, on the developer's ok of 2026-10-15. Earlier logs still read. A backlog item that takes over a decision has a new optional decision field, so a log holding one needs Sudus 4.5.0 or later.

  • A superseded commitment's unbuilt decision no longer holds its successor (issue #71). A Consequential decision recorded under a commitment the developer superseded held the successor's build and Done, although its work belongs to the commitment set aside and the successor cannot realize it truthfully. Such a decision now carries. When the successor's requirements include one the decision rests on, the successor builds it as before. Otherwise wake names backlog DECISION before done, and sudus item --backlog --decision ID moves it to the backlog, with the slug, source requirement and body taken from the decision unless given. The item is promoted after Done like any backlog item. The supersession's own decision still holds the successor.
  • A measured decision's rests_on also names the requirements among its draft's concerns, so a supersession carries it by requirement too. A measured decision recorded earlier names no requirement, so it moves to the backlog, sourced from the commitment it was recorded under.

4.4.0

Choose a tag to compare

@eas4ai eas4ai released this 13 Oct 10:42

Spec revision 20, on the developer's ok of 2026-10-13. No record shape changes; earlier logs still read, and a request that fits is built as before, so earlier measurements and calibration are unchanged.

  • A Consequential decision on a large commitment can be measured (issue #69). The measurement state carries the text of every requirement in the commitment, so a commitment with many requirements filled the request by itself: every sudus measure on it was unavailable oversize, the agent could cut nothing, and every Consequential decision went to the developer. A request over a size limit is now built once more with the text of only the requirements the draft's concerns name; the others keep their identifier and text digest. When that request fits, it is sent, and the measurement's reason ends with "sent with requirement text for REQ only (the full request: ...)", so sudus decide --consequential can follow. When it still does not fit, the draft is unavailable oversize, the reason ends with "with requirement text for REQ only", and sudus escalate --consequential takes it to the developer as before.

4.3.2

Choose a tag to compare

@eas4ai eas4ai released this 13 Oct 10:29
  • Wake reads an identity probe the way check recorded it under the Codex sandbox (issue #70). Node gives a child's stdout and stderr as a socket pair, and under the Codex sandbox a Node program writing to that socket through process.stdout prints nothing and still exits 0. So a probe such as npm --version read as "" in wake, which Codex runs inside the sandbox, and as "11.3.0" in sudus check, which writes .git and so runs outside it. The identities never matched, and wake named run REQ after every passing check. A probe now writes into a pipe that cat copies out, and its exit status still decides. A probe's value is unchanged outside the sandbox, so existing receipts stay current. Mechanism commands run as before: sudus check cannot run inside the Codex sandbox, which keeps .git read-only.

4.3.1

Choose a tag to compare

@eas4ai eas4ai released this 11 Oct 18:09
  • sudus promote adds the roadmap section a backlog item lacks (issue #68). Wake named promote ITEM for any backlog item, but an item captured with sudus item --backlog has no section in docs/spec/roadmap.md, and promote refused it with "no roadmap section ITEM". Promote now adds ## ITEM with a Requirements: line naming the item's source requirement, which capture already checked is Agreed, and a line that says what it delivers with the item's body. A body naming an identifier the specification does not define would fail lint, so that section names the item instead; the body is in the promotion decision either way. The section is written in the promotion's one transaction with the Current: move, so recovery after a crash completes it with the rest. A section written beforehand is used as it is, so the agent can still name more requirements.

4.3.0

Choose a tag to compare

@eas4ai eas4ai released this 10 Oct 23:40

Spec revision 19, on the developer's ok of 2026-10-10. No record shape changes; earlier logs still read, and a log with a repeated resolution still reads in earlier versions.

  • A fix revised after its resolution can be recorded again (issue #66). sudus resolve refused a finding already resolved, so when a fix changed after its resolution, the first explanation stayed the finding's resolution and sudus done printed it for a design that did not ship. A second sudus resolve SLUG N of a resolved finding now supersedes the earlier one. The review report sudus done prints shows the latest and names the resolutions it supersedes. An open finding with the same number still comes first; --source reaches a resolved one beside it. A resolution is recorded only while the commitment is open, as before. The working agreement template's resolve line now tells the agent to run sudus resolve again when a fix changes. The issue's optional amendment to the self-review after the report is not built: a resolution's explanation can name the review statement it reverses.
  • sudus measure refused between commitments before recovering an intent a crash left open (found by the adversarial review of this release). Since 4.2.16 such a jev intent from the last commitment was never finalized. Recovery now runs first, and the refused draft still gets no record.

4.2.16

Choose a tag to compare

@eas4ai eas4ai released this 10 Oct 23:19
  • sudus measure refuses when no commitment is open, before it writes any record (issue #67). After Done, measure --brief accepted a draft about a new defect, recorded a review intent and printed the command that completes it, and that command failed with "no pending review measurement". A measurement serves decide --consequential and escalate --consequential, which both need an open commitment, so a measurement between commitments could never be used. The refusal names where the decision goes instead: between commitments a Consequential decision is the developer's, and the agent records their ruling with sudus decide --consequential --title .... The jev source is refused the same way, without a call.

4.2.15

Choose a tag to compare

@eas4ai eas4ai released this 05 Oct 19:40
  • After sudus supersede, wake names the command that resumes the transition (issue #65). It printed "pending supersession to SLUG; run /existing-project", which read as onboarding the project again, and the agent cannot run that skill itself. It now prints "pending supersession to SLUG; run sudus start SLUG once docs/spec/roadmap.md has a "## SLUG" section listing its Agreed requirements (the existing-project skill's pending step)". sudus start says what is missing if the specification or the authorization is not ready. The status band still shows "pending supersession to SLUG".

4.2.14

Choose a tag to compare

@eas4ai eas4ai released this 03 Oct 14:45
  • Wake names run REQ, not fix ITEM, for a defect whose fix is recorded when only the requirement's check went stale (issue #64). Any commit to the requirement's mechanism inputs made its pass stale, and wake named the defect again with "has no current pass at or after the fix". The manual's move for fix (a failing test, the fix, a commit, a check, then sudus fix) would record the fix a second time, while a check was the only step left. Between commitments wake now names run REQ with the reason "the fix of ITEM is recorded and no current receipt carries a result for REQ". While a commitment that owns the requirement is open, wake names the check in its usual place: an uncommitted input comes first, and while the report has an open finding, that finding's resolution comes first. A check that fails still names fix ITEM, because the fix no longer holds.

4.2.13

Choose a tag to compare

@eas4ai eas4ai released this 02 Oct 04:00
  • Under Codex the stop hook no longer shows the wake verdict after every response (issue #63). Since 4.2.11 it sent the whole block (verdict, action, reason, predicate) as Codex's systemMessage, which Codex shows to you, while the per-turn hook already gives the agent the verdict. A routine verdict, or a project that is not initialized, now prints nothing at stop. The systemMessage carries only what needs you: the version-mismatch or pin line, or a wake that failed with its output. Without PLUGIN_ROOT (Claude Code) the stop hook prints as before.

4.2.12

Choose a tag to compare

@eas4ai eas4ai released this 01 Oct 23:20
  • After a supersession, a roadmap breach can be kept or restored (issue #62). The breach captured the roadmap before the successor's start rewrote its Current: line, so keep refused even with the developer's ok, restore refused too, and wake named scope docs/spec/roadmap.md indefinitely. Keep and restore now read a Current: line naming the open commitment as the start's own write. Any other difference still refuses: other bytes, a mode change, or Current: naming another commitment.
  • The hook tests turn off git's auto maintenance in the throwaway repositories they build. Its lock file appeared and vanished after a commit and could fall between two fingerprints, failing a test that no hook had changed.