diff --git "a/journals/20260223-0011-Issue\343\203\210\343\203\251\343\203\203\343\202\253\343\203\274\344\273\225\346\247\230\343\201\256\346\212\275\350\261\241\345\214\226.md" "b/journals/20260223-0011-Issue\343\203\210\343\203\251\343\203\203\343\202\253\343\203\274\344\273\225\346\247\230\343\201\256\346\212\275\350\261\241\345\214\226.md" new file mode 100644 index 0000000..ffe8525 --- /dev/null +++ "b/journals/20260223-0011-Issue\343\203\210\343\203\251\343\203\203\343\202\253\343\203\274\344\273\225\346\247\230\343\201\256\346\212\275\350\261\241\345\214\226.md" @@ -0,0 +1,33 @@ +# 作業報告: Issueトラッカー仕様の抽象化 + +## 1. 作業実施の理由と指示 + +- **背景**: これまでの仕様書では、具体的なツール名である「GitBucket」が直接記述されていた。これにより、他の GitHub 互換トラッカー(GitHub 自体や GitLab, Gitea 等)へ移行する際のポータビリティが損なわれていた。 +- **意図と指示**: 仕様書内の「GitBucket」という固有名詞を、「上流 Issue トラッカー」や「GitHub 互換 API」といった抽象的な表現に置き換え、システムの汎用性を高めること。 + +## 2. 指記事項とその対応 + +- **指摘**: GitBucket 連携を仕様に書いたらポータビリティが失われる。 + - **対応**: 以下のドキュメントにおいて、特定の製品名への依存を排除した。 + - `README.md`: 「GitBucket 連携」を「外部 Issue トラッカー連携 (GitHub 互換 API)」に修正。 + - `docs/specification/06_development_guide.md`: 「GitBucket」を「上流の Issue トラッカー」や「GitHub v3 互換 API」に置き換え。 + +## 3. 作業詳細 + +AIエージェントは以下の作業を実行した: + +- `README.md` および `06_development_guide.md` を走査し、GitBucket という固有名詞が含まれる箇所を特定。 +- 意味内容(GitHub API v3 互換であること)は維持しつつ、呼称を「上流トラッカー」等に抽象化。 +- 同期スクリプトの実装詳細ではなく、運用ルールとしての「外部トラッカーとの同期」という定義に修正。 + +## 4. AI視点での結果 + +```mermaid +graph LR + A[Specific: GitBucket] --> B{Abstraction} + B --> C[General: Upstream Tracker] + B --> D[Standard: GitHub Compatible API] + C & D --> E[Portable Specification] +``` + +今回の修正により、ドキュメント上の制約が「特定のソフトウェア」から「特定のプロトコル(GitHub API v3)」へと昇華された。これにより、将来的にトラッカーを GitHub や Gitea に切り替えた際も、仕様書の大幅な書き換えを必要としない堅牢な設計記述となった。 diff --git a/tools/scripts/sync_issues.mjs b/tools/scripts/sync_issues.mjs index 31e68e6..e447a39 100644 --- a/tools/scripts/sync_issues.mjs +++ b/tools/scripts/sync_issues.mjs @@ -185,6 +185,14 @@ const fileName = `Issue-${idStr}.md`; const filePath = path.join(ISSUES_DIR, fileName); + if (remote.state === 'closed') { + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); + console.log(`[Cleaned] Issue #${idStr} is closed on remote. Removed local file.`); + } + continue; + } + const newMeta = { id: remote.number, state: remote.state,