問題作成者マニュアル Preview
参加者が解く内容、つまり状況、実際に動く問題環境、verifier、採点metadata、hintを 作成・保守する人のためのマニュアルです。TenkaCloud 大会の運用やplatform codeの 変更は必要ありません。
Problem Pack は、公開カタログへ登録せず、企業内の問題やイベント終了後に公開する予定の問題を管理できます。Cloud は有効化済みの AWS/CloudFormation Pack を次の配置で読み込みます。Local は手元の problems/ を読み、Pack store には未接続です。公開は作成者が別途判断します。
あなたのゴール
公開できる状態とは、次の3点を再現できることです。
- 新しいcheckoutで
make pack-validateが成功する。 - 対応するlocal runtimeがある問題は、作成者が起動からflag提出までリハーサルできる。
- 参加者役の確認で、参加者向け問題文だけからゴールと最初の操作を説明できる。
local runtimeが未対応なら、実行結果を推測せずNot runと記録します。これはmergeを
止めません。特定イベント前の実クラウドリハーサルは任意です。参加者役の確認は作成者・
reviewer・deterministicなブラウザassertionのいずれでも記録でき、独立した第三者を
必須にしません。問題文が理解できなければ、環境を作り直す前に
「状況・ゴール・最初の操作・完了条件」を書き直します。
packを作成して検証する
make pack-init ARGS="./my-first-pack"
make pack-validate ARGS="./my-first-pack"
最初のpackチュートリアルでは、最小構成の packを雛形作成、検証、不変Git commitへの固定、install、ローカルでの内容確認、削除まで 通して扱います。
参加者の体験を書く
技術詳細より前に、各問題が次の質問へ答えるようにします。
- 状況の中で何が起きたか。
- 参加者が作る、目で確認できる結果は何か。
- 最初に行う安全な操作は何か。
- URL、shell、cloud console、local appのどこで操作するか。
- どの証拠が
TC{...}形式のflagになるか。 - 問題環境をどうリセット・停止するか。
行動に必要な用語は初出時に説明します。cloud、container、Docker、region、database などの概念自体が学習目標でない限り、単語の暗記を採点しません。
問題を構成する契約
| 部分 | 担当 |
|---|---|
tenkacloud-pack.json |
packのID、version、license、problem root、runtime、dependency |
metadata.json |
問題ID、runtime、template、scoring、endpoint、phase、disruption |
| runtime entry | 参加者が実際に使う分離された環境を作る |
| verifierまたは採点rule | 提出された証拠が正しいか判定する |
| README / 問題文 | 状況、ゴール、最初の操作、成功条件、後片付け |
| hint | 最終解答を早く見せすぎない段階的な助け |
field名を推測せず、生成済みの pack manifestと problem metadataを参照してください。
実際の操作をリハーサルする
validationは契約と参照fileを検査しますが、問題が理解でき、解けることまでは証明 しません。
- 初期状態のlocal環境またはtest環境を使う。
- 参加者に見える問題文だけを読む。
- deployされた問題環境またはlocal問題環境を起動する。
- 意図した調査または修正を行う。
- 正確なflagをParticipant Portalから提出する。
- 誤ったflag、リセット、停止、2回目の起動も試す。
- 実装、verifier、正解dataを使わずに参加者役の流れをもう一度確認する。
この証拠は作成者・reviewer・deterministicなブラウザハーネスのいずれでも記録できます。 参加者向け導線だけから「何が起きているか」「何を直すか」「最初に何を開くか」 「何をもって完了とするか」が分かり、flag提出まで再現できれば公開へ進みます。 独立した第三者と実クラウドでの実行は任意のイベントリハーサルであり、merge gateではありません。
local modeは対応するlocal runtimeを宣言した問題のためのものです。WordPressの チュートリアルでも、参加者オンボーディングの代替でもありません。WordPress問題を 作る場合は、独立した学習目標とverifierを持つlocal問題としてここで扱います。
安全に公開する
- 不変releaseごとにpack versionを上げる。
- commit前にvalidateする。
- install時は完全な40文字のGit commit SHAへ固定する。
- secret、変更可能なremote asset、install時に動くscriptをpackへ入れない。
- 作成者だけが知る答えを参加者向けmetadataやendpointへ出さない。
- 必要account、region、想定起動時間、停止方法、費用は開催者向けメモへ分ける。
packに含められるものは securityとprovenance、 validator messageはvalidation error を参照してください。
問題内容ではなく新しいplatform機能が必要なら、platform Issueを作り、 開発者マニュアルへ切り替えます。
旧ローカル 106 問のカタログ・workbench と 15 件の terminal 宣言は Challenge 競技へ接続済みです。実 Docker・ブラウザでは SQL と PostgreSQL terminal の代表経路を確認しています。全問題・全 terminal 種類の完走確認ではないため、参加者の経路を確認していない問題は Not run と記録してください。