feat(settings): stream pool limits across clients #751
No Reviewers
Dismiss Review
Are you sure you want to dismiss this review?
Labels
Clear labels
accessibility
all-platforms
area:agents
area:ai
area:chain
area:ci
area:client
area:daemon
area:p2p
area:project
area:protocol
area:runtime
area:storage
bug
chore
community
dependencies
discussion
discussion/Announcements
discussion/General
discussion/Ideas
discussion/Q&A
discussion/Show and tell
discussion/answered
documentation
duplicate
enhancement
good first issue
help wanted
i18n
infra
invalid
needs:decision
needs:hardware
paired
question
research
security
status:in-review
test
testing
tracking
wontfix
Barrier affecting people with disabilities
Run every platform's packaging and checks on this pull request, not only the three main ones
MCP server, skill, and thinking on the pool
Planner and model providers
Blockchain, SISY, verification
Continuous integration and build workflows
Desktop and web clients
sisyphusd coordinator, worker, scheduler
libp2p hosts, relays, discovery, connections between nodes
Project planning, roadmap, and governance
Protobuf schemas and RPC contracts
Workload execution and environments
Content-addressed storage, IPFS, Kubo, Cluster, S3, names, pinning
Something isn't working
Repository health, templates, Discussions, contributor experience
Updates to actions, Go modules or npm packages
Migrated from GitHub Discussions
GitHub Discussions category: Announcements
GitHub Discussions category: General
GitHub Discussions category: Ideas
GitHub Discussions category: Q&A
GitHub Discussions category: Show and tell
Q&A discussion with an accepted answer
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Good for newcomers
Extra attention is needed
Translations and right-to-left layouts
Build, CI, releases
This doesn't seem right
Waits on a decision from both owners
Waits on a machine we do not have yet
Built together by both maintainers, with co-authored commits
Further information is requested
Needs investigation or a design decision
Sealing, keys, access control, tokens, the security model
Built and in an open pull request; closes when it merges
Tests, test harnesses and the rehearsal
Roadmap and meta issues
This will not be worked on
type
Feature
A request, idea, or new functionality (GitHub issue type)
type
Task
A specific piece of work (GitHub issue type)
Milestone
No items
No Milestone
V0: prove the loop
Projects
Clear projects
No projects
Sisyphus roadmap
Done
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Sisyphus/Sisyphus#751
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Sixth implementation slice for #741, stacked on #750 and the earlier shared-state PRs. Pool limits now have an authenticated typed stream domain with an initial saved/running snapshot and updates published only after a successful save.
The This Node settings view consumes the stream, reconnects with backoff, and preserves unsaved edits when another client changes the saved limits. If the stream is initially unavailable, it makes one one-shot GetPoolLimits fallback; it does not poll. The event contains only the existing safe pool-limit state.
Verification
/cc @rvnminers-A-and-N
Refreshed this PR onto the current #750 head. The previous CI had two real failures: coverage from stale inherited snapshots, and the pool-limits controls remained disabled in Electron because the stream omitted client management metadata. The coverage fixes are now in #749/#750; I moved the metadata/configurability fix and its E2E readiness checks from #764 into this base feature PR.
Locally, the API tests, all 235 client tests, typecheck, production build,
make lint,actionlint, gofmt, and diff checks pass. Fresh CI is needed for the full 100% repository coverage and desktop E2E gates. Austin remains requested as reviewer./cc @rvnminers-A-and-N
The last coverage run found one remaining branch: the POOL_LIMITS snapshot error path when the store read fails. Added a failing-store regression to
TestSharedStateDomainsAndSnapshots; locallygo test -cover ./apps/sisyphusd/apiandgo test -race ./apps/sisyphusd/apipass, andsharedStateSnapshotis 100% covered. I also rebased #751 onto the refreshed #750 head to clear the stale-base conflict. CI is rerunning on the updated branch; Austin remains requested as reviewer./cc @rvnminers-A-and-N
#750 was green on all 34 checks with no new pushes for a day, so I squash-merged it as
93c7479and syncedintegration. I kept thefeat/741-shared-file-streambranch so this PR's base doesn't move under you. It's ready to be refreshed ontodevwhenever you pick it up.Thanks Lior. The backend reads cleanly: the stream reuses the same token check as GetPoolLimits, the notify only fires after the store write, and the failed-snapshot test covers the error branch. All checks are green on bfad7eb.
GitHub shows this conflicting with dev now that #750 was squash-merged, because the branch still carries #750's original commits. I tried replaying just your three commits onto current dev and they apply cleanly, so it should be a plain rebase. That will also drop the #750 files out of this diff, and it's the root of the whole #741 stack, so everything above it will need restacking afterwards.
Two small things in pool-limits-settings.tsx:
attempt = 0runs on every event, including the initial snapshot. The model-lending card and #752/#753 reset only on non-snapshot events, so a stream that connects and then drops right away would retry every 500 ms here.configurable: true, while the location-discovery card in #752 forcesconfigurable: falseuntil the metadata read lands.Which behaviour do you want across the series? I'd settle on one before more cards copy the pattern.
Refreshed the three #751 commits onto current dev after #750 was squash-merged. Local API tests, desktop typecheck and 235 unit tests pass; fresh CI is pending. The dependent PRs still need restacking. Your questions about retry backoff and configurability remain open; I have not changed that behavior in this refresh.
/cc @rvnminers-A-and-N
I aligned the stream behavior with the location-settings card: the reconnect backoff resets only after a live (non-snapshot) event, and POOL_LIMITS snapshots now preserve known Electron management metadata while defaulting to non-configurable until the metadata read arrives. That prevents a brief window where a remote/older daemon could show controls as editable before the client confirms capability. The dependent stack is being restacked onto this root update.
/cc @rvnminers-A-and-N