<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pearl/tests/test-pearl-save.el, branch main</title>
<subtitle>Pearl Edits and Reflects Linear — manage Linear.app issues as org-mode in Emacs
</subtitle>
<id>https://git.cjennings.net/pearl/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/pearl/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/pearl/'/>
<updated>2026-05-24T23:46:58+00:00</updated>
<entry>
<title>feat: add the local dirty scanners for the ticket save model</title>
<updated>2026-05-24T23:46:58+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-24T23:46:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/pearl/commit/?id=617d3a13fa23b472879327366c6c557de9cb90f4'/>
<id>urn:sha1:617d3a13fa23b472879327366c6c557de9cb90f4</id>
<content type='text'>
First layer of the unified save model (docs/ticket-save-model-spec.org). pearl--issue-dirty-fields returns which of title, description, and comment candidates changed in the issue subtree at point, with no network call. Description dirtiness reuses pearl--subtree-dirty-p, which hashes the rendered Org against LINEAR-DESC-ORG-SHA256, so a description whose markdown is lossy under org-&gt;md isn't falsely flagged. Comment candidates hash org-&gt;md of each body against LINEAR-COMMENT-SHA256, matching how pearl-edit-current-comment computes its no-op check.

Ownership is a separate phase: pearl--classify-comment-candidates splits candidates into own versus read-only once the viewer id is known, since the local scan can't tell who authored a comment without it. The save-issue and save-all commands that consume these scanners land in the next layers.
</content>
</entry>
</feed>
