Commit Graph

101 Commits

Author SHA1 Message Date
kronic 07a07ec64d Docs: LANTERN — record operator decisions (all parked questions resolved 2026-07-14)
Build Phase 1 gym first; standing ★-review auth; build A0 material foundation now;
delete siege branches. Phase 1: manual aim (auto-target cut), 4 discrete ability buttons,
Harpooner yanks target-to-you, roadmap 5 Sparks. Fresh save epoch (no migration).
Dark-side contact = non-telegraphed chip. Lantern = free-position plant.

Locked into: operator-questions (resolved summary), Phase 1 spec (open forks -> resolved),
currency spec (fresh saves), world-model Build Spec (operator-resolutions block).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 08:33:38 -07:00
kronic 0e2d51146d Docs: LANTERN tone bible (Phase 7 register bounds) — commit the file linked by prior commits
The tone bible was authored during the autonomous run but slipped between commit batches;
several already-pushed docs (Phase 7 design, operator questions, session log B) link to it.
Wordless Wicks + lamp-morse; per-voice register bounds (Keeper/Siren/Selkie/Klabautermann/
Anchorite/berths); warmth-against-dread; gates all bark generation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 00:01:51 -07:00
kronic d9c383cf33 Docs: LANTERN Phase 6/7 design notes (finale + station) — per-phase coverage complete
- Phase 6 (finale): shelf-boss on the BossState/BossAISystem chassis (multi-phase reskin,
  signature-Spark drop); one scripted Serpent-tide via the world-model burn/un-pin + hazard
  director + loss-floor, Siren-forecast; Loudness-driven co-op scaling.
- Phase 7 (station/voices): the hub = the world-model permanent home pocket; Lamp meter =
  GoalProgress + visible growth; rack/bench/library/Bell reuse class-swap/sockets/culture/
  transit; Keeper (OnboardingSystem skin) + Siren (hydrophone) + lamp-morse; tone bible gates barks.
