Repository navigation
release: 5.3.0 - #559
Merged
Merged
release: 5.3.0#559
Conversation
Seven issues, one theme: a declaration either binds or is refused where it is written. Each surface below accepted something that read as a decision and enforced none of it. - #473 capability vocabulary -- a CapabilityPolicy that denied everything denied nothing outside the four sandbox flags. Five names added; every builtin is now classified as bearing authority or explicitly not, so a new one fails the suite until somebody decides which. - #478 SyscallSpec.capability enforced, not merely published; register_syscall refuses a spec the policy layer cannot name. - #467 allowed_paths gains writable_paths -- read-only context, editable subtree. - #490 nodus.toml refuses tables and keys it does not read; `entry` selects what `nodus run` starts. - #492 an unhonoured `worker:` warns instead of running in-process silently. - #471 / #537 a conditional edge is marked in the plan and drawn as such. Version bump, CHANGELOG cut, and every prose claim moved in the same commit -- which is the step that has gone wrong in three of the last four releases. The --versions gate found 8 stale claims after the bump, across llms.txt, llms-full.txt, CLAUDE.md and ECOSYSTEM_READINESS_ASSESSMENT.md; all fixed here. README's "Recent:" paragraph is rewritten now rather than after the tag, because readme = "README.md" makes it the permanent PyPI page. Gate 10b probes extended with nine 5.3.0 claims and run BEFORE tagging, per the sequence. They caught one real stale artifact: ECOSYSTEM_COVERAGE_ANALYSIS.md still recorded SyscallSpec.capability as "declarative metadata, never enforced", which #478 had made false. Corrected. That is the second cycle running where the pre-tag prose probe caught something no other gate could. Two probe fixes worth keeping: CHANGELOG is excluded from the stale-prose sweep (recording what *was* is its job), and the reporter now reconfigures stdout to utf-8 -- it crashed on cp1252 while printing a real finding, turning a caught defect into a traceback. 5.3.0 is a minor, but it is not purely additive: a nodus.toml declaring unknown tables used to load and now does not. Recorded in the SemVer policy section rather than left for a reader to discover. Gates: full suite 2,623 passed; ruff and mypy clean; nodus_gate --all passes; --closed-issues --section 5.3.0 passes 7/7; --versions 11/11 against 5.3.0. nodus-run-action needs republishing after publish (Stage 6). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B8nTAPwZc9zV7PKDvxQkYE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Steps 1–5 of the release sequence in
CLAUDE.md. Stops at the tag — nothingis published by merging this.
What 5.3.0 is
Seven issues, one theme: a declaration either binds or is refused where it is
written. Each surface accepted something that read as a decision and enforced
none of it.
CapabilityPolicydenying everything denied nothing outside the four sandbox flagsSyscallSpec.capabilitypublished bysyscall_list(), read by nothingFS_READdeclared and attached to nothing;allowed_pathshad no write dimensionnodus.tomlaccepted any table and discarded what it did not readworker:ran in-process and reported successNot purely additive
A
nodus.tomldeclaring unknown tables used to load and now does not (#490).Strictly that makes previously-"working" input fail, so it is the one thing in
5.3.0 a reader should not assume is safe. It is recorded in the SemVer policy
section rather than left to be discovered.
I shipped it as a refusal rather than the warn-then-error staging used for
worker:(#492) and concurrent writes (#547), because a manifest isconfiguration read once at load rather than behaviour observed during a run, and
a warning there is read by nobody. The fix is one word in the cases seen, and the
error says which word. Happy to restage it if you'd rather.
The version-claim sweep
The
--versionsgate found 8 stale claims after the bump —llms.txt,llms-full.txt,CLAUDE.md×3,ECOSYSTEM_READINESS_ASSESSMENT.md×3. Allfixed in this commit, which is the point of running it after step 2 rather than
only in step 1, where it passes by definition.
README.md's "Recent:" paragraph is rewritten now, before the tag, becausereadme = "README.md"makes it the permanent PyPI page and release immutabilitymakes a later fix impossible.
Gate 10b probes, written before the tag
Extended with nine 5.3.0 claims and run against the dev tree. They caught one
real stale artifact that no other gate could see:
Corrected here. That is the second cycle running where the pre-tag prose
probe caught something after every code gate was green.
Two probe fixes worth keeping:
CHANGELOG.mdis excluded from the stale-prose sweep. It flagged the 5.3.0entries describing what was fixed — recording what was is a changelog's job.
printing a real finding, turning a caught defect into a traceback. A probe that
dies while reporting is worse than no probe.
Gates
ruff check src/ tests/— clean ·mypy src/nodus/— cleannodus_gate --all— PASS (135/135 symbols, 245/245 doc blocks, 26/26 opcodes)nodus_gate --closed-issues --section 5.3.0— 7/7(the plain
--allrun reports0 of 0against the now-empty[Unreleased],which is exactly the vacuous pass step 4 exists to catch)
nodus_gate --versions— 11/11 agree with 5.3.0Known follow-up
nodus_gate --consumersreportsnodus-run-actionneeds republishing — itsREADME pins a
nodus-langversion and that pin is what new users copy. It cannotbe done until the release is live, so it is Stage 6 work (step 12).
nodus-vscodeis unaffected: no keywords changed.🤖 Generated with Claude Code