TenkaCloud Docs

問題作成者マニュアル Stable

参加者が解く内容、つまり状況、実際に動く問題環境、verifier、採点metadata、hintを 作成・保守する人のためのマニュアルです。TenkaCloud tenantの運用やplatform codeの 変更は必要ありません。

あなたのゴール

公開できる状態とは、次の3点を第三者が再現できることです。

  1. 新しいcheckoutでmake pack-validateが成功する。
  2. 対応するlocal runtimeがある問題は、作成者が起動からflag提出までリハーサルできる。
  3. 問題を作っていない人が、参加者向け問題文だけでゴールと最初の操作を説明できる。

問題パックを作成して公開するまでの判定フロー

local runtimeが未対応なら、実行結果を推測せずNot runと記録します。対応する test環境で実行を確認するか、未確認であることを開催者へ明示します。第三者が問題文を 理解できなければ、環境を作り直す前に「状況・ゴール・最初の操作・完了条件」を書き直します。

packを作成して検証する

make pack-init ARGS="./my-first-pack"
make pack-validate ARGS="./my-first-pack"

最初のpackチュートリアルでは、最小構成の packを雛形作成、検証、不変Git commitへの固定、install、tenantへの有効化、削除まで 通して扱います。

JSONだけをMCPで事前検証する

MCP 2026-07-28対応clientから {ALWAYS_ON_CONTROL_PLANE_ORIGIN}/mcp/problem-authorへ接続すると、 validate_pack_manifestvalidate_problem_metadataを認証なしで呼べます。

この2つは、渡されたJSONを同じProblem SDK contractで純粋かつ決定的に検証します。 filesystem、network、cloud、環境変数、credentialへアクセスせず、同じ入力には同じ diagnosticを返します。ただし、参照fileの存在、templateの起動、local mode、 flag提出は確認しません。公開前の最終確認では必ずmake pack-validateと実際の リハーサルを行います。

参加者の体験を書く

技術詳細より前に、各問題が次の質問へ答えるようにします。

  1. 状況の中で何が起きたか。
  2. 参加者が作る、目で確認できる結果は何か。
  3. 最初に行う安全な操作は何か。
  4. URL、shell、cloud console、local appのどこで操作するか。
  5. どの証拠がTC{...}形式のflagになるか。
  6. 問題環境をどうリセット・停止するか。

行動に必要な用語は初出時に説明します。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 manifestproblem metadataを参照してください。

実際の操作をリハーサルする

validationは契約と参照fileを検査しますが、問題が理解でき、解けることまでは証明 しません。

  1. 初期状態のlocal環境またはtest環境を使う。
  2. 参加者に見える問題文だけを読む。
  3. deployされた問題環境またはlocal問題環境を起動する。
  4. 意図した調査または修正を行う。
  5. 正確なflagをParticipant Portalから提出する。
  6. 誤ったflag、リセット、停止、2回目の起動も試す。
  7. 問題を作っていない人に同じ流れを完了してもらう。

最後の確認者には実装、verifier、正解flagを見せません。確認者が問題文を読んだあと、 「何が起きているか」「何を直すか」「最初に何を開くか」「何をもって完了とするか」を 自分の言葉で説明でき、実際にflag提出まで到達したときだけ公開へ進みます。

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を作り、 開発者マニュアルへ切り替えます。