Commit graph

69 commits

Author SHA1 Message Date
WiseGuru
76243ecdf4 Release flow: test on published alpha/beta artifacts, bump only at release
All release testing now happens against the published -alpha/-beta
prerelease assets installed in the test vault (attested CI builds), and
cutting the stable release is only the version bump + bare tag on the
same source. Doc-only commits may ride between the last prerelease and
the stable tag; anything affecting the built artifact means a new
prerelease round.

Updated: RELEASING.md (TL;DR, pre-flight, "The alpha/beta channel"),
release-checklist SKILL.md (Phases 2/3/5 install the prerelease via
gh release download; release:prep stays as the mid-development path),
CHECKLIST.md intro, CLAUDE.md summaries. Also corrected RELEASING.md's
stale description of version-bump.mjs (it records every version, not
only floor changes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 17:34:32 -07:00
WiseGuru
42f0a43c62 Resolve the 1.2.1 review-bot no-unsafe-* warnings at the root (type parity)
All ~30 warnings traced to the bot's lint environment resolving types
differently from local, not to unsafe code (DEVCONFLICTS.md finding 10):

- tsconfig lib was ES2016 while the code uses ES2017-ES2019 APIs
  (Object.entries/values/fromEntries, padStart, Promise.finally); the
  test suite's auto-included @types/node masked it locally. lib is now
  ["DOM", "ES2019"] with types: [] so a mismatch fails npm run build.
- moment's typings don't resolve in the bot's environment (obsidian's
  re-export types via the moment package). All calls now go through
  formatMoment in src/time.ts, a narrow structural alias.
- secrets.ts needed as-BufferSource assertions on TS 5.7+ that older TS
  flags as unnecessary; restructured (inferred ArrayBuffer-backed byte
  helpers, BufferSource param, one 32-byte copy) to need none on any
  TS version. Crypto behavior unchanged.
- The two flagged as-Record casts became an isRecord type predicate.

Docs: CLAUDE.md "Review-bot type environment" gotcha, RELEASING.md
parity section (plus the pre-release docs from the workflow change),
DEVCONFLICTS.md finding 10, ROADMAP.md Unreleased entry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:55:52 -07:00
WiseGuru
01e3fb8d75 Release workflow: publish suffixed tags (alpha/beta) as GitHub prereleases
A tag containing a "-" now stamps its version into the *published*
manifest.json only (master stays at the last stable version) and sets
prerelease: true, so the official updater and community review never see
it while BRAT / manual install can. Process docs: RELEASING.md
"Pre-release (alpha/beta) builds".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:55:24 -07:00
WiseGuru
437aa5e050 Lint: mirror the Obsidian review bot to catch what slipped past 1.2.0
Local npm run lint now enforces the three classes the community-review bot
caught only at submission:
- type-checked @typescript-eslint rules (no-deprecated, no-unsafe-*,
  no-unnecessary-type-assertion) scoped to src/
- no-unsupported-api (Obsidian API newer than manifest minAppVersion),
  cherry-picked from a 0.4.1 alias since the pinned 0.1.9 base lacks it
- noInlineConfig, so an eslint-disable can no longer silence a rule

Base plugin stays pinned at 0.1.9 (0.4.x's sentence-case diverges from the
bot); only the single no-unsupported-api rule is taken from the alias.
Docs: CLAUDE.md, RELEASING.md, release-checklist SKILL.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 03:42:06 -07:00
WiseGuru
f94856eae3 1.2.1
Community-review remediation (no behavior change):
- Remove eslint-disable in realtime/pcm.ts; reach the deprecated ScriptProcessor
  API through local type-aliases so no-deprecated never fires.
- Raise minAppVersion to 1.6.6 for FileManager.trashFile (@since 1.6.6).
- Enable the reviewer's type-checked lint rules locally for src/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 22:35:06 -07:00
WiseGuru
8657bc53b3 1.2.0
Real-time dictation (AssemblyAI/Deepgram, own provider/key/model), auto-ingest
folders, record-in-background, per-invocation diarization, manage built-in
templates (enable/track), local whisper.cpp auto-start/idle-stop, and dev tooling
(local review + release-checklist skill).

Voxtral realtime was reverse-engineered but pulled (not WebView-reachable); its
adapter is kept on disk, unwired.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 21:38:30 -07:00
Maxwell McGuire
8c48390353
Merge pull request #2 from WiseGuru/fix/code-review-remediation
code review + and new pre-release process
2026-07-07 15:13:07 -07:00
WiseGuru
ccc54343a6 code review + and new pre-release process 2026-07-07 15:06:43 -07:00
WiseGuru
4cc87a0b47 doc upkeep 2026-07-06 21:10:41 -07:00
WiseGuru
cb1b0dcede 1.1.1
Roll ROADMAP Unreleased items (modal record-flow + secrets bootstrap fixes) into the 1.1.1 release heading.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 22:36:42 -07:00
WiseGuru
f3b93d5ab9 Fix secrets bootstrap + modal record UX; add ROADMAP lifecycle tracker
Secrets:
- Warm the secret-storage probe before loadSettings so a fresh install
  actually defaults to Obsidian secret storage instead of caching an
  unconfigured passphrase envelope first.
