Releases: fishman/notmutt
Releases · fishman/notmutt
Release list
v0.4.2
v0.4.2 (2026-09-10)
Changes since v0.4.1:
Features
- render the crm queue through a shared table grid (21e56ca)
- route tag and mark_read writes through shared per-id apply (fed047c)
- render html-only bodies to text for the model feed (51d2b68)
- fill only reading-column images to the text column (d1992cb)
- lay floated table columns side by side (306da5f)
- gate bodies and tag writes behind [mcp] capabilities (c15a5df)
Bug Fixes
- reconcile view rows after a tag op renames the file (7f13391)
- keep a demoted cell's column as an anonymous grid slot (89de023)
- keep crm prompts off the index ai command list (9cd3ab1)
- refresh view paths at tag seams after maildir flag renames (3b4b114)
- delete moved files only after the index releases them (e539ad2)
- sync maildir flags on tag writes (86ae20f)
- root-normalize paths in the scope folder pin (7c2ffbb)
- stop an underline bleeding onto a following space (c7ade81)
- honor CSS width and min-width on table boxes (22f1bbb)
Documentation
- rewrite the moving-mail doc as tags, paths, and maildir sync (c249040)
- checkpoint parked specs and the hubspot handoff (189fb06)
- make brief comments an agent rule, tighten the mover doc (b4d2f08)
- explain the mover's copy-index-delete ordering (108c21a)
- note v1 release gates and the crm follow-up workflow (7581f06)
Build
CI
- gate on make check, format is now a writer (09b54d4)
v0.4.1
v0.4.1 (2026-09-08)
Changes since v0.4.0:
Features
- copy moves via temp-then-rename (9007fca)
- flock the mover's live move (cbcde76)
- reconcile the poll over the database revision, not new's bracket (45450f0)
- persist the last-classified revision (L) (b23911d)
- resume-draft key, dispatch, and seam usage (cf0c29b)
- resume prefill - parse a draft back into a dialogue (e2a6db9)
- retire the resumed draft on success, replace it on re-save (0af43dd)
- resume builder streams attachments from the stored draft (e8bdb54)
- fuzz ParseDraft and harden the part readers against nil parts (3550fbd)
- parse a stored draft and stream its attachment parts (b016464)
- split a body's signature tail at the structural marker (b28f136)
- carry the resume identity across the event round trip (843d6bf)
Bug Fixes
- parse @media blocks as units and strip !important from decls (1011eea)
- refuse the tag when the apply move fails (233b6cc)
- classify a client-written copy's own index bracket (18da98d)
Documentation
- spec width-aware media queries for the stage-2 render (6e2a221)
- bring temp-then-rename into the mover work (2a6586a)
- scope the reconcile's cross-client safety to a mover flock (335bd0d)
- spec the reconciling poll - classify (last, cur], not the new bracket (a598a24)
- align spec and plan with the streaming-resume pivot (a008e36)
- spec the resume path - retire on send, update in place (f58c75b)
Refactoring
- resolve the cache paths through xdg.CacheHome (c2f5e4e)
- one sender/fcc identity and folder resolver (272f95e)
- one message resolver for the reply and resume opens (32b57c4)
Testing
- centralize cache hermeticity in testutil.CacheDir (deeafe7)
- redirect the apply evict test's mover lock to the test cache (8d04e5a)
- workflow - save, resume, send retires the draft (022546e)
- re-arm the re-crop burst gate deterministically under -race (0d9012c)
CI
- push the release to a named branch, never a detached HEAD (ecf14ca)
v0.4.0
v0.4.0 (2026-09-06)
Changes since v0.3.0:
Features
- forbid meta-responses in the seed prompts, draft from sparse context (e3675d1)
- make Q a singleton tab and report op-level progress (425c026)
- run CRM-flagged prompts from the picker instead of a fixed draft (3179500)
- build the client per operation and pull on CrmOpened (bacd0ca)
- open the CRM prompt picker from the queue, publish CrmOpened (2be66f8)
- ship the built-in follow-up and reconnect prompts (9c4eb87)
- flag CRM prompts in the command frontmatter (ecbe5c3)
- add the crm.hubspot account context key (c8f5d48)
- add the CrmOpened bus event (beb675f)
- refresh the hubspot token on 401 and wipe the key (69973b1)
- surface the follow-up queue over the index (af1c149)
- write back the follow-up marker on send (7936b2a)
- RunDraft drafts a follow-up and opens a prefilled compose (7deb14e)
- wire the crm adapter and split the lua-crm build (4ad8e5b)
- crm review-queue surface with hooks (e658c34)
- RunAnalyze briefs a contact over the ai entry (70b1fe4)
- runPull publishes the unprocessed queue (12e0b40)
- briefing context builder from contact company and research (d17aa5d)
- research facts over the ai chat connection (6ae532d)
- hubspot client with bearer auth and paged search (d7d525e)
- neutral CRM queue and row event types (f380b90)
- [crm] section with per-vendor hubspot table (8a55579)
Bug Fixes
- resolve the prompt tree from the config dir, not the mail root (40433b0)
- gate the mail-ground query on a plausible email (557eda3)
- close the queue overlay when a crm compose attaches (5ba5a91)
- cover RunDraft error branches and harden split/grounding (c72db3f)
- reconcile CRM queue rows to page order (9a53343)
- distinguish AI step failures in RunAnalyze errors (4f2a45e)
- inline-table keeps grid identity under an ancestor table (6fae09e)
- fill blank research cells and index field errors (ccc1b7c)
- cap research fact and url fields like the snippet (03eae32)
- request explicit properties and bound response decode (fb9379a)
Documentation
- spec the briefing cache and cross-client refresh (a58e54f)
- document the account key and the prompt picker draft (92150f2)
- plan the lazy client, account context, and prompt picker rework (e9ffa70)
- refresh the token on 401, retry once (2f4a32a)
- spec the lazy client, account context, and AI-prompt drafts (6131c46)
- roadmap-land the hubspot follow-up workflow (955bf6d)
- RunPull publishes one queue snapshot per run (7257c58)
- crm job bodies are exported for the app adapter (ac26f67)
- the crm feature gates on lua and crm (1ae50ba)
- client.go is a neutral Client seam; hubspot lives in lib/crm/hubspot (8bb092e)
- CrmQueue snapshot is a tail net, not the full queue (c805225)
- crm core consolidates in src/lib/crm with a thin app adapter (6d8e8cf)
- config lives in a [crm] section with per-vendor tables (43fb369)
Refactoring
- share the bus-wait and poll helpers across packages (a77b7bc)
- export RunPull for the app adapter (265d46f)
- name the error-body cap and wrap the retryable sentinel (cc8e64c)
- split client.go into a neutral Client seam + hubspot subpackage (8afd975)
Testing
- drive the reworked workflow through CrmOpened and the picker (5f1ce63)
- poll the briefing cache before the draft leg; clarify crm docs (d519b71)
- rename integration test to match the plan's run filter (8fc3cc4)
- pin the bounded success decode cap (83092eb)
Build
- require both lua and crm tags for the feature (4e742f6)
Other
- add more html mail test fixtures (daca251)
v0.3.0
v0.3.0 (2026-09-04)
Changes since v0.2.4:
Features
- relayout on the images toggle, remote images seat after fetch (40a6ef7)
- carry the images render flag through the open job (cea062b)
- size images on the images-on render path (1d7f278)
- stage-2 link-label injection for the F-key render (1490852)
- stage-2 table strip quantization (982bb9f)
- stage-2 quantization of text rows, images, markers, and hr (21aca4d)
- stage-2 facade frame with px quantization and page colors (2842b52)
- export the span line model, image display px, and list ordinals (6e0234f)
- pin image used px in the wrap budget and re-resolve on re-layout (1a9d310)
- inline layout resolves images to used px and emits them at that width (cc9d01a)
- make ResolveImages intrinsic tests load-bearing per review (14a6ddf)
- ResolveImages pre-pass fills intrinsic sizes from a caller loader (8c07247)
- keep specified img height under a max-width clamp (probe-pinned) (e8e9c9a)
- replaced-image sizing core (weasyprint-faithful used size and extent width) (3d4e686)
- cascade width/height/max-width as px and percent lengths (3dad4c0)
- nested tables and block content in cells (2876697)
- rowspan claims expire by row index, not per-row tick (2343b53)
- colspan and rowspan grid occupancy (590d20e)
- table auto layout and Cells row emission (2e4ff43)
- consume x/net/html table grammar without re-implementing it (5d5e012)
- build table-family boxes with anonymous repair (b70f963)
- block flow with margin collapse and list gutters (2e12a22)
- cascade px margins and UA margin defaults (1583c70)
- linear inline atomizing and char-break measurement (c772a78)
- greedy inline line fill with normalize and alignment (08cf685)
- flatten inline box children into an atom stream (a09e025)
- collapse text leaves into inline atoms (7491505)
- metrics interface for px text measurement (b0ffe39)
- white-space behavior table for inline layout (2357af7)
- build flow boxes with blockification and list markers (b31bfcd)
- UA display and white-space floor table (b71d5d7)
- parse precise white-space class into Style (d220efd)
Bug Fixes
- isolated images seat at the block text-align lead (05c35d8)
- kitty images re-place per image instead of wiping on scroll (a3a2c90)
- standalone images fill the column and center (170e9f3)
- presence-check semianalysis pins and tighten stage-2 pins (8705d15)
- stage-2 link labels on block anchors and pre text (e5ba84d)
- track inline image runs at placeholder text columns (da30e36)
- cap image extent width by px max-width on the measure side (f25aa73)
- clear a percent width attribute under a css px width (6acc51c)
- translate cell markers with block rows (872460d)
- sort scheduled list by send time, not the display string (7e2fdb3)
- hang list markers per owning li gutter and keep empty-item rows (869d31d)
- stop re-appending a settled summary error on every tick (b287697)
- account for the dropped break space in wrap remainder width (83cb18e)
- track preserved-wrap remainder width instead of re-measuring (781ab59)
- stop preserved wrap scanning past the width budget (72111bd)
- inherit html element style and pin tree contracts (ce54922)
- UA li display and 3+ marker depth nesting (76a67fc)
Documentation
- standalone images align to the block, not the window (0664fb9)
- feature-table the in-process HTML renderer (af2a065)
- standalone images fill and center on the images-on view (20020a3)
- document the images-on relayout (259a429)
- mark the architecture sketch superseded (7cea93e)
- describe the stage-2 engine and recorded divergences (f74b2c2)
- plan stage-2 terminal wiring of the html engine (20ee36a)
- record plan-5 post-review test hardening (8bf1f84)
- record plan-5 image stage-1 divergences (bd69c96)
- correct Task 2 verbatim - runExtents file, pct-height guard, Fatalf escape (028744e)
- html images and replaced elements (plan 5) (850ac56)
- record html table stage-1 divergences (aa11fe4)
- note parser depth cap bounds Task 4 Step 6 scratch test (b89a86c)
- rowspan claims expire by row index (Task 3a) (451acdd)
- lock library consumption contract for html plans (3f6ad8f)
- conform table build to x/net/html grammar (Task 1a) (354adf7)
- memoize nested-table extents in the table plan (a9c4ffa)
- plan the table stage (0a622c9)
- plan the block-flow stage and the layout foundation (0e1dd27)
- close html inline O(n^2) and contract-pin bugs, and the schedule sort bug (091203a)
- note scheduled-list sort bug and collect review nice-to-haves (98c972c)
- name marker-only rows in the Row contract (72d8abb)
- provider-neutral crm row model (9838c46)
- provider-neutral crm row model (5ddacc9)
- align plan 2 snippets with the reviewed code (56d0337)
- hubspot follow-up workflow implementation (c2d531f)
- hubspot follow-up workflow design (b7755a9)
- hubspot follow-up workflow design (4ec51fd)
- plan the inline layout and whitespace stage (5010a91)
Refactoring
- delete the walker, stage-2 engine is the renderer (6ced3d2)
- drop dead ul margin guard and pin rem and heading-ladder rows (99e3ea9)
- canonical block runs and body style inheritance (17d49bc)
Testing
v0.2.4
v0.2.3
v0.2.2
v0.2.2 (2026-09-02)
Changes since v0.2.2:
v0.2.1
v0.2.0
v0.2.0 (2026-09-01)
Changes since v0.1.12:
Features
- per-account data grants, ai_chat network gate, shared aiStream (0f8ca77)
Bug Fixes
- drop key-release events, not just the legend path (2638ce6)
Documentation
- lock regression tests, require confirmation for edits (a0d20b7)
Refactoring
- one frame assembles every view's chrome (2b2adba)