Skip to content

Release 0.1.2 - #2

Merged
afit21 merged 22 commits into
mainfrom
dev
Oct 12, 2026
Merged

afit21 merged 22 commits into
mainfrom
dev

Conversation

@afit21

@afit21 afit21 commented Oct 12, 2026

Copy link
Copy Markdown
Owner
  • Add NomadNet page to display RNFS file content
  • Share one log, feature and printable helper across the features
  • Define each duplicated constant once
  • Add fsutil.write_atomic for atomic, durable file replacement
  • Write names.json and name keys with fsutil.write_atomic
  • Write the API token with fsutil.write_atomic
  • Write JSON state with fsutil.write_atomic, and the LXMF message log through write_json
  • Write the node identity and provider records with fsutil.write_atomic
  • Reject a non-boolean seal_name on POST /api/add
  • Check the RNS and LXMF internals rnfs relies on
  • Resolve the README conflict and fix stale docs
  • Lint with ruff in CI and reject merge-conflict markers
  • Gate releases on the tests and test Python 3.14
  • Cap rns and lxmf below their next minor versions
  • Install the latest release from install.sh by default
  • Remove dead code
  • Move shared test fakes into tests/support.py
  • Test that FakeNode keeps matching RnfsNode
  • Wait for conditions instead of sleeping in the API, gateway and link tests
  • Remove the unused imports ruff reports
  • Add the 0.1.2 changes to the CHANGELOG
  • Release v0.1.2

afit21 added 22 commits October 13, 2026 08:21
add_options applied parse_bool only to values that were already booleans, so
{"seal_name": "false"} reached add_path as a string that counts as true.
The JSON endpoint now accepts only true or false and answers 400 otherwise;
/api/add/stream, where seal_name is the name sealed inside, is unchanged.
tests/test_rns_compat.py lists every private attribute, replaced method,
undocumented keyword and data layout of RNS and LXMF that rnfs uses, each with
the rnfs module that needs it, and checks them against the installed versions
with offline round trips (Resource advertisements, cached announces, LXMF
messages) and source checks, so a dependency bump fails CI with a precise
message.

The Resource guard now logs an error once per process when advertisements no
longer have the t and d fields it reads, instead of refusing every incoming
Resource silently. It still fails closed.
Restore the README's Tests and Known limitations sections from the merge conflict 0.1.1 shipped with,
point the Quick start at the current release, fix the broken headings, and test that the README's release
links match __version__. Remove the stray comment in rnfs.py. In design.md, correct pin_ls and the content
layer's RNS dependency, document the lock order, and link to the README's test instructions.
Add ruff to the build tools lock and a lint job to the tests workflow, with pyflakes, syntax-error and a
few bugbear rules configured in pyproject.toml. The job also fails on merge-conflict markers in any file.
tests.yml can now be called from release.yml, whose release job waits for it, so a tag no longer
publishes when the tests, lint or packaging checks fail. Drop the release's own twine and sdist checks,
which the packaging job covers, and stop running tests.yml separately for tag pushes.

Add Python 3.14 to the test matrix and the build tools lock. Every locked file already has a wheel
for it, so the locks regenerate without other changes.
rnfs relies on some RNS and LXMF internals, so an unpinned install shouldn't pick up a release nobody
has tested. Delete requirements.txt, a fifth copy of the dependency list: the README's From source
section now uses pip install -e . (or the lock). Regenerate the Flatpak sources for the new bounds.
install.sh followed the main branch, so the README's one-liner installed unreleased code. It now finds
the latest release from where GitHub's releases/latest redirects and installs that tag's source archive.
--main installs the main branch as before, and RNFS_SOURCE still overrides both.
builder._read_full, PeerLink.mtu and constants.REQUEST_FRAMING (protocol.py
computes the framing exactly) had no users; follow drops an unused
variable, and RequestServer's finally block no longer has an empty branch.
announces.read_mode, guards.installed and the second _make_private_dirs
call stay: tests use the first two, and RnfsNode.offline needs the third.
One FakeClock replaces the three Clock and two FakeClock copies, and
free_port and wait_for are shared instead of copied. Add tests/__init__.py
and drop the try/except ImportError fallbacks, which could never run
because the unguarded tests.* imports come first.
Compare the signature of every facade method on the API tests' FakeNode with
RnfsNode's. add_path, add_stream, get, info and read had fallen behind (no
pin, to, to_self, seal_name, chunker or raw); the fake now takes them,
honours pin, and records them only when a caller sets them.
…tests

The connection-cap tests wait for the server's slots to fill or free, the
early-response test for the response itself, and the link slot tests for
the waiter to be waiting, so a slow runner can't outlast a fixed sleep.
Sleeps that let real time pass on purpose stay.
@afit21
afit21 merged commit 3ea328f into main Oct 12, 2026
20 of 28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant