Repository navigation
Conversation
afit21
commented
Oct 12, 2026
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
…hrough write_json
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.
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.