v2.1.2 — Resume detection robust for arbitrary user projects
Patch on top of v2.1.1
Worth shipping because new users won't all phrase their projects the same way. v2.1.1 covered "continue with my weather app" cleanly, but two real phrasings still slipped through:
continue with my Python project called cat on a mat
continue with the work I was doing on the auth refactor
Both kept their noisy preamble ("Python project called", "the work I was doing on") through cleanup, so the fuzzy matcher saw a long unrecognisable phrase.
Fix
fish-side cleanup (__nl_enter): strip everything up to and including the called / named / labelled / labeled connector. Now handles:
| Input | Becomes |
|---|---|
my Python project called cat on a mat |
cat on a mat → matches cat-on-a-mat |
my JavaScript app named weather-tracker |
weather-tracker |
my Rust crate called serde-helpers |
serde-helpers |
Python-side fuzzy match (seashell-sessions): add the inverse substring rule — when the project label is a substring of the (normalized) query. Catches verbose phrasings where the label is buried inside surrounding prose:
| Input | Match | Reason |
|---|---|---|
the work I was doing on the auth refactor |
auth-refactor |
label_norm \"authrefactor\" ⊂ query_norm |
my new awesome dashboard project |
dashboard |
label_norm \"dashboard\" ⊂ query_norm |
Score for the inverse rule is 70 (vs 95 for direct match), so direct matches always win when both apply. A 4-character minimum on label_norm prevents tiny labels like ai or cv from matching half of all queries.
Synthetic 8-project test passes
weather app → weather-app (95)
dotfiles → dotfiles (100)
cat on a mat → cat-on-a-mat (95)
auth refactor → auth-refactor (95)
work I was doing on the auth refactor → auth-refactor (70)
MyAwesomeDashboard → MyAwesomeDashboard (100)
api gateway → api-gateway (95)
project x (after \`project\` strip) → project-x (75)
🍍 — full diff: v2.1.1...v2.1.2