Remove starred spools - #17
Merged
Merged
Conversation
Built at M11, shipped, and never reached for. It worked and was tested, but a feature nobody uses is not free: it was a star button beside every spool, a rule in every capacity decision, a column in the schema, and a clause in every explanation of what Clear spools does. The cost of a feature is paid by everyone who reads past it. The capacity floor gets simpler rather than weaker. Its solvability used to rest on the starred reserve — starring capped at half the budget, the floor at 95%, so at least 45% stayed reclaimable. With nothing exempt but the default spool, every saved spool is a candidate and the argument collapses into arithmetic. Clear spools now says what it does: it takes every saved spool and keeps the default one. The old label had to name what it spared, which is what made its disagreement with the action a bug rather than a wording problem. The is_starred column stays at v4, always zero, written by nothing and read by nothing. SQLite cannot drop a column without rebuilding the table, and rebuilding every user's spools table to reclaim one integer per row is real risk for a benefit nobody can see. A migration records what shipped, not what the code does now. PLAN.md 10 is kept as a record of the removal rather than deleted. The reasoning in it was sound; it was not why the feature went. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Removes starred spools, built at M11 and never reached for.
It worked and it was tested. It went because a feature nobody uses is not free — it was a star button beside every spool, a rule in every capacity decision, a column in the schema, and a clause in every explanation of what Clear spools does. The cost of a feature is paid by everyone who has to read past it.
What went
canStar, the five-spool cap, and the half-the-budget byte reservesetStarredacross session, IPC, preload, and the renderer contractsrc/main/core/starring.tsand its test fileThe capacity floor got simpler, not weaker
Its solvability used to rest on the reserve: starring was capped at half the byte budget and the floor sits at 95%, so at least 45% of the budget was guaranteed reclaimable. With nothing exempt but the default spool, every saved spool is a candidate and the proof collapses into arithmetic. The test that encoded the old argument now encodes the new one.
Clear spools says what it does
It takes every saved spool and keeps the default one. The old label had to name what it spared, which is precisely what made its disagreement with the action a bug rather than a wording problem — the label counted the active spool and the action skipped it, so "Clear 1 spool" did nothing. That regression test is kept.
The schema column stays
is_starredremains at v4, always zero, written by nothing and read by nothing. SQLite cannot drop a column without rebuilding the table, and rebuilding every user'sspoolstable to reclaim one integer per row is real risk for a benefit nobody can see. A migration is a record of what shipped, not a description of the code as it stands. The migration's comment now says so.PLAN.md §10 is kept, not deleted
Rewritten as a record of the removal. The reasoning in that section was sound — the argument that a cap refused up front is honest where a promise revoked under pressure is not still holds. It was not why the feature went, and pretending it was never written would lose that.
Verification
366 tests, typecheck, lint, and the zero-network gate pass. No
isStarredremains anywhere insrc/; the onlyis_starredreferences left are the migration that added it and the store test that simulates downgrading a v4 file to v3.🤖 Generated with Claude Code