Repository navigation
Delete the Pro arm of core's built-in update source and its worker parsing #3323
Copy link
Copy link
Closed as not planned
Closed as not planned
Copy link
Labels
pro-boundaryPro/core boundary: Pro code moves to nodespace-sync (ADR-081..085)Pro/core boundary: Pro code moves to nodespace-sync (ADR-081..085)
Description
Summary
Delete the Pro arm of core's built-in update source, and everything only it uses:
- the cloud-worker
/pro/latest-versionURL; - its JSON parsing and its fetcher;
- their two tests.
Afterwards, core's built-in source knows only the public GitHub release and its releases page. A Pro build gets its version and download page from the Pro package, through AppExtensions::update_source (#3320).
Context (main @ af8ddb6, plus #3319 and #3320; locate by symbol)
- Let an app built on core supply its update source through AppExtensions #3320 moved the edition selection into
BuiltinUpdateSourceand removedcheck_for_update. After Carry the download URL in the update-check payload instead of a hardcoded releases page #3319 and Let an app built on core supply its update source through AppExtensions #3320,BuiltinUpdateSourcehas two edition arms:- latest version:
fetch_pro_latest_version()whenis_pro_build(), otherwisefetch_latest_tag(); - download URL:
Nonewhenis_pro_build(), otherwiseRELEASES_PAGE_URL.
- latest version:
- Pro-only items (af8ddb6 lines in
src-tauri/src/update_check.rs):PRO_LATEST_URL(34-42):https://pro.nodespace.ai/pro/latest-version, andhttp://127.0.0.1:8787/pro/latest-versionin debug builds;pro_version_from_json(158-170);fetch_pro_latest_version(172-194);- the tests
pro_version_parsed_from_worker_json(262-272) andpro_unconfigured_or_error_body_yields_none(274-283); - the module-doc Pro clause (5-10), and any Pro or cloud-worker wording that Let an app built on core supply its update source through AppExtensions #3320 kept in
BuiltinUpdateSource's docs.
- If Let an app built on core supply its update source through AppExtensions #3320 landed under other names, the Pro arms are wherever
is_pro_build()appears inupdate_check.rs. The acceptance search is the check.
Scope
BuiltinUpdateSource:- its latest version comes only from
fetch_latest_tag(); - its download URL is always
RELEASES_PAGE_URL. - Document it as core's own source: the public GitHub Releases API and releases page, replaceable through
AppExtensions::update_source.
- its latest version comes only from
- Delete:
PRO_LATEST_URL, bothcfgarms;pro_version_from_json;fetch_pro_latest_version;- the two Pro tests.
- Module doc: no Pro, worker, cloud or nodespace-sync wording.
- New test: add
builtin_source_offers_the_public_releases_page, which asserts the download URL without the network.
Out of scope
is_pro_build()itself, and its other callers indaemon_setup.rs,grpc_client.rsandincompatible_database.rs(Remove Pro edition branching from the core app, daemon, CLI and installer #3357).- The Let an app built on core supply its update source through AppExtensions #3320 override mechanism.
Steps
- Run the CLAUDE.md startup sequence with worktree
issue-<N>-remove-pro-update-source:git pull origin main;EnterWorktree;bun install;- a
bun run testbaseline; bun run gh:assign <N> "@me";bun run gh:status <N> "In Progress".
- Confirm the gates:
- the Pro GUI builds from the pinned core rev;
- sync's main registers the Pro update source through
AppExtensions::update_source.
- Make the edits.
- Cross-repo check:
- Build the Pro app from sync, pinned to this PR's head commit.
- Confirm the update check reaches the Pro source, and the banner opens the Pro package's download page. One way: a debug build against a local
wrangler devworker. - Link the evidence in the PR.
- Run
bun run scripts/check-pro-boundary.tsand paste the printedBASELINES. - Ship:
bun run test:changed;bun run quality:fix, then commit;git push origin HEAD:issue-<N>-remove-pro-update-source;gh pr create --repo NodeSpaceAI/nodespace-core --head issue-<N>-remove-pro-update-source;/pragmatic-code-review, then/address-review;- after the user approves,
bun run merge <PR#>in the background.
Acceptance criteria
- Run against
update_check.rs(wherever Split the desktop Tauri crate and add ADR-082's Tauri extension points #3322 left it), this returns nothing:rg -n -e 'PRO_LATEST_URL|pro_version_from_json|fetch_pro_latest_version|latest-version|is_pro_build|8787|pro\.nodespace|nodespace-sync|cloud-worker|\bPro\b' <path>/update_check.rs. - The public-source tests, Carry the download URL in the update-check payload instead of a hardcoded releases page #3319's tests and Let an app built on core supply its update source through AppExtensions #3320's override tests pass.
- Free app: the update check still hits
api.github.com/repos/NodeSpaceAI/nodespace-core/releases/latest, and Download opens the releases page. - Evidence from the Pro build is linked in the PR.
-
bun run scripts/check-pro-boundary.tspasses, withBASELINESlowered to the printed counts. At af8ddb6,update_check.rsheldproCommands11,proWording8,proProtocol2,cloudWording2 andeditionBranching1. After this PR it holds no hit for any marker.
Tests and verification
cargo test --lib -p nodespace-app update_checkcargo clippy -p nodespace-app --all-targets -- -D warnings -D clippy::unused-asyncNODESPACE_PRO_SUPABASE_URL=https://example.invalid NODESPACE_PRO_ANON_KEY=dummy cargo check -p nodespace-app.is_pro_build()still exists until Remove Pro edition branching from the core app, daemon, CLI and installer #3357.bun run test:changed
Dependencies
- NodeSpaceAI/nodespace-docs#88 (ADR-081)
- Let an app built on core supply its update source through AppExtensions #3320
- SYNC: Pro GUI and Pro daemon build from one pinned core rev
- SYNC: Pro package supplies its update source (version and download URL) via the core hook
Risks and rollback
- Silent wrong source for Pro users. Suppose a Pro build moved its pin past this commit without its own source. It would silently check core's GitHub release and offer Pro users the community build. The gates prevent this.
- Rollback: revert the PR. No data or state is involved.
Plan key: C4.4 (pro-boundary DAG).
🤖 Generated with Claude Code
Metadata
Metadata
Assignees
Labels
pro-boundaryPro/core boundary: Pro code moves to nodespace-sync (ADR-081..085)Pro/core boundary: Pro code moves to nodespace-sync (ADR-081..085)
Activity
mstomar125 commentedon Oct 1, 2026
Superseded by #3412 (umbrella against the final ADR-081–085)