Repository navigation
Releases: eas4ai/sudus
Releases · eas4ai/sudus
Release list
4.5.0
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
buildand 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 namesbacklog DECISIONbeforedone, andsudus item --backlog --decision IDmoves 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_onalso 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
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 measureon it wasunavailable 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: ...)", sosudus decide --consequentialcan follow. When it still does not fit, the draft isunavailable oversize, the reason ends with "with requirement text for REQ only", andsudus escalate --consequentialtakes it to the developer as before.
4.3.2
- 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.stdoutprints nothing and still exits 0. So a probe such asnpm --versionread as "" in wake, which Codex runs inside the sandbox, and as "11.3.0" insudus check, which writes.gitand so runs outside it. The identities never matched, and wake namedrun REQafter every passing check. A probe now writes into a pipe thatcatcopies 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 checkcannot run inside the Codex sandbox, which keeps.gitread-only.
4.3.1
sudus promoteadds the roadmap section a backlog item lacks (issue #68). Wake namedpromote ITEMfor any backlog item, but an item captured withsudus item --backloghas no section in docs/spec/roadmap.md, and promote refused it with "no roadmap section ITEM". Promote now adds## ITEMwith aRequirements: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 theCurrent: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
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 resolverefused a finding already resolved, so when a fix changed after its resolution, the first explanation stayed the finding's resolution andsudus doneprinted it for a design that did not ship. A secondsudus resolve SLUG Nof a resolved finding now supersedes the earlier one. The review reportsudus doneprints shows the latest and names the resolutions it supersedes. An open finding with the same number still comes first;--sourcereaches a resolved one beside it. A resolution is recorded only while the commitment is open, as before. The working agreement template'sresolveline now tells the agent to runsudus resolveagain 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 measurerefused 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
sudus measurerefuses when no commitment is open, before it writes any record (issue #67). After Done,measure --briefaccepted 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 servesdecide --consequentialandescalate --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 withsudus decide --consequential --title .... The jev source is refused the same way, without a call.
4.2.15
- 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 startsays what is missing if the specification or the authorization is not ready. The status band still shows "pending supersession to SLUG".
4.2.14
- Wake names
run REQ, notfix 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 forfix(a failing test, the fix, a commit, a check, thensudus fix) would record the fix a second time, while a check was the only step left. Between commitments wake now namesrun REQwith 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 namesfix ITEM, because the fix no longer holds.
4.2.13
- 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. ThesystemMessagecarries only what needs you: the version-mismatch or pin line, or a wake that failed with its output. WithoutPLUGIN_ROOT(Claude Code) the stop hook prints as before.
4.2.12
- 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 namedscope docs/spec/roadmap.mdindefinitely. Keep and restore now read aCurrent:line naming the open commitment as the start's own write. Any other difference still refuses: other bytes, a mode change, orCurrent: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.