PJR-Z4PM review と grade、docs と catalog の循環をほどく
1. 概要
review から grade/result と、docs から catalog/build の 1 件ずつの依存を直す。 PJR-QQKY の決定に基づく。動作は変えない
2. 完了条件
prj-0001:pjr-qqky-src-feature-cycles の決定の 4 に基づく。1 件ずつの依存で生じている 2 組の循環をほどく。2026-10-18 時点の循環のもとは次のとおり。
| 組 | 一方の向き | 循環を作っている向き |
|---|---|---|
grade ⇄ review | grade → review/types(ReviewViewpointsDoc・GradeRubric。6 ファイル) | src/review/grade.ts → src/grade/result.ts(GradeResult の型と関数) |
catalog ⇄ docs | catalog → docs/*(12 件) | src/docs/yaml-pages.ts → src/catalog/build.ts(isDctTemplateCatalog・renderCatalogTemplateBody) |
条件:
src/review/grade.tsがsrc/grade/を import しないようにする。GradeResultの型と、review/grade.tsが使う関数を、reviewかsrc/shared/へ移すか、review/grade.ts自体をgradeへ移す。どれにしたかと理由を result に書く。src/docs/yaml-pages.tsがsrc/catalog/を import しないようにする。isDctTemplateCatalog・renderCatalogTemplateBodyをdocsかsrc/shared/へ移すか、依存の向きを逆にする。どれにしたかと理由を result に書く。- 移した後に、
grade⇄reviewとcatalog⇄docsの循環がないことを数えて result に書く。src/shared/が他の機能を import しない規則(prj-0001:pjr-x8y9-src-dependency-direction-rules)を守る。 - 移すだけにし、動作は変えない。分割の前後で
grade・yaml-pages・catalogとそのサブコマンドの--helpの出力が一致する。 - 本件は
src/exec/を変えない(並行して動く PJR-BHMH と重ならないようにするため)。 - 作業を終える前に、
npm run lint:mdとnpm run lint:fmを実行して通す(コードを変える場合はnpm run typecheck・npm run lint:ts・npm run test:unitも通す)。 - 親の検証(lint-ts・lint-fm・lint-md・typecheck・test-unit・test-integration・validate-schema)が通る。
3. 作業内容
| No | 作業 | 担当 | 状態 | メモ |
|---|---|---|---|---|
| 1 | review → grade/result の依存をなくす | DEV | done | - |
| 2 | docs → catalog/build の依存をなくす | DEV | done | - |
| 3 | 2 組の循環がないことを数える | DEV | done | - |
4. 対応結果
GradeResultの型およびsrc/review/grade.tsが利用する関数(gradeContentHash・gradeFindingDisplayMessage・gradeResultPathForDocument・parseGradeResult等)をsrc/shared/grade-result.tsへ抽出し、src/grade/result.tsから再 export した。src/review/grade.tsの import 先をsrc/shared/grade-result.jsへ変更し、src/review/からsrc/grade/への依存を 0 件に解消した。src/exec/を変更しない制約のためreview/grade.ts自体は移動せず、型・共通関数をsrc/shared/へ移した。isDctTemplateCatalog・renderCatalogTemplateBodyおよびその描画処理(renderSections・renderTable・renderDoneCriteria等)をsrc/shared/catalog-render.tsへ、パス解決処理(resolveBasePath等)をsrc/shared/catalog-paths.tsへ移し、src/catalog/側からは再 export して後方互換性を維持した。src/docs/yaml-pages.tsの import 先をsrc/shared/catalog-render.jsへ変更し、src/docs/からsrc/catalog/への依存を 0 件に解消した。- 変更後の依存関係を数え、
src/review/→src/grade/(0 件)、src/docs/→src/catalog/(0 件)となり、2 組の循環(grade⇄review、catalog⇄docs)が完全に解消されたことを確認した。またsrc/shared/は他の機能を一切 import しておらず、prj-0001:pjr-x8y9-src-dependency-direction-rules の規則を守っている。 - 変更前後で
grade・yaml-pages・catalogおよび各サブコマンド計 14 件の--help出力を取得・比較し、完全一致することを確認した。 src/exec/配下のファイルは一切変更していない。