Active inter-player trade deals now surface in the diplomacy panel's per-rival agreement
section, alongside open-borders / shared-map rows.
- diplomacy.gd get_active_agreements parses the serde-tagged LuxurySwap / StrategicSwap /
ResourceSale entries straight out of GameState.trade_ledger_json (_append_trade_deals +
_swap_entry + _sale_entry — pure GDScript, no new FFI). Each deal becomes a display dict
{type, partner, you_receive/you_give | role/resource/gold_per_turn}.
- diplomacy_panel._make_agreement_section renders luxury_swap/strategic_swap (receiving X
for Y) + resource_sale (buying/selling X, ±gold/turn). 6 diplomacy_* vocab keys added.
- GUT test_get_active_agreements_surfaces_trade_deals: all three deal types + partner/
direction/resource fields. Panel script compiles + its tests pass. Full suite 750/0.
p3-23 implementation + logic now COMPLETE and GUT-proven across steps 1-5. The only item
left before status:done is a phase-gate proof screenshot of the trade rows (needs a
crafted live state with a human-held ledger deal; not reproducible in the all-AI arena).
Stays partial per objective-integrity.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| designs | ||
| experiments | ||
| future-games | ||
| handoffs | ||
| history | ||
| objectives | ||
| reports | ||
| screenshots | ||
| tasks | ||
| team-leads | ||
| 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
- Status lives in
objectives/*.mdfrontmatter, nowhere else. - ROADMAP, CHANGELOG, tasks/ may reference objective IDs; they may not restate status.
objectives/README.mdis machine-generated from frontmatter. Regenerate after any objective edit:python3 tools/objectives-report.py.history/is append-only. Archived files get aYYYYMMDD_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