Prior releases published ~3s after attesting, so Obsidian's dashboard could
scan the release before the attestation propagated to GitHub's public API and
cache a failed verdict — matching a same-day report from another plugin author
where every post-hoc check (gh attestation verify, one attestation per digest,
matching repo/commit) passed yet the dashboard still failed.
- Gate release creation on gh attestation verify succeeding against the public
API (retry loop), so we never publish before the attestation is queryable.
- Upgrade to actions/attest-build-provenance@v4.
- Fresh 0.2.9 asset digests (styles.css comment + main.js version banner) so
the new scan runs against digests with a single clean attestation.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
styles.css was byte-identical since 0.2.4, so its digest accumulated
attestations from every release — including tag-signed ones from 0.2.4-0.2.6
that Obsidian's verifier rejects. gh attestation verify passed (any valid
attestation suffices) but Obsidian fails on the non-branch-signed siblings.
Bump the styles.css version comment and rely on the esbuild version banner so
both styles.css and main.js get brand-new digests, which will carry only the
0.2.8 branch-signed (refs/heads/main) attestation.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Tag-triggered runs sign attestations with a refs/tags/<version> identity,
which Obsidian's community-plugin verifier rejects. Trigger the release from
push-to-main (refs/heads/main) and create the tag from within the run, and
attest manifest.json alongside main.js and styles.css.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Erasing now removes only the portion of a stroke under the eraser instead
of deleting whole strokes. model.ts gains eraseStrokeAt(), which splits a
stroke into fragments at the eraser-circle intersections (with segment/
circle breakpoint math and point interpolation helpers); drawing-surface
wires it into the erase gesture.
Also refreshes the tool UI: quick-color buttons and tooltips in the
toolbar, an expanded color/size tool inspector, a pill-shaped toolbar
style, and a default toolbar position of bottom. Eraser setting copy now
describes the area-erase behavior.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rebrand Ink Layer as Inkplane and introduce standalone infinite-canvas drawing files with pen-first tools, stroke-framed embeds, and refreshed release metadata.