Commit Graph
2514 Commits
Author SHA1 Message Date
jpmschweitzer dc982d3c53 chore(meta): set team copy on T-1115 2026-07-16 12:16:30 +02:00
jpmschweitzer 6d97a3cafc chore(meta): T-1074/T-1075 to review — PR #177 up 2026-07-16 11:49:38 +02:00
jpmschweitzer 8b50070cf3 chore(meta): file T-1115 — corp-placement wiki coverage gaps (T-1074 follow-up) 2026-07-16 10:30:33 +02:00
jpmschweitzer 27a78fad7f chore(meta): assign T-1074/T-1075 to dudley 2026-07-16 09:34:35 +02:00
jpmschweitzer 1f958962cc chore(meta): activate T-1074/T-1075 settlement-dataset batch — Si refinement + gap resolutions appended 2026-07-16 09:04:41 +02:00
jpmschweitzerandClaude Fable 5 4113107121 chore(meta): close Atlas-viewer batch — T-960/T-970/T-949 done (PR #176 merged)
Review round processed in full (12 findings + 2 recommendations, no retractions); merged and gate-verified on main; worktree + branch torn down.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 18:03:38 +02:00
jpmschweitzer aa27e8ce1f Merge remote-tracking branch 'origin/atlas-layer-viewer' 2026-07-14 17:49:06 +02:00
jpmschweitzerandClaude Fable 5 3304ee30da fix(simulation): PR #176 review round — all 12 findings + 2 recommendations addressed
H1 demux: ShapeProbe defensive multi-shape rejection (union frames now Err, not first-match; +2 tests) and doc claim made honest. H2/T1 SystemIndex.reset_test_state() folded into SimBridge.reset_test_state() (load() inline per autoload rule) + has_pending_request() accessor. H3 no-op tests now assert the replay flag both directions. H4 retry test actually ingests a failure and asserts the retry semantic. H5 error fixture uses the normalized status string. H6 bridge_tcp e2e sends all five frame shapes over real TCP (star-map + city-names buffers asserted). H7 positive replay-on-CONNECTED test via the test_local_bridge test-mode-flip precedent (stub bridge captures + decodes the request bytes). H8/T2 stale PLACEHOLDER doc replaced with the confirmed contract. H9 is_capital doc matches the COALESCE reality. T-r1 demux ceiling written down (next shape = tagged envelope). T-r2 AtlasLayerResponse governance ceiling comment. Lead item: the four cargo-fmt-formatted files from the gate round are now committed (layer_proxy/plugin/bridge-mod/main). H10 note for the record: the 13 snapshot_*.msgpack fixtures in commit 845737617 were regenerated because they were stale against their own generator (pre-existing version-key removal) — verified harmless, no client reads that key.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 17:31:15 +02:00
jpmschweitzerandClaude Fable 5 8016abe0c7 chore(meta): T-960/T-970/T-949 to review — PR #176 up; T-1114 gdlint-debt filed
Atlas-viewer batch shipped through the gate (2946/2946 gdUnit, full cargo suite, golden untouched). T-1114: 39 pre-existing client gdlint warnings tracked under T-1037.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 16:36:44 +02:00
jpmschweitzerandClaude Fable 5 9c990a0733 fix(tooling): cargo fmt + godot-cold-parse cache restore (gate round)
fmt: atlas_data_proxy.rs test code. godot-cold-parse: the cold parse re-seeds the class cache WITHOUT addon classes (gdUnit4's GdUnitTestCIRunner missing), leaving tests/run-godot unable to start (0 tests / 355ms — caught by the pre-push gate running the suite right after this script). The script now restores a full cache via a final --import pass before exiting; the cold verdict is unaffected.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 16:29:02 +02:00
jpmschweitzerandClaude Fable 5 845737617c feat(client): atlas roads/settlements overlays + legend + server-API data delivery (T-960, T-949)
T-960: gen_l2_roads (MaintenanceAuthority-colored polylines, rail styling, junction markers) + gen_l3_settlements (size-scaled markers, capital shape, name labels) overlays — cities render on generated bodies for the first time; left-side generation legend panel (D-226 item 3, data-driven per-overlay spec, implant component library); protocol.gd decodes road_graph/settlements + the two new response types. T-949: system_index/atlas_app/overview_screen migrated off the direct star_map_data.json read to StarMapRequest over the bridge (loading state + replay-on-connect, no silent file fallback); atlas_viewer _load_markers requests CityNamesResponse for non-Sol bodies; Sol keeps the legacy authored markers.json geometry read (D-236/T-1073, load-bearing guard). Lead fix: _send_star_map_request now carries the same guard as request_star_map — the autoload's _star_map_wanted leaked across gdUnit suites and the unguarded replay-on-CONNECTED crashed 8 pre-existing flow tests on a Nil bridge; reset_test_state clears the flag. Fixtures regenerated via gen_fixtures (road/settlement samples). Full suite 2946/2946.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 15:45:54 +02:00
jpmschweitzerandClaude Fable 5 37881acba0 feat(simulation): atlas proxy layers + data-delivery endpoints (T-960, T-949)
T-960: RoadGraphLayer (L2 edges/junctions, MaintenanceAuthority, rail flag, named routes) + SettlementLayer (name/position/size-class/is_capital/is_port from T-955 placements) as new Option fields on AtlasLayerResponse — T-1046 precedent; layer_proxy doc comment corrected (cascade runs through RoadGraph, client up_to ignored). T-949: new StarMapRequest/StarMapResponse (raw JSON passthrough of the star_map_data.json bake) + CityNamesRequest/CityNamesResponse (atlas_city_names via CityContextReader) with defense-in-depth Sol exclusion (GJ-0 system id OR settlement_wave='origin', D-236). Inbound demux extended with mandatory boolean discriminator fields (serde ignores unknown fields — optional-shape sniffing would be ambiguous); AtlasLayerRequest unchanged. SimBridge trait +2 methods, implemented on TcpBridge + LocalBridge. CityPlacement/CityRecord gained name/population/is_capital (BodyWorldState cache-hit path stays DB-free). ~30 new unit tests incl. demux disambiguation + Sol branches; gen_fixtures extended for road/settlement samples.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 15:45:25 +02:00
jpmschweitzerandClaude Fable 5 6bda9f1697 feat(simulation): auto-pause sim on implant-fullscreen — inspection substrate (T-970)
D-226 layer 1. World-advancing phases gated on pause: Movement/Storyteller/Knowledge/TickAdvance set-gated via sim_not_paused; Simulation + Economy gated per-system at their registration sites — collect_sound_events and serve_econ_state_query stay unconditioned (transient-buffer clear + paused-allowed query; set-gating Simulation leaked a stale tick-7 footstep into frozen snapshots — caught by golden_suite, fixed without touching the fixture; regression test encodes the bug shape). New PlayerAction::AutoPause/AutoResume + AutoPauseState resource implement Option A reconciliation: auto-resume only fires if auto-pause caused the pause; manual pause and Half rate survive implant open/close. PauseParams SystemParam bundle keeps process_player_input under the 16-param ceiling (BookmarkInputParams precedent). Client: HudGroups.gameplay_occluded now sends AutoPause/AutoResume via send_named_action; 5 gdUnit tests + 7 Rust tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 15:44:56 +02:00
jpmschweitzerandClaude Fable 5 672a583e64 docs(governance): Atlas-viewer batch refinement — D-226/D-191/D-236 amendments + ticket rescopes
Si audit rulings (Jeroen, 2026-07-13): D-226 amended (shipped always-toggleable overlay pattern ratified, gen_l0 dropped, legend stands, no tile-level Atlas map); D-191 + CLAUDE.md Phase-4 wording aligned; D-236 amended (Oort-cloud gateway station = concrete player-access cap; Sol never in deterministic runs). T-960 rescoped (L2 roads + L3 settlements + legend in; L4/climate/L5 out), T-949 scoped non-Sol + D-010 citation fix, T-970 refined (Paused gates only advance_tick; economy split; Option A manual-pause reconciliation). New: T-1112 (L4 coarse-footprint design), T-1113 (climate cascade wiring). D-254 claim unused (D-236 already covered Sol).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 23:53:59 +02:00
jpmschweitzerandClaude Fable 5 81e4cb25d0 chore(meta): close T-1099 estate-cleanup tree — PR #175 merged
Initiative + 5 epics + 3 tasks done. CLAUDE-CLEANUP.md brief executed in full and deleted; follow-ups live as T-1108-T-1111 under T-1037.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 22:52:45 +02:00
jpmschweitzer da0b140ae7 Merge remote-tracking branch 'origin/claude-estate-cleanup' 2026-07-13 22:47:04 +02:00
jpmschweitzerandClaude Fable 5 6c078fbec4 fix(meta): PR #175 review round — all 14 findings addressed
H1 godot-cold-parse exit-code guard (+bonus: import-pass for cold checkouts, found live); H2 pr-watchlist-diff loud registry failure; H3/T1 deny list :* normalization (add-only) + uniform allow syntax; H4/T7 helper-script allows; H5 get_api_key env-only (config.json is tracked — no secret fallback); H6 TEAM.md active/standby split; H7 troblum solo-profiling note; H8 pr-review frontmatter Task->Agent; H9 conventions doc taxonomies fixed vs real tree; T2 ask-gate leash files (settings/hooks) in tracked settings; T3 R-013 cross-reference; T4 governance README index regenerated (pql decisions sync); T5 dudley briefing ACTIVE; T6 pr-process step 7 run-from-main.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 22:11:36 +02:00
jpmschweitzerandClaude Fable 5 1e7aa8fe63 chore(meta): T-1099 tree to review — PR #175 up; follow-ups T-1108-T-1111 filed
Estate-cleanup epics T-1100-T-1104 (+tasks) moved to review with PR #175. Follow-ups under maintenance T-1037: T-1108 image-gen --aspect smoke test, T-1109 workshop scout-critic decision, T-1110 body-ID moon-suffix standard, T-1111 renderer/README staleness.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 17:18:14 +02:00
jpmschweitzerandClaude Fable 5 f2d1b2601a fix(tooling): tea-comment resolves tea from PATH or linuxbrew keg
Agent shells often miss the brew shellenv (clide FR-1), so bare 'tea' 127s. The wrapper now falls back to /home/linuxbrew/.linuxbrew/bin/tea.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 17:17:15 +02:00
jpmschweitzerandClaude Fable 5 c9d9b56933 docs(rules): tea pr create must omit --repo (T-1102)
An explicit --repo slug makes tea skip local-repo setup, but pr create unconditionally needs the local repo handle and dies with 'local repository required' — the documented 'all flags explicit' rule was the trap. Root-caused shipping PR #175. tea-cli.md + pr-process template fixed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 17:15:38 +02:00
jpmschweitzerandClaude Fable 5 9a0d42c5d3 chore(agents): roster sweep — arm discussion agents, integrate inigo, drop tiger (T-1104)
Cleared stale STANDBY markers, swept dead DISCUSSION.md pointers, disambiguated overlapping personas, corrected asset-gen paths. Armed 7 discussion agents (gestalt/gore/mellanie/miri/nigel/ozzie/paula) with Bash so they can run the pql preamble. Integrated inigo into the roster + briefing (audio, standby). Removed tiger — localization dropped from scope (R-013). Part of T-1099.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 12:17:08 +02:00
jpmschweitzerandClaude Fable 5 33c14531da chore(skills): asset/tooling skills sweep — atlas/glb-gen/image-gen/audio-gen/sprite-gen/bug-report/ticket (T-1103)
Live-command corrections (atlas corridor-status, real body-ID naming), failure-proofed glb-gen/sprite-gen render scripts, Trellis API reference extracted. image-gen: fixed the output-path bug and de-forked the local image_connector.py to the canonical tooling/db/ copy. ticket skill consolidated to point at ticket-cli.md (setparent-none fix applied there too). Part of T-1099.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 12:16:49 +02:00
jpmschweitzerandClaude Fable 5 32021bd550 chore(skills): workflow skills sweep — whats-next/workshop-start/pr-review/pr-process (T-1102)
De-sprint pr-review, dynamic repo-root paths, gate-aligned checks; workshop-start Agent-tool rename + roster fixes (IMPROVEMENTS.md folded in and removed); whats-next pql-durability notes; pr-process orphan-check + full-suite alignment. New helper scripts tooling/godot-cold-parse + tooling/pr-watchlist-diff (allowlist entries deferred to first-use per permission policy). Part of T-1099.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 12:16:34 +02:00
jpmschweitzerandClaude Fable 5 e6fd51161a chore(skills): refresh clide from canonical + preserve d2/frame0 tailoring (T-1101)
clide SKILL.md re-synced to the clide repo's canonical copy (picks up the dock/D-87 slot; de-forks). d2-diagram/frame0-wireframe/skill-create deletions landed in the prior commit; their repo-specific tailoring is preserved in docs/design/diagram-wireframe-conventions.md. Part of T-1099.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 12:16:20 +02:00
jpmschweitzerandClaude Fable 5 0a9b0d00a0 chore(config): settings.json + .gitignore hygiene (T-1100)
Remove dead docs-search allow; promote godot4/gdformat/atlas/validate-ron; add repo-tree Edit/Write + worktree-setup allows. .gitignore ignores .claude/scheduled_tasks.lock/.json. Part of T-1099 (Claude estate cleanup).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 12:14:27 +02:00
jpmschweitzerandClaude Fable 5 2a0ac54109 chore(meta): scaffold estate-cleanup initiative T-1099 + 5 epics (CLAUDE-CLEANUP.md)
T-1099 under T-1037; epics T-1100 (settings/security), T-1101 (skill
removals), T-1102 (workflow skills), T-1103 (asset/tooling skills),
T-1104 (agent roster). Executing the 2026-07-02 .claude review this session.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 15:44:46 +02:00
jpmschweitzerandClaude Fable 5 8b76d8c4a8 feat(config): worktree-setup helper + skill notes for worktree gotchas
tooling/worktree-setup <branch>: one command to create a usable worktree —
adds it under the gitignored .worktrees/, symlinks .venv (so make/python
tooling resolves .venv/bin/python), relies on the post-checkout hook for the
pql --vault rebuild, and prints the in-worktree reminders. Tested end-to-end
(venv linked, pql.db populated on create).

whats-next §3c now calls the helper and documents the three in-worktree
gotchas (pql --vault, tea-from-main, read-only content agents); tea-cli.md
notes tea must run from the main checkout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 15:28:28 +02:00
jpmschweitzerandClaude Fable 5 0fe6458254 fix(config): post-checkout resolves pql --vault to the worktree, not main
pql finds the vault by walking up for a .git *directory*; a linked
worktree's .git is a *file*, so a bare `pql plan rebuild` from a fresh
worktree resolved to the MAIN checkout and left the worktree's own pql.db
empty — breaking ticket/decision reads inside worktrees (hit during the
Layer-5 batch; agents had to rebuild by hand). Pass --vault
"$(git rev-parse --show-toplevel)": the worktree root in a worktree, the
repo root on main (no-op there). Upstream pql bug filed as FR-4.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 15:03:32 +02:00
jpmschweitzerandClaude Fable 5 2bc590c1ba chore(meta): close Layer 5 batch — T-988/T-959/T-1097/T-1057 done (PR #174 merged)
T-1098 (interstitial fill) re-parented to T-750 as the tracked follow-up.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 14:54:54 +02:00
jpmschweitzer a40f0e5413 Merge remote-tracking branch 'origin/layer5-tile-fill' 2026-07-11 14:53:40 +02:00
jpmschweitzerandClaude Fable 5 b8e0b1b660 fix(db): harden architecture_zone_bias axis-value validation (PR #174 review)
H1: guard that each axis value is a {token=weight} table before .items() —
a scalar (wall = 15000) or the array shape (wall = ["steel_frame"], a
plausible copy-paste from the sibling catalog's visual_bundle) now yields a
clean V-TT-06 error instead of a bare AttributeError. Mirrors the isinstance
guards already on zone_map and axes.
H2: exclude bool from the positive-integer weight check (weight = true is an
int subclass, previously slipped through as 1) — matches the guard
populate_color_register_bands already applies to its own values.
Two new ZoneBiasValidationTests cover both branches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 13:22:40 +02:00
jpmschweitzerandClaude Fable 5 5a31a50874 chore(meta): Layer 5 batch to review (PR #174) + T-1098 interstitial follow-up
T-988/T-959/T-1097/T-1057 → review. T-1098 filed (interstitial-fill,
deferred slice of T-959 with design brief).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 10:34:41 +02:00
jpmschweitzerandClaude Fable 5 204359927a feat(simulation): BuildingExteriorTag grammar + Layer-5 material fill + ops-surface (T-988/T-959/T-1097)
T-988 — BuildingExteriorTag {wall_material, roof_form, facade_rhythm,
setback_tier, color:HsvColor, street_surface}. New trait_exterior.rs:
3-step era-free derivation (visual_bundle filter -> zone-bias weighted
pick -> density->setback), color seed-sampled within the register band.
Resolved at GenerateSkeleton plan time (T-994 precedent), frozen on
BuildingPropertyTag; FillChunk only reads it. Four append-only
integer-discriminant enums (WallMaterial/RoofForm/FacadeRhythm/
StreetSurface), unknown token -> axis Generic + warn. trait_catalog_reader
now parses visual_bundle + the two new tables (OnceLock-cached).
New SeedDomain::TraitExterior (per-axis sub-chains — no cross-field
correlation).

T-959 — FillChunk reads the frozen exterior tag: wall_material/roof_form
onto Wall/Roof shell voxels (FilledChunk.surface_material). Additive,
ShellVoxel untouched, all shell tests pass. (Interstitial-fill-from-setback
split to T-1098 — needs a FillChunk block-metadata + geometry design pass;
nothing consumes FillChunk until Phase 5.)

T-1097 — BlockSkeleton.interstitial_character (OpenSpace|OperationsSurface),
D-233 bulk-driven: bulk-industry blocks' non-roofed remainder tags as built
economic infrastructure, not generic open space.

cargo check --all-targets clean; 1666 lib tests pass; no golden impact
(harnesses top out at CascadeLayer::RoadGraph, unreachable by Layer 4/5).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 09:42:20 +02:00
jpmschweitzerandClaude Fable 5 ba781f9324 feat(db): architecture zone-bias + color-register-band tables + V-TT-06/07 (T-988)
Ratified content baked into systems.db as two new tables:
- architecture_zone_bias (57 rows): sparse per-template, per-zone_type
  token-weight overrides (integer bps), Miri-authored — the D-235 step-2
  zone bias. V-TT-06: every token must exist in that template's own
  visual_bundle axis.
- color_register_bands (28 rows): per color_register integer HSV bands
  (hue centidegrees, sat/val bps), Araminta-authored. V-TT-07: full
  catalog coverage + valid integer bounds (min<max, in range).

Both TOMLs registered in generator_sources (stamp coverage); DDL in
systems-schema.sql + migration.py; validation wired into import_economics
steps 18/19 and test_traits.py failure-branch units (make test-tooling).
systems.db regenerated + re-stamped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 09:03:19 +02:00
jpmschweitzerandClaude Fable 5 14b2eb69c5 docs(governance): D-253 region transient state model + Q-102/103/105/109 triage (T-1057)
D-253 (resolves Q-105): the region owns transient clock-bound surface
state — four phase terms (diurnal/tidal/weather/seasonal), memoized-by-
bucket absolute-clock evaluation, edge-fuzzed per-tile inheritance,
integer-deterministic (D-010), state-model-only (no gameplay/rendering).
Discharges the T-1030/T-1078/T-1082 forward-contracts. Diurnal promoted to
a first-class term (user-confirmed).

Q-102 resolved-in-practice (D-246 voxel_mosaic + D-228 override stack);
Q-103 + Q-109 deferred to Phase 5+ with dated triage notes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 09:02:48 +02:00
jpmschweitzerandClaude Fable 5 b25860dd04 chore(meta): activate Layer 5 batch — T-959/T-988/T-1097/T-1057 in_progress
T-959 rescoped (objects descoped, title updated); T-1097 (ops-surface
fill, D-233) split out as a new child; T-1057 gates T-959 (blocker edge);
recovered T-1057's lost description + triage dispositions. README index
regen reflects Q-049 resolution (PR #173).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:45:20 +02:00
jpmschweitzerandClaude Fable 5 d3853475ef docs(skills): whats-next adopts pql 1.11.0 --fields projection (FR-1 landed)
ticket list now omits description by default (D-27 upstream); batch
selection uses --fields id,type,parent_id,priority,status,title — the
238KB phase-subtree dump is now 23KB, no output spill.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 17:20:12 +02:00
jpmschweitzerandClaude Fable 5 39313bc854 chore(meta): close T-977 batch — T-992/T-994/T-995/T-1003 + T-977 done (PR #173 merged)
T-959 (Layer 5 Chunk→Tile fill) is now unblocked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 15:57:45 +02:00
jpmschweitzer efe4596e58 Merge remote-tracking branch 'origin/architecture-flavor-pipeline' 2026-07-08 15:57:08 +02:00
jpmschweitzerandClaude Fable 5 ebe8742469 fix(simulation): PR #173 review round — all 9 findings addressed
T1: heritage corridor_pool excluded from the ordinary phase-1 lottery and
coverage repair (D-232 reserves the heritage sub-pool for the remoteness
dial); reachable via hero pin, necessity swerve, and the T-1003 heritage
pool only. 3 new tests.
T2+H4: coverage repair no longer grows trait_selection past K when all
slots are pinned (phase-2 necessity swerve serves the type instead);
runtime warn when authored pins exceed K; V-TT-05 importer guardrail
bounds pins per body at 5 (max ComplexityTier K). 2 new tests + 2 python
tests.
H1: body-level dispatch aggregation extracted to pure
aggregate_body_dispatch_inputs + tested directly (union mix, MAX
prosperity/K); threading test asserts identical vocabulary/pools across
co-body settlements with per-settlement swerve rates. 2 new tests.
H2: tooling/economy-db/test_traits.py — 14 stdlib unittest cases over
V-TT-03/04/05 failure branches, wired into make test-tooling.
H3: hard-gate JSON parsers now tracing::warn on malformed blobs (silent
gate-widening) matching the sibling map parsers.
H5: catalog read memoized (OnceLock) — SQL+parse once per server run,
bias stays per-body. 1 new test.
T3: TraitDistrict seed-domain doc aligned with the two-level derive chain.
T4: D-225 misattribution dropped from the reader module doc.

systems.db regenerated + stamped (traits.py is a stamped source).
Gates: full cargo test 1638 green (goldens intact), clippy -D warnings,
ruff, make test-tooling (now incl. the traits units).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 12:18:14 +02:00
jpmschweitzerandClaude Fable 5 c02628ca2f chore(meta): T-992/T-994/T-995/T-1003 to review — PR #173 (architecture-flavor pipeline)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 10:01:50 +02:00
jpmschweitzerandClaude Fable 5 034791602b chore(engine): bump crossbeam-epoch 0.9.18 -> 0.9.20 (RUSTSEC-2026-0204)
Invalid pointer dereference in fmt::Pointer for Atomic/Shared null
pointers; flagged by cargo deny in the pre-push gate. Transitive via
rayon; lockfile-only change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:24:14 +02:00
jpmschweitzerandClaude Fable 5 90655382eb feat(simulation): D-232 three-phase trait draw + deviation/swerve system (T-994, T-1003)
T-994 — three-phase draw replacing the flat splitmix64 flavor pick:
- Phase 1 body K-draw (trait_draw.rs): hard gates -> soft weights (two-part
  geographic_sector join, PR #148) -> SeedChain::for_body-seeded weighted
  draw of K (5/3/1/0 by ComplexityTier), pins count toward K, coverage-aware
  over a new body-level district-type-mix aggregate threaded into
  CityGenerationContext at L3->L4 dispatch.
- Phase 2 district-dominant pick keyed by the D-243 2048m District cell —
  settlements sharing a cell independently derive the identical template.
  Resolved at dispatch, never in FillChunk (T-987 stays pure).
- trait_catalog_reader.rs: systems.db reader for trait_templates +
  atlas_body_trait_bias (D-225 resource pattern), registered in main.rs
  with graceful degradation.
- BlockSkeleton carries district_type; assign_block_tags is a pure lookup.

T-1003 — deviation/swerve system (trait_swerve.rs):
- ArchitectureFlavorRef is now InVocabulary(u8) | Swerve(tag).
- Rare per-building wildcard: foreign-import pool (other corridors +
  cross_corridor) driven by Epicenter/Passage tier, mixed faction,
  road-graph degree; heritage-callback pool (own-corridor heritage) driven
  by isolation, remote tier, founding_age_years. Integer bps, base 100,
  cap 300 per driver — placeholder constants pending calibration.
- Sparsity escape hatch = same mechanism, necessity-triggered at the
  phase-2 pick (deterministic max-weight over the hard-gate-eligible pool).
- New SeedDomains: TraitVocabulary(13) / TraitDistrict(14) / TraitSwerve(15).

Governance: D-232 amended (district pinned to the D-243 2048m tier — the
D-222/D-243 redefinition was never captured; swerve driver mappings +
placeholder rates recorded), D-229 flavor_ref field updated to the enum
shape, D-235 amended (T-995 vocabulary ratification note; rides here due
to single-file entanglement).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:16:47 +02:00
jpmschweitzerandClaude Fable 5 766ceb436c feat(db): ObjectTag registry ratified + importer validation — resolves Q-049 (T-995)
The shipped 28-tag catalog palette is canonical (user ratification,
/whats-next refinement 2026-07-07). New machine-readable registry
wiki/economics/object_tag_vocabulary.toml (wall/roof/facade/street axes +
4 generic fallback terminals, Miri/Araminta co-owned header). Importer
validation in economy_import/traits.py: V-TT-03 (every catalog
allow/block/visual_bundle tag exists in the registry, axis-checked) and
V-TT-04 (fallback graph: non-generics declare a parent, chains acyclic,
resolve to a generic — absorbs T-1004's Phase-4 slice). Registry added to
generator_sources (stamp coverage); systems.db regenerated + stamped.
Q-049 marked Resolved — divergence is now a loud build failure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:16:20 +02:00
jpmschweitzerandClaude Fable 5 a6c2ff4740 docs(assets): Gemma architecture-flavor methodology — bounded corpus distillation (T-992)
Stage-1 register selection over the current wiki tree (Q-107 assumption
stated), stage-2 TEXT-FIELDS-ONLY structured proposals (tag, label,
cultural_description, candidate allow/block tags) — humans own all numeric
eligibility/weights (catalog-wide CI guardrails can't be satisfied
per-template); Araminta owns visual_bundle. No era-bands (Q-106 dissolved);
trauma_decay_rate stale-schema note. Mirrors docs/gemma-naming-methodology.md
incl. the sr-voice-tooling serving pattern. Worked example: GJ-4053 granite
dry-stack accept; GJ-1248/GJ-285/GJ-588 as correct stage-1 rejections.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:15:56 +02:00
jpmschweitzerandClaude Fable 5 bc5043feb2 fix(skills): whats-next 1b uses native pql --status filter, no python one-liner
Ad-hoc projections over pql output are the wrong layer — the compact-list
gap is filed upstream (pql FR-1, --fields projection). Until it lands,
use narrow pql invocations and Read spilled output files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 22:51:19 +02:00
jpmschweitzerandClaude Fable 5 a391e37714 fix(skills): whats-next creates worktrees under the repo root (.worktrees/), not the parent dir
The parent-dir pattern put worktrees outside the permission sandbox,
breaking agent file access. .gitignore already documented the in-repo
convention; the skill predated it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 22:40:29 +02:00
jpmschweitzerandClaude Fable 5 e097874587 chore(meta): refine + activate T-977 batch — T-992/T-994/T-995/T-1003 in_progress, T-1003 blocked by T-994, T-1004 parked to Phase 5
Si refinement round resolved 7 decisions: district-dominant = D-243 2048m tier
(build in T-994), draw at GenerateSkeleton, body-level coverage aggregate,
ratify shipped 28-tag palette (amend D-235), Gemma proposes text fields only,
swerve driver mappings pinned, T-1004 render mechanism deferred to Phase 5.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 19:19:09 +02:00
jpmschweitzerandClaude Fable 5 3d6dcc9d05 docs+fix: sidequest close-out — T-1095 head tint, design doc, wardrobe docs, changelog (T-1088/T-1089)
T-1095 fixed: template heads now receive the body's skin tone (same
treatment as seg_head) — _load_head passes tone.lit with a full-white
fallback mask through _attach_to_bone; without a mask sidecar the tint was
silently ignored, so untinted templates read grey against mid/dark tones.
Verified by lookbook render (head_001 on child, tone 6 — face matches arms).

Docs: the T-1088 locomotion design document committed to docs/design/ (the
sandbox code's 'design §' references now resolve in-repo); character-asset-
organization gains §11 Wardrobe Pipeline and sheds three stale claims (the
never-built indexed-greyscale mask plan, single-mask-per-asset for clothing,
the resolved multi-region open question); CHANGELOG carries the sidequest
entry; D-250 amended with the shipped cutaway-modes verdict (mode 2 default,
user-decided live).

Tickets: T-1088, T-1089, T-1095 closed; T-1096 filed (S9 live feel-tuning,
needs the user). The Fable-5 cascade exception is closed — the cascade
resumes at Phase 4 (T-750).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 14:15:56 +02:00
jpmschweitzerandClaude Fable 5 e709462a7b fix(assets): convex toe boxes on closed footwear — no more foot-shaped shoes (T-1089)
User review finding: sneakers/formal shoes/boots conformed to individual
toes (and toes poked the closed front). Root cause: the skin-conforming
clearance clamp ran AFTER toe smoothing and re-imprinted the original toe
bumps; boots also copied per-toe skin weights (ripple under flex). Fix:
shared base.convex_toe_box() — per-slice enclosing ellipse from the skin,
notch fill, projection onto the smooth cap (outside skin by construction),
extended rounded nose past the longest toe, uniform feathered ball-bone
binding so shoes flex rigidly at the ball joint. Style-parameterized
(sneakers roomy / formal sleek tapered / boots chunky). Re-authored x 11
bodies; QA all-green (worst 82px « 150 gate; residuals are collar/sole-edge
slivers, not toes). Lookbook shots re-rendered on the desktop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 12:59:00 +02:00