Files
jpmschweitzerandClaude Opus 4.8 943f2e7749 docs(workshops): add decision_refs provenance frontmatter (pql migration phase 5)
Workshop -> decision provenance was prose-only. Adds a `decision_refs:` YAML
frontmatter list (the confirmed D-records each workshop-outcomes.md touches,
filtered against the governance decision set) to all 17 workshop outcomes; the two
that lacked frontmatter (commodity-catalog, system-economic-specialization) get a
minimal block. pql indexes the list and `SELECT fm.decision_refs` round-trips it, so
"which workshops touch D-NNN" is answerable via SELECT + filter or `pql search`.

decision_refs is a relevance signal (decisions a workshop discusses/produces), not a
strict authorship claim — historical bare refs aren't disambiguated. Generated wiki
read-only sections are left untouched.

Noted in pql-requirements #5: 1.6.2 has no working DSL operator for frontmatter
list-membership (`~`/`contains` error, `in` matches nothing), so membership queries
need a client-side filter for now.

Reproducible via tooling/pql-migrate/add_workshop_provenance.py (idempotent).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 13:06:33 +02:00

6.8 KiB
Raw Permalink Blame History

title, description, type, status, sprint, ticket, created, decision_refs
title description type status sprint ticket created decision_refs
Sprint 28 Character Visuals Workshop — Outcomes Decisions, resolved questions, and deliverables from the Sprint 28 character visuals planning workshop (ticket #684) workshop-outcomes complete 28 684 2026-03-17
D-019
D-033
D-146
D-148
D-149
D-150
D-151
D-152
D-153
D-154
D-155
D-156
D-157

Sprint 28 Character Visuals Workshop — Outcomes

Ticket: #684 Date: 2026-03-17 Participants: Araminta (art direction), Gestalt (systems), Tyre (technical), Ozzie (player experience), Nigel (replayability), Qatux (documenter), SI (project manager) Facilitator: Jeroen (project lead) Rounds: 2 (Round 3 was spec sign-off; specs written by Qatux)


Summary

This workshop resolved the foundational visual architecture for The Settled Reach characters. The major outcome is a shift from the previous approach (2D pre-rendered sprites at a shallow art-convention tilt) to live 3D compositing at a 30° real camera tilt with 45° diamond-grid map rotation. This change was driven by a functioning prototype spike that demonstrated 3D placeholder characters (CSG shapes) reading legibly as people at isometric scale.

The workshop produced 10 new D-records (D-148D-157), two spec documents, and this outcomes file.


Decisions Made

Architecture decisions (decisions/architecture.md)

ID Title Summary
D-148 30° low-angle camera with 45° map rotation Supersedes D-019. Default gameplay camera. Real Camera3D, not faked in art.
D-149 3D characters rendered live in scene Not pre-rendered sprites. CharacterCompositor replaces Sprite2D in EntityRenderer.
D-150 Character outline — inverted hull method Uniform dark gray (#1a1a1a). GPU vertex extrusion. Baked into billboard at LOD Tier 2.
D-151 Direction count — 8 server / 4 client visual groups Server tracks 8 facings. Client renders 4 visual groups (Sprint 28). West mirrors East.
D-152 Character LOD — performance-driven budget Frame budget threshold, not distance or count. Three tiers. Pause = full detail everywhere.

Scope decisions (decisions/scope.md)

ID Title Summary
D-153 Player not visually distinct from NPCs Same models, same outlines. Distinction comes from gear only.
D-154 Outline not a relationship indicator Uniform dark always. D-033 color palette valid in insert/perception mode only.
D-155 Character editor: cardinal rotation only N/E/S/W buttons. No free-spin. Matches the 4 visual groups.
D-156 Faction colors = narrative, not visual No faction color slot in compositor. Clothing choices emerge from character, not faction.
D-157 Game start = alarm clock / fade from black Not a camera pull-back from editor. Editor is a separate context.

Amended decisions

ID Change
D-019 Marked [SUPERSEDED by D-148]
D-033 Amended: entity relationship color valid in insert/perception mode only; not on character outline in normal gameplay

Round 1 Proposals — Overruled

The following Round 1 proposals were overruled by Jeroen and are recorded here for the archive. They should not be revisited without explicit project lead direction:

Proposal Overruled by
Relationship color on outlines D-154 — outlines are uniform dark always
Player character visually distinct (protagonist glow/tint) D-153 — player = NPC visually
Free-spin in character editor D-155 — cardinal buttons only
Camera pull-back from editor into game world D-157 — alarm clock / fade from black
Faction colors as visual system D-156 — narrative emergence only

Open Questions Resolved

Q Question Resolution
Q1 4 or 8 directions? D-151: 8 server, 4 visual groups (Sprint 28). Hybrid approach.
Q2 Large crowd performance? D-152: Performance-driven LOD. Progressive degradation outward from player. Pause = full detail.

Remaining Open Questions / Flags

These were identified during the workshop but not resolved. They are implementation concerns for the client and visual teams:

Item Owner Notes
Exact server-facing → visual group snap mapping Tyre Depends on camera/grid orientation. Confirm in compositor implementation.
Expression overlay: mesh swap vs. morph target Tyre Cost/quality tradeoff. Decide in #693.
Clothing mesh per body type vs. compositor scale Tyre Separate .glb per body type is simpler; scaling risks clipping. Decide in #693.
Stocky body type in Sprint 28 Araminta Stretch goal — drop if time pressure.
D-146 + D-149 interaction Qatux flag D-146 says "tile-scale sprite" for editor preview; D-149 says live 3D rendering. Compatible if editor uses SubViewport with the live compositor. Do not reopen D-146.

Deliverables Produced

File Description
docs/design/character-visuals-spec.md Complete spec: layer stack, color regions, body/face/hair types, direction system, outline, LOD
docs/design/compositor-api-spec.md Godot compositor data model, node architecture, public API, EntityRenderer integration
docs/workshops/character-visuals/workshop-outcomes.md This file
docs/discussions/round-22-sprint28-character-visuals.md Workshop discussion archive
decisions/architecture.md D-148D-152 added
decisions/scope.md D-153D-157 added
decisions/perception.md D-019 superseded, D-033 amended

Downstream Impact

Tickets unblocked by this workshop

  • #699 (visual team): 3D body type meshes — now have full spec
  • #698 (client team): 3D character editor — now has confirmed editor spec
  • #700 (client team): CharacterCompositor implementation — now has full API spec
  • #685 (wireframe): character creation screen — can now proceed with confirmed direction system and editor spec

Note: tickets #686#692 (sprite-based character assets) were cancelled by SI following the shift to live 3D rendering (D-149).

Tickets that may need re-scoping (flag for SI)

  • Any tickets referencing "sprite" for character rendering should be reviewed against D-149
  • The old placeholder-art-spec-v01.md is superseded by character-visuals-spec.md for character rendering decisions
  • D-019 was referenced in several briefings — Qatux to update affected briefings (Araminta, Tyre)

Camera angle change (D-019 → D-148) impact

  • All in-progress art assets should be validated at 30° tilt (not top-down, not 45°)
  • Vision cone and LOS math: unaffected (server-side, 2D, unrotated space)
  • Tile grid and world coordinates: unaffected (45° rotation is visual only)
  • Briefing files: docs/briefings/araminta.md, docs/briefings/tyre.md need camera angle update