Removing a cooldown lock that was never true to the source
Greenhouse (my creative-project manager) shipped v1 with a rule I lifted straight from the design doc: after you touch an active project, it locks for 7 days. The idea was borrowed from Mike Monday’s creative-process material, where incubation matters. Ideas need to rest before you judge them. That part’s true and stays true.
The problem is I applied the same rest period to active projects too, and that part was never true to how the source material actually works, or how I actually work.
The gap
A spike went back to check the claim against two things: my own two years of practice, and Mike Monday’s actual writing. Neither matched what I’d built. In practice, 5 or 6 active projects get touched in a single day, and the same project gets touched again the next day. Monday’s own posts describe daily return to the same project as the whole point, a race against boredom, not a mandated week off.
So the 7-day active-project lock wasn’t incubation. It was idea-incubation logic pasted onto the wrong pipeline stage.
The fix
The follow-up issue pulled the lock out entirely. Rotation ordering (least-recently-touched rises to the top of the worklist) already existed and already did the useful part of the job, without ever needing a hard lock behind it - the same conclusion the cooldown-vs-rotation detour pointed at when the question first came up. Idea-maturity (7 days before you can judge a fresh idea) and vault-maturity (14 days before a shelved item comes up for Rescue-or-Keep) are untouched. Those are real incubation gates on real decisions, not busywork sitting on top of rotation.
On the Rust side this was mostly deletion: the is_cooling / cooldown_until / cooldown_remaining_secs fields on the derived item state, the worklist/cooling split in the daily-state assembler, the cooldown_days and cooldown_on_promote config knobs. last_touched stays exactly as it was, since it’s still what drives rotation order and touch history. Nothing about the DB schema changed. The whole thing turned out to be a read-time interpretation layered on data that was already correct.
The one design call I hadn’t pre-decided: cooldown_on_promote was live behavior (a toggle for whether promoting an idea also sinks it in rotation), not dead code, so removing it was an actual decision rather than cleanup. Went with full removal. Promoting an idea never records a touch, so a freshly promoted project lands at the top of the worklist as the most-neglected item, which matches how promotion is framed everywhere else in the app: a decision to work, not work itself.
Lesson
The bug wasn’t in the code, it was in translating a well-sourced idea (incubation matters) into the wrong scope (every pipeline stage) instead of the right one (idea judgment specifically). Cheap to write, expensive to notice, because the tests I’d written were internally consistent. They just encoded the wrong rule correctly. Checking a design assumption against a real workload turned up in a day what code review alone wouldn’t have.
Related reading
The scan that offered to import itself
An import scanner found the app's own scaffolding, then re-offered a folder it had just imported - two versions of one missing conversation.
When your app can't take back a permission it already gave
Tauri's asset-protocol scope has an allow_directory and no revoke - so switching vaults became a restart, trading instant switching for a security property that actually holds.
The callback that couldn't say what happened
Fixing one dashboard-refresh bug exposed a second hiding in the same shared component - and a third bug that turned out not to exist at all.
You might also find useful
Proton Mail
End-to-end encrypted email with zero-access architecture.
As a Proton Partner, I earn from qualifying purchases of Proton's privacy and security services (Pass, Mail, VPN, Drive).
Learn moreAiralo eSIM
Local data eSIM for travel - no physical SIM swap needed.
This is my Airalo referral link. You get a discount on your first eSIM, and I earn Airalo credit toward mine.
Learn moreProton Pass
Privacy-focused password manager from the team behind Proton Mail.
As a Proton Partner, I earn from qualifying purchases of Proton's privacy and security services (Pass, Mail, VPN, Drive).
Learn more