From b5416e04530a433c4a5aef25f377b86c39d96363 Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 19 May 2026 15:44:34 -0700 Subject: [PATCH] Add elementary survival question bank --- AGRARIAN_DEVELOPMENT_ROADMAP.md | 2 +- Docs/KnowledgeAndSkillFoundation.md | 62 +++++++++++++++++++ ...erify_elementary_survival_question_bank.py | 41 ++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 Scripts/verify_elementary_survival_question_bank.py diff --git a/AGRARIAN_DEVELOPMENT_ROADMAP.md b/AGRARIAN_DEVELOPMENT_ROADMAP.md index 059e7ef..255bbc1 100644 --- a/AGRARIAN_DEVELOPMENT_ROADMAP.md +++ b/AGRARIAN_DEVELOPMENT_ROADMAP.md @@ -886,7 +886,7 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe - [x] Add player-facing feedback that explains why an action failed or produced poor results. Added failed-action and poor-result feedback rules to `Docs/KnowledgeAndSkillFoundation.md`, requiring short messages that say what happened, name one likely cause, offer one useful next step, avoid blame, and avoid revealing hidden formulas. - [x] Define accessibility rules for the learning system: hints, retries, readable wording, no hard lockout from basic survival, and non-punitive practice paths. Added learning accessibility rules to `Docs/KnowledgeAndSkillFoundation.md`, covering reusable hints, retries, readable wording, non-color-only warnings, no lockout from basic survival, safer practice paths, and diminishing returns to prevent exploit loops. - [x] Define the first subject content format: topic, concepts, difficulty tier, prerequisite concepts, in-game effect, practice action, and source note. Added a compact subject content schema to `Docs/KnowledgeAndSkillFoundation.md` with `topic`, `concepts`, `difficulty_tier`, `prerequisite_concepts`, `in_game_effect`, `practice_action`, and `source_note`, plus a fire-clearance example suitable for later data assets. -- [ ] Add a small MVP question bank for elementary survival knowledge. +- [x] Add a small MVP question bank for elementary survival knowledge. Added six elementary survival question records to `Docs/KnowledgeAndSkillFoundation.md` for fire clearance, potable water, cold exposure, shelter drainage, bleeding care, and fiber identification, each with answer options, correct answer, and practical feedback. - [ ] Define when deeper questions should matter: quality improvements, safer work, complex crafting, teaching others, and advanced branches. - [ ] Add design notes for avoiding exploit farming and rote memorization. - [ ] Add persistence requirements for knowledge, skill experience, learned concepts, failed attempts, and tutorial state. diff --git a/Docs/KnowledgeAndSkillFoundation.md b/Docs/KnowledgeAndSkillFoundation.md index 06ec7bb..bc7e2fb 100644 --- a/Docs/KnowledgeAndSkillFoundation.md +++ b/Docs/KnowledgeAndSkillFoundation.md @@ -411,3 +411,65 @@ source_note: Open flame near dry fuel and wind can spread beyond the campfire. Format rule: content records should be small enough to review in source control and explicit enough to become data assets later. + +## MVP Elementary Survival Question Bank + +The first question bank is intentionally small and elementary. These questions +support optional checks, camp review, and future teaching objects. + +```text +id: fire.clearance.001 +topic: fire.clearance +question: Why clear dry brush away from a campfire? +answers: A) It lowers fire-spread risk. B) It makes the fire colder. C) It makes rain stronger. +correct: A +feedback: Open flame, dry fuel, and wind can spread fire beyond the campfire. +``` + +```text +id: water.potable.001 +topic: water.potable +question: What is the safest first assumption about unknown water? +answers: A) It may need treatment. B) It is always safe. C) It restores warmth. +correct: A +feedback: Water access and safe drinking water are not always the same thing. +``` + +```text +id: exposure.cold.001 +topic: exposure.cold +question: What helps most when cold wind and rain are lowering body temperature? +answers: A) Shelter, warmth, dry conditions, and rest. B) Sprinting forever. C) Dropping all food. +correct: A +feedback: Wind, rain, fatigue, and nightfall can make exposure dangerous. +``` + +```text +id: shelter.drainage.001 +topic: shelter.drainage +question: Why avoid placing shelter in a drainage path? +answers: A) Water can pool or flow through it. B) It makes tools sharper. C) It prevents all wind. +correct: A +feedback: Stable, drained ground improves shelter reliability. +``` + +```text +id: injury.bleeding.001 +topic: injury.bleeding +question: What should you do before heavy work while bleeding? +answers: A) Treat bleeding and rest if possible. B) Ignore it and sprint. C) Stand in smoke. +correct: A +feedback: Bleeding and exhaustion make further mistakes and injury more likely. +``` + +```text +id: resource.fiber.001 +topic: resource.fiber +question: Why is fiber useful early? +answers: A) Binding, panels, and shelter parts. B) It replaces all water. C) It stops night. +correct: A +feedback: Fiber is a basic binding material for primitive crafting and shelter. +``` + +Question-bank rule: elementary questions should be short, practical, and tied to +actions the player can immediately recognize in the MVP. diff --git a/Scripts/verify_elementary_survival_question_bank.py b/Scripts/verify_elementary_survival_question_bank.py new file mode 100644 index 0000000..a1f7f9a --- /dev/null +++ b/Scripts/verify_elementary_survival_question_bank.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +"""Verify the MVP elementary survival question bank is documented.""" + +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +DOC = ROOT / "Docs" / "KnowledgeAndSkillFoundation.md" +ROADMAP = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md" + +REQUIRED = { + DOC: [ + "## MVP Elementary Survival Question Bank", + "id: fire.clearance.001", + "id: water.potable.001", + "id: exposure.cold.001", + "id: shelter.drainage.001", + "id: injury.bleeding.001", + "id: resource.fiber.001", + "Question-bank rule:", + ], + ROADMAP: [ + "[x] Add a small MVP question bank for elementary survival knowledge.", + ], +} + + +def main() -> None: + missing: list[str] = [] + for path, snippets in REQUIRED.items(): + text = path.read_text(encoding="utf-8") + for snippet in snippets: + if snippet not in text: + missing.append(f"{path.relative_to(ROOT)} missing {snippet!r}") + if missing: + raise SystemExit("FAILED: " + "; ".join(missing)) + print("OK: elementary survival question bank is documented.") + + +if __name__ == "__main__": + main()