挑戰範例(Challenge Authoring Quickstart)
本範本(netsim-template)僅內附一個 canonical 範例挑戰:01 — Ethernet Basics。下游 fork 採用本範本後,請依以下流程新增自己的挑戰。
目錄結構
docs/challenges/
├── index.md ← 本檔(挑戰範例首頁)
├── 01-ethernet-basics/ ← canonical 範例
│ ├── config.yaml ← 挑戰結構(topology、protocols、events、flag、win_condition)
│ └── index.md ← 挑戰故事與 hints
├── flags.secret.yaml.example ← flag 秘鑰檔範本(提交時請複製為 flags.secret.yaml 並加進 .gitignore)
└── <你的新挑戰>/ ← 依範例結構新增新增一道挑戰的步驟
- 複製
01-ethernet-basics/為新目錄(命名建議NN-slug形式,例如02-arp-poisoning/)。 - 編輯
config.yaml:依docs/dev/extending.md的 DSL v2 規範撰寫 metadata、topology、protocols、events、win_condition。 - 編輯
index.md:撰寫挑戰故事、目標、提示。 - 在
flags.secret.yaml加入新挑戰的 flag 對應。 - 跑
pnpm validate:challenges確認 schema 通過。 - 在
.vitepress/config.mts的sidebar['/challenges/']加入新挑戰連結。 - 跑
pnpm docs:dev在本地預覽。