Skip to content

Remove starred spools - #17

Merged
willkotheimer merged 1 commit into
mainfrom
drop-starring
Sep 11, 2026
Merged

willkotheimer merged 1 commit into
mainfrom
drop-starring

Conversation

@willkotheimer

Copy link
Copy Markdown
Owner

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

  • The star and unstar buttons, and the sort-to-top ordering
  • canStar, the five-spool cap, and the half-the-budget byte reserve
  • The capture refusal when a starred spool hit the reserve
  • The capacity advisor's exemption for starred spools
  • setStarred across session, IPC, preload, and the renderer contract
  • src/main/core/starring.ts and its test file

The 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_starred remains 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 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 isStarred remains anywhere in src/; the only is_starred references left are the migration that added it and the store test that simulates downgrading a v4 file to v3.

🤖 Generated with Claude Code

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>
@willkotheimer
willkotheimer merged commit 9ed993b into main Sep 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant