# AI Agent Workflow Guide for Tekton Dash This document tells AI agents how to work on Tekton Dash tasks end-to-end. --- ## 1. Task Source: Notion MCP All tasks live on the **"TektonDash - Armageddon PR Tasks"** Notion board. https://www.notion.so/danchiego-game/36433be43b29800c8422ed5bdd65671b?v=36433be43b2980de8635000c0a910a0d ### Finding Tasks **CRITICAL:** Always start by finding tasks from Notion. Priority order: P0 > P1 > P2 > P3. Status order: In Progress > To Do. Example search for "Gauntlet" tasks: ``` Use: mcp_notion_API_post_search query: "[Gauntlet]" or task name filter: {"property": "object", "value": "page"} ``` ### Reading a Task **CRITICAL:** The **Description** field contains the actual implementation requirements. TASKS.md defines workflow procedure only — each task's unique problem and solution are in Notion's Description field. Always read full task details: ``` Use: mcp_notion_API_retrieve_a_page page_id: "" ``` Each task page has these properties: | Property | Type | Purpose | |---|---|---| | **Name** | title | Task title, e.g. `[Gauntlet] #1 Game Mode Registration` | | **Status** | select | `To Do` → `In Progress` → `Done` | | **Priority** | select | `P0` (critical) / `P1` / `P2` / `P3` | | **Effort** | select | `S - Small` / `M - Medium` / `L - Large` / `XL - Epic` | | **Sprint** | select | `Alpha` / `Beta` / `Release` | | **ProjectType** | select | `CORE` / `CLIENT` / `SERVER` / `INFRA` | | **Description** | rich_text | Full task description — **read this to understand what to do** | | **Acceptance** | checkbox | Check when task is verified complete | | **DueDate** | date | Optional deadline | | **UnitTest** | date | Optional test completion date | ### Task Lifecycle ``` To Do → In Progress → Done ``` **CRITICAL WORKFLOW:** 1. **Read task from Notion**: Use `mcp_notion_API_retrieve_a_page(page_id="...")` to get full task details 2. **Read Description field carefully**: This contains the actual implementation requirements — file names, function signatures, integration points, RPC patterns, etc. 3. **Implement exactly what Description specifies**: Don't invent your own approach — follow the Description's technical requirements 4. **Write unit tests**: Follow pattern in `tests/` directory (see GUT_SETUP_SKILLS.md) 5. **Update changelog**: Add entry to `CHANGELOG_DRAFT.md` (consumer-facing language, not technical jargon) 6. **Version management**: Check git diff for existing version changes (see Version Bumping section below) 7. **Mark complete in Notion**: Set `Status` → `Done`, check `Acceptance` ✅ ``` Use: mcp_notion_API_patch_page page_id: "" properties: {"Status": {"select": {"name": "Done"}}, "Acceptance": {"checkbox": true}} ``` --- ## 2. Code Structure | Path | Purpose | |---|---| | `scripts/game_mode.gd` | GameMode enum + helpers (add new modes here) | | `scripts/managers/` | All game mode managers (lobby, stop_n_go, portal, gauntlet) | | `scenes/main.gd` | Central orchestrator — init, setup, game start routing | | `tests/` | GUT unit tests — one file per task/feature | ### Adding a New Game Mode 1. Add enum to `scripts/game_mode.gd` → update `from_string()`, `mode_to_string()`, `get_all_modes()`, `is_restricted()` 2. Add mode name to `LobbyManager.available_game_modes` in `lobby_manager.gd` 3. Add arena name to `_update_available_areas()` in `lobby_manager.gd` 4. Add manager var + init branch in `main.gd` `_init_managers()` 5. Add setup branch in `_setup_host_game()` and `_setup_client_game()` 6. Add start branch in `_start_game()` 7. Add background in `_apply_arena_background()` --- ## 3. Unit Testing ### Pattern All tests extend `GutTest` and live in `tests/`. Naming: `test_.gd` ```gdscript extends GutTest func before_all(): gut.p("=== Feature Tests [Task ID] ===") func test_something(): assert_eq(actual, expected, "Description") func after_all(): gut.p("=== Feature Tests Complete ===") ``` ### Running Tests ```cmd run_tests.cmd # all tests run_tests.cmd test_gauntlet_registration # specific test ``` Reports saved to `test_reports/` with timestamps. --- ## 4. Version Bumping **Before bumping, check git for existing uncommitted version changes:** ```cmd git diff --cached -- project.godot CHANGELOG_DRAFT.md git diff -- project.godot CHANGELOG_DRAFT.md ``` ### If version changes already exist (staged or unstaged): → **APPEND** your changelog bullet to the existing version block in `CHANGELOG_DRAFT.md` → **DO NOT** bump `project.godot` or `export_presets.cfg` — you're joining an in-progress batch ### If NO version changes exist (clean state): → **BUMP** version (increment patch: `2.3.5` → `2.3.6`) → **UPDATE** all locations below Version appears in **4 locations** — all must match: | File | Field | |---|---| | `CHANGELOG_DRAFT.md` | `## [X.Y.Z] — YYYY-MM-DD` header | | `project.godot` | `config/version="X.Y.Z"` | | `export_presets.cfg` | `application/file_version` and `application/product_version` (per preset) | | `export_presets.cfg` | `export_path` filenames containing version | | `export_presets.cfg` | `version/name` (Android preset) | ### Changelog Style Entries are **consumer-facing** (readable by players). No internal jargon. ```markdown ## [2.3.6] — 2026-05-22 - Added new game mode: Candy Cannon Survival ``` **Bad:** "Added GAUNTLET = 3 to GameMode.Mode enum" **Good:** "Added new game mode: Candy Cannon Survival" --- ## 5. Key Conventions - **Caveman Mode**: Be terse. No filler. Execute first, talk second. - **Read task from Notion FIRST**: Always use `mcp_notion_API_retrieve_a_page` to get the Description field before implementing - **Description field is the spec**: TASKS.md is workflow procedure only. Each task's unique requirements (file names, function signatures, RPC patterns, integration points) are in Notion's Description field - **Read before edit**: Always check whole files before modifying `.gd`, `.tscn`, `.tres`, `.res` files - **Notion status flow**: `To Do` → `In Progress` → `Done` (never skip steps) - **Test everything**: Every completed task gets a `test_.gd` in `tests/` - **GUT framework**: Tests use the Godot Unit Test (GUT) addon at `addons/gut/` - **Version discipline**: Check `git diff -- project.godot CHANGELOG_DRAFT.md` before bumping version (see Version Bumping section)