決めたいこと
.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 もそれに揃っています。
論点
戻す場合、単に入力欄を復活させるだけでは済みません。
ADR-0013 の Decision を覆すことになる — docs/adr/README.md の append-only 規約により、supersede する新 ADR が要る
鍵有効性アンカーとの兼務が壊れる — checkExamKeyValidityAtRelease (packages/shared/src/exam/examPackage.ts:417) は releaseTime 時点で出題者鍵が有効/未失効だったかを判定します。ここに未来の試験開始時刻 を入れると、「署名した時点で 鍵が有効だったか」という検証の基準時刻がずれてアンカーとしての意味が壊れます。戻すなら「発行時刻」と「試験開始時刻」を別フィールドに分ける (= signing core 変更 → EXAM_PACKAGE_FORMAT_VERSION bump) 必要があり、ADR-0013 が Option B として却下した横断改修が再燃します
time-box の下限判定の意味づけ — verifyExamBinding の withinWindow は submissionTime >= 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
決めたいこと
.tcexammanifest のreleaseTimeを、教員が明示的に設定する「試験開始時刻」に戻すか。現状は ADR-0013 により「パッケージ発行時刻 (issued-at) かつ出題者鍵有効性アンカー」で、教員が開始時刻を入力する経路はありません。現状
releaseTimeに入る値/authorUI (packages/editor/src/authoring/AuthorPage.ts:461)new Date().toISOString()= パッケージ生成時刻。開始時刻の入力欄は ADR-0013 で撤去済み (#92)packages/workers/scripts/make-exam-package.mjs:110args.release ?? now—--releaseで明示指定は可能ADR-0013 は
releaseTimeを意図的に「試験開始時刻」から「発行時刻 = 鍵有効性アンカー」に再定義しており、system-spec §4.7 もそれに揃っています。論点
戻す場合、単に入力欄を復活させるだけでは済みません。
docs/adr/README.mdの append-only 規約により、supersede する新 ADR が要るcheckExamKeyValidityAtRelease(packages/shared/src/exam/examPackage.ts:417) はreleaseTime時点で出題者鍵が有効/未失効だったかを判定します。ここに未来の試験開始時刻を入れると、「署名した時点で鍵が有効だったか」という検証の基準時刻がずれてアンカーとしての意味が壊れます。戻すなら「発行時刻」と「試験開始時刻」を別フィールドに分ける (= signing core 変更 →EXAM_PACKAGE_FORMAT_VERSIONbump) 必要があり、ADR-0013 が Option B として却下した横断改修が再燃しますverifyExamBindingのwithinWindowはsubmissionTime >= 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 側にも開始時刻を持たせたい具体的な場面) が出てきてから着手するのが妥当と考えます。関連
docs/adr/0013-exam-schedule-advisory-keep-manifest-format.md)docs/adr/0006-exam-mode-sealed-problem-binding.md) —releaseTime/deadlineの定義元🤖 Assisted by Claude Code