Skip to content

design: 契約に「〜しない」と書くときは、その保証が成り立つ範囲まで書かせる #787

Description

@takemi-ohama

何が起きたか

devbase のマイルストーン v3.6.0(設計 PR #204 / #205、確定仕様 PR #210)で、レビューの差し戻し 4 件が設計文書の「〜しない」の範囲が広すぎることに集中した。

書いた文 実際
build --help は「cd も env の読み込みもしない」 入口のシェルは起動直後に $DEVBASE_ROOT/env と現在地の env を必ず読む。保証できるのは「切り替え先のプロジェクトの env を読まない」だけ
--context=--help は「context 名として下流へ渡る」 下流の argparse で値不足の usage エラー(終了コード 2)になる
衝突は「対象のディレクトリの中で実行すれば避けられる」 名前解決は現在地を見ないため避けられない
projects/ の外へ cd せず env も読まない」 projects/<name> は symlink で、cd はリンクの先へ移動する。保証の対象は位置引数のパストラバーサルに限られる

どれも実装は正しく、文の側だけが実装より強い保証を述べていた。レビュー(codex)が 4 件とも拾ったが、設計 Pull Request と確定仕様の両方で同じ形の差し戻しが出た。

直し方の案

design の手順(入出力の契約 / 決定の記録)に、否定形の保証を書くときの決まりを足す。

  • 「〜しない」と書いたら、何に対して成り立たないか(対象・経路・入力の範囲)を同じ文か直後の表に書く
  • 既存の共通処理(起動時の読み込み・リンクの解決・下流の parser)を経由する場合は、そこは保証の外であることを明記する

由来

devbasex/devbase のマイルストーン v3.6.0 の振り返り(https://github.com/devbasex/devbase/pull/211#issuecomment-5739397561)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ndf-skillNDF の Skill 本体enhancementNew feature or requestpriority: medium保守性・設計一貫性など、計画的に対応する

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions