Skip to content

docs(skills): #942 の reference.md 分割が残した参照切れと、fragment 設計文書の記述矛盾 #945

Description

@rizumita

#942 (927728f) は skills/fsl/reference.md を削除し、skills/fsl/references/*.md の9ファイルへ分割した。機能的な参照は正しく更新されており、tools/aggregate_changelog.sh:562 の product-surface glob も skills/fsl/references/* になっていて、削除済みパスの死んだエントリは残っていない。rust/fslc/tests/literate_docs_contract.rs:184 が実際に読むパスも skills/fsl/references/commands.md に更新済み。CI は 18 pass で通っている。

残っているのは記述側で、性質の異なる3つが混ざっている。

1. 規範的な surface list がスクリプトと食い違う

docs/DESIGN-changelog-fragments.md:243 は、fragment 必須となる product surface を列挙する箇所で skills/fsl/reference.md を挙げている:

The surface list is the coupled-change contract's list, not a subset of it: rust/, src/fslc/, specs/, examples/, docs/LANGUAGE*, and skills/fsl/reference.md

しかし実際の tools/aggregate_changelog.sh:562skills/fsl/references/* を見ている。この設計文書はそのスクリプトを規定する文書なので、文書から実装を起こす読者は誤った glob を書く。宣言と執行の不一致そのもの。

2. 「分割は rejected」という受理済み決定が木と矛盾している

同じ文書の :29 は、受理済み決定として次を記録している:

Fragmenting the contract documents — docs/LANGUAGE.md, docs/LANGUAGE.ja.md, skills/fsl/reference.md — is rejected (option C2)

#942 はそのうち skills/fsl/reference.md をまさに分割した。決定文もその根拠も更新されていない。

ただし実質的な違反ではないと判断する根拠を書き残す。C2 を却下した理由は2つあり、どちらも今回の分割には当たらない:

つまり却下の射程が「契約文書」として3ファイルを一括で名指ししていたが、根拠 (b) は実際には2ファイルにしか及んでいなかった。決定の射程と根拠の射程がずれていたのを、#942 が踏んで初めて表面化した。決定文の射程を根拠に合わせて書き直すべきで、C2 の却下自体を撤回する話ではない。

skills/fsl/reference.md の分割を記録した設計ノートは存在しない。docs/DESIGN-ci.mddocs/DESIGN-annotations.md にパスの付随更新があるだけである。

3. 参照切れ 31件 / 15ファイル

docs/DESIGN-changelog-fragments.md                             13
rust/fslc/tests/literate_docs_contract.rs                       3
rust/fslc/src/main.rs                                           2
rust/fsl-syntax/src/ai_project.rs                               2
docs/DESIGN-nested-option-support.md                            2
tests/test_sum_decreases.py                                     1
rust/fslc/tests/issue_563_ai_check_project_fields.rs            1
rust/fslc/tests/issue_542_ai_check_rejects_unparseable_clauses.rs 1
rust/fslc/tests/issue_524_mutate_default_cap.rs                 1
rust/fslc/tests/issue_250_initialization.rs                     1
rust/fslc/tests/fixtures/issue_542_unvalidated_raw_block.fsl    1
rust/fsl-tools/tests/fixtures/document_kpi_fixture.fsl          1
rust/fsl-tools/tests/document.rs                                1
docs/DESIGN-ui.md                                               1
docs/DESIGN-document-requirement-claim-ir.md                    1

いずれも doc コメント・コード注釈・散文で、ビルドは壊れない。壊れるのは読者の追跡である。このリポジトリで「引用先がその主張を検証しているか」は4回再発した欠陥クラスなので、存在しないファイルを権威として指す注釈を残さない。

直すときの区別(ここを混ぜないこと)

docs/DESIGN-changelog-fragments.md の13件は性質が違うものが混在している:

  • :55 :58 :63 :89 — 分割の共変更回数・コミット統計などの歴史的測定値。当時の状態を正しく記述しているので書き換えないCHANGELOG.md の履歴記述と同じ扱い。
  • :29 :243 — 現行契約についての規範的記述。上の 1 と 2 のとおり直す。

CHANGELOG.md にも同じ文字列が多数あるが、すべて過去のリリースノートで当時の状態を正しく記述しているため対象外。

受け入れ条件

  • docs/DESIGN-changelog-fragments.md:243 の surface list が tools/aggregate_changelog.sh:562 と一致する
  • :29 の C2 却下の射程が根拠の射程と一致し、skills/fsl/references/* が現状であることが読める
  • 歴史的測定値(:55 :58 :63 :89 等)は書き換えられていない
  • 残る13ファイルの参照が skills/fsl/references/ の適切なファイルを指す(SKILL.md のルーティング表で決める)
  • changelog.d/ フラグメントを追加する(CHANGELOG.md を直接編集しない)
  • rust/ 配下を触るため、cargo fmt / cargo clippy --workspace --all-targets -- -D warnings / 該当パッケージのテストが exit 0

Refs #941, #942, #763, #737.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions