Skip to content

[docs/editor] releaseTime を「教員が設定する試験開始時刻」に戻すか決める (ADR-0013 の再検討) #271

Description

@shinyaoguri

決めたいこと

.tcexam manifest の releaseTime を、教員が明示的に設定する「試験開始時刻」に戻すか。現状は ADR-0013 により「パッケージ発行時刻 (issued-at) かつ出題者鍵有効性アンカー」で、教員が開始時刻を入力する経路はありません。

現状

生成経路 releaseTime に入る値
/author UI (packages/editor/src/authoring/AuthorPage.ts:461) new Date().toISOString() = パッケージ生成時刻。開始時刻の入力欄は ADR-0013 で撤去済み (#92)
packages/workers/scripts/make-exam-package.mjs:110 args.release ?? now--release で明示指定は可能

ADR-0013 は releaseTime を意図的に「試験開始時刻」から「発行時刻 = 鍵有効性アンカー」に再定義しており、system-spec §4.7 もそれに揃っています。

論点

戻す場合、単に入力欄を復活させるだけでは済みません。

  1. ADR-0013 の Decision を覆すことになるdocs/adr/README.md の append-only 規約により、supersede する新 ADR が要る
  2. 鍵有効性アンカーとの兼務が壊れるcheckExamKeyValidityAtRelease (packages/shared/src/exam/examPackage.ts:417) は releaseTime 時点で出題者鍵が有効/未失効だったかを判定します。ここに未来の試験開始時刻を入れると、「署名した時点で鍵が有効だったか」という検証の基準時刻がずれてアンカーとしての意味が壊れます。戻すなら「発行時刻」と「試験開始時刻」を別フィールドに分ける (= signing core 変更 → EXAM_PACKAGE_FORMAT_VERSION bump) 必要があり、ADR-0013 が Option B として却下した横断改修が再燃します
  3. time-box の下限判定の意味づけverifyExamBindingwithinWindowsubmissionTime >= releaseTime も見ています。[shared] exam の time-box が ADR-0013「advisory・失格条件にしない」に反して失格条件になっている #220 で time-box を advisory (valid に合流させない) に戻したので実害はありませんが、下限が「発行前提出 = 異常のサイン」なのか「試験開始前の提出 = 異常」なのかは releaseTime の意味づけ次第で変わります

経緯

#220 (exam の time-box を advisory に戻す) の着手時に、下限判定 submissionTime >= releaseTime をどう扱うか検討する中で分離しました。#220 は「実装を ADR-0013 に合わせる」方向、本 Issue は「ADR-0013 自体を見直すか」という逆向きの判断なので、1 PR = 1 関心事の原則で切り出しています。#220 側では releaseTime の意味づけは ADR-0013 のまま据え置きました。

現時点の所感

急がない。 運用上は開始/締切とも Moodle が正で、TypedCode 側は「いつ解いたか」を記録するだけ (ADR-0013 の分業) が成立しています。--release を使えばスクリプト経由での明示指定も可能です。formatVersion bump を伴う改修に見合う実需要 (教員が TypedCode 側にも開始時刻を持たせたい具体的な場面) が出てきてから着手するのが妥当と考えます。

関連


🤖 Assisted by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationpkg:sharedpackages/sharedquestionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions