mirror of
https://github.com/panatgithub/AnkiHeadingSync.git
synced 2026-07-22 06:51:43 +00:00
中文: 将插件版本升至 1.0.1,恢复使用 Obsidian getLanguage() 作为语言来源,并把最低 Obsidian 版本同步提高到 1.8.7。 English: Bumps the plugin to 1.0.1, restores Obsidian getLanguage() as the locale source, and aligns the minimum Obsidian version with API usage.
10 KiB
10 KiB
Obsidian Community Release Readiness Report
Date: 2026-04-29
This report is based on the current repository state plus the current Obsidian release documentation:
- Submit your plugin
- Submission requirements for plugins
- Plugin guidelines
- Developer policies
Repository evidence was verified against these files and modules:
- manifest.json
- versions.json
- package.json
- package-lock.json
- README.md
- LICENSE
- main.js
- styles.css
- esbuild.config.mjs
- scripts/stage-plugin-dist.mjs
- scripts/sync-plugin-dist.mjs
- scripts/obsidian-plugin-path.mjs
- src/presentation/commands/registerCommands.ts
- src/application/config/PluginSettings.ts
- src/infrastructure/anki/AnkiConnectGateway.ts
- src/infrastructure/obsidian/ObsidianVaultGateway.ts
- src/infrastructure/obsidian/ObsidianPluginDataStore.ts
1. Current repository status
- The GitHub repository page at
panAtGitHub/AnkiHeadingSyncis publicly reachable. - The GitHub repository currently shows no published releases, so the first submission release still needs to be created.
- No exact
anki-heading-syncID match and no exactAnki Heading Syncname match were found in the current upstream Obsidian community-plugins.json. - manifest.json contains the expected release-facing fields:
id,name,version,minAppVersion,description,author,authorUrl, andisDesktopOnly. - versions.json currently maps
1.0.1to1.8.7, which matches manifest.json version and minAppVersion. - package.json defines the release-relevant commands:
lint,test,build, andbuild:obsidian. - package-lock.json is present, and no yarn.lock was found.
- LICENSE is present and uses MIT.
- README.md is present and now documents purpose, setup, usage, disclosures, and troubleshooting.
- styles.css exists. It is intentionally empty, which is acceptable because the release pipeline still stages the file when present.
- esbuild.config.mjs builds the bundled plugin entry to
dist/plugin/main.jsand copies the production bundle back to the repository root as main.js. - scripts/stage-plugin-dist.mjs stages manifest.json, versions.json, and styles.css into dist/plugin before bundling.
- scripts/sync-plugin-dist.mjs copies only
main.js,manifest.json, andstyles.cssfrom dist/plugin into the local vault plugin directory. - scripts/obsidian-plugin-path.mjs now supports
OBSIDIAN_PLUGIN_DIRand otherwise falls back to a local default under the current user's home directory instead of a hardcoded absolute username path. - src/presentation/commands/registerCommands.ts registers four commands and does not assign default hotkeys.
- src/application/config/PluginSettings.ts sets the default AnkiConnect URL to
http://127.0.0.1:8765, enables include-scope by default, and declares the default card routes for basic, cloze, cloze-all, and QA Group. - src/infrastructure/anki/AnkiConnectGateway.ts sends requests through Obsidian's requestUrl to the configured AnkiConnect URL.
- src/infrastructure/obsidian/ObsidianVaultGateway.ts uses
vault.process()for Markdown write-back. - src/infrastructure/obsidian/ObsidianPluginDataStore.ts uses
loadData()andsaveData()for plugin persistence. - Local release validation on this branch is currently green:
npm run lintpassed,npm testpassed with 312 tests across 35 files, andnpm run buildpassed. - After the build, dist/plugin contains
README.md,main.js,manifest.json,styles.css, andversions.json.
2. Required Obsidian submission checklist
Based on the current Obsidian docs, the repository must satisfy these release conditions:
- Keep README.md, LICENSE, and manifest.json in the repository root.
- Use a manifest version in
x.y.zformat. - Create a GitHub release whose tag exactly matches manifest.json
version. - Upload
main.js,manifest.json, and optionalstyles.cssas release assets. - Keep manifest metadata aligned with the community-plugins.json submission entry.
- Keep description short, simple, and ending with a period.
- Ensure command IDs do not repeat the plugin ID prefix.
- Avoid default hotkeys.
- Use
isDesktopOnly: truewhen the plugin is intentionally desktop-only. - Clearly disclose network use in README.
- Clearly disclose Markdown write-back and any plugin data storage behavior in README.
3. What is already ready
- The GitHub repository is publicly reachable, which satisfies the source-availability expectation for review.
- The plugin ID and plugin name do not currently collide with an upstream community-plugins entry.
- Required root files exist: README.md, LICENSE, manifest.json, main.js, styles.css, versions.json.
- manifest.json metadata is internally consistent with versions.json.
- The manifest description is short, simple, and ends with a period.
- The plugin ID is
anki-heading-sync, which does not containobsidian. - The command IDs in src/presentation/commands/registerCommands.ts do not duplicate the plugin ID.
- No default hotkeys are registered.
- Markdown file changes use
vault.process()rather than a less safe background modify path. - Plugin data persistence uses Obsidian plugin storage APIs.
- The build pipeline already produces the expected release files under dist/plugin.
- The vault sync script copies only the built plugin assets and does not target data.json.
- README now discloses local-network use, Markdown write-back, and plugin data persistence.
4. What still needs fixing
- A GitHub release for version
1.0.1still needs to be created manually, with assets attached. - Manual QA in real Obsidian and real Anki is still required before submission.
- The actual submission PR to obsidianmd/obsidian-releases still needs to be opened.
5. High-risk blockers
- If the GitHub repository is not public and reachable, the plugin cannot be reviewed.
- If the GitHub release tag does not exactly match
manifest.json.version, Obsidian will not install the published release correctly. - If live manual QA finds problems in AnkiConnect connectivity, marker write-back, or deck routing, submission should pause until they are fixed.
At the repository level, no code-path blocker was found in the files reviewed above.
6. Medium-risk improvements
- Root-level agent and internal workflow docs still mention a local vault path in non-runtime documentation. They are not used by the release scripts, but they remain visible in the public repository and may be worth pruning later.
- A short PR note explaining why the plugin is desktop-only would reduce reviewer back-and-forth, because the runtime path is centered on desktop Anki plus AnkiConnect.
- A short release-note template would make later version bumps less error-prone.
7. Low-risk polish
- Add screenshots or a short demo GIF later if you want a stronger first impression on GitHub. This is not required for Obsidian submission.
- Add a short CHANGELOG entry for the first public release if you want cleaner release notes. This is optional.
8. Manual QA checklist
Run these checks in a real desktop Obsidian vault with real Anki running:
- Enable the plugin in a clean vault.
- Open the settings tab once after first install.
- Confirm the default AnkiConnect URL is
http://127.0.0.1:8765. - Configure note types and field mappings.
- Run
Sync current file to Ankion a file with a basic card. - Run
Sync current file to Ankion a file with#anki-clozeand#anki-cloze-allblocks. - Run
Sync current file to Ankion a file with a#anki-listQA Group block. - Confirm
<!--ID: ...-->and<!--GI: ...-->markers are written back as expected. - Run
Sync vault to Ankiand confirm include or exclude scope behaves as configured. - Verify deck routing with default deck, folder mapping, and file-level custom deck if you use them.
- Run
Clear synced cards in current fileand verify the file marker state is removed as expected. - Run
Clean up empty decksand confirm only still-empty decks are removed. - Turn off or close Anki and confirm the user-facing error is understandable.
- Sanity-check both English and Chinese UI text if you ship both locales.
9. GitHub Release checklist
- Confirm manifest.json
versionis the release version you want to ship. - Confirm versions.json contains the same version mapped to the correct minAppVersion.
- Run
npm run lint. - Run
npm test. - Run
npm run build. - Verify dist/plugin contains
main.js,manifest.json, andstyles.csswhen present. - Create a GitHub release tag exactly matching
manifest.json.version, currently1.0.1. - Upload these assets to the release:
- main.js
- manifest.json
- styles.css
- Download at least one release asset once to confirm the release is complete.
10. Obsidian Releases PR checklist
- Fork obsidianmd/obsidian-releases.
- Append a new entry to community-plugins.json using the exact manifest metadata.
- Use the current repo identifier
panAtGitHub/AnkiHeadingSync. - Open the PR in preview mode and select the Community Plugin checklist.
- Use the PR title
Add plugin: Anki Heading Sync. - Fill in the template checkboxes and reviewer notes before submitting.
- Wait for the automation result and only proceed when the PR shows a ready-for-review state.
11. Security/privacy disclosure checklist
README.md should continue to state all of the following clearly:
- The plugin talks to AnkiConnect through the configured URL.
- The default URL is local:
http://127.0.0.1:8765. - The plugin does not upload notes to a remote service by itself.
- The plugin modifies Markdown files to write sync markers and maintain note identity.
- Plugin settings and state are persisted through Obsidian plugin storage, which results in data being stored in the plugin data.json file.
Reviewer notes should also call out:
- desktop-only positioning
- AnkiConnect dependency
- local network request behavior
- Markdown marker write-back
- plugin data storage in data.json
12. Final go/no-go status
Current status: almost ready.
Repository-level release preparation is close to complete, but submission should wait until all of the following are true:
- local lint, test, and build validation remain green on the release branch
- manual QA is completed in real Obsidian and real Anki
- the GitHub release for version
1.0.1exists with the correct assets - the submission PR to obsidianmd/obsidian-releases is opened with the correct metadata