- add eslint-enable directive to SettingsTab.ts
- replace console.group/time with debug-based alternatives
- fix deprecated substr with slice
- fix function order for DOM_AVAILABLE check
- replace style.setProperty with setAttribute
- change settings error heading
## [4.0.0](https://github.com/asyouplz/SpeechNote/compare/v3.0.14...v4.0.0) (2026-01-26)
### ⚠ BREAKING CHANGES
* Manual version updates via version-bump.mjs will be deprecated.
Use Conventional Commits format for all commits going forward.
* fix: address code review feedback from Claude bot
Addressing 8 issues identified in PR #54:
- [P0/Critical] Disable version-bump.yml to prevent workflow conflicts
- [P0/Critical] Remove persist-credentials: false from release-auto.yml
- [P0/Critical] Remove deprecated version lifecycle hook in package.json
- [P1/Important] Add semver and manifest validation to update-version.mjs
- [P1/Important] Fix JSON formatting consistency in scripts
- [P2/Optional] Enhance build artifact verification with file size checks
- [P2/Optional] Rename release.sh to release-emergency.sh and add warning
* fix: address final code review points and documentation updates
* fix: address third round of code review feedback
- Revert pre-commit hook to use lint-staged
- Add file existence checks to update-version.mjs
- Remove unnecessary npm override in package.json
- Add syntax verification for build artifacts in release workflow
### 🚀 Features
* implement semantic-release automation ([#54](https://github.com/asyouplz/SpeechNote/issues/54)) ([240e125](240e125df5))
### 🐛 Bug Fixes
* make lint step resilient to eslint crashes ([2e3adc8](2e3adc8a53))
* upgrade nodejs to v20 for semantic-release ([4dc3ae9](4dc3ae9abd))
* upgrade nodejs to v22 for semantic-release v24 ([8c5ec24](8c5ec24f1b))
* chore: help release automation and bump version to 3.0.13 (#51)
* test: verify Claude Code Review with new OAuth token
* chore: remove dev artifacts and update .gitignore
- Remove lint output files from tracking
- Remove Claude Code local settings
- Remove agent documentation files
- Update .gitignore to prevent future tracking
* chore: bump version to 3.0.12 for release
* chore: bump version to 3.0.13 and automate styles.css generation
* fix: address code review feedback
- Improved CSS build script for cross-platform compatibility
- Removed test comment from README
- Added EOF newlines to JSON files per POSIX standards
Co-authored-by: chatgpt-codex-connector <codex@chatgpt.com>
---------
Co-authored-by: chatgpt-codex-connector <codex@chatgpt.com>
* test: verify Claude Code Review with new OAuth token
* chore: remove dev artifacts and update .gitignore
- Remove lint output files from tracking
- Remove Claude Code local settings
- Remove agent documentation files
- Update .gitignore to prevent future tracking
* chore: bump version to 3.0.12 for release
* chore: bump version to 3.0.13 and automate styles.css generation
* refactor: address PR #8004 review comments and fix lint errors
* fix: address CI failures and code review feedback
* Refactor: comprehensive fix for lint errors and type safety regressions
* chore: trigger CI and Claude Code Review workflows
* fix: address PR #8004 review feedback and improve type safety
* fix: restore legacy password factors and fix formatting
* fix: finalize PR feedback following Obsidian review compliance
* fix: finalize PR feedback with technical refinements and obsidian compliance
* fix: finalize PR refinements following Claude Code feedback and repo cleanup
* fix: remove legacy migration logic and further simplify codebase for obsidian compliance
* refactor: final cleanup of unused variables and improved type safety for PR #44
* style: fix formatting issues to resolve CI pipeline error
- SettingsTab.ts: Convert 10 heading elements to Setting API
- EnhancedSettingsTab.ts: Convert 17 heading elements to Setting API
- Add eslint-disable for legacy async/await patterns
This follows Obsidian plugin review guidelines for settings UI construction.
- Add file-level eslint-disable for no-unsafe-assignment, no-unsafe-member-access,
no-unsafe-argument, no-unsafe-return, and no-explicit-any
- These are required because Obsidian's loadLocalStorage API returns 'any'
- Replace invalid obsidianmd/platform rule with descriptive comment
- Add explanation for legacy navigator/screen API usage
- Create SimpleEventEmitter.ts as a browser-compatible EventEmitter replacement
- Update AsyncTaskCoordinator.ts to use SimpleEventEmitter
- Update NotificationManager.ts to use SimpleEventEmitter
- Update ProgressTracker.ts to use SimpleEventEmitter
- Add eslint-plugin-obsidianmd to devDependencies
Fixes ObsidianReviewBot error: 'Do not import Node.js builtin module events'
- Simplify CI Pipeline: Remove E2E tests, keep quality-check and build as required
- Fix Release Pipeline: Now triggers after CI Pipeline success (via workflow_run)
- Remove test duplication in Release Pipeline
- Version bump to 3.0.9
Pipeline flow:
1. Push to main/develop → CI Pipeline runs
2. Push tag v* → CI Pipeline runs
3. CI Pipeline success + v* tag → Release Pipeline triggers automatically
* fix: Resolve all linting issues for Obsidian Plugin Review
* fix: Address PR code review feedback
- Add legacy password migration for encrypted API keys
- Prevent duplicate event listeners in SettingsAPI
- Add error handling to ConfirmationModal callbacks
- Improve type safety (any[] → unknown[])
* fix: Address second round of PR review feedback
- Implement per-vault unique salt for encryption security
- Add UI notices for migration status and errors
- Add destroy() method to SettingsAPI for memory cleanup
- Add Notice feedback to ConfirmationModal callback errors
* fix: Address critical security and data safety issues
- Remove weak encryption fallback, force salt initialization
- Add security documentation to encryption code
- Add retry mechanism (2 attempts) for API key retrieval
- Backup corrupted data before deletion for potential recovery
- Update ConfirmationModal for async callback support
- Prevent unhandled promise rejections in modal callbacks
* fix: Address final review suggestions
- Add deprecation comment for legacy platform API usage (target: v4.0.0)
- Add error logging before legacy migration attempt
- Move migration notice after successful save
- Change any[] to unknown[] for better type safety
- Add lifecycle documentation to destroy() method
* fix: Address latest PR review feedback
- Add feature detection for platform APIs in legacy migration (Encryptor.ts)
- Check for navigator, screen, Intl availability before using
- Graceful degradation when APIs not available in some environments
- Wrap listener execution in try-catch in SettingsAPI.emit()
- Prevents cascade failures when a listener throws
- Logs errors without stopping other listeners
- Add double-click prevention to ConfirmationModal
- Disable buttons during async operations
- Prevent multiple callback invocations
- Update test file to use correct class name (Encryptor vs AESEncryptor)
- Add comprehensive JSDoc documentation for SecureApiKeyManager
- Document custom encryptor requirements
- Add usage examples
- Document initialization behavior
Bump versions and include updated build output.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>