This repository was archived by the owner on Sep 4, 2026. It is now read-only.
chore: retire PickForge IDE with v0.2.1 - #406
Merged
Merged
Conversation
…patched versions The OSV gate blocked five high-severity npm advisories, all reached transitively: - GHSA-rgw5-rvv9-x895, brace-expansion 5.0.8 via minimatch, fixed in 5.0.9 - GHSA-73wf-gq98-2v4g and GHSA-c83g-rgw3-j3cx, browserslist 4.28.2 via @babel/helper-compilation-targets, fixed in 4.28.7 - GHSA-2v37-7h3g-55p8, nanoid 3.3.16 via postcss, fixed in 3.3.18 - GHSA-4cwx-7wf7-3272, undici 7.28.0 via jsdom, fixed in 7.29.0 Each floor is an override on the same major line, matching how postcss was handled in #283. Every direct dependency keeps its declared range; the only other lockfile movement is browserslist's own dependency floors (baseline-browser-mapping, caniuse-lite, electron-to-chromium, node-releases, update-browserslist-db), which the 4.28.8 resolution requires.
The runner's stable toolchain moved from 1.96 to 1.98 and two lints now fire under -D warnings: - chunks_exact_to_as_chunks on the wav sample decoder, which reads fixed two-byte frames. as_chunks::<2>() gives &[u8; 2] straight to i16::from_le_bytes, so the manual index pair goes away. - result_large_err on the three session managers' replace_session, whose Err variant hands the caller its session back so it can be stopped. Boxing that variant keeps the handover and shrinks the Result. Behaviour is unchanged; clippy 1.96 was already clean on this tree.
18 tasks
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Why
The IDE is being retired and
pickforge/pickforgewill become the successor product's repository. Existing v0.2.0 installs must update once without ever treating the successor'slatest.jsonas an IDE update.What
pickforge/pickforge-ideRUNBOOK.mdfor release, verification, rename, canonical manifest replacement, archive, site handoff, and wrong-manifest recoveryUpdater mechanics after the rename
@pickforge/tauri-releasediscovers signed bundle assets and writes each platform URL from the explicit--download-base-url;pickforge.release.json.repositoryis metadata and does not determine those URLs.The release is intentionally cut while the repository is still
pickforge/pickforge. The workflow's first manifest therefore uses the old download base so an installed v0.2.0 can fetch, verify, install, and relaunch into v0.2.1 before the rename. GitHub carries the release and assets through the rename, but that redirect cannot remain the long-term contract because the old path will be reused.Immediately after
gh repo rename pickforge-ide, the runbook downloads the signed assets, regenerates and verifieslatest.jsonwith the canonicalpickforge/pickforge-ide/releases/download/v0.2.1base, and uploads it with--clobberbefore archiving. The v0.2.1 binary itself already checks the explicitpickforge-ide/releases/latest/download/latest.jsonendpoint. The successor must never publish an asset namedlatest.json, so any remaining v0.2.0 client gets a safe 404 rather than successor metadata.How it was verified
bun install --frozen-lockfilebun run pickforge-tauri-release validate-configlatest.json, including the exact canonicalpickforge-ideasset URLbun run lintbun run build(tsc --noEmitand production Vite build)bun run test:unit(123 files, 1,648 tests)bun run test:coverage(thresholds passed)bun run e2e(device-free suite passed)bun run vrt(86 tests)bun run sidecarcargo check -p pickforge-tauri --lockedcargo test --workspace --locked --all-targetscargo clippy --workspace --all-targets -- -D warningsNot verified
PICKFORGE_E2E_SERIALwas unset.CI fixes carried on this branch
mainhas been red since 2026-09-02 (run 33671230007) and this PR inherited both failures. The v0.2.1 release must be cut from a green branch, so the fixes ride here as two separate commits after the retirement work. Neither touches the retirement change or any version.dependency audit— the OSV gate blocked five high-severity npm advisories, all reached transitively:Each is floored with a
package.jsonoverride on the same major line, the way postcss was handled in #283. No audit exceptions were added. Every direct dependency keeps its declared range; the only other lockfile movement is browserslist's own dependency floors (baseline-browser-mapping, caniuse-lite, electron-to-chromium, node-releases, update-browserslist-db), which the 4.28.8 resolution requires.cargo + tsc + build— the runner'sdtolnay/rust-toolchain@stablemoved from 1.96 to 1.98 and two clippy lints now fire under-D warnings. The repo pins no toolchain, so the code was fixed rather than the toolchain pinned:chunks_exact_to_as_chunksincrates/pickforge-core/src/voice/segments.rs, on the wav sample decoder's fixed two-byte frames.as_chunks::<2>()hands&[u8; 2]straight toi16::from_le_bytes.result_large_errinsrc-tauri/src/{ios,logcat,mirror}_commands.rs, on each session manager'sreplace_session, whoseErrvariant hands the caller its session back so it can be stopped. That variant is now boxed; the handover is unchanged. This one was hidden behind the first: cargo never checkedpickforge-tauriwhilepickforge-corewas failing.Behaviour is unchanged in both cases. clippy 1.96 was already clean on this tree, confirming the drift.
How the CI fixes were verified
Locally, with the same commands and the same tool versions CI uses:
node --test tests/check-osv-severity.test.mjs— 8/8 passosv-scanner-action:v2.3.8container over a clean tree of tracked files with the CI scan args, thennode scripts/check-osv-severity.mjs osv-results.json Cargo.lock bun.lock—19 advisories, 0 blocking; scanned 2 lockfiles(was28 advisories, 5 blocking)bun install --frozen-lockfile— no changesbun run test:installer,bun run lint,bun run build,bun run test:unit(123 files, 1,648 tests) — all passcargo +1.98.1 check --workspace --locked,cargo +1.98.1 test --workspace --locked --all-targets(982 tests, 0 failed),cargo +1.98.1 clippy --workspace --all-targets -- -D warnings— all cleanRunbook summary
After merge, Elberte verifies the existing Actions signing secret names, creates and pushes the same annotated tag style used for v0.2.0, waits for the signed draft, verifies its manifest/assets, publishes v0.2.1, and tests an installed v0.2.0 if available. Only then does the runbook rename the repo, regenerate the manifest with canonical post-rename asset URLs, verify every URL, archive the repo, and hand the final URLs to the landing-page pivot PR. It also gives containment and manual v0.2.1 recovery steps if a legacy install ever fetches a successor manifest.