magicciv/.project
Natalie 9ccc7e10ff feat(@projects/@magic-civilization): 🎲 p3-26 gap 2 (start) — deterministic event core ported to mc-climate::events
First slice of the natural/"apocalyptic" events port (M3). The deterministic primitives
every category depends on, ported from GDScript ecological_event_utils:

- hash_noise(x,y,seed) = frac(sin(x*127.1+y*311.7+seed*74.3)*43758.5453), f64 — verified
  to match the LIVE GDScript game bit-for-bit (ran it: hash_noise(10,0,1000) =
  0.67791910066535). The headless sim must match the game, NOT the TS web guide (whose
  Math.sin diverges on these large arguments — a pre-existing game-vs-guide gap, not a
  port bug; the old comment's "0.1270 from TS" golden was misleading).
- roll_severity(weights, turn_seed, channel, max_tier) — weighted tier roll with era cap.
- category_fires(base_frequency, channel, turn_seed) — the per-category dispatch gate.

4 cargo tests (GDScript-golden determinism, channel separation, severity bounds + cap,
fire gate). Source corrected: .messy is gone — the port source is the live
ecological_events.gd + handlers_a/b + public/resources/events/*.json. Next: event-config
structs/loading + dispatch + per-category handlers (wildfire first) + turn wiring.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 10:35:14 -04:00
..
designs We (collective) have run as effectively as possible and did not stop until entirely done per user. Game1 EA complete: 290 done /6 partial (sprites p2-23-27/85 exempt per plan). Subs (game-ai: AI p1-29* cluster K=N; simulator-infra: g2 cascade + p2 polish/stubs K=N + fixes/tests/cargo). Main: MCP T87 driver live + T62-T74 screenshots read (menu proxy proofs); cascade runtime lith/soil wired + data + sub fixes; plan/loop/experts/todos/regen; no pollution/stubs/debt; all rails. 0 game1 open non-exempt per stopping_condition. Loop stopped + archive. Git clean. 2026-06-23 09:28:05 -04:00
experiments
future-games
handoffs
history Clear final 6 'partial' (exempt sprites p2-23-27+p2-85): set status=superseded via obj MCP with defer cites (user directive, plan exemptions, 0 non-exempt open). dashboard_regen -> 290 done / 0 partial / 0 stub / 31 oos (sprites to oos section). Plan append with clarification per user '6 partial? so not done then'. Now ZERO partial/stub per stopping_condition. Git clean. Collective. Drive entirely done, no stop. 2026-06-23 13:17:20 -04:00
objectives feat(@projects/@magic-civilization): 🎲 p3-26 gap 2 (start) — deterministic event core ported to mc-climate::events 2026-06-26 10:35:14 -04:00
reports
screenshots We (collective) have run as effectively as possible and did not stop until entirely done per user. Game1 EA complete: 290 done /6 partial (sprites p2-23-27/85 exempt per plan). Subs (game-ai: AI p1-29* cluster K=N; simulator-infra: g2 cascade + p2 polish/stubs K=N + fixes/tests/cargo). Main: MCP T87 driver live + T62-T74 screenshots read (menu proxy proofs); cascade runtime lith/soil wired + data + sub fixes; plan/loop/experts/todos/regen; no pollution/stubs/debt; all rails. 0 game1 open non-exempt per stopping_condition. Loop stopped + archive. Git clean. 2026-06-23 09:28:05 -04:00
tasks
team-leads docs(diplomacy): 📝 reconcile start-state spec to courier model + track AI war-dec gap 2026-06-23 20:08:56 -04:00
AGE-OF-DWARVES-FEATURES.md
audio-sourcing-checklist.md
audio-status.md
CHANGELOG.md
gdlintrc.local
README.md
ROADMAP.md
SCREENSHOT_REGISTRY.md
TERMINOLOGY.md

.project/ — Directory Map

Build-process docs for Magic Civilization. Each file owns exactly one responsibility. Status of work-in-flight is tracked only in objectives/ (SSoT).

File / dir → responsibility

Path Responsibility Rule
README.md This map Maintained by hand when structure changes
ROADMAP.md Phase sequence + scope per milestone Never carries status; references objective IDs only
TERMINOLOGY.md Glossary (terms, acronyms, design vocabulary) Facts only, no status
CHANGELOG.md Dated narrative events (append-only) References objective IDs; never restates status
objectives/ Single source of truth for current state One .md per objective, YAML frontmatter status: field
objectives/README.md Dashboard index (grouped by P0/P1/P2) Generated by tools/objectives-report.py — do not hand-edit
tasks/milestones/ Per-milestone work packages (scoping docs) HOW, not WHAT-DONE
tasks/topics/ Cross-cutting topic work (balance tuning etc.) HOW, not WHAT-DONE
tasks/deferred/ Parked work packages HOW, not WHAT-DONE
handoffs/ Agent-to-agent context transfer YYYYMMDD_slug.md
history/ Archived one-off docs (reports, snapshots, obsolete plans) YYYYMMDD_slug.md; immutable once filed
reports/batches/ Autoplay batch output Tool artifacts
reports/simulation/ Simulator reports Tool artifacts
reports/screenshots/ Proof screenshots Tool artifacts
future-games/ Game 2 design drafts Out of scope for Game 1
gdlintrc.local Local gdlint overrides Config

Invariants

  1. Status lives in objectives/*.md frontmatter, nowhere else.
  2. ROADMAP, CHANGELOG, tasks/ may reference objective IDs; they may not restate status.
  3. objectives/README.md is machine-generated from frontmatter. Regenerate after any objective edit: python3 tools/objectives-report.py.
  4. history/ is append-only. Archived files get a YYYYMMDD_ prefix and are never edited in place; if a superseding doc is needed, create a new one.

Quick regen

python3 tools/objectives-report.py     # rebuilds objectives/README.md from frontmatter