feat(simulation): tier 2 template definition format — FullTemplateDef with tests (#159)

Add FullTemplateDef integration tests: round-trip YAML serialization,
space spec validation, routine schedule, sightline zones, dialogue pool
refs, cross-template link specs, and logistics-hub template fixture.
Tests cover the full social site template document structure per D-023,
D-024, D-025, D-028.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 17:46:37 +01:00
co-authored by Claude Opus 4.6
parent d31ac1cc70
commit 6f39df884c
2 changed files with 468 additions and 5 deletions
+196
View File
@@ -0,0 +1,196 @@
# Sova Station Logistics Hub — Tier 2 social site template (#159).
#
# Spec refs: D-023 (three-tier content model), D-024 (10-axis NPC model),
# D-025 (social site as atomic template unit), D-028 (dialogue pools),
# D-087 (v0.1 triangle configuration), D-089 (self-contained forks)
#
# Tile scale (D-066): tile_count_* are SIM tiles (0.5m each).
# 1540 visual tiles (D-025) = 3080 sim tiles.
#
# triangle_id values are authoring placeholders (0).
# The instantiation engine overwrites them with
# TriangleId::from_seed_and_roles(world_seed, &roles) at runtime.
slug: "logistics-hub"
display_name: "Sova Station Logistics Hub"
description: >
The terminal's operational core — cargo processing, documentation,
and the informal relationships that keep goods moving off-manifest.
A functional cluster of four NPCs controlling access to the station's
primary freight throughput.
roles:
- role_id: "logistics-manager"
required_traits:
- Bold
- Cautious
skill_focus:
- Persuasion
- Observation
relationship_constraints:
- with_role: "dock-worker"
kind: Superior
required_trust:
min: 0
max: 5
- with_role: "ring-contact"
kind: Colleague
required_trust:
min: -5
max: 2
- with_role: "security-guard"
kind: Superior
required_trust:
min: 1
max: 5
routine_template:
- phase: morning
location: "terminal-office"
activity: "documentation-review"
- phase: afternoon
location: "terminal-cargo-bay"
activity: "cargo-inspection"
- phase: evening
location: "terminal-office"
activity: "end-of-day-reports"
- role_id: "dock-worker"
required_traits:
- Honest
- Social
skill_focus:
- Technical
- Observation
relationship_constraints:
- with_role: "logistics-manager"
kind: Subordinate
required_trust:
min: -2
max: 4
- with_role: "ring-contact"
kind: Colleague
required_trust:
min: -4
max: 0
routine_template:
- phase: morning
location: "terminal-cargo-bay"
activity: "freight-handling"
- phase: afternoon
location: "terminal-cargo-bay"
activity: "freight-handling"
- phase: evening
location: "bar-last-shift"
- role_id: "ring-contact"
required_traits:
- Deceptive
- Social
skill_focus:
- Stealth
- Persuasion
relationship_constraints:
- with_role: "logistics-manager"
kind: Colleague
required_trust:
min: -5
max: 2
- with_role: "dock-worker"
kind: Colleague
required_trust:
min: -4
max: 0
routine_template:
- phase: morning
location: "terminal-cargo-bay"
activity: "oversight"
- phase: afternoon
location: "maintenance-corridor"
- phase: evening
location: "bar-last-shift"
- role_id: "security-guard"
required_traits:
- Cautious
- Honest
skill_focus:
- Combat
- Observation
relationship_constraints:
- with_role: "logistics-manager"
kind: Subordinate
required_trust:
min: 1
max: 5
routine_template:
- phase: morning
location: "terminal-entrance"
activity: "access-control"
- phase: afternoon
location: "terminal-cargo-bay"
activity: "patrol"
- phase: evening
location: "terminal-entrance"
activity: "access-control"
space:
tile_count_min: 30
tile_count_max: 80
sightline_zones:
- name: "loading-floor"
radius: 8 # 4m clear sightline across the loading area
- name: "reception-desk"
radius: 4 # 2m clear sightline at the desk
- name: "cargo-staging"
radius: 6 # 3m clear sightline in staging area
privacy_level: SemiPrivate
traffic_pattern: Destination
triangles:
- triangle_id: 0
roles:
- "ring-contact"
- "dock-worker"
- "logistics-manager"
conflict_type: ResourceCompetition
interest_axes:
- Want
- Secret
- Relationships
relationship_constraints:
- with_role: "dock-worker"
kind: Subordinate
required_trust:
min: -2
max: 2
- triangle_id: 0
roles:
- "logistics-manager"
- "security-guard"
- "ring-contact"
conflict_type: AuthorityChallenge
interest_axes:
- Relationships
- Tolerance
- Secret
dialogue_pools:
- location: "the-terminal"
roles:
- "logistics-manager"
- "dock-worker"
- "ring-contact"
- "security-guard"
- location: "terminal-cargo-bay"
roles:
- "dock-worker"
- "ring-contact"
cross_template_links:
- from_role: "dock-worker"
to_template_slug: "last-shift-bar"
relationship: Colleague
- from_role: "ring-contact"
to_template_slug: "last-shift-bar"
relationship: Colleague