Carried forward from #5 problem (2), so it is not silently closed when #5's problem (1) (the dirty-list) is fixed by #11.
The bug
basalt status reports modified for a doc that was just published successfully, with no edit in between, whenever the doc references local images.
basalt publish ship-log/x.md # → modified ... [assets: 0↑ 4✓]
basalt status ship-log/x.md # → modified ← nothing was edited
Why
Publish rewrites local image refs (./assets/x.png → /files/<vault>/_assets/<hash>-x.png) and normalizes frontmatter, without touching the local .md — this is documented in --help. So the canonical source can never match the local file byte-for-byte, and the comparison is being made against the wrong side of a transformation the publish itself performed.
Why it matters beyond the wrong word
status is the only command that answers "is this published?". For a vault of ship-logs — where nearly every doc carries images — it cannot answer it for any of them.
Concretely, this already changed a design decision: #11 needed a publish-state oracle for the Stop hook, and basalt status was the obvious choice (it was proposed in #5's own comment thread). It was rejected partly on this: building on it would have made the hook fail precisely in the vault shape where the bug was reported, and fail silently. #11 derives publish-state from local git and harness state instead.
Proposed fix
Compare against the post-transformation sha — apply the same rewrite to the local content before hashing — or exclude the refs that publish rewrites from the hash.
Acceptance
basalt status <f> on a freshly published doc with local images, unedited → unchanged
- edit only that doc's body →
modified
Scope
The status/publish comparator, i.e. the CLI — not the plugin's hook surface.
Carried forward from #5 problem (2), so it is not silently closed when #5's problem (1) (the dirty-list) is fixed by #11.
The bug
basalt statusreportsmodifiedfor a doc that was just published successfully, with no edit in between, whenever the doc references local images.Why
Publish rewrites local image refs (
./assets/x.png→/files/<vault>/_assets/<hash>-x.png) and normalizes frontmatter, without touching the local.md— this is documented in--help. So the canonical source can never match the local file byte-for-byte, and the comparison is being made against the wrong side of a transformation the publish itself performed.Why it matters beyond the wrong word
statusis the only command that answers "is this published?". For a vault of ship-logs — where nearly every doc carries images — it cannot answer it for any of them.Concretely, this already changed a design decision: #11 needed a publish-state oracle for the Stop hook, and
basalt statuswas the obvious choice (it was proposed in #5's own comment thread). It was rejected partly on this: building on it would have made the hook fail precisely in the vault shape where the bug was reported, and fail silently. #11 derives publish-state from local git and harness state instead.Proposed fix
Compare against the post-transformation sha — apply the same rewrite to the local content before hashing — or exclude the refs that publish rewrites from the hash.
Acceptance
basalt status <f>on a freshly published doc with local images, unedited →unchangedmodifiedScope
The
status/publishcomparator, i.e. the CLI — not the plugin's hook surface.