From edc28d5cdb274ede5b876f4a5b74f46248a81d44 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 31 May 2026 15:52:48 +0200 Subject: [PATCH] chore(config): allow read-only file access for teammates + system-economic-specialization workshop brief MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - settings.json: add Read(repo/**), Read(/tmp/**), Grep, Glob to the allowlist. Teammates inherit settings.json (not settings.local.json), which had no Read rule — so every teammate file read escalated to the lead as a per-file prompt. This closes that gap. - Add the system-economic-specialization workshop brief (lore-authored per-system dominant-commodity field + within-system weighted variation; Q5 covers adding a small identity field set in the same 300-system pass). Note: agent memory-strip (6c93b698f) + this read-allow reach teammates only after a Claude Code restart (settings/agent-def snapshot is taken at lead startup). Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/settings.json | 6 + ...-economic-specialization-workshop-brief.md | 117 ++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 docs/workshops/system-economic-specialization/system-economic-specialization-workshop-brief.md diff --git a/.claude/settings.json b/.claude/settings.json index cee717f29..042aeabc2 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -63,6 +63,12 @@ "Bash(list *)", "Bash(tree *)", "Bash(sed -n *)", + + "Read(//var/mnt/data/projects/settled-reach/**)", + "Read(//tmp/**)", + "Grep", + "Glob", + "Skill(git-commit)", "Skill(whats-next)", "Skill(pr-process)", diff --git a/docs/workshops/system-economic-specialization/system-economic-specialization-workshop-brief.md b/docs/workshops/system-economic-specialization/system-economic-specialization-workshop-brief.md new file mode 100644 index 000000000..64a831ae6 --- /dev/null +++ b/docs/workshops/system-economic-specialization/system-economic-specialization-workshop-brief.md @@ -0,0 +1,117 @@ +# Workshop — System economic-specialization field (lore-authored dominant commodity) + +*Short, focused workshop. Goal: design ONE authored per-system field (maybe two, +or a small identity set) that drives each settlement's dominant commodity — so the +built world stays in step with GTTR/wiki lore instead of being guessed by a +heuristic.* + +**Participants:** Miri, Burnelli-Sheldon, Paula + +## Why we're here (the problem) + +Layer 2 (#982) needs each settlement's **dominant commodity**, which drives its +built form (D-233: `BulkClass` × `ProductionUbiquity` → coverage, vocabulary, +spread). We tried deriving it from `economic_role` + corp-HQ + `planet_class`. +That heuristic **can contradict authored lore**: it could turn the core's +breadbasket into a foundry, or make the MVG homeworld about cereal products. + +**Decision already taken (the frame — don't relitigate):** authored lore WINS. +The dominant commodity for a system is **authored**, lore/GTTR-consistent. The +role+corp+planet_class heuristic survives only as a *fallback / weighting basis* +for unnamed, generic worlds. This workshop designs the authored layer. + +## The shape the human wants (design within this) + +- **ONE authored field per system** = the system's economic specialization / + dominant-commodity character. Lore-driven, GTTR-consistent. +- **Maybe a SECOND field — `economy_size`** — a modifier. Decide if it earns its + place and what it modifies. +- **Within a system, bodies vary *weightedly*** around the system field — an + industrial system can still have a farming moon, but the system reads as its + authored character. The variation is weighted, not free. +- A **300-system content pass** fills this field (Miri + Paula + Burnelli), + staying in step with the wiki/GTTR. Keep the authoring burden to ~1 field + (2 max, or a tight identity set per Q5) per system. + +## Frozen-amber caveat (pin this) + +The field is **static, authored, t=0** — read at build time into `systems.db`, +never the rolling economy. Derivation must stay deterministic (D-010). No +`PressureState`, no tâtonnement, no save-state. + +## Questions for participants + +Each participant answers all five from their lens (Miri = lore/GTTR truth; +Burnelli-Sheldon = economic credibility + mapping + weighting + integration; +Paula = faction/political economy). Be concrete — name the field, propose its +vocabulary, name worlds that must be pinned. + +**Miri / Burnelli-Sheldon / Paula:** + +1. **Q1 — The field.** What *exactly* is the single per-system field? Its + vocabulary (a commodity id? a specialization category? primary ± secondary?), + and how it maps to `dominant_bulk_class` + `dominant_production_ubiquity` + (D-233). Does it reuse/replace the existing `system_economy.economic_base_primary + /secondary` (already authored, free-text) or supersede it? One value or a small + set? +2. **Q2 — Within-system weighted variation.** How do bodies vary around the + system field? What weights apply (body `economic_role`, `planet_class`, corp + HQ, faction)? How is a minority body (the farming moon in a foundry system) + expressed without breaking the system's authored read? Must be deterministic + (seed + static data only). +3. **Q3 — `economy_size`?** Is a second field warranted? If so, what does it + modify — coverage density (D-220), count of specialized blocks, labor draw + (D-233 residential follow-on) — or is it already covered by `population` / + `prosperity_baseline`? Decide in or out; don't add a field that duplicates one. +4. **Q4 — The content pass.** The authoring workflow for ~300 systems: who + authors what (Miri = lore/GTTR truth; Paula = faction/political economy, esp. + faction homeworlds & capitals; Burnelli = economic credibility + the + field→commodity mapping + the weighting model); how to stay GTTR-consistent; + where the source lives (wiki TOML → `import_economics.py` → `systems.db` + column); CI guardrails (every system has the field; values in-vocabulary; + flag systems where the field contradicts existing authored prose). +5. **Q5 — Do we want a couple MORE identity fields while the pass is open?** + We're touching all ~300 systems by hand once. What other 1–2 authored + per-system fields would meaningfully flesh out **identity** and are cheap to + fill in the same pass — most obviously the **architecture / cultural + character** (the D-232 trait-template / `atlas_body_trait_bias` "hero" pin, + so a system reads architecturally as canon, not heuristic), and possibly a + dominant cultural/political register. Propose the *minimal* high-value set, + with the same system-level + within-system-weighted-variation shape. **Guard + against scope creep:** every field is authoring burden ×300 and a maintenance + surface — only fields that genuinely change how a system reads earn a slot, + and each must degrade to a heuristic/default for unauthored systems. Decide + the field set; don't gold-plate. + +## Build on what exists (don't restart) + +- **#982 baseline (provisional, uncommitted):** the role+corp+planet_class + heuristic in `import_economics.py` + `city_context_reader.rs` — becomes the + fallback/weighting basis, not the primary driver. +- **D-233** (economic signal → block-fill; the 2026-05-31 amendment defines the + current heuristic — this workshop will re-amend it). +- **D-184** (commodity catalogue), **D-199** (economic read-set), **D-200** + (build-time tier-1 denormalization), **D-176/D-178** (rolling economy — OUT of + scope here, runtime only), **D-220** (density), **D-197** (prosperity), + **D-232** (architecture-flavor / trait templates — relevant to Q5). +- `system_economy.economic_base_primary/secondary`, `bodies.economic_role`, + `bodies.planet_class`, `corp_presence.primary_operation` — the static signals + that already exist (Burnelli's earlier data memo has the full inventory). + +## Workshop Format + +Quick, two rounds max, with a mandatory user checkpoint between. + +- **Round 1 — Opening positions.** Each participant reads this brief + the + decisions/data for their angle and writes their answer to Q1–Q5 to + `docs/workshops/system-economic-specialization/{agent}-round1.md`. Concrete: + name the field, its vocabulary, the weighting model, the Q5 field set, and the + worlds that must be pinned. Qatux documents; the lead presents findings to the + human before any Round 2. +- **Round 2 — Synthesis / convergence (only if the human approves).** Resolve + forks surfaced in Round 1 into a single proposed field schema + content-pass + plan. Output → a D-record (re-amending D-233 + any new record) and the ticket + set (SI). + +Qatux (documenter) and SI (ticket prep) join and are never dismissed early. +Sonnet-pinned participants.