- Roadmap index now links all phase design specs (full slice designed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 00:00:39 -07:00
kronic d005f140db Docs: LANTERN roadmap index + Phase 4/5 design passes + session log B
- Roadmap_Lantern_Slice: Phase-0 status callout + doc index (all Phase-0 artifacts linked).
- Phase 4 (mutations): mostly a re-theme of the shipped boon overhaul (DR-047) + Gloam gating
  + Tallow fixing (persistence) + raw-socketing + culture library; salvage map + gate.
- Phase 5 (death/recovery): the split, stranded suits (deterministic relocation), body-carry,
  flame-share revive, the Tender solo valve, Selkie tariff; builds on the world-model
  in-pocket-death decision (C4); the slice's 2nd falsifiable-test half.
- Session log Part B: the autonomous design pass + the world-model review record.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 23:58:47 -07:00
kronic fc31d066d0 Docs: LANTERN Phase 0.3 world-model review-hardened — Build Spec + DR-049
Adversarial design review (wf_aa6fb661-e25; 22 agents, 0 failures) over the world-model
proposal + ground-truth code raised 18 findings (12 CONFIRMED + 6 PARTIAL, 0 refuted) and
caught real design-breakers before any code:
- DP-1/RS-1 (HIGH): the seed model was self-contradictory (RunMapMath regenerates the WHOLE
  graph per seed, incompatible with a persistent pinned prefix) -> split: graph topology is
  a pure function of WorldSeed ONLY; DescentSalt re-knots content; pinning freezes PinnedSalt.
- NR-2/RS-3 (HIGH): salvaged respawn warps a dead Wick to base -> splits the co-located party
  -> in-pocket death; warp gated behind party-wipe; revive is new code, not salvage.
- DP-2 (HIGH): born-correct restore is per-entry lazy replay, not a boot one-shot.
- NR-1 phantom-kill CombatFeedback fix; NR-3 enemy wind-up gated on the light-union;
  RS-2 RegionTag->PocketTag is a ~23-site semantic rewrite, not a rename.

World_Model_Build_Spec.md = the review-hardened contract (all 18 folded, findings ledger,
build order, open risks). DR-049 records the decision. Spike -> reviewed; proposal -> superseded.
New forks parked (dark-contact policy, lantern placement, END-1/EB-1 mothball timing).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 23:53:59 -07:00
kronic 73afab6ba5 Docs: LANTERN art-pipeline recipes (Workstream A0/A1) + currency re-mean spec
- Art pipeline recipes: the material foundation (palette atlas + 3 master shaders
  Lit-Palette/Emissive-Gloam/Skinned-Palette), statics recipe, skinned recipe (proven
  Rukhanka HUMANOID path), the 3 rig families (Drifter/Crawler/Strider), CreatureKit (A2)
  framing. Built on DR-022/023 + the proven Blender recipe; every carry-over gotcha flagged.
- Currency re-mean: Ore/Aether/Biomass/Charge -> Flame/Lumen/Gloam/Loudness/Salvage/Chum/
  Tallow with byte-id assignments; flags the fresh-saves-vs-migrate fork (Charge byte reuse).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 23:49:20 -07:00
kronic f53553581b Docs: LANTERN Phase 0.3 world-model proposal + Phase 1 combat-gym spec + operator-questions
- World-model design proposal (pre-review input): seed-pinning = freeze-salt + save-deltas;
  light-as-information = two hard-cull relevancy layers (pocket-scope + party light-union);
  descent lifecycle = renamed/extended RunDirectorSystem. Grounded in 3 read-only code passes
  + ctx7 on GhostRelevancy/GhostImportance. Feeds the running adversarial review.
- Phase 1 combat-gym build spec (design, pre-review): two frames (Bathynaut/Harpooner),
  4-socket manual-aim skillshot kit (AbilityRef -> socket buffer, 7-type-cap restructure),
  5 Sparks on the ability-blob + BoonEffects hook layer, light-relevancy prototype shares
  the world-model review. Grounded in a combat/ability/boon salvage pass.
- Operator-questions parking lot (autonomous run): code impl + extra reviews + A0 art
  execution parked pending operator; design forks flagged with recommendations.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 23:46:20 -07:00
kronic 89dd155f85 Docs: LANTERN Phase 0 — full pivot adoption + all-doc sweep
Adopt LANTERN as the operative direction (co-op action-RPG, light-as-territory),
superseding the Awakening Engine fiction + the Co-op Hades iteration. Existing
code becomes salvage quarry; the mechanical pillars hold.

Phase 0 deliverables (doc portions):
- DR-048 adoption decision record (0.1)
- Lantern_Strip_Mothball_Inventory — system-by-system keep/rework/mothball (0.2)
- Lantern_World_Model_Spike — pocket-graph + seed-pinning BRIEF, review-first (0.3)
- Art_Direction_Lantern — style bible + material decision + A0 gate (0.4)

Docs/skills sweep: Pillars pointers + LANTERN locked decisions; superseded
banners on Identity, Iteration_CoopHades, Path_to_Fun, Milestones, Backlog,
End_Of_Month (all redirect to the LANTERN roadmap); Home MoC + current-direction
callout (and stale serena line fixed); Systems_Index era note; CLAUDE.md
core-loop line -> LANTERN direction pointer (verbose co-op-Hades invariants
archived to the gotchas archive, net-neutral under the 40 KB budget); dots-dev
validation-harness expedition-run recipe flagged era-specific.

Two Phase-0 gate items remain OPEN (not doc work): the 0.3 world-model design
review and the 0.4 in-engine style-proof scene.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 23:13:13 -07:00
Luis Gonzalez 1b999e612a Docs: LANTERN vision refresh — theme exploration, review-hardened identity, slice roadmap
- Theme_Direction_Candidates: research-backed direction exploration (saturation map,
  load-bearing-theme patterns, 4 candidate directions); operator picked Direction A
- Identity_Lantern (final draft): tide-line persistence (lit=permanent via seed-pinning,
  dark re-knots), Wicks/drowned-sun night-sea mythology, Sparks + Gloam mutations,
  death split, readability law — hardened via 3 adversarial reviews, all findings folded
- Roadmap_Lantern_Slice: vertical-slice phases 0-7 + Workstream A (solo-dev art pipeline:
  palette-atlas materials, 3 rig families, CreatureKit factory)

Supersedes the Awakening Engine / Co-op Hades direction on adoption (Phase 0 DR pending).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 22:50:53 -07:00
kronic 972e0d5b4f Docs: Phase 1.7 boon-overhaul build spec + DR-047 + session log + roadmap tick + CLAUDE.md 7-type-query gotcha
Boon overhaul CODE-COMPLETE (mechanic-changers): design forks locked,
pre-code review (11 findings folded), post-impl review (incomplete on a
session limit — raised findings self-verified, 2 real bugs fixed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 18:54:06 -07:00
kronic ff91e6e4d3 Docs: session log Part R + roadmap tick — Phase 1.5b bundle 4 shipped, 1.5b COMPLETE
Bundle 4 (critters + weather beats) shipped; all four World-Alive-II bundles
done. Next = the operator's Phase 1.5 gate lap.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 14:41:35 -07:00
kronic f271d5f47f Docs: Geyser Build Spec + session log Part Q + roadmap tick + CLAUDE.md gotcha — Phase 1.5b bundle 3
Blight geyser (bundle 3) shipped review-first. Records the design-review fold
(2 HIGH: no edge-detect on the replicated tick; invert the invalid-guard for a
baked scheduled-tick so a born-0 can't storm) and the new CLAUDE.md tick-sentinel
corollary for baked [GhostField] scheduled-ticks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 13:53:22 -07:00
kronic b3ef846fb8 Docs: session log Part P + roadmap tick + CLAUDE.md gotcha — Phase 1.5b decals bundle shipped
Bundle 2 (decals): explosion scorch pool, cover damage-cracks, room-arena
scars — all procedural, client-only, zero netcode. Records the pivotal
finding that a stock Synty prop shadergraph's _BaseColor is Unity-Per-Material
(not Hybrid-Per-Instance), so URPMaterialPropertyBaseColor darkening silently
no-ops on cover — the fork to decal quads.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 11:04:43 -07:00
kronic 8da1402e25 Docs: session log Part O — baked splat ground iteration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 23:25:20 -07:00
kronic 8d9d8d0d66 Docs: session log Part N — flora double-animation diagnosis + thinning
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 23:14:26 -07:00
kronic 741828e09d Docs: session log Part M + roadmap tick — Phase 1.5b ground bundle shipped
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 22:49:24 -07:00
kronic cf206d356a Docs: roadmap — Phase 1.5b World Alive II locked (all four bundles)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 17:16:38 -07:00
kronic 6d7941bb40 Docs: session log Part L — barrel feel fix + 1.5 expansion round opened
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 17:14:02 -07:00
kronic 03083eb735 Docs: destructible-cover Build Spec + session log Part K — PHASE 1.5 COMPLETE
CLAUDE.md: the enemy anti-stuck nudge is now cover-aware (budget 38.5 KB).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 16:17:45 -07:00
kronic d8e724e40a Docs: exploding-barrels Build Spec + session log Part J + roadmap tick
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 19:42:41 -07:00
kronic cca8c1d44e Docs: session log Part I + roadmap — attack distinctness; 1.5 short-term complete
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 23:18:27 -07:00
kronic 4ae022c5ad Docs: session log Part H + roadmap — breakable clutter feel pass
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 22:16:02 -07:00
kronic 28a683b358 Docs: session log Part G + roadmap — art look locked, ambient motion shipped
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 21:02:10 -07:00
kronic edc476adfd Docs: session log Part F — lighting/atmosphere pass + art-look gate open
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:38:23 -07:00
kronic 30ddb6fbd0 Docs: session log Part E — planar Y-lock fix record
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:06:34 -07:00
kronic 052764442d Docs: session log Part D — solid sweep + height pass record
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 19:46:17 -07:00
kronic 0574e74e18 Docs: collision-fidelity pass record + MeshCollider Read/Write gotcha + guardian harness pattern
Session log Part C (execution + validation evidence), roadmap stabilize #2
ticked, CLAUDE.md gains the MeshCollider-bakes-only-if-Read/Write gotcha
(38.4 KB, in budget), validation-harness.md gains the EditorApplication.update
guardian + EditorPrefs handoff pattern.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 13:48:32 -07:00
kronic 4cd9b6579d Docs: 2026-07-09 session log — B4d tail settled + collision-fidelity grounding
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 12:41:38 -07:00
kronic 7b64c1caa3 Chore: remove serena MCP completely; gitea auto-push + test-count conventions
Serena dropped from .mcp.json + .serena/ untracked (unused in practice,
flaky on Unity per CLAUDE.md's own caveat); memory stack is now three
layers. Standing auths recorded in the skill: docs auto-commit + auto-push
main->gitea (origin stays ask-first).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 22:00:33 -07:00
kronic 03fb4052e8 Docs: supersession banners on pre-redirect roadmap docs (point to Iteration_2026-07_CoopHades)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 21:50:20 -07:00
kronic a0a2cff264 Docs: workflow consolidation - CLAUDE.md game-state extraction (-2KB, invariants+DR pointers), validation-harness skill ref, docs-commit standing auth
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 21:44:24 -07:00
kronic 5a16acc56d Docs: attribute-swallow root cause + session log; CLAUDE.md gotcha + 6.5 accuracy fixes (net-zero)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 21:38:10 -07:00
kronic d966813a36 Docs: Phase 1 gate verdict (static/boring world) -> Phase 1.5 World Alive inserted + boons pulled forward to 1.7
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 21:14:03 -07:00
kronic cc2e7ad95e Polishes 2026-07-07 20:51:18 -07:00
kronic 401e0a9c02 Docs: round-2 animation session log (swing combo, slam, sword, pipeline traps)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:18:54 -07:00
kronic 7350e4dd63 Docs: Blender clip pipeline in session log; CLAUDE.md Humanoid correction (net-zero)
The 'Synty share one Generic skeleton' note was WRONG - the pipeline is
HUMANOID (CharactersAvatar isHuman, muscle-curve clips). Corrected + the
Blender clip recipe added; paid for by archiving Aim-controls, the URP
m_AssetVersion blocker, VolumeProfile persistence, HDRP-convert and the
HudTheme bullets (verbatim in the gotchas archive, 2026-07-06 section).
39,959 bytes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 20:49:28 -07:00
kronic 192b708b41 Docs: Phase 1 session log — built + validated same session
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 18:52:09 -07:00
kronic 358ac14b06 Docs: Slice B folded design (15 code-verified review findings, hand-synthesized)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 18:19:53 -07:00
kronic fefd7168ec Docs: Co-op Hades iteration plan + dev-loop session log + tour screenshots
Direction locked 2026-07-06: trunk fixes + full Co-op Hades conversion
(mothball tower-defense, win expedition-side, hub base, mechanic-changer
boons, 2nd ability, node types, 2nd boss, revive), depth folded in now,
Blender at hero-props+decals scope. Evidence: 9-agent analysis workflow +
live play tour (screenshots referenced by the plan doc).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 12:27:05 -07:00
kronic 274cf3b791 Portal made visible: cyan beacon pillar + always-on RoomExplore steer prompt (DR-046 follow-up)
The room-exit portal was invisible in the first playtest - players loitered
out the 30s ExploreGrace timeout. Adds RegionMath.ExpeditionPortalPos as the
single client-derivable portal-position authority (HUD prompt + beacon can't
drift), a pooled breathing HDR pillar in CombatFeedbackSystem shown only
during RoomExplore, and an in-range/out-of-range two-stage prompt.

Also repairs the comment-swallowed _portalMat initialization (NRE in
OnStartRunning killed ALL combat feedback each session and auto-paused the
editor via Error Pause). 456/456 EditMode.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 12:20:04 -07:00
kronic e6cbba5e25 Docs: DR-046 base<->expedition ties + session log; CLAUDE.md net-zero
DR-046 (portal-gated rooms, class-at-base via shared ClassSwapUtil, per-run
prep spend, Health.Max GhostField, C3/C4/Spitter) + the session log. CLAUDE.md
folds the batch into the core-loop bullet and corrects the now-wrong
'Health.Max unreplicated' line; paid net-zero (40921 B) by archiving the
one-time Rukhanka-samples bullet + trims into the gotchas archive.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 10:37:50 -07:00
kronic 35357faa7a Docs: DR-045 combat demo pass + session log + CLAUDE.md gotchas
DR-045 (real boss, GoalTarget=2, readable-but-fair) + session log. CLAUDE.md:
core-loop demo note (GoalTarget=2, boss kit), source-gen file-using gotcha,
EB-1/2/END-1/2 bullets condensed to DR pointers to stay under the 40KB budget.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 20:21:51 -07:00
kronic c6b7890212 Polishes 2026-07-04 16:57:40 -07:00
kronic 16e396841e Run Re-Do 2026-07-02 20:41:43 -07:00
Luis Gonzalez 29e90a5008 First-run onboarding: contextual coach-marks + How-to-Play card + dev replay toggle
Teaches the deep, interlocking loop — especially the inverted win condition
(you win by CLEARING EXPEDITIONS, not by surviving base sieges; DR-042/DR-043).

- OnboardingSystem: client-only observe-only PresentationSystemGroup overlay
  (own UIDocument @ sortingOrder 60), soft-gated 10-beat coach-mark sequence
  with a world-space ▶ pointer; never mutates sim / never destroys a ghost.
- OnboardingStepMath: pure, unit-tested step machine (snapshot + IsSatisfied +
  scheme-aware prompts + pointer kinds + persisted-mask helpers).
- HowToPlayPanel: tabbed reference card (Controls / The Loop / Build / Threats /
  Win-Lose), reachable from the main menu and the pause overlay.
- Per-client client-local state in GameSettings (TutorialHints + OnboardingMask
  bitmask, additive) — a Join client keeps its own; a host save-wipe never
  re-teaches. Settings toggle + menu "Replay Tutorial".
- Dev "Force Each Launch" toggle (GameSettings.ForceOnboardingEachLaunch):
  SettingsService.Boot wipes the mask + forces hints on in-memory every launch
  so the tutorial always replays fresh.
- HudSystem suppresses its own location hint while onboarding is active
  (single prompt voice), via OnboardingState + [UpdateAfter(OnboardingSystem)].

Validated green: 20/20 EditMode; Play smoke confirmed overlay render, clean
U+25B6 pointer glyph, no system sort-cycle, and the force-wipe end-to-end.

Docs: DR-043 + session log; reusable lesson archived in the build-gotchas note.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 14:18:22 -07:00
kronic 8f96b520d6 Deferred feel items: true enemy body hit-flash, co-op remote swing arcs, near-impact strike beep
Clears the three follow-ups deferred by the combat-overhaul pass (c3b53cef2) + the
DR-041 "needs its own ShaderGraph slice" note. All client-only, observe-only presentation
(PresentationSystemGroup; no sim mutation, no [GhostField], no server work).

- Item 1: EnemyHitFlashSystem flashes the ACTUAL enemy body by driving the stock
  Entities-Graphics URPMaterialPropertyBaseColor override on the Rukhanka render-entity
  LEG children (root has no MaterialMeshInfo) -- NO ShaderGraph edit, no new component type.
  Lerp white->BodyFlashColor on a Health-decrease edge, decay back to white. Verified on
  screen (the AnimatedLitShader honors the per-instance _BaseColor override).
- Item 2: per-remote-player slash-arc pool in CombatFeedbackSystem, edge-detected from the
  replicated MeleeCombo on interpolated teammates (.WithDisabled<GhostOwnerIsLocal>());
  BuildSlashMesh -> BuildSlashInto(mesh,...) refactor; local player keeps _slashMr.
- Item 3: once-per-windup near-impact strike beep folded into the danger-cone loop, gated
  to a resolved local player.
- 9 new FeelConfig knobs (+ ResetDefaults).

390/390 EditMode, clean compile, zero Play exceptions. 3-lens adversarial review
(wf_8a998c6c-af9) -- no critical/major; fixed 4 minors: spurious beep at base origin before
the local player resolves, frozen tint if BodyFlashEnabled toggles off mid-flash, render-child
capture with no recovery, OnDestroy GO symmetry.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 10:51:58 -07:00
kronic 8596cc74b1 Docs: DR-042 Phase C build record (legibility C5-C7 complete) + Backlog
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:27:55 -07:00
kronic ed65770cc9 DR-042 Phase A: expedition-driven win — move win-driver off base-siege survival, kill the AFK path
Design-review-gated (wf_ebef4e81-dba, GREEN-WITH-CHANGES). The win-driver moves
from "survive N base sieges" to "clear N expeditions". The review overturned the
literal plan: credit on RETURN, not at the clear edge (clear-edge crediting arms
the undefended final base siege -> uncontestable terminal Loss).

- ExpeditionGateSystem: now the sole production writer of GoalProgress.Charge —
  a clamped +1 per cleared expedition folded into the existing once-per-epoch
  reward block, reusing the LastRewardedEpoch latch (Ore + Charge share fate) +
  a SaveRequest checkpoint. No new latch, no new GhostField, no ordering change.
- CyclePhaseSystem: deleted the survived-siege +1 (the AFK win path). Victory
  latch unchanged; GoalReached still arms the final base siege at cap.
- CycleDirectorAuthoring + CycleDirector.prefab: ScheduleEnabled baked OFF
  (retaliation-only). A serialized prefab bool ignores the C# field initializer,
  so the value is flipped in the prefab, not just the code default.
- Tests: re-pointed CyclePhaseSystemTests + EndgameWinLoseTests survived-siege
  assertions; extended ExpeditionGateRewardTests (+1, no-double-credit, clamp).
  389/389 EditMode green; clean netcode Play smoke (no sort-cycle, Schedule=0).

SaveData stays v5. Docs: DR-042 build record + forks resolved, CLAUDE.md
base-loop line, Backlog (A done).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:49:27 -07:00
kronic 03f778085b Docs: loop re-shape to expedition-driven (DR-042) + consolidate; fix enemy health-bar fill
- DR-042 (new): canonical loop re-shape — win-driver moves from base-siege
  survival to expedition clears; blind scheduled siege retired; base siege
  becomes retaliation consequence. Build order A (coherence) -> B (retaliation)
  -> C (legibility) -> D (Slice 4 persistent meta).
- Backlog/Path_to_Fun/Home reconciled to the expedition-driven direction;
  Slice 3 + Combat Depth marked built.
- DR-036 (END-2) flagged superseded-in-part; DR-034 (END-1) repurposed (Core
  is a consequence, not the win-gate); DR-037 forward-pointer to DR-042.
- CombatFeedbackSystem: fix enemy health bar (sprite-less Filled Image ignored
  fillAmount -> size via anchorMax.x).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:07:33 -07:00
kronic e32dadbc66 Slice Combat Depth (MC-3 + wiring + review fixes): Spitter aim-line + player-hit punch, rigged enemies, in-band gate (DR-041)
Completes the Combat Depth slice on top of the MC-2 server spine (56cf60cce):

MC-3 impact juice (client, observe-only):
- 7 FeelConfig fields + ResetDefaults; magnitude-scaled player-dealt-hit camera
  PunchFov on the enemy-Health-decrease edge (camera-only hit-stop, never timeScale).
- Spitter Kind==2 aim-LANE telegraph (BuildLaneMesh) — reads baked SpitterState
  client-side, falls back to a fixed length. True freeze + material flash deferred.

Content / wiring:
- SpitterProjectilePrefabAuthoring (the SpitterProjectilePrefab singleton).
- Both directors rebuilt to a 4-entry KIND-INDEXED roster [Grunt,Charger,Spitter,
  Swarmer] + mix/MaxAlive config + the SpitterProjectileConfig singleton in the subscene.
- Real rigged models: EnemySpitter (re-skinned Kaiju, ranged poker) + EnemySwarmerUndead
  (Undead-Werewolf, fast/low-HP); grunt/charger keep Werewolf/ChargerMuscle. EnemySpit =
  ownerless interpolated ghost (no Health, no collider).

Post-impl adversarial review fixes (wf_febdcfdb-665):
- [MED] in-band fire gate: the Spitter committed its telegraph from ANY range (fired while
  advancing from far). Now commits only when sInBand || sCornered (gives CorneredRange a
  real read site) — a Spitter out-of-band holds fire and repositions.
- [LOW] EnemyProjectileDamageSystem early-returns on !ServerTick.IsValid (sibling parity).
- [LOW] EnemyAuthoring bake-time guard: errors if a prefab composes both Charger+Spitter
  (would match zero AI passes -> never move).
- [LOW] tests: Spitter brain fires from Expedition (kills the Base==0 region false-green);
  a direct partition-exclusion test replaces the order-masked claim; added out-of-band +
  cornered negative tests.

388/388 EditMode green + two Play smokes (clean boot, fire, swept-hit, region, server==
client; rigged Kaiju spitter bakes + fires with zero console errors). Accepted as-is
(documented in DR-041): global spit soft-cap, co-op punch attribution.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:08:59 -07:00