diff --git a/.gitignore b/.gitignore
index 0e05061..a187d9b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -162,9 +162,12 @@ docs/BRANCH_PROTECTION.md
docs/LINT_RULES.md
docs/obsidian-review-8004-issuecomment-3839142330.md
docs/obsidian-review-8004-issuecomment-3839840641.md
+docs/obsidian-review-8004-issuecomment-3840783932.md
docs/obsidian-review-8004-issuecomment-3885815068-detailed-response.md
docs/obsidian-review-8004-issuecomment-3885815068.md
+docs/obsidian-review-8004-issuecomment-4007884875-plan.md
docs/obsidian-review-8004.md
+docs/obsidian-review-8004-sentence-case-followup-plan.md
# Lint and typecheck output files
lint-output.txt
@@ -181,6 +184,7 @@ AGENTS.md
CODE_OF_CONDUCT.md
CLAUDE.md
CHANGELOG.md
+SECURITY.md
# Semantic Release
.semantic-release-cache/
diff --git a/.releaserc.json b/.releaserc.json
index 700a618..f1411df 100644
--- a/.releaserc.json
+++ b/.releaserc.json
@@ -65,12 +65,6 @@
}
}
],
- [
- "@semantic-release/changelog",
- {
- "changelogFile": "CHANGELOG.md"
- }
- ],
[
"@semantic-release/npm",
{
@@ -96,8 +90,7 @@
"manifest.json",
"package.json",
"package-lock.json",
- "versions.json",
- "CHANGELOG.md"
+ "versions.json"
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
@@ -122,4 +115,4 @@
}
]
]
-}
\ No newline at end of file
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 7a4d13e..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,149 +0,0 @@
-## [4.0.15](https://github.com/asyouplz/SpeechNote/compare/v4.0.14...v4.0.15) (2026-03-16)
-
-### ๐ Bug Fixes
-
-* address obsidian review bot settings copy ([#82](https://github.com/asyouplz/SpeechNote/issues/82)) ([de37e9f](https://github.com/asyouplz/SpeechNote/commit/de37e9f814e063f3a6d74808199dd20a2ae38b99))
-
-## [4.0.14](https://github.com/asyouplz/SpeechNote/compare/v4.0.13...v4.0.14) (2026-03-15)
-
-### ๐ Bug Fixes
-
-* **settings:** normalize review bot sentence case text ([90e5026](https://github.com/asyouplz/SpeechNote/commit/90e502638618bc659cc396d7e1807c088e0f1cac))
-
-## [4.0.13](https://github.com/asyouplz/SpeechNote/compare/v4.0.12...v4.0.13) (2026-03-15)
-
-### ๐ Bug Fixes
-
-* **release:** trigger patch release for sentence case follow-ups ([d420ecc](https://github.com/asyouplz/SpeechNote/commit/d420ecc67bfa9a4798778dd915678b361f80e569)), closes [#80](https://github.com/asyouplz/SpeechNote/issues/80)
-
-## [4.0.12](https://github.com/asyouplz/SpeechNote/compare/v4.0.11...v4.0.12) (2026-03-14)
-
-### ๐ Bug Fixes
-
-* **ui:** use lowercase openai key placeholders ([#79](https://github.com/asyouplz/SpeechNote/issues/79)) ([fcae62a](https://github.com/asyouplz/SpeechNote/commit/fcae62a84512f91b9b4b35cb4afb973a75cc9686))
-
-## [4.0.11](https://github.com/asyouplz/SpeechNote/compare/v4.0.10...v4.0.11) (2026-03-14)
-
-### ๐ Bug Fixes
-
-* **ui:** use lowercase openai key placeholders ([#78](https://github.com/asyouplz/SpeechNote/issues/78)) ([e7f4139](https://github.com/asyouplz/SpeechNote/commit/e7f4139979eeb5a249911c6f8b5058b88e807ada))
-
-### ๐ง Maintenance
-
-* **ci:** update actions for node 24 runners ([#77](https://github.com/asyouplz/SpeechNote/issues/77)) ([cbdb374](https://github.com/asyouplz/SpeechNote/commit/cbdb374e9d778587da555c1928e16a3599d90308))
-* **deps:** bump undici and @actions/http-client ([#74](https://github.com/asyouplz/SpeechNote/issues/74)) ([68312a2](https://github.com/asyouplz/SpeechNote/commit/68312a2b1fb2f4282abf49a464c17b4f4afdd79e))
-
-## [4.0.10](https://github.com/asyouplz/SpeechNote/compare/v4.0.9...v4.0.10) (2026-03-13)
-
-### ๐ Bug Fixes
-
-* **ui:** align settings review follow-ups ([#73](https://github.com/asyouplz/SpeechNote/issues/73)) ([1686d84](https://github.com/asyouplz/SpeechNote/commit/1686d84e85e5c4a69316121ae4874f4eb7ae0e60))
-
-### ๐ง Maintenance
-
-* **deps:** bump minimatch ([#72](https://github.com/asyouplz/SpeechNote/issues/72)) ([f5638bf](https://github.com/asyouplz/SpeechNote/commit/f5638bf4a4535ba97648e2fef2d3a57c65c18a04))
-* **deps:** bump tar and npm ([#71](https://github.com/asyouplz/SpeechNote/issues/71)) ([e1e6521](https://github.com/asyouplz/SpeechNote/commit/e1e6521b5e8bfe7d8f37d4b8ab90b8b32fad38dd))
-
-## [4.0.9](https://github.com/asyouplz/SpeechNote/compare/v4.0.8...v4.0.9) (2026-03-10)
-
-### ๐ Bug Fixes
-
-* **ui:** address pr 8004 human review feedback ([#70](https://github.com/asyouplz/SpeechNote/issues/70)) ([0f6c3ac](https://github.com/asyouplz/SpeechNote/commit/0f6c3ac21809720c38418ec7f4e86a5a21b9ef58))
-
-### ๐ง Maintenance
-
-* **deps:** bump @tootallnate/once and jest-environment-jsdom ([#69](https://github.com/asyouplz/SpeechNote/issues/69)) ([fee0dde](https://github.com/asyouplz/SpeechNote/commit/fee0dde35cdf1cc23cdee592044e9749e24c2ac7))
-
-## [4.0.8](https://github.com/asyouplz/SpeechNote/compare/v4.0.7...v4.0.8) (2026-02-19)
-
-### โป๏ธ Code Refactoring
-
-* **ui:** consolidate settings architecture and wave3 fixes ([#67](https://github.com/asyouplz/SpeechNote/issues/67)) ([f62f8ee](https://github.com/asyouplz/SpeechNote/commit/f62f8eec5adee5c0c4a22498102490a3851d7e61))
-
-## [4.0.7](https://github.com/asyouplz/SpeechNote/compare/v4.0.6...v4.0.7) (2026-02-04)
-
-### ๐ Bug Fixes
-
-* address obsidian review findings ([#65](https://github.com/asyouplz/SpeechNote/issues/65)) ([e28c350](https://github.com/asyouplz/SpeechNote/commit/e28c35058125dab6eda98f53708634ca658cfa3c))
-
-## [4.0.6](https://github.com/asyouplz/SpeechNote/compare/v4.0.5...v4.0.6) (2026-02-03)
-
-### ๐ Bug Fixes
-
-* **ui:** align emoji labels with sentence case ([#64](https://github.com/asyouplz/SpeechNote/issues/64)) ([2bcaa6a](https://github.com/asyouplz/SpeechNote/commit/2bcaa6a07e81ad23d39c1645b76262e23f3b8a84))
-
-## [4.0.5](https://github.com/asyouplz/SpeechNote/compare/v4.0.4...v4.0.5) (2026-02-03)
-
-### ๐ Bug Fixes
-
-* **ui:** apply sentence case to provider labels ([#63](https://github.com/asyouplz/SpeechNote/issues/63)) ([3645309](https://github.com/asyouplz/SpeechNote/commit/3645309b5f5db4e028922337c163516b22851fbd))
-
-## [4.0.4](https://github.com/asyouplz/SpeechNote/compare/v4.0.3...v4.0.4) (2026-02-03)
-
-### ๐ Bug Fixes
-
-* address reviewbot required issues ([#62](https://github.com/asyouplz/SpeechNote/issues/62)) ([a87dc8f](https://github.com/asyouplz/SpeechNote/commit/a87dc8f9d994a3f7d5c48483db21ac25c9ce5c6b))
-
-## [4.0.3](https://github.com/asyouplz/SpeechNote/compare/v4.0.2...v4.0.3) (2026-02-02)
-
-### ๐ Bug Fixes
-
-* address reviewbot feedback and update tests ([#61](https://github.com/asyouplz/SpeechNote/issues/61)) ([eefd7f1](https://github.com/asyouplz/SpeechNote/commit/eefd7f136d3751733c30e0da02989bebbb62ac3c))
-
-## [4.0.2](https://github.com/asyouplz/SpeechNote/compare/v4.0.1...v4.0.2) (2026-01-29)
-
-### ๐ Bug Fixes
-
-* address review feedback and stabilize tests ([#60](https://github.com/asyouplz/SpeechNote/issues/60)) ([2d8bc68](https://github.com/asyouplz/SpeechNote/commit/2d8bc686154d28ca68d67c5889a2cfc6f8ecf07c))
-* **ci:** add semantic-release configuration ([#59](https://github.com/asyouplz/SpeechNote/issues/59)) ([cb98d70](https://github.com/asyouplz/SpeechNote/commit/cb98d70ce80e9c19c0b03410cc0b0ceafb7d5fc1))
-* **ci:** use github app token to bypass repository rulesets ([537a4bb](https://github.com/asyouplz/SpeechNote/commit/537a4bb9561378896143fa679ec435011ac7f562))
-* **review:** resolve obsidian bot validation errors (metadata, lint, ui) ([#58](https://github.com/asyouplz/SpeechNote/issues/58)) ([c6df377](https://github.com/asyouplz/SpeechNote/commit/c6df37736221b619a02b1f9c36ce0979c4d4eec9))
-
-## [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](https://github.com/asyouplz/SpeechNote/commit/240e125df5479cda9c084164494756ea87eafb38))
-
-### ๐ Bug Fixes
-
-* make lint step resilient to eslint crashes ([2e3adc8](https://github.com/asyouplz/SpeechNote/commit/2e3adc8a5301bbd7b4c92e8b2b61dc8bd3746d51))
-* upgrade nodejs to v20 for semantic-release ([4dc3ae9](https://github.com/asyouplz/SpeechNote/commit/4dc3ae9abdf25ed9233f50b9c92c45fcbebaeb26))
-* upgrade nodejs to v22 for semantic-release v24 ([8c5ec24](https://github.com/asyouplz/SpeechNote/commit/8c5ec24f1b8c49996cb6df5f8bed5d88cee10e8f))
-
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-
diff --git a/CLAUDE.md b/CLAUDE.md
deleted file mode 100644
index 8a38673..0000000
--- a/CLAUDE.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## Project Work Principles
-
-- If you have existing code, first check if it's workable by modifying it.
-- Always find and update related documentation after code modifications are complete.
-- Actively collaborate with other agents.
-
-## Code and Script Work Principles
-
-1. When modifying code, first consult @agent-mentor-educational-guide for guidance.
-2. @agent-systems-architect seeks advice from @agent-backend-api-infrastructure and @agent-code-refactorer.
-3. Then, @agent-documentation-expert modifies the related documentation.
-4. @agent-backend-api-infrastructure and @agent-code-refactorer restructure the code.
-5. @qa-testing-expert code restructuring end, Always restructure the code only when QA passes. If pass fails, restructure the code again.
-6. Always find and update related documentation after code modifications are complete.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8965814..ad683ce 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -179,7 +179,7 @@ Fixes #456
Releases are managed by maintainers:
1. Version bump in `package.json` and `manifest.json`
-2. Update `CHANGELOG.md`
+2. Publish release notes on GitHub
3. Create a GitHub release with release notes
4. Publish to Obsidian Community Plugins (maintainers only)
diff --git a/README.md b/README.md
index a16ca2d..f6f805c 100644
--- a/README.md
+++ b/README.md
@@ -1058,7 +1058,7 @@ This project uses **semantic-release** for fully automated versioning and releas
2. **CI/CD Pipeline**: GitHub Actions triggered on push to `main` will:
- Analyze commits to determine the next version (feat -> minor, fix -> patch, BREAKING CHANGE -> major).
- Update `manifest.json`, `package.json`, and `versions.json`.
- - Generate `CHANGELOG.md`.
+ - Generate GitHub Release notes.
- Create a git tag and GitHub Release with built assets.
### ๐ Conventional Commits
diff --git a/RELEASING.md b/RELEASING.md
index 8b499e9..801a00f 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -20,7 +20,7 @@ SpeechNote ํ๋ฌ๊ทธ์ธ์ ๋ฆด๋ฆฌ์ค ํ๋ก์ธ์ค ๋ฌธ์์
๋๋ค.
3. GitHub Actions๊ฐ ์๋์ผ๋ก:
- ๋ฒ์ ์
๋ฐ์ดํธ
- - CHANGELOG.md ์์ฑ
+ - GitHub Release ๋
ธํธ ์์ฑ
- GitHub Release ์์ฑ
- ๋น๋ ์ํฐํฉํธ ์
๋ก๋
diff --git a/SECURITY.md b/SECURITY.md
deleted file mode 100644
index 034e848..0000000
--- a/SECURITY.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Security Policy
-
-## Supported Versions
-
-Use this section to tell people about which versions of your project are
-currently being supported with security updates.
-
-| Version | Supported |
-| ------- | ------------------ |
-| 5.1.x | :white_check_mark: |
-| 5.0.x | :x: |
-| 4.0.x | :white_check_mark: |
-| < 4.0 | :x: |
-
-## Reporting a Vulnerability
-
-Use this section to tell people how to report a vulnerability.
-
-Tell them where to go, how often they can expect to get an update on a
-reported vulnerability, what to expect if the vulnerability is accepted or
-declined, etc.
diff --git a/docs/BRANCH_PROTECTION.md b/docs/BRANCH_PROTECTION.md
deleted file mode 100644
index dfd139c..0000000
--- a/docs/BRANCH_PROTECTION.md
+++ /dev/null
@@ -1,134 +0,0 @@
-# Branch Protection ์ค์ ๊ฐ์ด๋
-
-GitHub repository์ main ๋ธ๋์น๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ์ค์ ๊ฐ์ด๋์
๋๋ค.
-
-## ์ Branch Protection์ด ํ์ํ๊ฐ?
-
-Branch Protection์ ๋ค์์ ๋ณด์ฅํฉ๋๋ค:
-
-- โ
๋ชจ๋ ์ฝ๋๊ฐ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์ณ merge๋จ
-- โ
CI ํ์ดํ๋ผ์ธ ํต๊ณผ ์์ด๋ merge ๋ถ๊ฐ
-- โ
์ง์ main ๋ธ๋์น์ push ๋ฐฉ์ง
-- โ
์ฝ๋ ํ์ง ์ ์ง
-
-## ์ค์ ๋ฐฉ๋ฒ
-
-### 1. GitHub Repository ์ค์ ์ ๊ทผ
-
-1. **GitHub Repository๋ก ์ด๋**: https://github.com/asyouplz/SpeechNote
-2. **Settings ํญ ํด๋ฆญ** (repository ์๋จ ๋ฉ๋ด)
-3. ์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ **"Branches"** ํด๋ฆญ (Code and automation ์น์
)
-
-### 2. Branch Protection Rule ์ถ๊ฐ
-
-1. **"Add branch protection rule"** ๋ฒํผ ํด๋ฆญ
-2. **Branch name pattern**: `main` ์
๋ ฅ
-
-### 3. ๋ณดํธ ๊ท์น ์ค์
-
-๋ค์ ์ต์
๋ค์ ์ฒดํฌ:
-
-#### Required (ํ์)
-
-- โ
**Require a pull request before merging**
- - โ
"Require approvals" ์ฒดํฌ
- - Approvals ์: `1` ์
๋ ฅ
-- โ
**Require status checks to pass before merging**
-
- - โ
"Require branches to be up to date before merging" ์ฒดํฌ
- - ๊ฒ์์ฐฝ์์ ๋ค์ status checks ์ถ๊ฐ:
- - `Code Quality Check`
- - `Build Test`
-
- > **์ฐธ๊ณ **: Status checks๋ ์ต์ ํ ๋ฒ ์ด์ CI๊ฐ ์คํ๋ ํ์์ผ ์ ํ ๊ฐ๋ฅํฉ๋๋ค.
- > PR์ ํ๋ ์์ฑํ๊ณ CI๋ฅผ ์คํํ ํ ์ด ์ค์ ์ ์ถ๊ฐํ์ธ์.
-
-#### Optional but Recommended (์ ํ์ , ๊ถ์ฅ)
-
-- โ
**Do not allow bypassing the above settings**
-
- - ๊ด๋ฆฌ์๋ ๊ท์น์ ์ฐํํ ์ ์๋๋ก ๊ฐ์
-
-- โ
**Require conversation resolution before merging**
-
- - PR ์ฝ๋ฉํธ๊ฐ ๋ชจ๋ resolved๋์ด์ผ merge ๊ฐ๋ฅ
-
-- โ
**Lock branch**
- - main ๋ธ๋์น๋ฅผ read-only๋ก ๋ง๋ค๊ธฐ (์ ํ์ )
-
-### 4. ์ค์ ์ ์ฅ
-
-- ํ์ด์ง ํ๋จ์ **"Create"** ๋ฒํผ ํด๋ฆญ
-
-## ์ค์ ๊ฒ์ฆ
-
-Branch Protection์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธ:
-
-1. **์ PR ์์ฑ**:
-
- ```bash
- git checkout -b test-branch
- echo "test" >> test.txt
- git add test.txt
- git commit -m "test: branch protection"
- git push origin test-branch
- ```
-
-2. **GitHub์์ PR ์์ฑ**
-
-3. **๋ค์ ์ฌํญ ํ์ธ**:
- - [ ] CI๊ฐ ์๋์ผ๋ก ์คํ๋จ
- - [ ] CI ํต๊ณผ ์ ์๋ merge ๋ฒํผ์ด ๋นํ์ฑํ๋จ
- - [ ] "Merge" ๋์ "Merge when checks pass" ํ์
- - [ ] 1๋ช
์ approval ํ์ ํ์
-
-## Status Checks๊ฐ ์ ๋ณด์ผ ๋
-
-Status checks๋ CI๊ฐ ์ต์ ํ ๋ฒ ์คํ๋ ํ์๋ง ์ ํ ๊ฐ๋ฅํฉ๋๋ค:
-
-1. **๋จผ์ PR ์์ฑํ๊ณ CI ์คํ**:
-
- - ์๋ฌด ๋ณ๊ฒฝ์ฌํญ์ผ๋ก PR์ ์์ฑ
- - CI๊ฐ ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ
-
-2. **๋ค์ Branch Protection ์ค์ ์ผ๋ก ์ด๋**:
-
- - Settings โ Branches โ Edit rule
- - "Require status checks to pass" ์น์
์์
- - ๊ฒ์์ฐฝ์ ์ฒดํฌํ ํญ๋ชฉ๋ค์ด ๋ํ๋จ
-
-3. **ํ์ํ checks ์ ํ**:
- - `Code Quality Check`
- - `Build Test`
-
-## Troubleshooting
-
-### "Settings" ํญ์ด ์ ๋ณด์ฌ์
-
-- Repository์ owner ๋๋ admin ๊ถํ์ด ํ์ํฉ๋๋ค
-- Collaborator๋ผ๋ฉด owner์๊ฒ admin ๊ถํ์ ์์ฒญํ์ธ์
-
-### Status checks๋ฅผ ์ถ๊ฐํ ์ ์์ด์
-
-- CI ์ํฌํ๋ก์ฐ๊ฐ ์ต์ ํ ๋ฒ ์คํ๋์ด์ผ ํฉ๋๋ค
-- PR์ ์์ฑํ๊ณ CI๊ฐ ์๋ฃ๋ ํ ๋ค์ ์๋ํ์ธ์
-
-### CI๋ฅผ ์ฐํํ๊ณ ์ถ์ด์
-
-- **๊ถ์ฅํ์ง ์์ต๋๋ค**. Branch protection์ ๋ชฉ์ ์ ํผ์ํฉ๋๋ค
-- ๊ธด๊ธ hotfix๊ฐ ํ์ํ ๊ฒฝ์ฐ:
- 1. "Allow specified actors to bypass required pull requests" ์ฒดํฌ
- 2. ํน์ ์ฌ์ฉ์/ํ๋ง ์ฐํ ํ์ฉ (์ต์ํ์ผ๋ก ์ ํ)
-
-## ๋ค์ ๋จ๊ณ
-
-Branch Protection ์ค์ ํ:
-
-1. โ
ํ์๋ค์๊ฒ ์๋ก์ด ์ํฌํ๋ก์ฐ ์๋ด
-2. โ
[docs/RELEASE.md](RELEASE.md) ์ฐธ์กฐํ์ฌ ๋ฆด๋ฆฌ์ฆ ํ๋ก์ธ์ค ์์ง
-3. โ
Pre-commit hooks ์ค์ : `npm install`
-
-## ์ฐธ๊ณ ์๋ฃ
-
-- [GitHub Branch Protection ๊ณต์ ๋ฌธ์](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)
-- [Status Checks ์ค์ ](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks)
diff --git a/docs/LINT_RULES.md b/docs/LINT_RULES.md
deleted file mode 100644
index a3727cb..0000000
--- a/docs/LINT_RULES.md
+++ /dev/null
@@ -1,205 +0,0 @@
-# Obsidian Plugin Lint Rules Guide
-
-์ด ๋ฌธ์๋ Obsidian ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ ์ ์ค์ํด์ผ ํ๋ ๋ฆฐํธ ๊ท์น์ ์ค๋ช
ํฉ๋๋ค. ์ด ๊ท์น๋ค์ [Obsidian ํ๋ฌ๊ทธ์ธ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค](https://github.com/obsidianmd/obsidian-releases)์์ ์๋์ผ๋ก ์ฒดํฌ๋๋ ํญ๋ชฉ๋ค์
๋๋ค.
-
-## ๋ก์ปฌ์์ ๋ฆฐํธ ์คํ ๋ฐฉ๋ฒ
-
-```bash
-# ๊ธฐ๋ณธ ๋ฆฐํธ ์ฒดํฌ
-npm run lint
-
-# ์๋ ์์ ๊ฐ๋ฅํ ํญ๋ชฉ ์์
-npm run lint:fix
-
-# Obsidian ํนํ ๋ฆฐํธ (์์ธ ๋ฆฌํฌํธ)
-npm run lint:obsidian
-
-# ๊ฒฝ๊ณ ๋ ์๋ฌ๋ก ์ฒ๋ฆฌ (CI์ ๋์ผํ ์๊ฒฉํจ)
-npm run lint:verbose
-```
-
-## ์ฃผ์ Required ๊ท์น (ํ์ ์์ )
-
-### 1. Async/Await ์ฌ์ฉ
-
-**๊ท์น**: `@typescript-eslint/require-await`
-
-async ํจ์๋ ๋ฐ๋์ `await` ํํ์์ ํฌํจํด์ผ ํฉ๋๋ค.
-
-```typescript
-// โ ์๋ชป๋ ์
-async function loadSettings() {
- return this.settings;
-}
-
-// โ
์ฌ๋ฐ๋ฅธ ์
-async function loadSettings() {
- const data = await this.loadData();
- return data || DEFAULT_SETTINGS;
-}
-
-// โ
๋๋ async ์ ๊ฑฐ
-function loadSettings() {
- return this.settings;
-}
-```
-
-### 2. ๋ถํ์ํ Type Assertion ์ ๊ฑฐ
-
-**๊ท์น**: `@typescript-eslint/no-unnecessary-type-assertion`
-
-ํ์
์ ๋ณ๊ฒฝํ์ง ์๋ ๋ถํ์ํ type assertion์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
-
-```typescript
-// โ ์๋ชป๋ ์
-const value = someValue as string as string;
-const element = document.createElement('div') as HTMLDivElement;
-
-// โ
์ฌ๋ฐ๋ฅธ ์
-const value = someValue as string;
-const element = document.createElement('div');
-```
-
-### 3. Empty Object Type ์ฌ์ฉ ๊ธ์ง
-
-**๊ท์น**: `@typescript-eslint/ban-types`
-
-๋น ๊ฐ์ฒด ํ์
`{}`๋ ์ฌ์ฉํ์ง ์๊ณ `object` ๋๋ `unknown`์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
-
-```typescript
-// โ ์๋ชป๋ ์
-function processData(data: {}) {
- // ...
-}
-
-// โ
์ฌ๋ฐ๋ฅธ ์
-function processData(data: object) {
- // ...
-}
-
-// ๋๋ ๋ ๋ช
ํํ๊ฒ
-function processData(data: unknown) {
- // ...
-}
-```
-
-### 4. Floating Promises ์ฒ๋ฆฌ
-
-**๊ท์น**: `@typescript-eslint/no-floating-promises`
-
-Promise๋ฅผ ๋ฐํํ๋ ํจ์๋ ์ ์ ํ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
-
-```typescript
-// โ ์๋ชป๋ ์
-someAsyncFunction(); // Promise๊ฐ ์ฒ๋ฆฌ๋์ง ์์
-
-// โ
์ฌ๋ฐ๋ฅธ ์
-await someAsyncFunction();
-
-// ๋๋ ๋ช
์์ ์ผ๋ก ๋ฌด์
-void someAsyncFunction();
-
-// ๋๋ catch ์ฒ๋ฆฌ
-someAsyncFunction().catch((error) => {
- console.error('Error:', error);
-});
-```
-
-### 5. Deprecated API ์ฌ์ฉ ๊ธ์ง
-
-Obsidian API์ deprecated ํญ๋ชฉ์ ์ฌ์ฉํ์ง ์์์ผ ํฉ๋๋ค:
-
-- `noticeEl` โ `messageEl` ์ฌ์ฉ
-- `createElement` โ Obsidian์ `createEl` ๋๋ `createDiv` ์ฌ์ฉ
-
-```typescript
-// โ ์๋ชป๋ ์
-const notice = new Notice('Message');
-notice.noticeEl.addClass('custom-class');
-
-// โ
์ฌ๋ฐ๋ฅธ ์
-const notice = new Notice('Message');
-notice.messageEl?.addClass('custom-class');
-```
-
-## Obsidian ํ๋ฌ๊ทธ์ธ ํนํ ๊ท์น
-
-### UI Sentence Case
-
-**๊ท์น**: `obsidian/ui/sentence-case`
-
-UI ํ
์คํธ๋ sentence case๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค (์ฒซ ๊ธ์๋ง ๋๋ฌธ์).
-
-```typescript
-// โ ์๋ชป๋ ์
-addCommand({
- id: 'my-command',
- name: 'Convert Audio To Text', // Title Case
-});
-
-// โ
์ฌ๋ฐ๋ฅธ ์
-addCommand({
- id: 'my-command',
- name: 'Convert audio to text', // Sentence case
-});
-```
-
-### Sample Code ์ ๊ฑฐ
-
-**๊ท์น**: `obsidian/no-sample-code`
-
-์ํ ์ฝ๋๋ placeholder๋ ์ ๊ฑฐํด์ผ ํฉ๋๋ค:
-
-- `MyPlugin` โ ์ค์ ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝ
-- `SampleSettingTab` โ ์ค์ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝ
-- ์ํ ์ปค๋งจ๋ ์ ๊ฑฐ
-
-### HTML Heading ๊ธ์ง
-
-**๊ท์น**: `obsidian/settings-tab/no-manual-html-headings`
-
-Settings ํญ์์ HTML heading ํ๊ทธ๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์์์ผ ํฉ๋๋ค.
-
-```typescript
-// โ ์๋ชป๋ ์
-containerEl.createEl('h2', { text: 'General Settings' });
-
-// โ
์ฌ๋ฐ๋ฅธ ์
-new Setting(containerEl).setName('General settings').setHeading();
-```
-
-## Optional ๊ท์น (๊ฒฝ๊ณ )
-
-### ๋ฏธ์ฌ์ฉ ๋ณ์ ๋ฐ Imports
-
-**๊ท์น**: `unused-imports/no-unused-vars`, `unused-imports/no-unused-imports`
-
-์ฌ์ฉ๋์ง ์๋ ๋ณ์๋ imports๋ ์๋์ผ๋ก ์ ๊ฑฐ๋ฉ๋๋ค:
-
-```bash
-npm run lint:fix
-```
-
-underscore(`_`)๋ก ์์ํ๋ ๋ณ์๋ ๋ฏธ์ฌ์ฉ์ผ๋ก ํ์ฉ๋ฉ๋๋ค:
-
-```typescript
-// โ
ํ์ฉ๋จ
-const _unusedVariable = someValue;
-function handler(_event: Event) {
- // event๋ฅผ ์ฌ์ฉํ์ง ์์ง๋ง signature๊ฐ ํ์ํ ๊ฒฝ์ฐ
-}
-```
-
-## CI ํ์ดํ๋ผ์ธ ํตํฉ
-
-๋ชจ๋ PR์ ์๋์ผ๋ก ์ด ๋ฆฐํธ ๊ท์น๋ค์ ์ฒดํฌํฉ๋๋ค:
-
-1. GitHub PR ์์ฑ ์ ์๋ ์คํ
-2. `Code Quality Check` job์์ ๋ฆฐํธ ์ฒดํฌ
-3. ์๋ฌ ๋ฐ์ ์ PR ๋จธ์ง ์ฐจ๋จ
-
-## ์ถ๊ฐ ๋ฆฌ์์ค
-
-- [Obsidian Plugin Guidelines](https://docs.obsidian.md/Plugins/Releasing/Plugin+guidelines)
-- [eslint-plugin-obsidian](https://github.com/obsidianmd/eslint-plugin)
-- [Obsidian Developer Docs](https://docs.obsidian.md/)
diff --git a/docs/obsidian-review-8004-issuecomment-3840783932.md b/docs/obsidian-review-8004-issuecomment-3840783932.md
deleted file mode 100644
index 9837cda..0000000
--- a/docs/obsidian-review-8004-issuecomment-3840783932.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# Obsidian Review Bot Comment (PR #8004) โ main ๋ธ๋์น ๊ธฐ์ค
-
-- Source: https://github.com/obsidianmd/obsidian-releases/pull/8004#issuecomment-3840783932
-- GitHub main SHA: 7531c3d2410fa964d6023fde75db6b234b34542c
-- Updated (UTC): 2026-02-03T11:34:35Z
-
----
-
-## Required Findings (main ๋ธ๋์น ๊ธฐ์ค)
-
-> [!IMPORTANT]
-> ์๋ ๋งํฌ๋ **GitHub main ๋ธ๋์น ์ปค๋ฐ** ๊ธฐ์ค์
๋๋ค.
-
----
-
-### 'audio.sampleRate' may use Object's default stringification format ('[object Object]') when stringified.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/infrastructure/api/SettingsValidator.ts#L299-L299](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/infrastructure/api/SettingsValidator.ts#L299-L299)
- ์์ ์ฃผ์: ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ ๊ฐ์ String(...) ๋๋ JSON.stringify(...)๋ก ๋ช
์ ๋ณํํ๊ณ ํ์
์ ์ขํ๋๋ค.
-
-### 'value' may use Object's default stringification format ('[object Object]') when stringified.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/progress/StatusMessage.ts#L273-L273](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/progress/StatusMessage.ts#L273-L273)
- ์์ ์ฃผ์: ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ ๊ฐ์ String(...) ๋๋ JSON.stringify(...)๋ก ๋ช
์ ๋ณํํ๊ณ ํ์
์ ์ขํ๋๋ค.
-
-### Use sentence case for UI text.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L395-L395](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L395-L395)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L512-L512](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L512-L512)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L586-L586](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L586-L586)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L623-L623](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L623-L623)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L710-L710](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L710-L710)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L759-L759](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L759-L759)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L155-L155](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L155-L155)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L319-L319](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L319-L319)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L357-L357](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L357-L357)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L368-L368](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L368-L368)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L369-L369](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L369-L369)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L380-L380](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L380-L380)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L403-L403](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L403-L403)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L405-L405](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L405-L405)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabOptimized.ts#L473-L473](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabOptimized.ts#L473-L473)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabOptimized.ts#L482-L482](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabOptimized.ts#L482-L482)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabRefactored.ts#L156-L156](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabRefactored.ts#L156-L156)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L42-L42](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L42-L42)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L64-L64](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L64-L64)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L65-L65](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L65-L65)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L81-L81](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L81-L81)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L84-L84](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L84-L84)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L96-L96](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L96-L96)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/DeepgramSettings.ts#L581-L581](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/DeepgramSettings.ts#L581-L581)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L83-L83](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L83-L83)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L84-L84](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L84-L84)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L85-L85](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L85-L85)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L309-L309](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L309-L309)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L197-L197](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L197-L197)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L198-L198](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L198-L198)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L199-L199](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L199-L199)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L289-L289](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L289-L289)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L290-L290](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L290-L290)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-- [7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L291-L291](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L291-L291)
- ์์ ์ฃผ์: UI ๋ฌธ๊ตฌ๋ฅผ sentence case(์ฒซ ๋จ์ด๋ง ๋๋ฌธ์)๋ก ํต์ผํ๋, ๊ณ ์ ๋ช
์ฌ ํ๊ธฐ๋ ์ ์งํฉ๋๋ค.
-
----
-
-## Optional Findings (main ๋ธ๋์น ๊ธฐ์ค)
-
-- (์์)
-
----
-
-## Original Review Comment
-
-```markdown
-Thank you for your submission, an automated scan of your plugin code's revealed the following issues:
-
-### Required
-
-[\[1\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/infrastructure/api/SettingsValidator.ts#L299-L299)
-'audio.sampleRate' may use Object's default stringification format ('[object Object]') when stringified.
-
-[\[1\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/progress/StatusMessage.ts#L273-L273)
-'value' may use Object's default stringification format ('[object Object]') when stringified.
-
-[\[1\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L395-L395)[\[2\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L512-L512)[\[3\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L586-L586)[\[4\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L623-L623)[\[5\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L710-L710)[\[6\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/EnhancedSettingsTab.ts#L759-L759)[\[7\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L155-L155)[\[8\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L319-L319)[\[9\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L357-L357)[\[10\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L368-L368)[\[11\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L369-L369)[\[12\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L380-L380)[\[13\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L403-L403)[\[14\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTab.ts#L405-L405)[\[15\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabOptimized.ts#L473-L473)[\[16\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabOptimized.ts#L482-L482)[\[17\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SettingsTabRefactored.ts#L156-L156)[\[18\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L42-L42)[\[19\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L64-L64)[\[20\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L65-L65)[\[21\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L81-L81)[\[22\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L84-L84)[\[23\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/SimpleSettingsTab.ts#L96-L96)[\[24\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/DeepgramSettings.ts#L581-L581)[\[25\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L83-L83)[\[26\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L84-L84)[\[27\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L85-L85)[\[28\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/components/ProviderSettings.ts#L309-L309)[\[29\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L197-L197)[\[30\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L198-L198)[\[31\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainer.ts#L199-L199)[\[32\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L289-L289)[\[33\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L290-L290)[\[34\]](https://github.com/asyouplz/SpeechNote/blob/7531c3d2410fa964d6023fde75db6b234b34542c/src/ui/settings/provider/ProviderSettingsContainerRefactored.ts#L291-L291)
-Use sentence case for UI text.
-
-
-
----
-
-### Optional
-
-
-
----
-
-
-
-Do NOT open a new PR for re-validation.
-Once you have pushed some changes to your repository the bot will rescan within 6 hours
-If you think some of the required changes are incorrect, please comment with `/skip` and the reason why you think the results are incorrect.
-To run these checks locally, install the [eslint plugin](https://github.com/obsidianmd/eslint-plugin) in your project.
-Do NOT rebase this PR, this will be handled by the reviewer once the plugin has been approved.
-```
diff --git a/docs/obsidian-review-8004-issuecomment-4007884875-plan.md b/docs/obsidian-review-8004-issuecomment-4007884875-plan.md
deleted file mode 100644
index 52c698b..0000000
--- a/docs/obsidian-review-8004-issuecomment-4007884875-plan.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Plan for PR #8004 Follow-up
-
-- Source comment: https://github.com/obsidianmd/obsidian-releases/pull/8004#issuecomment-4007884875
-- Comment date: 2026-03-05
-- Branch baseline: `fix/pr8004-human-review`
-
-## Review Summary
-
-The reviewer has no more line-level comments for now, but asked for three remaining cleanup areas before a broader review:
-
-1. Choose either Korean or English for the UI and logs.
-2. Prefix CSS selectors to avoid leaking styles outside the plugin.
-3. Review SVG creation.
-
-## Decisions
-
-### 1. UI and log language
-
-- Choose English as the canonical language for user-facing UI copy and runtime logs.
-- Translate remaining Korean notices, labels, button text, ARIA labels, and log messages in the active settings and shared UI paths.
-- Leave developer comments unchanged unless they affect runtime text.
-
-### 2. CSS selector prefixing
-
-- Prefix provider-settings selectors with the existing `sn-` namespace.
-- Update the corresponding DOM class names in `ProviderSettings.ts`.
-- Keep selectors scoped under `.speech-to-text-settings` where practical.
-
-### 3. SVG creation
-
-- Audit the codebase for raw SVG HTML injection.
-- Keep using Obsidian's `setIcon(...)` helper and `document.createElementNS(...)` for programmatic SVG.
-- Only change code if a non-namespaced or string-based SVG path is found.
-
-## Execution Order
-
-1. Update shared settings/UI text and logs to English.
-2. Prefix provider-settings CSS classes and sync the TypeScript renderers.
-3. Finish the SVG audit and document whether code changes were needed.
-4. Run targeted validation: typecheck, lint, and focused tests if string or selector changes affect coverage.
-
-## Validation Notes
-
-- Search for remaining Korean runtime strings in `src/`.
-- Search for remaining unprefixed provider-settings selectors.
-- Search for raw `