diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-09-06 19:11:05 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-09-06 19:11:05 +0200 |
| commit | 36ef1b76dce56a40650f890156eb137536ef015d (patch) | |
| tree | fd04eb45eb5ec9b45e3e828dc55bc8cfd77d2555 /packages/meshbay-node/src/meshbay_node/roster.py | |
| parent | ab44526a291fa673aa2850d105f6412a70a5341f (diff) | |
| download | meshbay-36ef1b76dce56a40650f890156eb137536ef015d.tar.gz | |
fix(client): a successful root op must never blank the operator's table
`ops.update_root` and `remove_root` returned `[]` when the group context had
no live RootSet, and `group-page.js` accepted it: `if (msg.roots)` is true for
an empty array. An op that succeeded would have emptied the shared-directories
table, and "the node says this group has no directories" is not something the
client can tell from "the node could not say". Both ends now refuse it — the
node builds from config rather than answering empty, and the client requires a
non-empty array.
Found while adding `test_spa_imports.py`, which is the other half of this: it
resolves every named import across the SPA against what the target actually
exports. That failure has a shape nothing else here catches — no build step to
fail, so the browser resolves the graph at load, finds a missing binding, and
the page renders blank or the component just does not appear. `node --check`
parses one file at a time and the source-reading guards look inside a file
rather than between two. The settings split moved two shared components into a
new module and rewired eight files to import them, which is exactly the change
where a rename lands in one file and not the other.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011pvMdvLBG92jyhvD5pD6us
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/roster.py')
0 files changed, 0 insertions, 0 deletions