- setEncryptionMode no longer early-returns on same-mode: an unconfigured
  passphrase store now always builds its kdf/verifier, so creating a
  passphrase (incl. on Linux without a keyring) writes secrets.json.nosync
  instead of silently no-opping.

Modal:
- The Record tab closes the modal on Stop and runs the pipeline detached
  with Notice progress (per-stage setMessage) and Notice errors, mirroring
  the reprocess-audio flow. The persisted recording is the recovery path,
  so no inline Retry. Paste / From note keep the in-modal Retry flow.

Docs:
- Replace FEATURES.md with ROADMAP.md: Planned / Unreleased / Released
  lifecycle, wired into the RELEASING.md release steps.
- Update SECRETS.md, CLAUDE.md, and the Commands-and-Menus wiki page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 22:16:46 -07:00
Maxwell McGuire
9fedc23b1d
Merge pull request #1 from WiseGuru/feature/copy-clear-encryption-keys
Decouple encryption-mode switch from key transfer (Copy/Clear)
2026-06-19 18:56:35 -07:00
WiseGuru
4f2c4d796e Decouple encryption-mode switch from key transfer (Copy/Clear), bump to 1.1.0
Switching the API-key encryption mode no longer moves keys. The on-disk
envelope now retains passphrase material (kdf/verifier/keys) even while
Obsidian secret storage is active, so the two stores coexist and `mode` is
just the active-store flag.

Key transfer is now an explicit, separate action presented as Copy (the
source is kept, so it is a copy, not a move):
- setEncryptionMode: switch active method only, no transfer
- copyKeys: duplicate inactive -> active, source untouched
- clearKeys(mode): wipe one method's saved keys
- unlockPassphraseStore: unlock the snapshot regardless of active mode
- countStoredKeys / EncryptionStatus.passphraseConfigured for the UI

Settings tab: the mode dropdown is now a pure switch; new Copy and Clear
buttons (behind a new generic ConfirmModal) handle key material with a
copied/cleared count Notice. changePassphrase is a direct within-passphrase
re-key. Docs updated (SECRETS.md, CLAUDE.md, wiki).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 12:50:23 -07:00
WiseGuru
f9c2450a8c 1.0.3
Fix Obsidian secret storage detection failing on all platforms.

app.secretStorage.setSecret rejects any id that is not lowercase
alphanumeric + dashes, so the colon-namespaced ids and the
underscore self-test id made the availability probe throw and report
secretStorage unavailable on every platform. Switch all secret ids
(namespace separator, self-test id, per-profile key ids) to
dash-joined form.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:46:08 -07:00
WiseGuru
f0e142f8e2 1.0.2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 08:58:49 -07:00
WiseGuru
50eb661611 Wiki update 2026-06-18 08:52:38 -07:00
WiseGuru
0773f9ff02 Wiki Update 2026-06-18 08:39:55 -07:00
WiseGuru
8ec1c93cdf Claude optimization 2026-06-18 08:13:53 -07:00
WiseGuru
8f9fb09be7 Expand docs/RELEASING.md from Obsidian's official docs
Add: x.y.z-only versioning and 'directory reads manifest at default-branch HEAD'; the official draft-based gh-release workflow variant and the repo-level Actions write permission; corrected community submission via the community.obsidian.md web form (feedback = new incremented release); a submission-requirements section; a broader plugin-guidelines regression checklist; and links to the canonical Obsidian docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 21:29:53 -07:00
WiseGuru
946dc1a7a0 Add docs/RELEASING.md and reference it from CLAUDE.md
A release runbook covering Obsidian's rules (bare version tag, asset shape, minAppVersion vs API @since, versions.json logic), the CI attestation flow, pre-flight checks, the guideline-conflict checklist, and post-release verification. CLAUDE.md now points to it from the Commands and Releases sections.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 21:26:18 -07:00
WiseGuru
058b882bf7 1.0.1
Version bump; no functional change since 1.0.0 (whisper.cpp auto-lookup) so Obsidian's review tracks a new version.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 21:17:10 -07:00
WiseGuru
7ab2bc287d Added a whisper.cpp auto lookup 2026-06-16 12:25:15 -07:00
WiseGuru
c74f74abc9 Remediate Obsidian community-submission lint
Errors: bump minAppVersion 1.4.0 to 1.4.4 (FileManager.processFrontMatter is since 1.4.4) and update versions.json; remove the disallowed eslint-disable in passphrase-modal and pass the random-string example via a variable to satisfy sentence-case.

