| キー | 値 |
|---|---|
specdojo.id | prj-0001:pjr-g1qz-grade-finding-comment-lint |
specdojo.type | project |
specdojo.status | ready |
specdojo.rulebook | specdojo:pjr-rulebook |
specdojo.part_of | prj-0001:pjr-index |
specdojo.item_type | todo |
specdojo.item_status | done |
specdojo.priority | high |
specdojo.owner | ARC |
specdojo.registered_at | 2026-09-02T21:30:13Z |
specdojo.due_on | 2026-09-30 |
specdojo.completed_at | 2026-09-03T22:35:51Z |
specdojo.block_reason | agent exited with non-zero code: agent exited with non-zero code: agent-config-write: protected configuration changes detected; paths=package.json; agent must record the required change in the result … |
specdojo.conclusion | finding コメントの挿入位置を Markdown AST のブロック境界へ変更し、構造を分断しないようにした。既存7文書の違反は orchestrator が修正した。 |
PJR-G1QZ grade の finding コメントが Markdown lint を壊さないようにする
1. 概要
grade applyは指摘箇所をspecdojo:findingの HTML コメントとして本文へ挿入する。挿入位置 によっては Markdown の構造を壊し、lint:mdが失敗する。rulebook 走査中に
cxd-rulebook.mdで発生した。親項目と入れ子項目の間にコメントが挿入され、 リストが分断されて入れ子側が独立したリストと解釈される。構造の分断だけでなく、コメント前後の空行が過剰になる違反も出る。走査を進める間に対象は 4文書へ増え、違反は2種類になった。
MD012/no-multiple-blanksMD007/ul-indentrulebook 106件の走査が進行中であり、成果物とプロジェクト文書へ 対象を広げれば発生件数は増える。
lint:mdは pre-commit hook に含まれるため、壊れた文書が 残ると以後の commit が失敗する。評価の実施が commit を妨げる状態は運用を止める。2. 完了条件
lint:mdを通る。3. 検討事項
lineの意味が曖昧になる。コメント内のline属性を正とし、挿入位置は構造上安全な場所とする案が考えられる。4. 作業内容
5. 対応結果
grade applyの finding 挿入処理を、指定行への単純挿入から Markdown AST の最上位ブロック境界を 使う方式へ変更した。指摘行が入れ子リスト、表、引用、コードフェンス、複数行段落の内側でも、 コメントはブロック直前へ置かれるため Markdown 構造を分断しない。コメントには Frontmatter を 除く元の指摘行をline属性として記録し、移動後も対象との対応を確認できる。既存コメントとの互換性を維持するため、
line属性は読み取り時には任意とした。入れ子リスト、 表、コードフェンスへの挿入位置、連続空行が生じないこと、再適用の冪等性を単体テストへ追加した。 既存コメントを再配置する処理は持たない。本変更は以後の挿入位置を正すもので、既に挿入済みの コメントは移動しない。受け入れ時に orchestrator が、agent の「既存文書に違反は検出されなかった」という判断が誤り であることを確認した。worktree には rulebook 走査の結果が複製されないため、agent は違反を 観測できていない。統合先には修正前の実装が挿入したコメントを持つ7文書があり、8箇所の
MD007/MD012違反が残る。実際に該当文書を worktree へ持ち込むと、新実装でも違反は 解消しなかった。既存7文書の違反は本変更の対象外とし、orchestrator が個別に修正した。
package.jsonへのremark-parse/unifiedの追加はagent-config-writeが block したため、orchestrator が 差分を確認して適用した。remark-parseは本番コードが使うため devDependencies から dependencies へ移している。検証は typecheck、lint:ts、単体テスト1365件の通過を確認した。
6. 関連ドキュメント