Compare commits
35
Commits
1782592dfd
...
v0.1.27
@@ -25,7 +25,8 @@ The current branch IS the team. Read it with:
|
||||
git branch --show-current
|
||||
```
|
||||
|
||||
Valid team branches: `server`, `client`, `copy`, `audio`, `visual`, `ci`.
|
||||
Valid team branches: `server`, `client`, `copy`, `audio`, `visual`, `ci`,
|
||||
`planning`.
|
||||
|
||||
If on `main`, follow the **Main branch workflow** below instead of
|
||||
the team branch workflow (steps 2–8).
|
||||
@@ -399,6 +400,68 @@ Task(
|
||||
)
|
||||
```
|
||||
|
||||
#### 8d-planning. Planning team variant — proposers vs executors
|
||||
|
||||
When the team is `planning`, agents work in discussion mode, not
|
||||
implementation mode. The briefing typically defines discussion rounds
|
||||
(propose → review → execute). Most agents are **proposers** — they
|
||||
analyze and recommend. Only designated agents **execute** (write to
|
||||
files, modify DB).
|
||||
|
||||
**Classify agents from the briefing:**
|
||||
- **Executor agents:** SI (project manager), Qatux (documenter).
|
||||
These agents wait for consensus before writing anything.
|
||||
- **Proposer agents:** Everyone else (Gestalt, Tyre, Paula, Ozzie,
|
||||
etc.). These agents analyze, propose, and discuss — they do NOT
|
||||
write decision files, modify the DB, or create/delete tickets.
|
||||
|
||||
**Add this block to proposer agent prompts** (replaces rules 3–5
|
||||
and the WORKFLOW section from the standard template):
|
||||
|
||||
```
|
||||
PLANNING TEAM RULES (replace standard rules 3-7 and WORKFLOW):
|
||||
|
||||
3. PROPOSE ONLY: You are a discussion participant. Your job is
|
||||
to ANALYZE tickets, PROPOSE team assignments, and RECOMMEND
|
||||
splits. You do NOT:
|
||||
- Write or modify decision files (decisions/*.md)
|
||||
- Run DB update/insert/delete commands
|
||||
- Create, delete, or modify tickets
|
||||
- Mark tasks as completed
|
||||
Those actions belong to executor agents (SI, Qatux) after
|
||||
the team lead confirms consensus.
|
||||
|
||||
4. OUTPUT FORMAT: Your first message to the team lead should
|
||||
be your full analysis. Structure it as:
|
||||
- Your position on open questions (with rationale)
|
||||
- Proposed team assignments (table format)
|
||||
- Split candidates (if any)
|
||||
- Sprint readiness assessment
|
||||
Do NOT claim or work tasks. The team lead coordinates.
|
||||
|
||||
5. WAIT FOR CONSENSUS: Do not treat your own proposal as
|
||||
decided. Other agents may disagree. The team lead calls
|
||||
consensus and directs executors to implement it.
|
||||
```
|
||||
|
||||
**Add this block to executor agent prompts** (appended after the
|
||||
standard rules):
|
||||
|
||||
```
|
||||
PLANNING TEAM RULES (additional):
|
||||
|
||||
8. WAIT FOR CONSENSUS: Do NOT execute DB changes, write
|
||||
decision files, or create tickets until the team lead
|
||||
explicitly tells you to. Your first message should confirm
|
||||
you are ready and describe your execution plan. Then wait.
|
||||
|
||||
9. EXECUTE EXACTLY WHAT IS DIRECTED: When the team lead sends
|
||||
you a list of changes, execute them precisely. Do not add
|
||||
extra changes, reinterpret the instructions, or fill gaps
|
||||
with your own judgment. If something is ambiguous, ask
|
||||
before executing.
|
||||
```
|
||||
|
||||
#### 8e. Report
|
||||
|
||||
Output to the user:
|
||||
|
||||
@@ -21,7 +21,21 @@ run_check() {
|
||||
|
||||
# --- Checks ---
|
||||
run_check "tooling/check-fact-ids" "fact_id validation"
|
||||
run_check "tooling/check-decision-ids" "decision ID duplication"
|
||||
# TODO: uncomment when tooling/check-decision-ids is implemented
|
||||
# run_check "tooling/check-decision-ids" "decision ID duplication"
|
||||
|
||||
# Run cargo audit only when Cargo.toml or Cargo.lock changed
|
||||
if git diff --cached --name-only | grep -qE '(Cargo\.toml|Cargo\.lock)$'; then
|
||||
echo "pre-commit: Cargo dependency change detected — running cargo audit..."
|
||||
if command -v cargo-audit >/dev/null 2>&1 || cargo audit --version >/dev/null 2>&1; then
|
||||
if ! (cd "$REPO_ROOT/server" && cargo audit); then
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
else
|
||||
echo "pre-commit: WARNING — cargo-audit not installed, skipping advisory check"
|
||||
echo " Install with: cargo install cargo-audit"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$ERRORS" -gt 0 ]; then
|
||||
echo ""
|
||||
|
||||
+18
-10
@@ -6,7 +6,14 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [v0.1.27] — 2026-03-17
|
||||
|
||||
### Added
|
||||
- 29 zone-type behavior templates completing the full library of 31 zone types per D-142. 2,210 culture-neutral behavior primitives across rural, industrial, port, extraction, commercial, administrative, research, medical, military, security, entertainment, residential, detention, archaeological, wilderness, and diplomatic zones
|
||||
- Generator-compatible overheard conversation RON format replacing the deprecated named-NPC YAML. 16 sample conversations parameterized by role pair and zone type with knowledge_payload for investigative value
|
||||
- Cross-culture name pool collision checking in validate-ron (`--check-name-collisions` mode)
|
||||
|
||||
- Drifter's Guide to the Reach — 100% coverage (301/301 systems). 262 new GTTR entries across all 5 regions plus updated regional index pages with hop-grouped tables
|
||||
- GJ 6711 / Abzu workshop — 6 rounds, 24 documents: initial briefs (4 agents), cross-pollination syntheses, sealed envelope (observation is load-bearing), stress test challenges against existing canon, final syntheses with Abzu naming, mechanics design (watch investment counter, six player verbs, bleed tile states, Adams & Ford entry filing), carry-out proposals (unresolved — reward design TBD)
|
||||
- Star map topology and real-coordinate SVG visualizations
|
||||
- Compact of Westphalia faction page — mutual recognition treaty, ~30-40 west_reach systems, four core principles, rotating council, internal treaty-vs-government tension
|
||||
@@ -25,7 +32,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- Inner hub wiki pages (hops 3-4) — Crown's Hollow, Cairnside, Schuilhoek, Travessia, Nová Tržnice
|
||||
- Corporation doc for Mercado Travessia (grocery chain, Travessia)
|
||||
- Corporation docs for Adams & Ford Publishing, Calloway Distillery, thrds (updated index)
|
||||
- 300-system CSV framework (systems-framework.md) — 66 columns covering colonization waves, cultural archetypes, tone framework, economic distribution, and Krenn validation (D-095)
|
||||
- 300-system CSV framework (systems-framework.md) — 66 columns covering colonization waves, cultural archetypes, tone framework, economic distribution, and Van Maanen's Star validation (D-095)
|
||||
- Star map gate topology — 300-node network with 334 edges across 6 sectors, generated and hand-tuned for natural corridor structure in frontier space
|
||||
- Star map generation pipeline — seed-based generator, sculpting script, core sector patcher, topology tuner with bridge-safe connectivity guarantees
|
||||
- d2 sector diagrams — 6 sector maps + overview visualization of gate network
|
||||
@@ -37,6 +44,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- `hop_distance_from_gateway` column in system_gates table
|
||||
|
||||
### Changed
|
||||
- Renamed GJ-7547 from Wag-'n-Bietjie to Skemeraand ("twilight evening") — better tonal fit for hop 22 position
|
||||
- Rebuilt catalog.md and star-systems/index.md — now covers all 301 systems (227 named) organized by sector and hop distance
|
||||
- 14 systems reassigned from deep_frontier into named corridors at hops 5-7 (5 north, 3 south, 3 east, 3 west)
|
||||
- Renamed Carrefour to Confluent; expanded to 60+ named châteaux with 16 individually described estates
|
||||
@@ -69,13 +77,13 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
### Removed
|
||||
- v0.1 content loading system — server/src/content/ module (8200 lines), tooling/content-converter/, tooling/validate-content, content-ron/, content/_meta/ (#655, D-122)
|
||||
- AiDialogueDetector — duplicate of HardwareDetector, replaced by PlatformInfo abstraction (#659)
|
||||
- v0.1 hand-authored Krenn dialogue, monologue, and NPC profiles — 64 files superseded by generated NPCs (#656, D-122)
|
||||
- v0.1 hand-authored Van Maanen's Star dialogue, monologue, and NPC profiles — 64 files superseded by generated NPCs (#656, D-122)
|
||||
- Detective mission system — investigation knowledge, lattice-commission faction, design docs, workshop archives (#657, D-117)
|
||||
|
||||
### Fixed
|
||||
- Name pool cross-contamination — zero overlaps across Krenn, Vael, and Osse cultures
|
||||
- Name pool cross-contamination — zero overlaps across Van Maanen's Star, Vael, and Osse cultures
|
||||
- D-141 → D-142 reference correction in zone-type templates
|
||||
- Modifier coverage expanded to 2+ per category for all cultures; authority_response differentiated Krenn/Osse
|
||||
- Modifier coverage expanded to 2+ per category for all cultures; authority_response differentiated Van Maanen's Star/Osse
|
||||
- Gendered pronouns removed from culture-neutral zone-type templates
|
||||
- Ungrounded lore terms (Syndic, Meridian registration) replaced with generic descriptors in Osse culture
|
||||
- Stale notes in content-structure-canonical.md and base-text-authoring-guide.md corrected
|
||||
@@ -96,7 +104,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- Behavior dedup — same behavior string no longer assigned to multiple NPCs in one zone run (#629)
|
||||
|
||||
### Added
|
||||
- Zone identity specs renamed to location-specific: krenn-rural-zone.ron and krenn-industrial-zone.ron — acknowledges these are culture×zone content, not reusable templates (#630, Q-057)
|
||||
- Zone identity specs renamed to location-specific: van-maanens-star-rural-zone.ron and van-maanens-star-industrial-zone.ron — acknowledges these are culture×zone content, not reusable templates (#630, Q-057)
|
||||
- ~108 new NPC behavior pool entries across all roles in both zone files — trader stage directions, foreman humanity behaviors, dock_worker/technician off-shift/break room behaviors (#630)
|
||||
- Q-057 open question: composable behavior generation — decompose hand-authored pools into role actions + culture modifiers + context tags (#633, #634)
|
||||
- Relationship-to-behavior pipeline — NPC behavior lines now reflect social connections (rivals ignore each other, friends gravitate, subordinates defer) (#631)
|
||||
@@ -204,7 +212,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- Consolidate near-identical unit tests with integration counterparts
|
||||
|
||||
### Changed
|
||||
- Sova station profile updated — horizon gates located at The Krenn Ring (800 AU), not on Station Sova; Admin Hub houses transit processing facility only
|
||||
- Sova station profile updated — horizon gates located at The Van Maanen Ring (800 AU), not on Station Sova; Admin Hub houses transit processing facility only
|
||||
- game_state.gd: stationary_ticks and zone_id now read from server snapshot with deprecated client-side fallbacks (#557, D-020)
|
||||
- dialogue_box.gd: decoupled from GameState and AudioManager via signals — zero direct autoload references (#558, D-020)
|
||||
- main.gd: snapshot dispatch via SnapshotEventRouter, dialogue signal coordinator handlers (#559, #558)
|
||||
@@ -382,7 +390,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- Text display hierarchy spec — 4 content pipelines (dialogue, monologue, observation, environmental) with z-layers and positioning (#316)
|
||||
- Sound indicator visual design — fog-edge pulse for D-018 three-range sound model with direction encoding and range differentiation (#317)
|
||||
- THE FRIEND visual treatment spec — 3-phase earned visual detail for Kael Davan and Sera Venn (#318)
|
||||
- Environmental text visual standards — signage, terminal, and news ticker rendering with bilingual Concordat/Krenn treatment (#334)
|
||||
- Environmental text visual standards — signage, terminal, and news ticker rendering with bilingual Concordat/Van Maanen's Star treatment (#334)
|
||||
- Tell visual/behavioral expression spec — 5 tell categories mapped to 6 Tier 2 behaviors (#251)
|
||||
- Monologue line pool maxLength raised from 160 to 256 chars (soft guidance ≤160)
|
||||
- NPC name masking infrastructure — entity-anchored dialogue log with server-side role labels, retroactive name update on learning, NpcColorIndex for stable color assignment
|
||||
@@ -759,7 +767,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- UIStrings autoload with YAML-based UI string loading (#409) — minimal YAML parser, `get_text()` lookup with fallback-to-key
|
||||
- HUD and interaction prompt labels now loaded from `client/data/ui-strings.yaml` instead of hardcoded strings
|
||||
- Character voice speech patterns (#310) — sentence-level execution spec for smuggler and detective covering contractions, punctuation, stress markers, vocabulary, verbal tics, and authoring checklist
|
||||
- NPC authoring style guide (#379) — 954-line handbook: tier budgets, 9 NPC patterns, dialogue/monologue rules, tag taxonomy, dual-lens coordination, Krenn/Sova culture, FRIEND phase mapping, validation checklist
|
||||
- NPC authoring style guide (#379) — 954-line handbook: tier budgets, 9 NPC patterns, dialogue/monologue rules, tag taxonomy, dual-lens coordination, Van Maanen's Star/Sova culture, FRIEND phase mapping, validation checklist
|
||||
- UI microcopy (#409) — 72 YAML strings for client integration: interaction verbs, relationship states, HUD labels, perception modes, notifications, knowledge panel, tutorial prompts
|
||||
- Kael Davan FRIEND pack (#297) — 86 hand-authored lines across 3 locations, 5-phase relationship arc with contradiction scene, dual-lens notes
|
||||
- Sera Venn FRIEND pack (#298) — 75 hand-authored lines at The Last Shift, trust-gated gossip, avoidance contradiction, contaminated trust arc
|
||||
@@ -844,7 +852,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
### Changed
|
||||
- NearbyInteractionBuffer refactored from global Resource to per-entity Component on PlayerCharacter — multiplayer-ready (D-009)
|
||||
- Observer module split into mod.rs (244 lines) + tests.rs (480 lines) — reduces module complexity
|
||||
- Content directory restructured from flat districts/ to hierarchical campaigns/main/systems/krenn/stations/sova/districts/transit/ — path mirrors canonical IDs, glob-based discovery, multi-campaign/DLC ready
|
||||
- Content directory restructured from flat districts/ to hierarchical campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/ — path mirrors canonical IDs, glob-based discovery, multi-campaign/DLC ready
|
||||
- Content manifest (content.yaml) rewritten for glob-based district discovery
|
||||
- District identity fields (system, station, district) now derived from directory path — removed from district.yaml required fields
|
||||
- NPC canonical_id schema accepts district-scoped IDs (npc:transit.kael-davan) for cross-district uniqueness
|
||||
@@ -1007,7 +1015,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
|
||||
- D-033: Entity color represents relationship to player character (asymmetric per character)
|
||||
- D-034: THE FRIEND NPC pattern — production-level emotional centerpiece per character (Kael Davan, Sera Venn)
|
||||
- D-035: Converged tag taxonomy for dialogue/monologue line pools (6 structural + 3 selection tags)
|
||||
- D-036: Sova Transit District / Krenn System as v0.1 setting (first named star system)
|
||||
- D-036: Sova Transit District / Van Maanen's Star as v0.1 setting (first named star system)
|
||||
- D-037: Contraband specification — unlicensed lattice components (moral ambiguity by design)
|
||||
- D-038: Audio in v0.1 scope — 8 AI-generated files via Stable Audio Open
|
||||
- D-039: All 6 wow moments promoted to v0.1 must-have scope
|
||||
|
||||
@@ -3,6 +3,7 @@ GODOT := $(shell command -v godot4 2>/dev/null || command -v godot 2>/dev/null)
|
||||
.PHONY: help setup build check-protocol client server game stop test lint ci ci-client ci-server clean \
|
||||
decisions-sync decisions-coverage decisions-active decisions-orphan \
|
||||
db-backup db-install validate-content check-fact-ids setup-hooks \
|
||||
audit \
|
||||
pre-pr pre-pr-lint pre-pr-build pre-pr-test pre-pr-validate pre-pr-fixtures \
|
||||
pre-pr-server pre-pr-client pre-pr-content \
|
||||
fixtures-client fixtures-gauntlet golden-diff golden-update \
|
||||
@@ -45,6 +46,7 @@ help:
|
||||
@echo " make decisions-coverage Decision-to-ticket coverage by domain"
|
||||
@echo " make decisions-active List active decisions"
|
||||
@echo " make decisions-orphan Decisions without implementing tickets"
|
||||
@echo " make audit Run cargo audit (security advisory check)"
|
||||
@echo " make validate-content Validate content YAML against schemas"
|
||||
@echo " make check-fact-ids Check fact_id references against knowledge catalogs"
|
||||
@echo " make fixtures-client Generate GDScript->Rust cross-encoder fixtures (#475)"
|
||||
@@ -221,7 +223,7 @@ lint-client:
|
||||
|
||||
# --- Pre-PR verification ---
|
||||
|
||||
pre-pr: pre-pr-lint pre-pr-build pre-pr-test pre-pr-validate pre-pr-fixtures
|
||||
pre-pr: pre-pr-lint pre-pr-build pre-pr-test pre-pr-validate pre-pr-fixtures audit
|
||||
@echo ""
|
||||
@echo "=== PRE-PR: ALL CHECKS PASSED ==="
|
||||
@echo "Safe to create PR."
|
||||
@@ -274,7 +276,7 @@ pre-pr-fixtures:
|
||||
|
||||
# Branch-specific variants (faster, scope-appropriate)
|
||||
|
||||
pre-pr-server: lint-server build-server test-server pre-pr-fixtures
|
||||
pre-pr-server: lint-server build-server test-server pre-pr-fixtures audit
|
||||
@echo "=== Server pre-PR: PASSED ==="
|
||||
|
||||
pre-pr-client: lint-client build-client test-client
|
||||
@@ -321,6 +323,9 @@ validate-content:
|
||||
check-fact-ids:
|
||||
@tooling/check-fact-ids
|
||||
|
||||
audit:
|
||||
cd server && cargo audit
|
||||
|
||||
checklist-validate:
|
||||
@tooling/validate-checklist --check
|
||||
|
||||
|
||||
+3
-3
@@ -12,13 +12,13 @@ Cross-domain decisions live in one file with cross-reference notes in related fi
|
||||
|------|--------|-----------|
|
||||
| [architecture.md](architecture.md) | Technical foundation | D-008, D-009, D-010, D-012, D-020, D-026, D-030, D-031, D-041, D-042, D-054, D-055, D-066, D-068, D-073, D-085, D-088, D-094, D-096, D-097, D-099, D-100, D-101, D-102, D-103, D-106, D-108, D-109, D-113, D-133, D-134, D-135, D-136, D-137 |
|
||||
| [perception.md](perception.md) | Player observation | D-011, D-015, D-016, D-017, D-018, D-019, D-033, D-035, D-043, D-044, D-045, D-046, D-047, D-048, D-049, D-052, D-056, D-057, D-058, D-059, D-060, D-061, D-067, D-069, D-070, D-071, D-072, D-076, D-077, D-078, D-086 |
|
||||
| [content.md](content.md) | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084, D-090, D-092, D-093, D-095, D-098, D-104, D-105, D-107, D-121, D-122, D-123, D-124, D-125, D-126, D-127, D-128, D-129, D-130, D-131, D-132, D-138, D-139, D-140, D-142 |
|
||||
| [scope.md](scope.md) | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065, D-087, D-089, D-091, D-114, D-115, D-116, D-117, D-118, D-119, D-120 |
|
||||
| [content.md](content.md) | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084, D-090, D-092, D-093, D-095, D-098, D-104, D-105, D-107, D-121, D-122, D-123, D-124, D-125, D-126, D-127, D-128, D-129, D-130, D-131, D-132, D-138, D-139, D-140, D-142, D-147 |
|
||||
| [scope.md](scope.md) | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065, D-087, D-089, D-091, D-114, D-115, D-116, D-117, D-118, D-119, D-120, D-145, D-146 |
|
||||
| [process.md](process.md) | Team, workflow | D-004, D-021, D-022, D-040 |
|
||||
| [questions.md](questions.md) | Open questions (index) | Q-001 through Q-054 |
|
||||
| [questions-architecture.md](questions-architecture.md) | Technical questions | Q-001, Q-006, Q-009, Q-018–Q-023, Q-029, Q-030, Q-046 |
|
||||
| [questions-perception.md](questions-perception.md) | Observation questions | Q-003, Q-014, Q-016, Q-024–Q-026, Q-051, Q-053, Q-054 |
|
||||
| [questions-content.md](questions-content.md) | Narrative questions | Q-010, Q-012–Q-015, Q-017, Q-028, Q-031, Q-033, Q-040–Q-050, Q-052 |
|
||||
| [questions-content.md](questions-content.md) | Narrative questions | Q-010, Q-012–Q-015, Q-017, Q-028, Q-031, Q-033, Q-040–Q-050, Q-052, Q-WTF-039, Q-WTF-040, Q-WTF-041 |
|
||||
| [questions-scope.md](questions-scope.md) | Scope questions | Q-002, Q-004, Q-005, Q-007, Q-008, Q-011, Q-027, Q-032, Q-034–Q-039 |
|
||||
| [rejected.md](rejected.md) | Rejected alternatives | R-001 through R-010 |
|
||||
|
||||
|
||||
+33
-4
@@ -524,7 +524,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Dissent:** None
|
||||
- **Supersedes:** Per-location behavior pool approach from current zone spec format (`behavior_primitives` arrays on location RON files). Location files retain metadata but behavior content migrates to zone-type template files.
|
||||
- **Amends:** [D-139](#d-139-composable-behavior-primitives-three-layer-assembly) — D-139 defined the assembly mechanics (BehaviorPrimitive, BehaviorModifier, assemble_behaviors); this decision defines the content architecture that feeds it. D-139 remains the implementation record; D-142 is the content architecture record.
|
||||
- **Cross-reference:** [D-138](#d-138-llm-re-voicing-pipeline-for-npc-voice) (LLM pipeline — Layer 3 safety model), [D-140](#d-140-dialogue-re-voicing-quality-constraints--paulas-six-rules) (quality constraints — R4, R6 apply to Layer 3), [D-139](#d-139-composable-behavior-primitives-three-layer-assembly) (assembly mechanics), [D-121](#d-121-voice-is-culture-driven--job-as-modifier) (culture-primary voice), [D-036](#d-036-sova-transit-district--van-maanens-star-system-setting) (Van Maanen's Star setting origin of first zone specs), [D-128](#d-128-culture-is-implicit-in-starting-location) (culture implicit in location)
|
||||
- **Cross-reference:** [D-138](#d-138-llm-re-voicing-pipeline-for-npc-voice) (LLM pipeline — Layer 3 safety model), [D-140](#d-140-dialogue-re-voicing-quality-constraints--paulas-six-rules) (quality constraints — R4, R6 apply to Layer 3), [D-139](#d-139-composable-behavior-primitives-three-layer-assembly) (assembly mechanics), [D-121](#d-121-voice-is-culture-driven--job-as-modifier) (culture-primary voice), [D-036](#d-036-sova-transit-district--van-maanens-star-system-as-v01-setting) (Van Maanen's Star setting origin of first zone specs), [D-128](#d-128-culture-implicit-in-starting-location--van-maanens-star-system-equals-van-maanens-star-culture) (culture implicit in location)
|
||||
|
||||
---
|
||||
|
||||
@@ -543,7 +543,7 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
| Five settlement waves | 0–600 GD | 2300–2900 AD |
|
||||
| Secession | ~300 GD | ~2600 AD |
|
||||
| Game present | ~600 GD | ~2900 AD |
|
||||
- **Cross-reference:** [D-036](#d-036-sova-transit-district--van-maanens-star-system-setting) (setting), Sol wiki page (GJ-0)
|
||||
- **Cross-reference:** [D-036](#d-036-sova-transit-district--van-maanens-star-system-as-v01-setting) (setting), Sol wiki page (GJ-0)
|
||||
|
||||
---
|
||||
|
||||
@@ -551,8 +551,37 @@ How narrative, NPCs, and world content are created: content tiers, NPC generatio
|
||||
- **Date:** 2026-03-14
|
||||
- **Decision:** Sirius is the political capital of the Settled Reach and the seat of the Concord Assembly. It is a hub system (5 apertures, 5 gate connections) in the institutional core, settled in wave_1, 8.6 ly from Sol. Its real-world prominence (brightest star in Earth's sky) maps to its in-setting political centrality. Marked as `generation_priority: campaign_anchor`.
|
||||
- **Rationale:** The capital needs to be a recognizable name that players immediately associate with importance. Sirius's existing topology (hub, 5 connections) already makes it structurally central. Wave_1 settlement means it has the institutional depth to house the Assembly. The symbolic weight of the brightest star as the seat of power writes itself.
|
||||
- **Cross-reference:** [D-143](#d-143-gd-calendar-epoch--gate-discovery-2300-ad-as-year-0) (timeline), [D-036](#d-036-sova-transit-district--van-maanens-star-system-setting) (v0.1 setting)
|
||||
- **Cross-reference:** [D-143](#d-143-gd-calendar-epoch--gate-discovery-2300-ad-as-year-0) (timeline), [D-036](#d-036-sova-transit-district--van-maanens-star-system-as-v01-setting) (v0.1 setting)
|
||||
|
||||
---
|
||||
|
||||
*43 decisions. Last updated: 2026-03-14 (D-144 Sirius as Reach capital)*
|
||||
### D-147: Aesthetic taste as character personality trait — shared root for cosmetic and environmental expression
|
||||
- **Date:** 2026-03-17
|
||||
- **Decision:** Characters have an `aesthetic_taste` personality trait (preferred palette, style leanings) that naturally expresses in both personal appearance and living space. This is NOT a cosmetic→apartment pipeline — hair color does not map to wall color. Instead, taste is a shared root: someone who gravitates toward teal will pick teal clothing AND own a teal vase. The apartment generator reads the character's taste trait (alongside economic position from #615 and cultural context from #679); the character customisation screen lets the player express that same taste through appearance choices. Neither system depends on the other — both read the same underlying trait.
|
||||
- **Rationale:** The naive approach (pipe cosmetic choices into apartment generator) creates a crude "team color" mapping that feels artificial. The elegant approach: taste is a personality attribute, like traits or skills. It manifests independently in multiple contexts. This keeps #619 (customisation) and #617 (apartment) architecturally independent while producing coherent identity expression. The taste trait is also reusable: NPC aesthetic preferences, gift preferences, "does this room feel like home" comfort checks, cultural style variations.
|
||||
- **Dependency implication:** #619 does NOT block #617. Both read the character's taste trait independently. The taste trait definition belongs to the character data model (server), not to either consuming system.
|
||||
- **Information boundary (D-010):** `aesthetic_taste` is a public trait — visible to other entities and the client. NPCs can observe the player's taste (e.g. gift relevance, comfort assessment). This is not private knowledge behind the information boundary.
|
||||
- **Source:** Sprint 27 planning pass — Q-WTF-040 resolution
|
||||
- **Raised by:** Project lead (taste-as-shared-root framing), Gestalt (ColorHint concept evolved into trait), Paula (culture + economics as primary apartment drivers)
|
||||
- **Dissent:** Ozzie argued for direct cosmetic→apartment pipeline. Tyre and Paula argued for no connection at all. The taste trait is the synthesis: connection through personality, not through data pipeline.
|
||||
- **Cross-reference:** [D-125](#d-125-world-is-quietly-responsive--gradient-of-caring-by-social-proximity) (quiet responsiveness), [D-134](architecture.md#d-134-full-character-customisation--hair-clothing-colors-at-tile-scale) (full character customisation), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #617 (auto-generated apartment), ticket #619 (full character customisation)
|
||||
- **Resolves:** Q-WTF-040
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
### Content Pattern Note: Generator-compatible overheard conversation format (ticket #664)
|
||||
- **Date:** 2026-03-17
|
||||
- **Status:** Content pattern noted — pending formal D-record (check with Qatux before claiming ID)
|
||||
- **Pattern:** `content/npc-conversations/overheard.ron` introduces a new content type: a pool of NPC-to-NPC overheard conversations parameterized by `role_pair` and `zone_types` (matching zone-type template role IDs from D-142). No named NPC references. Culture-neutral text that accepts culture modifier at assembly time. Replaces `overheard.yaml.deprecated` (v0.1 hand-authored pool with named NPCs, superseded by D-122).
|
||||
- **Format fields:** `id`, `zone_types[]`, `role_pair(a, b)`, `register` (Work|Social|Gossip), `relationship_context` (Colleague|Acquaintance|Friend|Superior|Subordinate), `topic`, `lines[(speaker:A|B, text)]`, `knowledge_payload (Option<String>)`
|
||||
- **Occlusion authoring rules:** D-078 rules apply unchanged — front-load key info, short declarative sentences, no pronoun-first openers, each turn self-contained.
|
||||
- **Runtime resolution:** Generator selects conversations where two nearby NPCs match `role_pair` and `zone_types`. Knowledge payload is exposed to player inference layer (partial occlusion reduces but cannot eliminate inference value of a fully-heard payload).
|
||||
- **Schema location:** `server/src/npc/overheard.rs :: OverheardPool` — TBD pending #663 struct changes.
|
||||
- **Raised by:** Paula (Sprint 27, ticket #664)
|
||||
- **Decision needed:** Whether to formalize this as D-NNN or treat as sub-pattern of D-142. Recommend D-record since it introduces the `knowledge_payload` field as a new ambient information delivery mechanism distinct from existing dialogue architecture (D-028).
|
||||
|
||||
---
|
||||
|
||||
*44 decisions. Last updated: 2026-03-17 (D-147 aesthetic taste trait; content pattern note for overheard.ron format added)*
|
||||
|
||||
@@ -205,4 +205,27 @@ Narrative, NPCs, dialogue, templates, setting, worldbuilding, and storyteller me
|
||||
|
||||
---
|
||||
|
||||
*21 questions (7 resolved, 2 partially resolved, 12 open). Last updated: 2026-03-13 (Q-015 closed as obsolete per D-122)*
|
||||
### Q-WTF-039: Character creation — portrait render or tile-scale preview?
|
||||
- **Status:** Resolved → [D-146](scope.md#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom)
|
||||
- **Question:** Does the character creation screen show a portrait render or a tile-scale in-world preview of the player character? Affects #618 (CK3-style character creation screen) team assignment: portrait render is a visual team deliverable; tile-scale preview is client.
|
||||
- **Resolution:** Tile-scale sprite with heavy zoom. The creation screen shows the game sprite rendered at high resolution, zoomed in so cosmetic details are clearly visible. Same approach as Rimworld: one rendering pipeline, no separate portrait system. #618 stays as a single client ticket. Resolved by [D-146](scope.md#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom).
|
||||
- **Assigned to:** Tyre (architecture), confirmed by project lead
|
||||
- **Source:** Sprint 27 planning pass (2026-03-17)
|
||||
|
||||
### Q-WTF-040: Do creation choices trace into the generated apartment?
|
||||
- **Status:** Resolved → [D-147](content.md#d-147-aesthetic-taste-as-character-personality-trait--shared-root-for-cosmetic-and-environmental-expression)
|
||||
- **Question:** If the player picks hair colour and clothing in #619, does the generator use those choices when laying out the starting apartment (furniture style, colour palette)? Affects #617 scope and dependency.
|
||||
- **Resolution:** Not directly. Cosmetic choices do not pipeline into the apartment generator. Instead, characters have an `aesthetic_taste` personality trait that independently informs both appearance choices and living space. Someone who likes teal picks teal clothing AND owns a teal vase — but through shared taste, not data coupling. #619 does NOT block #617. Resolved by [D-147](content.md#d-147-aesthetic-taste-as-character-personality-trait--shared-root-for-cosmetic-and-environmental-expression).
|
||||
- **Assigned to:** Gestalt (systems), Paula (narrative), confirmed by project lead
|
||||
- **Source:** Sprint 27 planning pass (2026-03-17)
|
||||
|
||||
### Q-WTF-041: What should the player feel looking at the span gate from their apartment?
|
||||
- **Status:** Open
|
||||
- **Question:** The First Settled Reach moment (D-136) is apartment + insert activation. The player's apartment has a view of the span gate. What emotional register should this view hit? Awe? Routine familiarity? Unease? This shapes the visual design of the apartment scene and the insert's first content.
|
||||
- **Affects:** #626 (setting delivery — both layers). Blocks implementation until the emotional target is defined.
|
||||
- **Needs:** Gore (thematic framing), Ozzie (player experience), Miri (setting grounding), Araminta (visual direction)
|
||||
- **Source:** Where's the Fun? Workshop, Round 5 (2026-03-05)
|
||||
|
||||
---
|
||||
|
||||
*24 questions (10 resolved, 2 partially resolved, 12 open). Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040 resolved, Q-WTF-041 added; recount)*
|
||||
|
||||
@@ -8,7 +8,7 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring
|
||||
|------|--------|-----------|
|
||||
| [questions-architecture.md](questions-architecture.md) | Technical foundation | Q-001, Q-006, Q-009, Q-018, Q-019, Q-020, Q-021, Q-022, Q-023, Q-029, Q-030, Q-046, Q-059 |
|
||||
| [questions-perception.md](questions-perception.md) | Player observation | Q-003, Q-014, Q-016, Q-024, Q-025, Q-026, Q-051, Q-053, Q-054 |
|
||||
| [questions-content.md](questions-content.md) | Narrative, NPCs, setting | Q-010, Q-012, Q-013, Q-015, Q-017, Q-028, Q-031, Q-033, Q-040, Q-041, Q-042, Q-043, Q-044, Q-045, Q-047, Q-048, Q-049, Q-050, Q-052, Q-056, Q-057 |
|
||||
| [questions-content.md](questions-content.md) | Narrative, NPCs, setting | Q-010, Q-012, Q-013, Q-015, Q-017, Q-028, Q-031, Q-033, Q-040, Q-041, Q-042, Q-043, Q-044, Q-045, Q-047, Q-048, Q-049, Q-050, Q-052, Q-056, Q-057, Q-WTF-039, Q-WTF-040, Q-WTF-041 |
|
||||
| [questions-scope.md](questions-scope.md) | Game concept, prototype | Q-002, Q-004, Q-005, Q-007, Q-008, Q-011, Q-027, Q-032, Q-034, Q-035, Q-036, Q-037, Q-038, Q-039, Q-058 |
|
||||
|
||||
## Status Summary
|
||||
@@ -17,9 +17,9 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring
|
||||
|--------|-------|----------|---------|------|
|
||||
| Architecture | 13 | 7 | 1 | 5 |
|
||||
| Perception | 9 | 5 | 1 | 3 |
|
||||
| Content | 21 | 5 | 2 | 14 |
|
||||
| Scope | 14 | 1 | 3 | 10 |
|
||||
| **Total** | **57** | **18** | **7** | **32** |
|
||||
| Content | 24 | 10 | 2 | 12 |
|
||||
| Scope | 15 | 2 | 3 | 10 |
|
||||
| **Total** | **61** | **24** | **7** | **30** |
|
||||
|
||||
*Updated 2026-03-05: Q-011 resolved (D-117/D-115/D-122), Q-034 partially resolved (D-117), Q-037 partially resolved (D-119), Q-033 partially resolved/reframed (D-122) — Where's the Fun? Workshop*
|
||||
|
||||
@@ -35,4 +35,4 @@ Tracked questions awaiting discussion or resolution. Split by domain, mirroring
|
||||
|
||||
When in doubt about where a question belongs: if it constrains **how we build**, it's architecture. If it defines **what the player observes or knows**, it's perception. If it defines **narrative, NPCs, dialogue, or setting**, it's content. If it defines **what we ship or how big it is**, it's scope.
|
||||
|
||||
*54 questions. Last updated: 2026-02-28 (split from single file into domain files).*
|
||||
*61 questions. Last updated: 2026-03-17 (Q-WTF-039, Q-WTF-040, Q-WTF-041 added to content domain; full recount).*
|
||||
|
||||
+14
-1
@@ -287,4 +287,17 @@ What we're building: game concept, design pillars, prototype definition, map spe
|
||||
|
||||
---
|
||||
|
||||
*25 decisions (16 active, 9 superseded). Last updated: 2026-03-15 (D-145 added)*
|
||||
### D-146: Character creation preview — tile-scale sprite with heavy zoom
|
||||
- **Date:** 2026-03-17
|
||||
- **Decision:** The character creation screen shows the player character's game sprite at heavy zoom — the same top-down tile-scale rendering used in gameplay, rendered at high resolution so it holds up when zoomed in. No separate portrait rendering system. Cosmetic choices (hair, clothing, colors) update the zoomed sprite in real time. Rimworld uses this exact approach: the character customisation screen shows the same pawn sprite rendered larger, with clothing/equipment layers visible.
|
||||
- **Rationale:** The tile-scale sprite IS the player's character for the entire game. Showing it zoomed in character creation: (1) sets accurate expectations for in-game appearance, (2) reuses the production sprite/animation pipeline — zero new rendering infrastructure, (3) validates that cosmetic customisation (#619) reads correctly at game scale, (4) keeps #618 as a single client ticket with no visual-team split. A separate portrait system would be a one-off rendering context (different camera, lighting, asset pipeline) that serves no other game feature. "CK3-style" in the bookmark concept refers to the bookmark structure, not the portrait aesthetic. Portraits can be added later as an additive feature if needed.
|
||||
- **Team implication:** Ticket #618 (CK3-style character creation screen) stays as a single `client` team ticket. No split required.
|
||||
- **Source:** Sprint 27 planning pass — Q-WTF-039 resolution
|
||||
- **Raised by:** Tyre (architecture), Paula (narrative), Gestalt (systems), confirmed by project lead
|
||||
- **Dissent:** Ozzie argued for portrait render (emotional attachment). Overruled: tile-scale at heavy zoom provides sufficient character identity without a second rendering pipeline.
|
||||
- **Cross-reference:** [D-115](#d-115-character-creation-scoped-to-skills--bookmark-for-v02) (creation scope), [D-134](architecture.md#d-134-full-character-customisation--hair-clothing-colors-at-tile-scale) (full character customisation), [D-136](architecture.md#d-136-first-settled-reach-moment-auto-generated-apartment--insert-activation) (first game moment), ticket #618 (CK3-style character creation screen)
|
||||
- **Resolves:** Q-WTF-039
|
||||
|
||||
---
|
||||
|
||||
*26 decisions (17 active, 9 superseded). Last updated: 2026-03-17 (D-146 tile-scale heavy zoom)*
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
title: "Proposed Architecture: LLM-Powered Voice Synthesis"
|
||||
description: "Re-voicing architecture for dynamic NPC dialogue using a local LLM as a stylistic enhancement layer — injector system, priority queue, and optional AI-enhanced toggle"
|
||||
type: architecture
|
||||
status: draft
|
||||
status: superseded
|
||||
ticket: ""
|
||||
decision_refs: []
|
||||
decision_refs: ["D-138"]
|
||||
author: "Gemini"
|
||||
created: 2026-03-07
|
||||
updated: 2026-03-07
|
||||
@@ -12,7 +12,7 @@ updated: 2026-03-07
|
||||
|
||||
# Proposed Architecture: LLM-Powered Voice Synthesis
|
||||
|
||||
**Status:** Proposed
|
||||
**Status:** Superseded by [D-138](../../decisions/content.md#d-138-llm-re-voicing-pipeline-for-npc-voice) and [LLM Voice Pipeline Workshop](../workshops/llm-voice-pipeline/workshop-outcomes.md)
|
||||
**Author:** Gemini (synthesizing a design sparring session with Jeroen)
|
||||
**Date:** 2026-03-07
|
||||
|
||||
@@ -36,7 +36,7 @@ Our proposed solution is to treat dynamic dialogue not as a generation task, but
|
||||
|
||||
### Analogy: Dialogue as an `i18n` System
|
||||
|
||||
The core of this design is to think of character voice as a "language." Our simple, non-LLM template system provides the default "language" (`en-US`)—a clear, functional line of text that serves the gameplay. The LLM's job is to "translate" this line into a specific character's "language" (`en-KRENN-RUTHLESS`).
|
||||
The core of this design is to think of character voice as a "language." Our simple, non-LLM template system provides the default "language" (`en-US`)—a clear, functional line of text that serves the gameplay. The LLM's job is to "translate" this line into a specific character's "language" (`en-VMS-RUTHLESS`).
|
||||
|
||||
This immediately enables a powerful player-facing feature:
|
||||
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
# v0.1 YAML Content Audit
|
||||
|
||||
**Date:** 2026-03-17
|
||||
**Ticket:** #672
|
||||
**Author:** Hoshe (QA)
|
||||
**Sprint:** 27
|
||||
|
||||
## Summary
|
||||
|
||||
63 YAML files surveyed across `server/content/`, `server/data/templates/`, and `client/data/`.
|
||||
|
||||
- **Deprecated:** 14 files — pure named NPC / detective arc content, no generator value
|
||||
- **Convertible:** 25 files — useful structure or data worth extracting to RON generator format
|
||||
- **Already-superseded:** 4 files — role-based templates predating RON format, replaced by zone-type RON files
|
||||
- **Infrastructure (no action):** 20 files — gauntlet, schemas, client UI, geography hierarchy, manifest
|
||||
|
||||
**Do not delete anything in this document.** Disposition requires explicit team review per ticket #672.
|
||||
|
||||
---
|
||||
|
||||
## Deprecated
|
||||
|
||||
Pure detective arc or named NPC content. No generator value. Recommend **archive** (move to `docs/archive/v01-content/`) rather than deletion.
|
||||
|
||||
| File | Why deprecated | Named NPCs |
|
||||
|------|---------------|------------|
|
||||
| `server/content/global/knowledge/ring.yaml` | All facts tied to named NPC actions (Kael's missed verification, Kael's corridor access, Voss/office confrontation, Sera's avoidance of Torek). No role-neutral facts. | Kael Davan, Sera Venn, Torek Lintar, Voss, Naia Tamm |
|
||||
| `server/content/global/knowledge/behavioral.yaml` | Named NPC behavioral tells: Kael's lying tell, Kael's behavior change, Sera's avoidance pattern, Sera's deflection topics, Sera's kiosk habit, Sera's manifest knowledge. All keyed to specific characters. | Kael, Sera, Torek |
|
||||
| `server/content/global/knowledge/relationship.yaml` | Named NPC relationship facts: Kael-Naia partnership, Torek's financial arrangement. No generic relationship fact patterns. | Kael, Naia, Torek |
|
||||
| `server/content/global/knowledge/entity-attributes.yaml` | Explicitly lists "Kael Davan" and "Kael" as example entity attribute values. The entire file is about named NPC attributes. | Kael Davan |
|
||||
| `server/content/global/knowledge/progress.yaml` | Detective investigation milestone facts (`characters: [detective]`). E.g. "Detective filed first manifest discrepancy evidence". Detective-exclusive, no smuggler or generator path. | detective archetype only |
|
||||
| `server/content/global/knowledge/awareness.yaml` | All facts reference the detective-vs-smuggler tension: `detective_presence`, `detective_investigating_ring`, `commission_audit_scheduled`. Not applicable to generated NPC knowledge. | detective, smuggler archetypes only |
|
||||
| `server/content/modules/tier1/smuggling_ring_v0_1.yaml` | Full v0.1 drama module with named NPC cast (Kael, Naia, Sera, Voss, Torek). Kael's exit plan, dual-lens player experience. The module schema itself (drama_module.schema.yaml) may be worth keeping, but this specific content instance is named-NPC only. | Kael Davan, Naia Tamm, Sera Venn, Voss, Torek Lintar, Devra |
|
||||
| `server/content/npc-conversations/overheard.yaml` | **Self-labeled LEGACY CONTENT** in the file header: "All entries in this file reference named NPCs… not served at runtime." Already flagged by the copy team; superseded by ticket #664 (zone-type-aware overheard generator). | Kael, Sera, Naia, Voss, Nils, Maret Korr, Lera |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/triangles/worried-partner.yaml` | Named NPC triangle: Kael Davan, Naia Tamm, Devra. Members reference `npc:kael-davan` directly. | Kael Davan, Naia Tamm, Devra |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/triangles/hub-power.yaml` | References Kael-adjacent narrative (hub power / ring pressure). Named NPC members. | Kael (indirect) |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/triangles/bar-tensions.yaml` | Named NPC triangle: Lera Sessik (bar owner), Resha (regular), Pell (bartender). Members reference `npc:lera-sessik` directly. | Lera Sessik, Resha, Pell |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/environmental/the-last-shift.yaml` | Environmental text for The Last Shift bar. 10 named NPC references. Lera, Sera, etc. character-specific text. | Lera, Sera |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/ticker/the-last-shift.yaml` | Ticker pool with `dual_lens` commentary for detective vs. smuggler archetypes specifically. Dual-lens framing assumes named player arcs. | smuggler/detective archetypes |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/routines/schedules.yaml` | Stub file (2 lines, comment only). No content. | none |
|
||||
|
||||
---
|
||||
|
||||
## Convertible
|
||||
|
||||
Useful data or structure worth extracting into the RON generator format. Disposition: **convert** (port specific patterns to RON zone-type files or generator schemas before archiving).
|
||||
|
||||
| File | What's worth extracting | Conversion target |
|
||||
|------|------------------------|-------------------|
|
||||
| `server/content/global/knowledge/knowledge.yaml` | Knowledge fact schema: `fact_id`, `description`, `typical_confidence`, `characters`, `notes`. Generic investigation knowledge patterns (ring structure, exit plan, organizational knowledge). The fact ID taxonomy and confidence level system are the most reusable. | Generator knowledge schema for zone-type fact pools |
|
||||
| `server/content/global/knowledge/social.yaml` | Social positioning fact patterns (`bar_regular_status`, `social_circle_member`, `faction_affiliation`). These are role-neutral patterns that any NPC social site could produce. | Role-based social knowledge pools |
|
||||
| `server/content/global/knowledge/location.yaml` | Location knowledge fact patterns: access points, operational significance, safe houses. The location knowledge taxonomy maps to zone-type location specs. | Zone-type location knowledge schemas |
|
||||
| `server/content/global/knowledge/world.yaml` | World-level knowledge patterns: faction presence, station governance, lattice tech context. These are world-building facts any NPC could know. | World knowledge pools for zone-type culture profiles |
|
||||
| `server/content/global/knowledge/contraband.yaml` | Contraband knowledge structure: ring existence, component types, operational methods. The schema structure (ring_exists → ring_lattice_components → ring_medical_components → ring_vault_location) is a good template for role-based secret knowledge escalation. | Role-based secret knowledge schemas for zone-type ring roles |
|
||||
| `server/content/global/enums/triggers.yaml` | Monologue trigger type enum: `enter_location`, `observe_npc`, `observe_event`, etc. These values are still used by the current monologue system (D-035). Named NPC examples in descriptions are incidental. | Already in use; clean up named NPC examples from descriptions only |
|
||||
| `server/content/global/enums/topics.yaml` | Dialogue topic types. The enum values themselves are still relevant for NPC conversation routing. Named NPC examples in descriptions are incidental. | Already in use; clean up named NPC examples from descriptions only |
|
||||
| `server/content/global/enums/motivations.yaml` | NPC functional motivation archetypes: HANDLER, OPERATOR, PERIPHERAL, OBSERVER, UNKNOWN. These role-archetypes map directly to zone-type role pools and could seed generator role taxonomy. | Zone-type role archetype vocabulary |
|
||||
| `server/content/global/enums/access-tiers.yaml` | Access tier definitions (public/private/restricted/secure/classified). The tier system is still used by the knowledge graph. Named NPC examples in tier descriptions can be removed. | Already in use; strip named NPC examples |
|
||||
| `server/content/global/enums/patterns.yaml` | NPC personality pattern types. Useful for zone-type culture profiles. | Zone-type culture profile generator |
|
||||
| `server/content/global/enums/situations.yaml` | Situation types for NPC behavioral context. Useful for zone-type activity schemas. | Zone-type activity/situation vocabulary |
|
||||
| `server/content/global/enums/activities.yaml` | Activity types used in daily routine generation. Still referenced by the current DailyRoutine system. | Already in use |
|
||||
| `server/content/global/enums/moods.yaml` | Mood type enum. Still used by MoodState system. | Already in use |
|
||||
| `server/content/global/enums/trust-tiers.yaml` | Trust tier definitions (0–10 scale with named tiers). Still used by RelationshipGraph trust levels. | Already in use |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/templates/smuggling-ring.yaml` | Social site template structure: capacity, roles, operational notes. The YAML schema maps to the RON `ZoneTypeTemplate.social_site_types` structure (D-142). Worth porting as a reference for `rural_agricultural.ron` social site entries. | RON zone-type social_site_types pattern |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/templates/bar.yaml` | Bar social site template. Same as above — schema maps to D-142 structure. | RON zone-type social_site_types for bar/hospitality zones |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/templates/logistics-hub.yaml` | Logistics hub template. Useful reference for `industrial_freight.ron` social site types. | RON zone-type social_site_types for industrial zones |
|
||||
| `server/content/global/factions/concord-assembly.yaml` | Faction structure definition. Faction identifiers, cultural values, and institutional roles are usable as zone-type culture profile ingredients. | Zone-type culture profile vocabulary (6 files) |
|
||||
| `server/content/global/factions/guardians-of-autonomy.yaml` | Same as above | Same |
|
||||
| `server/content/global/factions/syndics.yaml` | Same as above | Same |
|
||||
| `server/content/global/factions/the-ring.yaml` | Same as above | Same |
|
||||
| `server/content/global/factions/the-unbound.yaml` | Same as above | Same |
|
||||
| `server/content/global/factions/veil-institute.yaml` | Same as above | Same |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/environmental/the-terminal.yaml` | Environmental text for The Terminal logistics hub. 1 detective reference; the rest is location flavor text, signage, and readable objects. The environmental text schema is a useful template for zone-type flavor text pools. | Zone-type environmental text schema |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/environmental/maintenance-corridors.yaml` | Environmental text for maintenance corridors. No named NPC references. Pure location flavor. The schema (signs, terminals, documents, graffiti) maps to zone-type flavor text. | Zone-type environmental text schema |
|
||||
|
||||
---
|
||||
|
||||
## Already-superseded
|
||||
|
||||
These files were authored before the RON zone-type system. The zone-type RON files (`server/content/global/zone-types/`) and the D-142 `ZoneTypeTemplate` struct now serve the same purpose with better generator integration. Disposition: **delete** after confirming no Rust code still loads them.
|
||||
|
||||
| File | Superseded by |
|
||||
|------|--------------|
|
||||
| `server/data/templates/dock-worker.yaml` | Role definitions in `ZoneTypeTemplate.roles` within RON zone-type files |
|
||||
| `server/data/templates/logistics-hub.yaml` | Social site definitions in RON zone-type files |
|
||||
| `server/data/templates/terminal-social-site.yaml` | Social site definitions in RON zone-type files |
|
||||
| `server/data/templates/terminal-triangle-01.yaml` | Triangle definitions will move to RON format via #663 |
|
||||
|
||||
**Edge case:** verify with `grep -r "data/templates" server/src/` that no Rust code still loads these paths before deletion. The `generator_spike.rs` binary uses `content/global/` paths, not `data/templates/`.
|
||||
|
||||
---
|
||||
|
||||
## Infrastructure — no action required
|
||||
|
||||
These files are active infrastructure, not deprecated v0.1 content.
|
||||
|
||||
| File(s) | Status |
|
||||
|---------|--------|
|
||||
| `server/content/gauntlet/` (4 files) | Test world specifications — active, do not touch |
|
||||
| `server/content/schemas/drama_module.schema.yaml` | JSON schema for drama modules — may be reusable if drama module format is retained |
|
||||
| `server/content/content.yaml` | Server content manifest — active |
|
||||
| `project.yaml` | Project metadata — active |
|
||||
| `client/data/dialogue-theme.yaml` | Client UI theming — active |
|
||||
| `client/data/ui-strings.yaml` | Client UI microcopy — active |
|
||||
| `server/content/campaigns/main/campaign.yaml` | Campaign metadata (structural) — active |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/system.yaml` | Geographic hierarchy — active |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/station.yaml` | Geographic hierarchy — active |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/district.yaml` | Geographic hierarchy — active |
|
||||
| `server/content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/locations/` (5 files) | Location definitions for Sova Transit — active world geography |
|
||||
|
||||
---
|
||||
|
||||
## Recommended disposition priority
|
||||
|
||||
1. **Immediate:** Strip named NPC examples from descriptions in `enums/triggers.yaml`, `enums/topics.yaml`, `enums/access-tiers.yaml` (these are actively used, the named examples create false impressions about the current system).
|
||||
2. **Before v0.2 content sprint:** Convert social site template YAMLs (bar, logistics-hub, smuggling-ring) to inform RON `ZoneTypeTemplate.social_site_types` entries. The schemas align closely.
|
||||
3. **v0.2 content sprint:** Archive `deprecated` files (move, don't delete — the named NPC narrative design remains valuable as reference material for future hand-authored arcs).
|
||||
4. **After #663 lands:** Verify `data/templates/` files are unreferenced, then delete.
|
||||
5. **After #664 lands:** Remove `npc-conversations/overheard.yaml` (already not served; #664 replaces it).
|
||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Miri - Project Briefing"
|
||||
description: "Worldbuilding and lore agent — owns zone identity spec, Krenn culture profile, setting briefs, and wiki taxonomy; critical-path prerequisites for the generator spike"
|
||||
description: "Worldbuilding and lore agent — owns zone identity spec, Van Maanen's Star culture profile, setting briefs, and wiki taxonomy; critical-path prerequisites for the generator spike"
|
||||
type: briefing
|
||||
status: active
|
||||
agent: Miri
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Tiger - Project Briefing"
|
||||
description: "Localization agent on standby — covers tagged line pool translation scope, culture voice card translation units, and Krenn naming transliteration guides"
|
||||
description: "Localization agent on standby — covers tagged line pool translation scope, culture voice card translation units, and Van Maanen's Star naming transliteration guides"
|
||||
type: briefing
|
||||
status: active
|
||||
agent: Tiger
|
||||
|
||||
@@ -143,9 +143,9 @@ Industrial corridors are overlaid on cultural ones. They do not replace cultural
|
||||
|
||||
### 2.3 DSMC Mining Corridor — South_reach Extractive Branch
|
||||
|
||||
**Hub:** Vargr (GJ 3522), hop 2 core.
|
||||
**Hub:** Sindri (GJ 3522), hop 2 core.
|
||||
|
||||
**Logic:** DSMC (Dorfhausen Sydney Mining Corporation) operates the Reach's heavy extraction infrastructure. Their operational area is the south_reach and the deep_frontier systems accessible from south_reach branches. Vargr is their operational headquarters; the mining corridor extends outward from it along south_reach gate paths.
|
||||
**Logic:** DSMC (Dorfhausen Sydney Mining Corporation) operates the Reach's heavy extraction infrastructure. Their operational area is the south_reach and the deep_frontier systems accessible from south_reach branches. Sindri is their operational headquarters; the mining corridor extends outward from it along south_reach gate paths.
|
||||
|
||||
**Corridor character:** DSMC systems have a specific character: high economic output, poor distribution_index (the value leaves, the workers stay), significant environmental impact, and high security presence (private security under DSMC contract). These are not pleasant systems to live in for residents without DSMC employment, but they are not post-apocalyptic either — DSMC maintains basic infrastructure because unhealthy workers are less productive. The Guardians of Autonomy have a strong presence in DSMC-corridor systems as a result, often as the de facto opposition to DSMC's corporate governance.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: "Smuggler Moral Arc Spec"
|
||||
description: "Four-phase moral trajectory for the smuggler through the v0.1 vertical slice, driven by authored FactId triggers"
|
||||
type: design
|
||||
status: draft
|
||||
status: "superseded (v0.1 only — D-122 eliminates named NPCs, D-132 supersedes complicity frame)"
|
||||
ticket: "#382"
|
||||
decision_refs: [D-032, D-035, D-039]
|
||||
author: ""
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: "Smuggler Voice Card"
|
||||
description: "Single authoring reference for the smuggler's internal monologue voice register and style parameters"
|
||||
type: design
|
||||
status: active
|
||||
status: "superseded (v0.1 only — D-122 eliminates named NPCs)"
|
||||
ticket: "#382"
|
||||
decision_refs: []
|
||||
author: ""
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
"title-subtitle": {
|
||||
"type": "Text",
|
||||
"left": 360, "top": 262,
|
||||
"text": "SOVA TRANSIT DISTRICT // KRENN SYSTEM",
|
||||
"text": "SOVA TRANSIT DISTRICT // VAN MAANEN'S STAR",
|
||||
"fontColor": "#556677",
|
||||
"fontSize": 13
|
||||
},
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
---
|
||||
title: "Round 21: v0.2 Story Ticket Team Assignments — Sprint 27 Planning"
|
||||
description: "Team assignment pass for v0.2 story tickets #614–#626; resolve Q-WTF-039 and Q-WTF-040; produce Sprint 28 candidate list"
|
||||
type: discussion
|
||||
status: active
|
||||
round: 21
|
||||
created: 2026-03-17
|
||||
---
|
||||
|
||||
# Round 21: v0.2 Story Ticket Team Assignments
|
||||
|
||||
**Sprint:** 27 (Scale)
|
||||
**Date:** 2026-03-17
|
||||
**Ticket:** #676 — Assign team and sprint for v0.2 story tickets (#614–#626)
|
||||
**Participants:** Gestalt (systems), Tyre (technical), Paula (narrative), Ozzie (player experience), Qatux (documenter), SI (project manager)
|
||||
**Output target:** DB team assignments, split tickets, Q-WTF-039/Q-WTF-040 resolved, Sprint 28 candidate list
|
||||
|
||||
---
|
||||
|
||||
## Internal Round Structure
|
||||
|
||||
| Internal Round | Topic | Status |
|
||||
|----------------|-------|--------|
|
||||
| Round 1 | Team assignment pass — one team per ticket | Pending |
|
||||
| Round 2 | Split review — identify server+client splits, create child tickets | Pending |
|
||||
| Round 3 | Sprint readiness check — Sprint 28 candidate list | Pending |
|
||||
|
||||
---
|
||||
|
||||
## Ticket Inventory
|
||||
|
||||
| # | Title | Epic | Dependencies | Team (proposed) |
|
||||
|---|-------|------|-------------|-----------------|
|
||||
| #614 | Bookmark definition system | Tycoon Bookmark (#605) | blocks #618 | — |
|
||||
| #615 | Tycoon small business owner starting state | Tycoon Bookmark | blocks #617 | — |
|
||||
| #616 | Broad economic verb vocabulary design | Tycoon Bookmark | — | — |
|
||||
| #617 | Auto-generated apartment | Tycoon Bookmark | blocked by #615 | — |
|
||||
| #618 | CK3-style character creation screen | Character Creation (#606) | blocked by #614 | — |
|
||||
| #619 | Full character customisation | Character Creation | open Q-WTF-040 | — |
|
||||
| #620 | Culture-implicit-in-location system | Character Creation | blocks #621 | — |
|
||||
| #621 | NPC personality surface area | NPC Legibility (#607) | blocked by #620, blocks #622 | — |
|
||||
| #622 | Relationship formation system | NPC Legibility | blocked by #621 | — |
|
||||
| #624 | Quietly responsive world | World Feel (#608) | — | — |
|
||||
| #625 | Dual-scale consequence model | World Feel | — | — |
|
||||
| #626 | Setting delivery — both layers | World Feel | — | — |
|
||||
|
||||
*Note: #623 (AI content templating pipeline) is absent from this range — cancelled, superseded by #638.*
|
||||
|
||||
---
|
||||
|
||||
## Open Questions to Resolve
|
||||
|
||||
### Q-WTF-039: Character creation portrait vs tile-scale preview
|
||||
- **Status:** Resolved → [D-146](../../decisions/scope.md#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom)
|
||||
- **Question:** Does the character creation screen show a portrait render or a tile-scale in-world preview of the player character?
|
||||
- **Resolution:** Tile-scale sprite with heavy zoom. Same top-down game sprite rendered at high resolution with real-time cosmetic preview. No separate portrait rendering system. #618 stays as a single `client` ticket — no split required.
|
||||
- **Decided by:** Tyre (architecture), Paula (narrative), Gestalt (systems), confirmed by project lead. Ozzie dissented (portrait render for emotional attachment); overruled.
|
||||
- **Source:** Sprint 27 planning pass, 2026-03-17
|
||||
|
||||
### Q-WTF-040: Do creation choices trace into the generated apartment?
|
||||
- **Status:** Resolved → [D-147](../../decisions/content.md#d-147-aesthetic-taste-as-character-personality-trait--shared-root-for-cosmetic-and-environmental-expression)
|
||||
- **Question:** If the player picks hair colour and clothing in #619, does the generator use those choices when laying out the starting apartment (furniture style, colour palette)?
|
||||
- **Resolution:** Not directly. Characters have an `aesthetic_taste` personality trait (preferred palette, style leanings) that independently informs both appearance choices and living space — shared root, not data pipeline. #619 does NOT block #617. Both systems read the same underlying trait independently. The taste trait definition belongs to the character data model (server).
|
||||
- **Decided by:** Project lead (taste-as-shared-root framing), Gestalt (ColorHint concept evolved into trait), Paula (culture + economics as primary apartment drivers). Ozzie dissented (direct pipeline); Tyre and Paula argued no connection at all. Taste trait is the synthesis.
|
||||
- **Source:** Sprint 27 planning pass, 2026-03-17
|
||||
|
||||
---
|
||||
|
||||
## §1 — ROUND 1: Team Assignment Pass
|
||||
|
||||
*Pending agent contributions.*
|
||||
|
||||
---
|
||||
|
||||
## §2 — ROUND 2: Split Review
|
||||
|
||||
*Pending. Note: #618 split question is now resolved — tile-scale zoom means #618 stays as a single `client` ticket (D-146). Anticipated remaining split: #620 (culture-implicit-in-location).*
|
||||
|
||||
---
|
||||
|
||||
## §3 — ROUND 3: Sprint 28 Readiness
|
||||
|
||||
*Pending.*
|
||||
|
||||
---
|
||||
|
||||
## Decision Registry
|
||||
|
||||
| ID | Type | Title | Domain file | Status |
|
||||
|----|------|-------|-------------|--------|
|
||||
| D-146 | D | Character creation preview — tile-scale sprite with heavy zoom | decisions/scope.md | **Filed** |
|
||||
| D-147 | D | Aesthetic taste as character personality trait — shared root for cosmetic and environmental expression | decisions/content.md | **Filed** |
|
||||
| Q-WTF-039 | Q | Character creation: portrait vs tile-scale preview | decisions/questions-content.md | **Resolved → D-146** |
|
||||
| Q-WTF-040 | Q | Creation choices → generated apartment? | decisions/questions-content.md | **Resolved → D-147** |
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Sprint 25 — Copy Briefing"
|
||||
description: "Zone identity spec, Krenn culture profile"
|
||||
description: "Zone identity spec, Van Maanen's Star culture profile"
|
||||
type: sprint
|
||||
status: archived
|
||||
sprint: 25
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Sprint 26 — Copy Briefing"
|
||||
description: "D-record amendments, base text elevation pass, remove handwritten Krenn content"
|
||||
description: "D-record amendments, base text elevation pass, remove handwritten Van Maanen's Star content"
|
||||
type: sprint
|
||||
status: archived
|
||||
sprint: 26
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
---
|
||||
title: "Sprint 27 — Copy Briefing"
|
||||
description: "Author all 29 remaining zone-type behavior templates, replace overheard.yaml, extend validate-ron name collision checking"
|
||||
type: sprint
|
||||
status: active
|
||||
sprint: 27
|
||||
team: "copy"
|
||||
---
|
||||
|
||||
# Sprint 27: Scale — Copy Tasks
|
||||
|
||||
**Goal:** Extend the zone-type template library from 2 to 31 zone types, wire the server to load them, and eliminate Clippy debt — clearing the path to the NPC legibility sprint.
|
||||
|
||||
**Branch:** `copy`
|
||||
**Agents:** Mellanie (author), Paula (narrative), Gestalt (systems)
|
||||
|
||||
## New Tickets
|
||||
|
||||
| # | Title | Blocked by |
|
||||
|---|-------|------------|
|
||||
| #662 | Author zone-type behavior templates (29 remaining types) | #663 (server structs, soft dependency — can author in parallel, but validate-ron requires server struct changes to pass) |
|
||||
| #664 | Replace overheard.yaml with generator-compatible conversation system | — |
|
||||
| #665 | Extend validate-ron to cross-culture name pool collision checking | — |
|
||||
|
||||
Use `tooling/db/ticket show <id>` for full details.
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- `decisions/content.md` — D-142 (zone-type template architecture — primary reference for all authoring in this sprint), D-139 (composable behavior primitives — the three-layer assembly model), D-121 (voice is culture-driven, job as modifier), D-122 (all NPCs generated), D-128 (culture implicit in starting location)
|
||||
- `decisions/scope.md` — D-114 (generator-first proof-of-life)
|
||||
|
||||
## Open Questions to Resolve Early
|
||||
|
||||
- **Q-WTF-033: AI templating (Claude API vs ollama vs manual)** — does not block #662. The primitives authored this sprint are Layer 1 (culture-neutral physical actions). Layer 3 (LLM flavor) is an optional runtime layer; the base text must be fully playable without it. Author for standalone readability per D-142's standalone readability constraint.
|
||||
|
||||
## Notes
|
||||
|
||||
### #662 — Author zone-type behavior templates (29 remaining types)
|
||||
|
||||
**Existing files (done, use as reference):**
|
||||
- `content/global/zone-types/rural_agricultural.ron` — canonical authoring reference
|
||||
- `content/global/zone-types/industrial_freight.ron`
|
||||
|
||||
**29 remaining zone types to author (canonical list from D-142):**
|
||||
|
||||
| Group | Zone Types |
|
||||
|-------|-----------|
|
||||
| Rural | `rural_pastoral`, `rural_aquaculture`, `rural_orbital` |
|
||||
| Industrial | `industrial_manufacturing`, `industrial_processing` |
|
||||
| Port | `port_space`, `port_surface`, `port_maritime`, `port_fishing` |
|
||||
| Extraction | `extraction_space`, `extraction_surface`, `extraction_platform` |
|
||||
| Commercial | `commercial_market`, `commercial_transit` |
|
||||
| Administrative | `administrative_civil`, `administrative_judicial` |
|
||||
| Single | `research_station`, `medical_facility`, `military_garrison`, `security_checkpoint`, `entertainment_hospitality`, `entertainment_venue`, `residential_station`, `residential_surface`, `residential_dispersed`, `detention_facility`, `archaeological_site`, `wilderness_frontier`, `diplomatic_elite` |
|
||||
|
||||
**Authoring rules (non-negotiable, from D-142):**
|
||||
|
||||
1. **Primitives are culture-neutral.** Do not encode cultural attitudes, speech patterns, or voice register in action text. "Works a crop row, stopping to pull weeds by the root" is correct. "Works with quiet dignity, as is the Krenn way" is incorrect. Culture is applied by the culture modifier layer at assembly time.
|
||||
|
||||
2. **Standalone readability constraint.** Every `action` must be informative without a culture modifier. "farms" fails. "kneels at the base of a struggling plant and parts the soil with two fingers" passes. A player reading base text must be able to read what an NPC is doing.
|
||||
|
||||
3. **~15 primitives per role, ~4 roles per zone type.** (~60 primitives per zone type file, ~1,740 total.) Quality over volume — 12 excellent primitives beats 20 mediocre ones.
|
||||
|
||||
4. **Context tags:** Use `OnShift`, `OffDuty`, `Social`, `Any`. Most primitives are `OnShift`. Include at least 3–5 `Social` primitives per role for tavern/social-site coverage.
|
||||
|
||||
5. **modifier_hint:** Match the seven D-142 categories: `work_pace`, `physical_manner`, `social_signal`, `task_completion`, `environmental_scan`, `offduty_posture`, `authority_response`. Every primitive should have a hint.
|
||||
|
||||
6. **Grammar constraint (D-142):** Culture modifier clauses attach as prepositional phrases or coordinating conjunctions. Your action text should end in a form that accepts a trailing clause cleanly. "loads a wheelbarrow" → accepts "with unhurried efficiency". Avoid action text that ends in a subordinate clause that would create a grammatically broken assembly.
|
||||
|
||||
7. **Roles:** Each zone type needs roles that match its physical reality. A `detention_facility` has `guard`, `administrator`, `prisoner`, `medic`. A `research_station` has `researcher`, `technician`, `security`, `support`. Use the zone type's physical space and social function to derive the roles.
|
||||
|
||||
8. **social_site_types:** Every zone type needs at least two social site types. Include one "work" site (workshop, lab bench, loading dock) and one "off-duty" site (break room, canteen, recreation space). List `eligible_roles` for each.
|
||||
|
||||
**Validate each file:**
|
||||
```bash
|
||||
tooling/validate-ron content/global/zone-types/<zone_type>.ron zone_type
|
||||
```
|
||||
Note: this requires #663 (server struct changes) to be merged first for `validate-ron` to accept the `zone_type` schema. Until then, validate structurally by checking the file matches the pattern in `rural_agricultural.ron`.
|
||||
|
||||
---
|
||||
|
||||
**Large content push execution — team-patterns.md model:**
|
||||
|
||||
This is a large batch of structured content (29 files, ~1,740 primitives). Use the parallel writer pattern from `docs/` team patterns:
|
||||
|
||||
1. **Lore librarian agent (read-only):** Loads `rural_agricultural.ron`, `industrial_freight.ron`, D-142, D-139. Answers authoring questions from writers. Tracks cross-file consistency (do `commercial_transit` and `commercial_market` have distinct enough flavor? Does `port_space` read differently from `port_maritime`?).
|
||||
|
||||
2. **Multiple writer agents (parallel, by group):** Split by zone-type group:
|
||||
- Writer A: Rural (3 files) + Port (4 files)
|
||||
- Writer B: Industrial (2) + Extraction (3) + Commercial (2)
|
||||
- Writer C: Administrative (2) + Single group part 1 (4 files: `research_station`, `medical_facility`, `military_garrison`, `security_checkpoint`)
|
||||
- Writer D: Single group part 2 (5 files: `entertainment_hospitality`, `entertainment_venue`, `residential_station`, `residential_surface`, `residential_dispersed`)
|
||||
- Writer E: Single group part 3 (4 files: `detention_facility`, `archaeological_site`, `wilderness_frontier`, `diplomatic_elite`)
|
||||
|
||||
Each writer writes directly to disk using the Write tool — one file at a time. No text accumulation. Write often.
|
||||
|
||||
3. **Reviewer agent (after writing complete):** Reads all 29 new files + the 2 existing references. Checks: voice consistency (do all zone types read as the same authoring voice?), context tag coverage (are OnShift/Social balanced?), standalone readability (no cultural encoding?), grammar constraint compliance.
|
||||
|
||||
**Heartbeat rule:** If any agent has been working on a single file for more than 15 minutes without progress, message the team lead. Do not silently retry.
|
||||
|
||||
---
|
||||
|
||||
### #664 — Replace overheard.yaml with generator-compatible conversation system
|
||||
|
||||
`content/npc-conversations/overheard.yaml` contains 48 hand-authored conversation entries referencing named v0.1 NPCs (Kael, Sera, Torek, etc.) and the detective arc. Per D-122 (all NPCs generated), this content is superseded.
|
||||
|
||||
**What to do:**
|
||||
1. Read `content/npc-conversations/overheard.yaml` to understand its current structure.
|
||||
2. Design a replacement RON format that supports generator-compatible overheard conversations: no named NPC references, parameterized by role pair and zone type, culture-neutral content that accepts culture modifier at assembly time.
|
||||
3. Author 10–15 sample overheard conversation snippets in the new format covering at least 3 zone types.
|
||||
4. Rename/archive the old YAML: `content/npc-conversations/overheard.yaml.deprecated` with a header comment explaining why.
|
||||
5. File the new format spec as a note in `decisions/content.md` if it introduces a new content pattern (check with Qatux).
|
||||
|
||||
The old format is not salvageable as-is — the named NPC references make all 48 entries invalid. The structural value (the idea of overheard conversation as an ambient information layer) is worth preserving; the content is not.
|
||||
|
||||
---
|
||||
|
||||
### #665 — Extend validate-ron to cross-culture name pool collision checking
|
||||
|
||||
Currently `tooling/validate-ron` validates individual RON files against their schema. Name pool collisions across culture profiles (a given name appearing in both Krenn and Vael pools) are caught only in PR review.
|
||||
|
||||
**Deliverable:** A new mode in `tooling/validate-ron` (or a separate `tooling/validate-names` script):
|
||||
```bash
|
||||
tooling/validate-ron --check-name-collisions content/global/
|
||||
```
|
||||
This scans all `culture-*.ron` files, extracts `naming.given_names` and `naming.family_names` pools, and reports any name that appears in more than one culture's pool. Output should be machine-readable (exit 1 on collision, print the colliding names and which cultures they appear in).
|
||||
|
||||
This is a tooling task. It does not require server changes — the culture RON files are already parseable by the existing validator infrastructure.
|
||||
|
||||
---
|
||||
|
||||
## Dependency Chain
|
||||
|
||||
```
|
||||
#665 (validate-ron name collision) — standalone, no blockers
|
||||
#664 (replace overheard.yaml) — standalone, no blockers
|
||||
#662 (29 zone-type templates) → soft dependency on #663 (server structs) for full validate-ron pass
|
||||
└── Parallel writer agents (groups A/B/C/D/E) — all parallel once authoring begins
|
||||
```
|
||||
|
||||
## PR Workflow
|
||||
|
||||
When ready to submit, create a PR with `tea` CLI. **All flags are required** to avoid TTY prompts (see `CLAUDE.md` "Gitea access" section):
|
||||
```bash
|
||||
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(content): description" --description "body" --base main --head copy
|
||||
```
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: "Sprint 27 — Joint Briefing"
|
||||
description: "Cross-team coordination, integration points, sprint completion proof"
|
||||
type: sprint
|
||||
status: active
|
||||
sprint: 27
|
||||
team: "joint"
|
||||
---
|
||||
|
||||
# Sprint 27: Scale — Joint
|
||||
|
||||
**Goal:** Extend the zone-type template library from 2 to 31 zone types, wire the server to load them, and eliminate Clippy debt — clearing the path to the NPC legibility sprint.
|
||||
|
||||
## Pre-Sprint Checks
|
||||
|
||||
| Item | Owner | Status |
|
||||
|------|-------|--------|
|
||||
| Sprint 26 all done (15/15) | SI | confirmed |
|
||||
| content/global/zone-types/ has rural_agricultural.ron and industrial_freight.ron | copy/server | confirmed |
|
||||
| validate-ron currently accepts zone spec format | server | needs update (#663) |
|
||||
| Sprint 27 created in planning status | SI | confirmed (ID: 27) |
|
||||
|
||||
## Cross-Team Dependencies
|
||||
|
||||
| Dependency | Upstream | Downstream | Notes |
|
||||
|------------|----------|------------|-------|
|
||||
| #669 (move content/) completes | server | server (#663 loader paths) | #663 loader should target `server/content/` from the start — coordinate on timing |
|
||||
| #663 (ZoneTypeTemplate structs) merges | server | copy (#662 validate-ron) | Copy team can author in parallel; full validate-ron pass requires #663 merged |
|
||||
| #663 struct design | server | copy (#662 authoring) | Server team: share the new struct field names before copy team starts batch authoring so RON files are aligned from the start |
|
||||
|
||||
**Action required — sprint start:** Server team (`#663` agent) to post the finalized `ZoneTypeTemplate` struct layout (field names and types) as a comment on #663 before copy team begins batch authoring. Copy team is authoring to the existing RON format (which IS the schema per D-142's "Rust structs match the RON files" contract) — but if the struct rename changes any field names, copy team needs to know before producing 29 files.
|
||||
|
||||
## Sprint Completion Proof
|
||||
|
||||
Sprint 27 is done when all of the following are observable:
|
||||
|
||||
**Server:**
|
||||
- `cargo clippy -- --deny warnings` passes with zero warnings on the `server` branch.
|
||||
- `cargo audit` runs as `make audit` and reports the RUSTSEC-2025-0141 advisory as ignored (expected), with no new advisories failing.
|
||||
- `tooling/validate-ron content/global/zone-types/rural_agricultural.ron zone_type` passes against the new `ZoneTypeTemplate` struct.
|
||||
- `cargo run --bin generator_spike -- --zone-type rural_agricultural --seed 42 --from-files` produces legible NPC output (eyeball test: you can tell it's a rural agricultural zone from the behaviors).
|
||||
|
||||
**Copy:**
|
||||
- `content/global/zone-types/` contains all 31 RON files (2 existing + 29 new).
|
||||
- All 31 files pass `tooling/validate-ron content/global/zone-types/<zone_type>.ron zone_type` (requires #663 merged).
|
||||
- Each file has at least 3 roles with at least 12 `OnShift` primitives and 3 `Social` primitives per role.
|
||||
- `content/npc-conversations/overheard.yaml.deprecated` exists; replacement RON file exists with 10+ entries.
|
||||
|
||||
**Planning:**
|
||||
- All 12 v0.2 story tickets (#614–#626) have a team assigned in the DB.
|
||||
- Q-WTF-039 and Q-WTF-040 are marked resolved in `decisions/questions-content.md`.
|
||||
- Any required split tickets created with blockers wired.
|
||||
|
||||
## Test Plan Alignment
|
||||
|
||||
Sprint 27 is a content + infrastructure sprint. No new ECS systems, no new IPC protocol changes. Test surface:
|
||||
|
||||
- **#663 struct changes:** Unit test deserializing `rural_agricultural.ron` into the new `ZoneTypeTemplate`. Existing spike integration test (`make generator-spike-test` or equivalent) must still pass. No regressions in existing blueprint deserialization tests.
|
||||
- **#635 Clippy:** `cargo clippy -- --deny warnings` is the test. Zero warnings = done.
|
||||
- **#669 content/ move:** `make test` must pass after the move. All fixture paths verified.
|
||||
- **#662 zone-type files:** `tooling/validate-ron` pass for all 31 files is the acceptance criterion.
|
||||
- **#664 overheard replacement:** New RON file deserializes without errors. Old YAML archived (not deleted).
|
||||
|
||||
## Sprint Retro Trigger
|
||||
|
||||
If any of these conditions are hit mid-sprint, flag to SI immediately:
|
||||
|
||||
- Server struct changes in #663 force RON file format changes that break the copy team's partially-authored files. (Mitigation: struct field names should be locked before copy batch authoring begins — see cross-team dependencies above.)
|
||||
- Copy batch authoring produces more than 5% of primitives with cultural encoding (failing standalone readability). (Mitigation: reviewer agent pass at end of each batch.)
|
||||
- #669 (content/ move) breaks more than 3 test files. (Mitigation: run `make test` after each subdirectory move, not at the end.)
|
||||
@@ -0,0 +1,97 @@
|
||||
---
|
||||
title: "Sprint 27 — Planning Briefing"
|
||||
description: "Assign teams and review open questions for v0.2 story tickets #614–#626"
|
||||
type: sprint
|
||||
status: active
|
||||
sprint: 27
|
||||
team: "planning"
|
||||
---
|
||||
|
||||
# Sprint 27: Scale — Planning Tasks
|
||||
|
||||
**Goal:** Extend the zone-type template library from 2 to 31 zone types, wire the server to load them, and eliminate Clippy debt — clearing the path to the NPC legibility sprint.
|
||||
|
||||
**Branch:** `planning`
|
||||
**Agents:** Gestalt (systems), Tyre (technical), Paula (narrative), Ozzie (player experience), Qatux (documenter/decisions), SI (project manager/ticket updates)
|
||||
|
||||
## New Tickets
|
||||
|
||||
| # | Title | Blocked by |
|
||||
|---|-------|------------|
|
||||
| #676 | Assign team and sprint for v0.2 story tickets (#614–#626) | — |
|
||||
|
||||
Use `tooling/db/ticket show <id>` for full details.
|
||||
|
||||
## Context
|
||||
|
||||
The v0.2 story tickets were created during the Where's the Fun? workshop (2026-03-05) and captured in the backlog without team assignments. Before they can enter a sprint they need a team and any cross-team splits resolved.
|
||||
|
||||
The full ticket list:
|
||||
| # | Title | Epic | Dependencies |
|
||||
|---|-------|------|-------------|
|
||||
| #614 | Bookmark definition system | Tycoon Bookmark (#605) | blocks #618 |
|
||||
| #615 | Tycoon small business owner starting state | Tycoon Bookmark | blocks #617 |
|
||||
| #616 | Broad economic verb vocabulary design | Tycoon Bookmark | — |
|
||||
| #617 | Auto-generated apartment | Tycoon Bookmark | blocked by #615 |
|
||||
| #618 | CK3-style character creation screen | Character Creation (#606) | blocked by #614 |
|
||||
| #619 | Full character customisation | Character Creation | open Q-WTF-040 |
|
||||
| #620 | Culture-implicit-in-location system | Character Creation | blocks #621 |
|
||||
| #621 | NPC personality surface area | NPC Legibility (#607) | blocked by #620, blocks #622 |
|
||||
| #622 | Relationship formation system | NPC Legibility | blocked by #621 |
|
||||
| #624 | Quietly responsive world | World Feel (#608) | — |
|
||||
| #625 | Dual-scale consequence model | World Feel | — |
|
||||
| #626 | Setting delivery — both layers | World Feel | — |
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- `decisions/scope.md` — D-114 (generator-first), D-115 (character creation: skills + bookmark only), D-117 (tycoon bookmark for v0.2), D-118 (tycoon = aspiration, not starting state), D-120 (no skill ceiling)
|
||||
- `decisions/content.md` — D-121 (voice is culture-driven), D-122 (all NPCs generated), D-125 (world quietly responsive), D-126 (Groundhog Day homage on first game day), D-128 (culture implicit in starting location), D-129 (NPC personality: traits + behavior first), D-130 (emergent moral arc), D-131 (broad economic verb vocabulary), D-132 (dual-scale consequence model), D-133 (skills affect outcome), D-134 (full character customization), D-135 (setting delivery via both layers), D-136 (First Settled Reach moment: apartment + insert activation), D-137 (generator: structural and cosmetic variety)
|
||||
|
||||
## Open Questions to Resolve
|
||||
|
||||
Before assigning teams, resolve or document the following open questions:
|
||||
|
||||
**Q-WTF-039: Character creation portrait vs tile-scale preview**
|
||||
- Does the character creation screen show a portrait render or a tile-scale in-world preview of the player character?
|
||||
- Affects: #618 (CK3-style character creation screen) team assignment — portrait render is a `visual` team deliverable, tile-scale preview is `client`.
|
||||
- Needs: Araminta (visual) + Stig/Tyre (client architecture) input. Decision determines whether #618 splits into two tickets.
|
||||
|
||||
**Q-WTF-040: Do creation choices trace into the generated apartment?**
|
||||
- If the player picks hair colour and clothing in #619, does the generator use those choices when laying out the starting apartment (furniture style, colour palette)?
|
||||
- Affects: #617 (auto-generated apartment) scope. If yes, #619 blocks #617 (not just #615).
|
||||
- Needs: Gestalt (systems) + Mellanie (content) input. Low complexity to resolve — yes/no decision with a rationale.
|
||||
|
||||
## Discussion Structure
|
||||
|
||||
Three focused rounds:
|
||||
|
||||
**Round 1 — Team assignment pass**
|
||||
For each ticket, propose a team. Apply the rule: one team per ticket. If a story spans server + client, it must be split. Output: proposed team assignment for each of the 12 tickets, with rationale.
|
||||
|
||||
Heuristics:
|
||||
- Data model / simulation logic → `server`
|
||||
- UI screen / rendering / player-facing interaction → `client`
|
||||
- Design doc / verb vocabulary / narrative spec → `copy` or `planning`
|
||||
- Open question must be resolved before implementation can start → `planning` first, then re-assign
|
||||
|
||||
**Round 2 — Split review**
|
||||
Identify which tickets need to be split into server + client pairs. For each split: write the two child tickets with explicit blocker relationship. #620 (culture-implicit-in-location) is almost certainly a split: server (location-to-culture resolution logic) + client (location picker in character creation UI).
|
||||
|
||||
**Round 3 — Sprint readiness check**
|
||||
Which of the 12 tickets are ready for Sprint 28? Criteria: team assigned, no unresolved open questions blocking implementation, no upstream blocker still in backlog. Present a Sprint 28 candidate list.
|
||||
|
||||
## Output Specification
|
||||
|
||||
Deliverables from this planning session:
|
||||
|
||||
1. **Team assignments committed to DB** — `tooling/db/sqlite-exec "UPDATE tickets SET team = '...' WHERE id = ..."` for all 12 tickets.
|
||||
2. **Split tickets created** — new tickets for any server/client splits, with blocker relationships wired via `tooling/db/sqlite-exec "INSERT INTO ticket_deps ..."`.
|
||||
3. **Q-WTF-039 and Q-WTF-040 resolved** — file resolution notes in `decisions/questions-content.md` (Qatux).
|
||||
4. **Sprint 28 candidate list** — a short list of tickets ready for Sprint 28, delivered to SI for sprint planning.
|
||||
|
||||
## PR Workflow
|
||||
|
||||
When ready to submit planning artifacts, create a PR with `tea` CLI. **All flags are required** to avoid TTY prompts:
|
||||
```bash
|
||||
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "chore(meta): plan v0.2 story ticket team assignments" --description "body" --base main --head planning
|
||||
```
|
||||
@@ -0,0 +1,143 @@
|
||||
---
|
||||
title: "Sprint 27 — Server Briefing"
|
||||
description: "ZoneTypeTemplate structs, Clippy cleanup, cargo audit CI, content/ move to server/, v0.1 YAML audit"
|
||||
type: sprint
|
||||
status: active
|
||||
sprint: 27
|
||||
team: "server"
|
||||
---
|
||||
|
||||
# Sprint 27: Scale — Server Tasks
|
||||
|
||||
**Goal:** Extend the zone-type template library from 2 to 31 zone types, wire the server to load them, and eliminate Clippy debt — clearing the path to the NPC legibility sprint.
|
||||
|
||||
**Branch:** `server`
|
||||
**Agents:** Dudley (simulation), Tyre (arch), Hoshe (QA)
|
||||
|
||||
## New Tickets
|
||||
|
||||
| # | Title | Blocked by |
|
||||
|---|-------|------------|
|
||||
| #663 | ZoneTypeTemplate and LocationSpec structs for D-142 | — |
|
||||
| #635 | Clippy cleanup and CI enforcement | — |
|
||||
| #637 | Add cargo audit to CI/review pipeline | — |
|
||||
| #669 | Move content/ directory under server/ | — |
|
||||
| #672 | Audit and flag v0.1 YAML content | — |
|
||||
|
||||
Use `tooling/db/ticket show <id>` for full details.
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- `decisions/content.md` — D-142 (zone-type template architecture — the schema this sprint implements), D-139 (composable behavior primitives — `assemble_behaviors` already in `server/src/npc/blueprint.rs`)
|
||||
- `decisions/scope.md` — D-114 (generator-first proof-of-life), D-122 (all NPCs generated)
|
||||
|
||||
## Notes
|
||||
|
||||
### #663 — ZoneTypeTemplate and LocationSpec structs
|
||||
|
||||
The existing `ZoneSpec` struct (`server/src/npc/blueprint.rs`, line 38) was authored for the Sprint 25 spike. The zone-type RON files the copy team has now shipped (`content/global/zone-types/rural_agricultural.ron`, `industrial_freight.ron`) use the D-142 format, which does not match the current struct. Four changes required:
|
||||
|
||||
**1. Rename and extend `ZoneSpec` to `ZoneTypeTemplate`:**
|
||||
- Add `id: String` — the canonical zone-type identifier (e.g. `"rural_agricultural"`)
|
||||
- Add `subtype: Option<String>` — subtype discriminator (currently `None` in all files)
|
||||
- Rename `social_sites: Vec<SocialSiteSpec>` to `social_site_types: Vec<SocialSiteTypeSpec>`
|
||||
- The new `SocialSiteTypeSpec` uses `eligible_roles: Vec<String>` (role IDs), not `min_npcs`/`max_npcs` — those are location-spec metadata
|
||||
- `economic_level` and `population_density` become defaults, overridable by location specs
|
||||
|
||||
**2. Update `RoleSpec`:**
|
||||
- Remove `weight: u8` — weights are declared on location specs, not zone-type templates. Roles in a zone-type template are authoritative behavior pools; location specs declare which roles appear and at what frequency.
|
||||
- `behavior_primitives` is the primary field; `typical_behaviors` is preserved as `#[serde(default)]` for backward compatibility until migration is verified.
|
||||
|
||||
**3. Add `LocationSpec` struct:**
|
||||
- `zone_type: String` — references a `ZoneTypeTemplate.id`
|
||||
- `culture: String` — references a culture profile
|
||||
- `role_weights: Vec<RoleWeight>` — `{ role_id: String, weight: u8 }` entries
|
||||
- `economic_level: Option<u8>` — overrides zone-type default if set
|
||||
- `population_density: Option<u8>` — overrides zone-type default if set
|
||||
- `abandoned: bool` — D-142 abandoned flag
|
||||
- `poi_overlay: Vec<String>` — D-142 poi_overlay list
|
||||
- `social_sites: Vec<LocationSocialSite>` — site instances with `site_type`, `label`, `min_npcs`, `max_npcs`
|
||||
|
||||
**4. Update loader in `generator_spike.rs`:**
|
||||
- `--from-files` currently loads `content/global/<zone>-zone-spec.ron`. Update to load from `content/global/zone-types/<zone_type>.ron`.
|
||||
- Resolve `(zone_type, role_id)` → `BehaviorPrimitive` pool by loading the `ZoneTypeTemplate` file then indexing by role ID.
|
||||
- The generator spike binary passes zone-type ID as `--zone-type rural_agricultural` (update the `--zone` arg). Keep `--from-files` mode.
|
||||
|
||||
**Validate:** After struct changes, run `tooling/validate-ron content/global/zone-types/rural_agricultural.ron zone_type` — it must pass without modification to the RON files. The RON files are the ground truth; the Rust structs must match them, not the other way around.
|
||||
|
||||
**Test:** Add a unit test in `blueprint.rs` that deserializes `rural_agricultural.ron` from disk and asserts the roles, primitive count, and social_site_types are non-empty. This test will fail until both the struct and the RON files align.
|
||||
|
||||
**Schema registration in validate-ron:** After struct changes, update `server/src/bin/validate_ron.rs` to accept `zone_type` as a schema name that deserializes to `ZoneTypeTemplate`.
|
||||
|
||||
---
|
||||
|
||||
### #635 — Clippy cleanup and CI enforcement
|
||||
|
||||
Two-phase:
|
||||
|
||||
1. **One-time cleanup:** Run `cargo clippy --fix` for auto-fixable warnings. Remaining complex warnings (too_many_arguments, complex type signatures) require manual refactors — fix by refactoring, not by suppressing with `#[allow()]`. Goal: zero warnings under `--deny warnings`.
|
||||
2. **CI gate:** Add `cargo clippy -- --deny warnings` to `make pre-pr` (see `Makefile`). After this sprint, Clippy warnings in PRs are a blocking failure.
|
||||
|
||||
Run `cargo clippy -- --deny warnings 2>&1 | wc -l` before starting to get a baseline count. The Gemini review found 66 warnings — verify the current count first (Clean House sprint may have reduced it). Fix in batches and commit frequently; a single large Clippy PR is hard to review.
|
||||
|
||||
---
|
||||
|
||||
### #637 — Add cargo audit to CI/review pipeline
|
||||
|
||||
Trigger on `Cargo.toml`/`Cargo.lock` changes (not every commit). Approach:
|
||||
|
||||
1. Add `cargo audit` target to `Makefile` under `make audit`.
|
||||
2. Wire it as a check in the CI configuration (`.config/`) that runs when `Cargo.lock` changes.
|
||||
3. Also add to `make pre-pr` so it runs locally before PRs.
|
||||
|
||||
The current open advisory is `RUSTSEC-2025-0141` (bincode v1.3.3 unmaintained). `cargo audit` will flag it — this is expected until #636 (bincode migration, deferred) is completed. Add an advisory ignore for this specific ID so CI stays green while the known advisory is tracked, but new advisories will fail.
|
||||
|
||||
---
|
||||
|
||||
### #669 — Move content/ directory under server/
|
||||
|
||||
`content/` is consumed exclusively by the server (generator, validate-ron, tests). Move it to `server/content/`.
|
||||
|
||||
**Steps:**
|
||||
1. `git mv content/ server/content/` — preserves git history.
|
||||
2. Update all path references in server Rust code: search for `"content/"` string literals in `server/src/`. Key files: `server/src/bin/generator_spike.rs` (default `--content-root`), `server/src/bin/validate_ron.rs`, any test fixtures.
|
||||
3. Update Makefile targets that reference `content/`.
|
||||
4. Update `tooling/validate-ron` script if it has hardcoded paths.
|
||||
5. Run `make test` after the move — fixture paths in integration tests may need updating.
|
||||
|
||||
**Do not** touch `client/data/` — that is client-only and stays put.
|
||||
|
||||
After the move, `tooling/db/sqlite-query 'SELECT * FROM tickets WHERE description LIKE "%content/global%"'` to identify any ticket descriptions with stale paths (update them for future agents).
|
||||
|
||||
---
|
||||
|
||||
### #672 — Audit and flag v0.1 YAML content
|
||||
|
||||
Survey task, not deletion. The server and copy branches contain ~67 YAML files from v0.1 that reference deleted named NPCs (Kael, Sera, Torek, etc.) and the detective arc.
|
||||
|
||||
**Deliverable:** A single file `docs/architecture/v01-yaml-content-audit.md` listing:
|
||||
- Each YAML file path and its status: `deprecated` (pure detective/named NPC content, no generator value), `convertible` (has useful data worth porting to RON generator format), or `already-superseded` (content was already replaced in main).
|
||||
- For `convertible` files: what specifically is worth extracting (name pools? voice patterns? dialogue seeds?).
|
||||
- Recommended disposition: archive vs delete vs convert.
|
||||
|
||||
**Do not delete anything.** Flag only. Deletion requires explicit team review in a follow-up ticket.
|
||||
|
||||
---
|
||||
|
||||
## Dependency Chain
|
||||
|
||||
```
|
||||
#669 (move content/) → must complete before #663 (loader path updates assume new location)
|
||||
#663 (ZoneTypeTemplate structs) → unblocks copy team (#662) full pipeline run
|
||||
#635 (Clippy cleanup) → #637 (cargo audit — add both to pre-pr in same pass)
|
||||
#672 (v0.1 YAML audit) — standalone, parallel track
|
||||
```
|
||||
|
||||
Note: #669 should ideally complete first so #663's loader uses the new `server/content/` paths from the start. If they run in parallel, the loader path can target `server/content/` directly and #669 will confirm the files are there.
|
||||
|
||||
## PR Workflow
|
||||
|
||||
When ready to submit, create a PR with `tea` CLI. **All flags are required** to avoid TTY prompts (see `CLAUDE.md` "Gitea access" section):
|
||||
```bash
|
||||
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(simulation): description" --description "body" --base main --head server
|
||||
```
|
||||
@@ -0,0 +1,136 @@
|
||||
# Zone-Type Template Consistency Review
|
||||
**Sprint 27 · Ticket #662 · Task #6**
|
||||
**Reviewed by:** Mellanie
|
||||
**Files reviewed:** 31 (29 new + 2 canonical references)
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
All 31 zone-type templates pass the core authoring criteria. Two issues
|
||||
were found and resolved: one stale header comment, one cosmetic
|
||||
inconsistency affecting 5 files.
|
||||
|
||||
**Status: PASS — all issues resolved**
|
||||
|
||||
---
|
||||
|
||||
## Check Results
|
||||
|
||||
### 1. RON schema structure
|
||||
**PASS — all 31 files**
|
||||
|
||||
Every file validates against the `ZoneTypeTemplate` schema. All required
|
||||
fields present: `id`, `subtype`, `label`, `description`, `economic_level`,
|
||||
`population_density`, `roles`, `social_site_types`. Role entries all have
|
||||
`id`, `label`, `skill_focus`, `combat_eligible`, `behavior_primitives`.
|
||||
Primitive tuples all have `action`, `context`, `modifier_hint`.
|
||||
|
||||
### 2. Culture-neutrality
|
||||
**PASS — all 31 files**
|
||||
|
||||
No cultural attitudes, speech patterns, naming conventions, or social
|
||||
assumptions encoded in any action text. All primitives describe physical
|
||||
behavior and professional practice only. The layer composes cleanly — no
|
||||
primitive will read as contradicted by a culture modifier.
|
||||
|
||||
### 3. modifier_hint coverage
|
||||
**PASS — all 31 files**
|
||||
|
||||
2383 total primitives across all files. Every primitive has
|
||||
`modifier_hint: Some(...)`. Zero with `None`. All 7 categories represented
|
||||
across the set: `work_pace`, `physical_manner`, `social_signal`,
|
||||
`task_completion`, `environmental_scan`, `offduty_posture`, `authority_response`.
|
||||
|
||||
### 4. Context tag coverage
|
||||
**PASS — all 31 files**
|
||||
|
||||
All files have OnShift primitives and Social/OffDuty primitives. 18 of 31
|
||||
files use the `OffDuty` context tag for break/rest behavior alongside
|
||||
`Social` for interaction primitives (matching the canonical references).
|
||||
13 of 31 files use `Social` only, folding both posture and interaction under
|
||||
one tag. Both are schema-valid. The OffDuty/Social split is richer where
|
||||
the zone character warrants it (security-heavy, institutional, or isolated
|
||||
settings) and the Social-only approach works where the distinction carries
|
||||
less meaning. No file is missing off-shift coverage.
|
||||
|
||||
### 5. social_site_types coverage
|
||||
**PASS — all 31 files**
|
||||
|
||||
All files declare ≥ 2 social site types. `detention_facility.ron` declares 4
|
||||
(`guard_post`, `exercise_yard`, `medical_bay`, `administrative_office`), which
|
||||
is compliant — the schema has no upper bound.
|
||||
|
||||
### 6. Role count
|
||||
**PASS — all 31 files**
|
||||
|
||||
All files declare exactly 4 roles. Role labels are appropriate to zone
|
||||
character and non-overlapping within each file.
|
||||
|
||||
### 7. Standalone readability
|
||||
**PASS — all 31 files**
|
||||
|
||||
All action text reads as specific, concrete, and informative without a
|
||||
culture modifier appended. No primitive requires cultural context to be
|
||||
legible. The behavior is the information.
|
||||
|
||||
### 8. Grammar constraint
|
||||
**PASS — all 31 files**
|
||||
|
||||
All action text accepts trailing prepositional phrases and coordinating
|
||||
conjunctions cleanly. No action ends in a word that would create a
|
||||
grammatical collision with modifier additions (e.g., actions ending in
|
||||
prepositions, incomplete phrases, or conjunction stubs).
|
||||
|
||||
---
|
||||
|
||||
## Issues
|
||||
|
||||
### Issue 1 — Stale header comment in `residential_station.ron` ⚠️ Fix required
|
||||
**File:** `content/global/zone-types/residential_station.ron`
|
||||
**Line:** 19
|
||||
|
||||
The header comment reads:
|
||||
```
|
||||
// Roles: resident, maintenance_tech, block_admin, child (no combat, low authority)
|
||||
```
|
||||
|
||||
The actual implementation has four roles: `resident`, `maintenance_tech`,
|
||||
`block_admin`, **`security`**. The `child` role was not implemented.
|
||||
|
||||
**Fix:** Update header comment to:
|
||||
```
|
||||
// Roles: resident, maintenance_tech, block_admin, security
|
||||
```
|
||||
|
||||
### Issue 2 — Missing explanatory comment before `social_site_types` in 5 files (cosmetic)
|
||||
**Files affected:**
|
||||
- `content/global/zone-types/entertainment_hospitality.ron`
|
||||
- `content/global/zone-types/entertainment_venue.ron`
|
||||
- `content/global/zone-types/residential_station.ron`
|
||||
- `content/global/zone-types/residential_surface.ron`
|
||||
- `content/global/zone-types/residential_dispersed.ron`
|
||||
|
||||
All other 26 files include the explanatory comment before the
|
||||
`social_site_types` field:
|
||||
```ron
|
||||
// Valid social site types for this zone type.
|
||||
// Location specs declare which appear, with their own label, min_npcs, max_npcs.
|
||||
social_site_types: [
|
||||
```
|
||||
|
||||
The 5 affected files go straight to `social_site_types: [` without the comment.
|
||||
The field itself is correct in all cases — this is a documentation consistency
|
||||
gap only.
|
||||
|
||||
**Fix:** Add the two-line comment block before `social_site_types:` in each
|
||||
affected file.
|
||||
|
||||
---
|
||||
|
||||
## No action required
|
||||
|
||||
- `detention_facility.ron` declaring 4 social site types: within spec, no upper bound
|
||||
- OffDuty/Social context variation: intentional, both valid per D-142
|
||||
- `diplomatic_elite.ron` using `OffDuty` for ambassador and aide social primitives
|
||||
while protocol officer and security use `Social`: appropriate zone-level distinction
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
title: "Sprint 28 — Candidate Ticket List"
|
||||
description: "v0.2 story tickets cleared for Sprint 28 sprint planning. Output of Sprint 27 planning pass."
|
||||
type: sprint-prep
|
||||
sprint: 28
|
||||
prepared_by: Sprint 27 planning team
|
||||
date: 2026-03-17
|
||||
---
|
||||
|
||||
# Sprint 28 Candidate Tickets
|
||||
|
||||
**From:** Sprint 27 planning pass (ticket #676)
|
||||
**For:** SI — sprint planning
|
||||
|
||||
These tickets have: team assigned, no unresolved open questions, no upstream blocker currently in backlog.
|
||||
|
||||
---
|
||||
|
||||
## Ready for Sprint 28
|
||||
|
||||
| # | Title | Team | Epic | Notes |
|
||||
|---|-------|------|------|-------|
|
||||
| **#614** | Bookmark definition system | server | Tycoon Bookmark | No blockers. Blocks #618 (creation screen). Start here. |
|
||||
| **#615** | Tycoon small business owner starting state | planning | Tycoon Bookmark | No blockers. Design spec for Day 1 state. Blocks #681 (apartment generator). |
|
||||
| **#616** | Broad economic verb vocabulary design | planning | Tycoon Bookmark | No blockers. Verb map design doc. Independent. |
|
||||
| **#619** | Full character customisation | client | Character Creation | No blockers. Cosmetic UI. Independent of apartment (#617) — taste trait is shared root, not pipeline (D-147). |
|
||||
| **#679** | Location-to-culture resolution system (server) | server | Character Creation | No blockers. Split from #620. Unblocks #621, #680, #681. Critical path for NPC generation. |
|
||||
| **#624** | Quietly responsive world | server | World Feel | No blockers. Proximity-weighted NPC attention + reaction systems. |
|
||||
| **#625** | Dual-scale consequence model | server | World Feel | No blockers. Sharp events + slow accumulation. Rimworld + DF model. |
|
||||
| **NEW** | Q-WTF-041 design pass (span gate feeling) | planning | World Feel | No blockers. Resolves Q-WTF-041 to unblock #626. Needs Gore, Ozzie, Miri, Araminta. Create ticket during sprint planning. |
|
||||
|
||||
**Total:** 8 tickets across server (4), client (1), planning (3)
|
||||
|
||||
---
|
||||
|
||||
## NOT Ready — Blocked or Needs Design First
|
||||
|
||||
| # | Title | Team | Blocked by | When Ready |
|
||||
|---|-------|------|-----------|------------|
|
||||
| #618 | CK3-style character creation screen | client | #614 (bookmark definition) | Sprint 29 (after #614 ships) |
|
||||
| #680 | Location picker in character creation UI | client | #679 (culture resolution) | Sprint 29 (after #679 ships) |
|
||||
| #681 | Apartment generator logic | server | #615 (starting state) + #679 (culture resolution) | Sprint 29 (after both ship) |
|
||||
| #682 | Apartment rendering + first-moment sequence | client | #681 (generator logic) | Sprint 29+ |
|
||||
| #621 | NPC personality surface area | server | #679 (culture resolution) | Sprint 29 (after #679 ships). CRITICAL priority. |
|
||||
| #622 | Relationship formation system | server | #621 (NPC personality surface) | Sprint 29+ |
|
||||
| #626 | Setting delivery — both layers | planning | Q-WTF-041 unresolved (span gate feeling) | Design pass needed first |
|
||||
|
||||
---
|
||||
|
||||
## Tickets Marked as Split (do not assign)
|
||||
|
||||
| # | Title | Split into |
|
||||
|---|-------|-----------|
|
||||
| #617 | Auto-generated apartment | #681 (server: generator) + #682 (client: rendering + first moment) |
|
||||
| #620 | Culture-implicit-in-location system | #679 (server) + #680 (client). Original deleted. |
|
||||
|
||||
---
|
||||
|
||||
## Q-WTF-041 Note for #626
|
||||
|
||||
Ticket #626 (Setting delivery — both layers) references Q-WTF-041: "what should the player feel looking at the span gate from their apartment?" This question is unresolved. Before #626 can be split and implemented, the design spec for the visual + insert layers must be authored. Recommend a planning ticket for the design pass in Sprint 28, separate from implementation.
|
||||
|
||||
---
|
||||
|
||||
## Critical Path
|
||||
|
||||
**NPC legibility chain:** #679 → #621 → #622
|
||||
NPC personality surface area (#621) is CRITICAL priority. Get #679 (culture resolution) into Sprint 28 so #621 is unblocked for Sprint 29.
|
||||
|
||||
**First Settled Reach moment:** #615 + #679 → #681 → #682
|
||||
The apartment moment (D-136) depends on both the tycoon starting state spec and culture resolution shipping first. Apartment rendering (#682) is the client-side emotional delivery — sprint-pair with #681.
|
||||
|
||||
**Character creation chain:** #614 → #618
|
||||
Bookmark definition gates the creation screen UI.
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: "Workshop Outcomes: GJ 6711 / Abzu — Furthest System"
|
||||
description: "Workshop paused at project lead direction — outstanding mechanics gap unresolved"
|
||||
type: workshop
|
||||
status: paused
|
||||
workshop: gj-6711-furthest-system
|
||||
agent: ""
|
||||
round: 0
|
||||
created: 2026-03-16
|
||||
---
|
||||
|
||||
# Workshop Outcomes: GJ 6711 / Abzu — Furthest System
|
||||
|
||||
**Workshop:** GJ 6711 / Abzu — Furthest System
|
||||
**Status:** Paused at project lead direction
|
||||
**Rounds completed:** 6 (briefs, challenge, synthesis, mechanics, carry-out)
|
||||
**Participants:** Araminta, Miri, Nigel, Paula, Gestalt, Gore, Ozzie
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
The workshop developed the world texture, atmosphere, and lore for GJ 6711 (named Abzu by the project lead in Round 4) — the furthest settled system in the Reach at hop 23. The creative output was strong: a K-type dead-end system settled by wave_3 colonists who appear to have been recruited as watchers for something that requires continuous observation to remain stable. The Adams and Ford commission provides the player's reason to travel there.
|
||||
|
||||
However, the workshop did not resolve the fundamental mechanics gap: what the player actually *does* at Abzu as gameplay, and what they walk away with that has mechanical weight elsewhere in the game. Six rounds produced extraordinary atmosphere and zero playable verbs.
|
||||
|
||||
## Why Paused
|
||||
|
||||
The project lead identified two unresolved problems:
|
||||
|
||||
1. **No game mechanic.** The vigil concept (observation as load-bearing activity) is promising but was never translated into player verbs, fail states, or moment-to-moment gameplay.
|
||||
|
||||
2. **No carry-out value.** The player has no reward, unlock, or narrative consequence that matters outside Abzu. The experience is currently a "beautiful dead end."
|
||||
|
||||
The project lead intends to outline the systems interaction personally and defer the reward/lootbox question to a later design session with a DM-style collaborator. The stated goal: Abzu should be a moment of culmination with a handsome reward for the player, contingent on success at a task that remains to be defined.
|
||||
|
||||
## Outstanding Items
|
||||
|
||||
- Player verbs for the vigil mechanic (spatial? observational? social?)
|
||||
- What bleed looks like on a tile map
|
||||
- Carry-out value: what the player gains that has weight elsewhere in the game
|
||||
- Integration with the broader Adams and Ford questline
|
||||
- The sealed envelope content (what is actually at Abzu) remains deliberately unresolved
|
||||
|
||||
## Source Documents
|
||||
|
||||
All round documents are in `docs/workshops/gj-6711-furthest-system/`:
|
||||
- `challenge-brief.md` and individual challenge responses
|
||||
- `synthesis-*.md` files (4 participants)
|
||||
- `mechanics-gestalt.md`
|
||||
- `carryout-*.md` files (4 participants)
|
||||
- `sealed-envelope.md`
|
||||
- `project-lead-direction.md` (verbatim lead messages across all rounds)
|
||||
@@ -129,7 +129,7 @@ Composable primitives would need to represent this as `SOCIAL_BYPASS(target=Rask
|
||||
|
||||
**Mechanical evaluation:** This is the most systems-compatible option for the rendering layer — IF we handle the tell separation correctly.
|
||||
|
||||
The i18n analogy is the right frame. Base text is `en-semantic`. Re-voiced text is `en-KRENN-BOLD`. The information is stable; the expression varies.
|
||||
The i18n analogy is the right frame. Base text is `en-semantic`. Re-voiced text is `en-VMS-BOLD`. The information is stable; the expression varies.
|
||||
|
||||
The proposal correctly identifies that base text serves triple duty: LLM seed, graceful fallback, and LLM-off experience. From a systems standpoint, this is elegant — one authored artifact doing three mechanical jobs simultaneously.
|
||||
|
||||
|
||||
@@ -89,10 +89,10 @@ The difference between 150 and 300 tokens is the difference between **following
|
||||
Example pair format:
|
||||
```
|
||||
BASE: "checks the gate without looking at you"
|
||||
KRENN: "runs the check, eyes on the panel — gives you a nod when it clears"
|
||||
VMS: "runs the check, eyes on the panel — gives you a nod when it clears"
|
||||
---
|
||||
BASE: "works on the conduit"
|
||||
KRENN: "traces the run with a handheld light, finds the splice, fixes it without ceremony"
|
||||
VMS: "traces the run with a handheld light, finds the splice, fixes it without ceremony"
|
||||
```
|
||||
|
||||
Each pair: ~35-40 tokens. Two pairs: ~70-80 tokens. Adding these to the 100-token instruction core produces ~170-180 total — still under 250 tokens.
|
||||
@@ -297,7 +297,7 @@ This is not a blocker for any proposal, but it must be decided before the `sr-vo
|
||||
[SYSTEM/SHARED] Do not use religious language. No military ranks. Technology terms
|
||||
only: insert, span gate, the Reach. No wit or banter. No Earth references.
|
||||
|
||||
[KRENN CULTURE] Direct-informal register — short because time is scarce, not
|
||||
[VAN MAANEN'S STAR CULTURE] Direct-informal register — short because time is scarce, not
|
||||
unfriendly. Competence earns respect. Community: crew, shift, street.
|
||||
Exclamations ONLY: "void take it" / "stars" / "blood and void" / "cold vacuum."
|
||||
Greetings: hey, morning, shift treating you alright.
|
||||
|
||||
@@ -304,10 +304,10 @@ avoided (Van Maanen's Star uses contractions freely: shift's calling, gotta, can
|
||||
|
||||
[BLOCK 6 — EXAMPLES]
|
||||
BASE: "checks the gate"
|
||||
KRENN: "runs the check, nods when it clears"
|
||||
VMS: "runs the check, nods when it clears"
|
||||
---
|
||||
BASE: "works on the conduit"
|
||||
KRENN: "traces the fault, finds it, fixes it without ceremony"
|
||||
VMS: "traces the fault, finds it, fixes it without ceremony"
|
||||
```
|
||||
|
||||
**Token count for this implementation:** ~195-210 tokens. Within the 200-token soft target.
|
||||
|
||||
@@ -63,7 +63,7 @@ The reassembled version is grammatically correct and semantically equivalent. It
|
||||
|
||||
This is the option with the most promise and the most risk, and the two are inseparable.
|
||||
|
||||
**What the proposal gets right:** The i18n analogy is apt. Culture-neutral base text as `en-base`, culture-voiced text as `en-KRENN-DIRECT`. The injector clause model (10-20 per culture) scales in the right direction. The progressive enhancement framing — base text is functional, voiced text is premium — is elegant and de-risks hardware concerns.
|
||||
**What the proposal gets right:** The i18n analogy is apt. Culture-neutral base text as `en-base`, culture-voiced text as `en-VMS-DIRECT`. The injector clause model (10-20 per culture) scales in the right direction. The progressive enhancement framing — base text is functional, voiced text is premium — is elegant and de-risks hardware concerns.
|
||||
|
||||
**What the proposal is missing:** It was written before the generator spike added Want/State, relationship behaviors, and the perception mechanic. These systems change the calculus substantially. See Section 3.
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ The design is **progressive enhancement**, not a toggle between two systems. Eve
|
||||
2. **Fallback** — what the player sees when pre-voicing hasn't finished yet
|
||||
3. **LLM-off experience** — the complete gameplay layer for players who disable AI-enhanced dialogue or run on minimal hardware
|
||||
|
||||
There is no separate authoring step for the fallback. The base text IS the fallback. The i18n analogy holds: `en-base` is always present, `en-KRENN-BOLD` is the enhancement.
|
||||
There is no separate authoring step for the fallback. The base text IS the fallback. The i18n analogy holds: `en-base` is always present, `en-VMS-BOLD` is the enhancement.
|
||||
|
||||
### Content tiers: baked, pre-voiced, fallback
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Round 1 — Miri (Worldbuilder / Setting Designer)"
|
||||
description: "Regional style guide template and Krenn System cultural brief"
|
||||
description: "Regional style guide template and Van Maanen's Star cultural brief"
|
||||
type: workshop
|
||||
status: archived
|
||||
workshop: wiki-review
|
||||
@@ -243,7 +243,7 @@ The founding population was ~60% Finnish-Estonian-Latvian, ~25% Dutch-Norwegian
|
||||
|
||||
1. **Institutional names (official, rarely used):** Corporate or bureaucratic. "Sova Transit Logistics Hub, Bay 7-C." "Van Maanen's Star Administration, Sector 12." These appear on legal documents and institutional signage. Nobody says them.
|
||||
|
||||
2. **Established names (standard use):** Heritage-influenced or descriptive. "Station Sova" (Estonian-origin, means "suitable/fitting" — the founders named it for the gate position). "Van Maanen's Star" itself (possibly Finnish *krenni*, an old dialect word for "crossroads" — the etymology is debated, which is itself a cultural detail). "The Terminal" (English-origin descriptive, reflecting the commercial-cadre influence on workplace naming).
|
||||
2. **Established names (standard use):** Heritage-influenced or descriptive. "Station Sova" (Estonian-origin, means "suitable/fitting" — the founders named it for the gate position). "Van Maanen's Star" itself (named for the real star Van Maanen's Star (GJ 35) — the first white dwarf discovered, a pragmatic name for a pragmatic system). "The Terminal" (English-origin descriptive, reflecting the commercial-cadre influence on workplace naming).
|
||||
|
||||
3. **Informal names (locals only):** Personal or experiential. "Lera's" instead of "The Last Shift." "The B" for Corridor B-7. "Topside" for Level 3. These names are social shibboleths — knowing them signals belonging.
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ ASSEMBLY FLOOR: LATTICE FUNDING AMENDMENT REACHES COMMITTEE
|
||||
STATION SOVA: VENTILATION UPGRADE SCHEDULE (LEVEL 3 AFFECTED)
|
||||
KOLM LEAGUE: SOVA DOCKERS 4, ORBITAL TRANSIT 2
|
||||
GRAIN FUTURES STABLE — SYNDIC SHIPPING COSTS FLAT FOR Q3
|
||||
KRENN PRIME SURFACE: HARVEST SEASON OPENS, EXPORT WINDOWS CONFIRMED
|
||||
VAN MAANEN PRIME SURFACE: HARVEST SEASON OPENS, EXPORT WINDOWS CONFIRMED
|
||||
COMMISSION ADVISORY: LATTICE CALIBRATION DUE DATES FOR SOVA DISTRICT
|
||||
```
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ lattice components is subject to:
|
||||
- Referral to system-level enforcement
|
||||
|
||||
Report suspected violations to the Commission kiosk (Level 3)
|
||||
or via Meridian channel LC-COMPLIANCE-KRENN.
|
||||
or via Meridian channel LC-COMPLIANCE-VMS.
|
||||
|
||||
Lattice Commission | Protecting Neural Integrity
|
||||
```
|
||||
@@ -160,7 +160,7 @@ or via Meridian channel LC-COMPLIANCE-KRENN.
|
||||
**Cultural notes:**
|
||||
- Institutional language. Concordat Standard. No Van Maanen's Star vernacular on Commission documents.
|
||||
- The penalty range (2,000-15,000 credits) means a Category 3 fine could wipe out 10 months of a dock worker's margin income. This is not abstract — every worker who reads this (and they have) knows exactly what it means for someone earning 2,400/month with 200 margin. The fine is designed to be ruinous. That's the point. That's why the ring exists.
|
||||
- "Report suspected violations" — this line is doing heavy thematic lifting. In Van Maanen's Star culture, reporting is a violation of the mind-your-business norm. The Commission asks workers to do something their culture considers hostile. The notice has been up for years. Nobody has ever used channel LC-COMPLIANCE-KRENN from this district.
|
||||
- "Report suspected violations" — this line is doing heavy thematic lifting. In Van Maanen's Star culture, reporting is a violation of the mind-your-business norm. The Commission asks workers to do something their culture considers hostile. The notice has been up for years. Nobody has ever used channel LC-COMPLIANCE-VMS from this district.
|
||||
- The notice is posted next to the shift schedule. Workers see it every day. It's wallpaper. The detective sees it and thinks "compliance infrastructure." The smuggler sees through it — it's the cost-of-doing-business calculation made literal.
|
||||
- The tag line — "Protecting Neural Integrity" — is Commission branding. Workers have opinions about this phrase. None of them are positive.
|
||||
|
||||
@@ -169,15 +169,15 @@ or via Meridian channel LC-COMPLIANCE-KRENN.
|
||||
Meridian feed display. Text-scrolling format. Mix of Reach-wide and local. Updated continuously. The bar's ambient information stream.
|
||||
|
||||
```
|
||||
FREIGHT INDEX: KRENN CORRIDOR +0.3% | TAVROS LINK STEADY | SOVA THROUGHPUT 94%
|
||||
FREIGHT INDEX: VAN MAANEN CORRIDOR +0.3% | TAVROS LINK STEADY | SOVA THROUGHPUT 94%
|
||||
|
||||
ASSEMBLY SESSION 447: FRONTIER AUTONOMY MOTION TABLED AGAIN — "NOT THE TIME" SAYS CHAIR PELLAM
|
||||
|
||||
STATION ADVISORY: VENTILATION MAINTENANCE SECTOR 3 SCHEDULE EXTENDED. COMPLETION NOW EST. CYCLE 18
|
||||
|
||||
KRENN PRIME SURFACE: STORM WARNING NORTH LATITUDE BAND — DEPOT OPERATIONS NORMAL
|
||||
VAN MAANEN PRIME SURFACE: STORM WARNING NORTH LATITUDE BAND — DEPOT OPERATIONS NORMAL
|
||||
|
||||
SPORT: ORBITAL 3 TAKES SOVA LEAGUE FINAL 4-2. MATCH REPLAY AVAILABLE MERIDIAN-SPORT-KRENN
|
||||
SPORT: ORBITAL 3 TAKES SOVA LEAGUE FINAL 4-2. MATCH REPLAY AVAILABLE MERIDIAN-SPORT-VMS
|
||||
|
||||
COMMISSION: QUARTERLY COMPLIANCE REVIEW SCHEDULE POSTED. NEXT SOVA INSPECTION: CYCLE 22
|
||||
```
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
name: The Settled Reach
|
||||
version: 0.1.26
|
||||
version: 0.1.27
|
||||
repository: settled-reach
|
||||
codename: commonwealth
|
||||
|
||||
|
||||
@@ -7,3 +7,9 @@ disallowed-types = [
|
||||
{ path = "std::collections::HashMap", reason = "HashMap iteration order is non-deterministic. Use BTreeMap or IndexMap for deterministic simulation." },
|
||||
{ path = "std::collections::HashSet", reason = "HashSet iteration order is non-deterministic. Use BTreeSet or IndexSet." },
|
||||
]
|
||||
|
||||
# Bevy ECS system functions naturally accumulate many Res<>/Query<> parameters and
|
||||
# complex Query type signatures. These thresholds are tuned to allow idiomatic
|
||||
# Bevy system code while still catching genuinely problematic complexity elsewhere.
|
||||
type-complexity-threshold = 750
|
||||
too-many-arguments-threshold = 12
|
||||
|
||||
Generated
+1
-1
@@ -1236,7 +1236,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "settled-reach-server"
|
||||
version = "0.1.25"
|
||||
version = "0.1.26"
|
||||
dependencies = [
|
||||
"bevy_app",
|
||||
"bevy_ecs",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "settled-reach-server"
|
||||
version = "0.1.26"
|
||||
version = "0.1.27"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# cargo audit configuration for settled-reach-server.
|
||||
# Known advisories that are tracked but not yet resolved are listed here.
|
||||
# New advisories NOT in this list will fail CI.
|
||||
|
||||
[advisories]
|
||||
# RUSTSEC-2025-0141: bincode v1.3.3 is unmaintained.
|
||||
# Migration to bincode v2 or an alternative is tracked in ticket #636.
|
||||
# This ignore can be removed once #636 is resolved.
|
||||
ignore = ["RUSTSEC-2025-0141"]
|
||||
+1
-1
@@ -12,7 +12,7 @@ headlines:
|
||||
# --- Freight / Commodity (6) ---
|
||||
|
||||
- id: ticker_001
|
||||
text: "KRENN FREIGHT INDEX: Lattice components +12% on Syndic supply restrictions"
|
||||
text: "VAN MAANEN FREIGHT INDEX: Lattice components +12% on Syndic supply restrictions"
|
||||
category: freight
|
||||
dual_lens:
|
||||
smuggler: "Prices up. Every run is worth more — and every run is riskier."
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user