Popout/compat warnings: setTimeout/clearTimeout to window.*; document to activeDocument, capturing the document ref for paired add/removeEventListener (recorder wake-lock, quick-record popover, settings, floater); globalThis to window for require/process in getNodeApi; replace the rewrite-hidden display-none important rule with el.toggle/hide/show; register activeDocument/activeWindow as eslint globals for no-undef.

Attestations: add .github/workflows/release.yml (build, actions/attest-build-provenance, softprops/action-gh-release on tag push).

Docs: CLAUDE.md minAppVersion rationale plus CI release/attestation and display() deferral notes; README Vault access disclosure and License corrected to 0BSD; DEVCONFLICTS refreshed.

Deferred recommendations: display() to getSettingDefinitions (1.13.0+ rewrite) and vault enumeration (necessary, disclosed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 22:56:54 -07:00
WiseGuru
1ebc62219b big readme update. 2026-06-15 21:59:14 -07:00
WiseGuru
f5aa5bba7c Sync package-lock metadata to package.json (1.0.0, 0BSD)
Root name/version/license were stale (rewrite-plugin / 0.1.1 / 0-BSD).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 21:50:22 -07:00
WiseGuru
187264ff55 Rename plugin id to satisfy Obsidian manifest rules
The id rewrite-plugin is rejected on submission because an id may not
end in plugin. Rename to rewrite-voice-notes (lowercase + hyphens,
no obsidian, does not end in plugin). Pre-release, no installed users.

- manifest.json: id -> rewrite-voice-notes
- package.json / package-lock.json: name -> rewrite-voice-notes
- README.md, CLAUDE.md, docs/DEVCONFLICTS.md: update install-folder paths,
  command-id examples, and the id-locked note
- src/ needs no change (uses this.manifest.id dynamically)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 21:26:48 -07:00
WiseGuru
400ceeafa6 Fix Obsidian developer-guideline conflicts
- LICENSE: correct copyright holder (was sample-plugin's Dynalist Inc.)
- package.json: use valid SPDX id 0BSD (was 0-BSD)
- manifest.json: add author, authorUrl, fundingUrl
- Use Vault.process instead of Vault.modify for atomic read-modify-write
  (insert append, template update, update-report writing)
- docs/DEVCONFLICTS.md: record resolutions; document accepted items

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 22:56:49 -07:00
WiseGuru
f6e6f46959 identified conflicts between dev docs and production 2026-06-14 21:44:49 -07:00
WiseGuru
4eefb56f25 Implement secrets 2026-06-14 20:41:59 -07:00
WiseGuru
05dce6184e Release 1.0.0
Bump manifest, versions, and package to 1.0.0 for the first GA release.
Drop the pre-release no-migration rule from CLAUDE.md now that v1.0.0 ships.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 15:00:29 -07:00
WiseGuru
2d5dc0f003 Expand OpenAI-compatible option 2026-06-14 14:35:03 -07:00
WiseGuru
b0ae488f71 Templates Update: frontmatter, titles, and revisions 2026-06-13 03:28:51 -07:00
WiseGuru
c1d1e4e6cd Default template fixing 2026-06-06 12:58:52 -07:00
WiseGuru
c1b160bbe5 enable screenwake when recording 2026-06-03 16:09:21 -07:00
WiseGuru
3decaddec8 Warning if no audio + audio processing testing 2026-06-01 22:54:21 -07:00
WiseGuru
4e43407518 Max tokens warning clarification 2026-06-01 18:32:16 -07:00
WiseGuru
b0bc85eff0 Update max token suggestions 2026-06-01 18:21:25 -07:00
WiseGuru
85c549136c Per-template diarization 2026-06-01 17:58:47 -07:00
WiseGuru
e1a729a558 Create a template user guide 2026-06-01 16:19:43 -07:00
WiseGuru
df3ca7e1ee Update the "Daily note" template 2026-06-01 16:06:56 -07:00
WiseGuru
c9051a52ef improve whisper security 2026-05-31 15:45:35 -07:00
WiseGuru
5e98637c76 Add link to models 2026-05-30 22:49:23 -07:00
WiseGuru
15304c758c add multi-speaker transcription 2026-05-30 22:16:17 -07:00
WiseGuru
58ff5a7582 Quick record feature 2026-05-30 19:41:39 -07:00
WiseGuru
6823b3de8d Make plugin more readable 2026-05-30 12:48:58 -07:00
WiseGuru
2dce00e19d API Password overhaul 2026-05-30 11:07:02 -07:00
WiseGuru
43f39cf968 Updated sharedcore and others 2026-05-29 18:40:11 -07:00
WiseGuru
2e3456940d Updated templates 2026-05-29 16:41:47 -07:00
WiseGuru
bbe564afc5 Update README.md 2026-05-29 12:27:20 -07:00
WiseGuru
3efc6e25e9 fixed text fields 2026-05-28 12:28:01 -07:00