docs: reconcile project state and refresh README
Some checks failed
Headless portability / portable-headless (ubuntu-latest) (push) Has been cancelled
Headless portability / portable-headless (windows-latest) (push) Has been cancelled
Headless portability / linux-graphical (push) Has been cancelled

This commit is contained in:
Erik 2026-07-27 12:53:31 +02:00
parent 97a095d628
commit f6275f4501
12 changed files with 432 additions and 295 deletions

View file

@ -66,7 +66,8 @@ disabled (IA-21), installs each icon through the shared retained
`UIRegion::SetImage` seam so it keeps the authored foreground stack, and
one-time migrates stale saved examination dimensions to the authored
310 x 400 extent while preserving retail-style later resizing.
Its connected visual gate is pending. Slice 3's first connected gate exposed
The corrected formula/icons/foreground stack, authored extent, and complete
item report were user-accepted on 2026-07-24. Slice 3's first connected gate exposed
three deeper defects, now corrected: the response enum mislabeled ACE's
creature bit `0x0100` and dropped monster packets while retaining the busy
cursor; the imported 310 x 400 examination layout was incorrectly hosted as
@ -78,7 +79,8 @@ transaction under retail ownership/authorship rules; those corrections are
user-confirmed. The item view now follows the complete EoR formatter dispatch,
including literal set/rating/tinkering prose, weapon/armor/magic/XP/
activation/healer/rare branches, and installed-DAT material and creature
names. Its connected item-report comparison is Slice 3's remaining gate.
names. Slices 13 are complete; M4 resumes at Slice 4 equipped-child picking,
followed by vendor browsing and authoritative transactions.
---
@ -753,7 +755,7 @@ behavior. Estimated 1726 days focused work, 35 weeks calendar.
- **Missile/portal VFX cell-less rule clarified 2026-07-16.** The Steps 05 statement that later plays drop while an existing owner is cell-less applies only to ordinary F754/F755/default playback. Hidden/UnHide is retail's internal exception: `CPhysicsObj::set_hidden` resolves the typed script and calls `play_script_internal`, queuing it until scheduler eligibility returns. This preserves the human table's purple portal materialization across asynchronous destination placement.
- **✓ M2 local attack receive funnel (live-gated 2026-07-15).** Retail `ExecuteAttack` only sends the request; ACE chooses the concrete melee/missile action and returns it in a non-autonomous mt-0 `UpdateMotion`. The local branch now runs that state through the same constructor-defaulted `MoveToInterpretedState` funnel and 15-bit action-stamp gate as remotes, then applies sticky/long-jump tails. The old local-only direct `Commands[]` replay is deleted. Shared conversion lives in `InboundInterpretedMotionFactory`; research: `docs/research/2026-07-11-local-combat-motion-pseudocode.md`.
- **✓ M2 basic retail combat bar (live-gated 2026-07-15).** Production mounts authored `gmCombatUI` LayoutDesc `0x21000073`, shows it only for Melee/Missile, and routes mouse plus keyboard through one `CombatAttackController`. Corrections include the authored wider centered dark-red child range (accepted IA-20), full-width left-to-right bright live attack-charge feedback, exact Speed-left/Power-right justification, silent control-only `AttackDone(ActionCancelled)`, target-frame Keep in View with manual orbit, and persistent corpse motion: the AP-80 velocity-only NPC adaptation can now replace only Ready/Walk/Run, never authoritative Dead/actions. `CombatTargetController` ports the selection-cleared AutoTarget consumer, so a selected creature's authoritative Dead motion clears it and selects the nearest eligible creature when enabled. The 2026-07-12 replacement-corpse correction unifies both multi-frame and static/reactive spawns behind retail's CreateObject lifecycle: apply the wire's Dead state while detached, then `MotionTableManager::HandleEnterWorld` strips Ready→Dead links before the first in-world tick; multiple corpses remaining fallen passed the live user gate that day. Follow-up #205 makes the toolbar read the final canonical selection after a reentrant Auto Target notice and restricts automatic candidates to hostile non-player monsters (intentional PK-edge divergence IA-19); that live gate also passed 2026-07-12. Research: `docs/research/2026-07-11-retail-combat-bar-pseudocode.md`, `docs/research/2026-07-11-combat-target-camera-pseudocode.md`, `docs/research/2026-07-12-death-and-auto-target-pseudocode.md`; AP-24/AP-95 retired, AP-80 narrowed, AP-110 narrowed, AP-112 records the remaining attack-start and exact trained-Recklessness seams.
- **M3 cast lifecycle + retained magic UI implemented 2026-07-15; visual gates pending.** `SpellCastingController` ports retail's immediate targeted/untargeted request boundary, component preflight, target eligibility, movement stop, and shared UI-busy lifetime while leaving turn/cast/fizzle/impact outcomes authoritative to ACE. Formula preflight reads decrypted portal.dat formulas, the SCID↔WCID map, canonical account randomization, exact school-focus map, infused-magic properties, and scarab-only substitution. `MagicCatalog` now projects all 6,266 end-of-retail SpellTable records into the shared Core metadata table; the incomplete 3,956-row CSV is test/research-only and AP-17 is retired. Complete live enchantment packets preserve spell/layer identity, all StatMod fields, client-clock normalization, and exact purge buckets. Authored retained surfaces now include the Magic page of `gmCombatUI`, all eight favorite tabs, equipped caster endowment, `gmSpellbookUI`, `gmSpellComponentUI`, both `gmEffectsUI` windows, and the floating Helpful/Harmful effect indicators. The favorite bar now ports retail horizontal empty-cell padding, shared UIItem 19 shortcut overlays, and the Cast button's three independently reflowed DAT face segments. Spell rows resolve UIItem prototype `0x10000343`; the component page now instantiates LayoutDesc `0x21000033` category/component templates `0x10000466/67`, including localized headings, exact row textures and columns, owned/desired counts, selection, and the 0..5000 desired-value contract. The authored scrollbars, exact filters/display ordering, learned-spell drag, and shared server-authoritative delete dialog are connected. `RetailPanelUiController` ports the shared one-active-panel lifecycle so toolbar and indicator launchers converge on one owner. #L.2/#L.3 close and #L.4/AP-110 narrow. Research: `docs/research/2026-07-15-retail-magic-ui-and-casting-pseudocode.md`, `docs/research/2026-07-15-retail-spell-catalog-pseudocode.md`.
- **M3 cast lifecycle + retained magic UI shipped and user-accepted 2026-07-21.** `SpellCastingController` ports retail's immediate targeted/untargeted request boundary, component preflight, target eligibility, movement stop, and shared UI-busy lifetime while leaving turn/cast/fizzle/impact outcomes authoritative to ACE. Formula preflight reads decrypted portal.dat formulas, the SCID↔WCID map, canonical account randomization, exact school-focus map, infused-magic properties, and scarab-only substitution. `MagicCatalog` now projects all 6,266 end-of-retail SpellTable records into the shared Core metadata table; the incomplete 3,956-row CSV is test/research-only and AP-17 is retired. Complete live enchantment packets preserve spell/layer identity, all StatMod fields, client-clock normalization, and exact purge buckets. Authored retained surfaces now include the Magic page of `gmCombatUI`, all eight favorite tabs, equipped caster endowment, `gmSpellbookUI`, `gmSpellComponentUI`, both `gmEffectsUI` windows, and the floating Helpful/Harmful effect indicators. The favorite bar now ports retail horizontal empty-cell padding, shared UIItem 19 shortcut overlays, and the Cast button's three independently reflowed DAT face segments. Spell rows resolve UIItem prototype `0x10000343`; the component page now instantiates LayoutDesc `0x21000033` category/component templates `0x10000466/67`, including localized headings, exact row textures and columns, owned/desired counts, selection, and the 0..5000 desired-value contract. The authored scrollbars, exact filters/display ordering, learned-spell drag, and shared server-authoritative delete dialog are connected. `RetailPanelUiController` ports the shared one-active-panel lifecycle so toolbar and indicator launchers converge on one owner. #L.2/#L.3 close and #L.4/AP-110 narrow. Research: `docs/research/2026-07-15-retail-magic-ui-and-casting-pseudocode.md`, `docs/research/2026-07-15-retail-spell-catalog-pseudocode.md`.
- **M3 favorite-bar empty-state correction 2026-07-15; visual gate pending.** Shortcut-number arrays remain shared with the status toolbar, but the cell background is now resolved independently from the favorite ItemList's inherited `0x1000000E` cell prototype. LayoutDesc `0x21000010` selects prototype `0x10000341`, whose exact brown/gold `ItemSlot_Empty` surface is `0x06001A97`; the blue toolbar-style `0x060074CF` substitution is removed. The cross-layout resolver and controller presentation are pinned by live-DAT and retained-layout conformance tests.
- **Retail client command families implemented 2026-07-13; corrective live gate pending.** One shared typed catalog now separates retail client actions from ACE administrator commands for both chat backends. Named-decomp ports cover recall/house/PK travel; age/birth; framerate, lock, version, location, corpse, and die confirmation; clear plus named/automatic UI layouts; AFK/consent; emotes; friends; squelch/filter/message types; and fill-components. App owns execution, Core owns authoritative friends/squelch state, Core.Net owns exact UIQueue/ControlQueue packets. Confirmation reuse now ports retail `DialogFactory` contexts, queue groups/priority, fresh DAT roots, property results, callbacks/close notices, and server abort handling; `/die`, gameplay request tuples, and guarded item-use prompts share its type-1 LayoutDesc `0x2100003C` presenter. The first live gate passed the family except for raw suicide-success code `0x004A` and the title-bar-only FPS presentation; the correction maps retail's text and mounts SmartBox element `0x10000047` with live two-decimal `FPS`/`DEG`. #L.6 is closed; TS-31/TS-47 are narrowed. Research: `docs/research/2026-07-13-retail-client-command-families-pseudocode.md`, `docs/research/2026-07-13-retail-dialog-factory-pseudocode.md`.
- **✓ SHIPPED — Character window** (`LayoutDesc 0x2100002E`, `CharacterStatController`, 2026-06-26, same branch). **Visually user-confirmed 2026-06-26 — Attributes tab reads as retail.** Three tabs, header (name/heritage/PK), large-gold level number (dat font, `largeDatFont` 18px), "Total Experience (XP):" + "XP for next level:" captions, 9-row attribute list (icons + right-aligned values + Health/Stamina/Mana vitals), click-to-select (top/bottom selection bars + footer State-B "{Attr}: {value}" / "Experience To Raise: Infinity!" + affordability-gated raise triangles), centered footer. User noted "still needs some polish for later" — deferred to Issue #158.

View file

@ -87,7 +87,8 @@ program: spell-bar overflow, status Use/Assess, assessment information,
equipped-child picking, vendor browsing, and authoritative vendor
transactions. This is deliberately using the extracted interaction owners and
canonical shared main-panel host before quest/emote/character-creation bodies
broaden the feature surface.
broaden the feature surface. Slices 13 are user-accepted; resume at Slice 4
equipped-child picking.
The separately authorized modern-runtime performance program has completed
Slices AD: corrected measurement, prepared-package bake/dedup, package-only
@ -405,7 +406,8 @@ disables component enforcement (IA-21), installs each icon as its authored
template root's own foreground image, and resets obsolete saved dimensions
once to the authored 310 x 400 extent. The Release build with #228's 17
tracked test warnings, 3,557 App tests / 3 skips, and 7,988 complete-solution
tests / 5 skips pass; the connected visual gate is pending.
tests / 5 skips pass. The corrected formula/icons/foreground stack and
authored extent were user-accepted on 2026-07-24.
Slice 3's first connected gate found and corrected the real remaining defects:
ACE creature flag `0x0100` was mislabeled as a weapon profile and left the
appraisal busy reference held, retail's examination UI had been mounted as a
@ -415,8 +417,9 @@ display-only. Exact response flags, the independent
edit transaction are now ported and user-confirmed. Its item path now follows
the complete EoR formatter dispatch, including literal set/rating/tinkering
prose, weapon/armor/magic/XP/activation/healer/rare branches, and installed-DAT
material/creature names. The connected item-report comparison is Slice 3's
remaining gate.
material/creature names. The connected item-report comparison was Slice 3's
final accepted gate. Slices 13 are complete; resume at Slice 4
equipped-child picking.
Carried:
#153 far-teleport residual, #116 slide-response, the remaining R6 ownership cleanup plus
@ -1215,7 +1218,7 @@ from M3 = retail-equivalent gameplay loop for melee and casters.
---
### M4 — "Live in the world" — 🟡 NEXT (~610 weeks)
### M4 — "Live in the world" — 🟡 ACTIVE (~610 weeks)
**Entry condition:** complete the behavior-preserving `GameWindow`
decomposition campaign before adding H.3/H.4/L.1e feature bodies. This protects

View file

@ -7,14 +7,15 @@ connected gate exposed an incorrect IdentifyResponse flag table, a non-retail
shared-panel mount, and its missing inscription transaction. All three are
corrected and live-confirmed. The creature-page follow-up now has retail's
ordered stat rows and animated private preview. The follow-up item report and
authored 310 x 400 layout correction are implemented; their connected visual
gate is pending. Favorite-spell press-time selection and right-click local
SpellPanel examination are implemented. The follow-up now maps
authored 310 x 400 layout correction are implemented and user-accepted.
Favorite-spell press-time selection and right-click local SpellPanel
examination are implemented and user-accepted. The follow-up maps
component-disabled ACE characters to the modern scarab/prismatic formula,
resolves formula icons by their DAT icon DIDs, installs those icons as each
authored template root's own foreground image, and migrates stale examination
dimensions once to the authored 310 x 400 extent. Their connected visual gate
is pending.
dimensions once to the authored 310 x 400 extent. The final connected
assessment gate passed on 2026-07-24. Slices 13 are complete; resume at Slice
4, equipped-child world picking.
**Milestone:** M4 prerequisite/preamble.
**Architecture:** retained gameplay UI over shared selection, object, and
interaction state. `GameWindow` remains a composition/callback shell.
@ -192,7 +193,7 @@ Focused conformance fixtures cover the geometry layering plus melee, launcher,
armor, spell, and special-property reports. The Release solution build passes
with the 17 warnings already tracked by #228, 3,514 App tests / 3 skips, and
7,931 complete-solution tests / 5 skips. The connected visual result remains
the closeout gate.
the historical pre-acceptance checkpoint; the final gate passed 2026-07-24.
The item-format conformance correction adds literal hook-tail cursor fixtures,
wire/session/object-table propagation tests, the exact Black Phyntos Hive
@ -201,7 +202,7 @@ LayoutDesc color-palette/enchantment-style coverage. The isolated Release
solution build passes with the same 17 tracked warnings; 3,522 App tests / 3
skips and 7,942 complete-solution tests / 5 skips pass while the previously
launched client retains the normal Release output lock. The corrected
connected item visual remains the closeout gate.
connected item visual was accepted 2026-07-24.
The exhaustive item-report correction replaces the remaining generic/numeric
approximations with the complete named-retail dispatch. Equipment sets use the
@ -218,7 +219,7 @@ need live player/localization state (effective shield, cooldown remaining, and
augmentation-cost `StringInfo`), plus character and creature-font residuals.
The focused item formatter suite passes 21/21, App Release passes 3,531 tests /
3 skips, and the complete Release solution passes 7,952 tests / 5 skips. The
connected item-report comparison is the remaining Slice 3 gate.
connected item-report comparison passed on 2026-07-24.
The material-title and section-boundary correction carries
`PublicWeenieDesc.MaterialType` from CreateObject through the canonical object
@ -268,7 +269,8 @@ each component descriptor's icon DID rather than its inventory WCID, applies
the modern scarab/prismatic formula when ACE disables component enforcement
(IA-21), and introduces per-window authored-geometry revisions so an obsolete
saved examination height resets once without discarding position or future
user resizing. The connected visual gate is pending. The 61-test focused App
user resizing. The corrected formula/icons/foreground stack and authored
extent were accepted on 2026-07-24. The 61-test focused App
gate passed before this correction. The corrected focused tests, Release build
with #228's 17 tracked test warnings, 3,555 App tests / 3 skips, and 7,986
complete-solution tests / 5 skips pass.

View file

@ -2,33 +2,24 @@
**Date:** 2026-07-24
**Status:** Slices AI and J0J5 are complete. Flat-authoritative collision, zero-
allocation resolve scratch, parsed-graph removal, connected correctness/
lifetime acceptance, and Slice-I closeout landed 2026-07-25. Slices FL were
explicitly approved 2026-07-24. Slice J0J1 established the enforced Runtime
boundary and borrowed contract seam; J2 moved canonical session/transport
lifetime and ordered inbound routing; J3.1J3.6 moved canonical entity identity
and object-table lifetime to Runtime, exact graphical projection identity to
App, and one ordered canonical entity/object stream plus direct views to all
hosts and closed the failure-safe owner ledger. J4.1 moved communication and
social ownership into Runtime at `c9d25ade`; J4.2 moved inventory transaction
ownership into Runtime at `011efbea`; J4.3 moved the coupled magic/player-sheet
owner into Runtime at `d02a12ce`; J4.4 moved character settings/projections
and the shared typed state-command seam at `dcb61efb`; J4.5 closed canonical
gameplay-state ownership at `89e6b207`. J5 movement, physics, interaction,
and combat ownership closed at `cdee7a4b` after canonical action state
(`b298f99f`), interaction transactions (`f5f7b417`), and combat/magic intent
(`20df9d15`), local movement/outbound cadence (`aa3f4a60`), and per-session
physics/remote simulation (`7e6033d0`), projectile simulation (`2aee3356`),
and the combined simulation ledger/Runtime-only closeout moved to Runtime.
J6 completed at `18d17d8b`: Runtime owns world environment, canonical reveal
generation/readiness, exact F751/Position destination correlation, and the
generation/cell-scoped graphical-host acknowledgement suffix. J7 completed
at `ce41efb9` with its automated gates and the user's 2026-07-27
physical-display acceptance. J8 and Slice J closed at `a9a822f2`: graphical
and direct hosts share one `GameRuntime`, one retryable generation-reset
transaction, and one canonical gameplay-owner graph. Slice K is active; K0
established the tested Windows/Linux headless boundary at `aada8a37`.
**Status:** Slices AK are complete. Slice L is deferred at its L1
implementation checkpoint by user direction on 2026-07-27.
Flat-authoritative collision, zero-allocation resolve scratch, parsed-graph
removal, prepared content, typed residency, retained render-scene submission,
and bounded frame owners are production paths. Slice J closed at `a9a822f2`:
graphical and direct hosts share one presentation-independent `GameRuntime`,
one retryable generation-reset transaction, and one canonical session/entity/
object/gameplay/movement/physics/projectile/environment/transit owner graph.
Slice K closed through `776482da`: the Windows/Linux no-window host, shared
immutable content, deterministic bot API/scheduler, 1/5/10/30-session
isolation, two-hour simulated endurance, connected portal/movement parity,
resource ceilings, graceful reconnect/logout, and zero-debt teardown pass.
Slice L0 landed at `66f114b2`; L1's immutable Win32/X11/Wayland selection,
packaged GLFW 3.4 preference, atomic capability record, active modern-GL
probes, and safe terminal reporting landed at `11501d52`. Native Windows AMD
passes. WSLg correctly rejects its missing mandatory bindless-texture
capability. Physical-Linux validation and L2L6 are parked; resume at the
supported AMD/NVIDIA L1 gate.
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
@ -1065,6 +1056,9 @@ host-parity tests after each move.
### Slice K — Linux headless and multi-session host
**Status:** complete through `776482da`; closeout is
[`2026-07-26-modern-runtime-slice-k.md`](2026-07-26-modern-runtime-slice-k.md).
**Prepared execution plan:**
[`2026-07-26-modern-runtime-slice-k.md`](2026-07-26-modern-runtime-slice-k.md).
Implementation began after Slice J's no-window closeout at `a9a822f2`.
@ -1100,9 +1094,14 @@ per-session incremental memory given a numeric ceiling at gate time.
### Slice L — Linux graphical host and evidence-gated GPU work
**Status:** deferred 2026-07-27. L0 is complete at `66f114b2`; the L1
implementation checkpoint is `11501d52`. Physical supported-driver validation
and L2L6 remain pending.
**Prepared execution plan:**
[`2026-07-26-modern-runtime-slice-l.md`](2026-07-26-modern-runtime-slice-l.md).
Implementation begins after Slice K closes.
Implementation began after Slice K closed and is parked at the recorded L1
gate.
**Purpose:** Finish platform portability and only then pursue remaining GPU
opportunities.
@ -1309,10 +1308,20 @@ at every stable checkpoint. J7 completed at `ce41efb9`, and the user accepted
its exact post-cutover visual matrix on 2026-07-27. J8 closed Slice J at
`a9a822f2`; 395 Runtime tests, 3,731 App tests / 3 skips, 8,696 complete-
solution tests / 5 skips, lifecycle/reconnect, and canonical nine-stop gates
pass. Slice K is the current execution point.
K0 completed at `aada8a37`: the no-App Windows/Ubuntu closure, strict
no-connect validator, dependency/assembly guards, Release build, 8,708-test /
5-skip complete suite, and local Ubuntu gates pass. K1 is active.
pass. Slice K closed through `776482da`. K0 established the no-App
Windows/Ubuntu dependency and loaded-assembly boundary; K1 added portable
paths/config/credentials and the direct Runtime host; K2 added the
deterministic scheduler and complete bot command/event API; K3 added shared
immutable content plus multi-session isolation and connected observer parity;
K4 added committed resource ceilings, 1/5/10/30-root and two-hour simulated
endurance gates, and the ten-minute two-account native-Linux connected soak.
That final process logged both accounts out through ACE and converged every
Runtime/content ledger. Slice L0 then completed at `66f114b2`, and L1's
implementation checkpoint landed at `11501d52`. App passes 3,763 / 3 skips
and the complete Release suite passes 8,826 / 5 skips. Native Windows passes
the packaged graphical/audio smoke; WSLg X11/Wayland correctly emit the
actionable mandatory-bindless rejection with zero terminal ownership. Further
Linux graphical work is deferred at the physical supported-driver L1 gate.
Evidence:
[`../research/2026-07-25-slice-g5-production-profile.md`](../research/2026-07-25-slice-g5-production-profile.md)
and
@ -1338,7 +1347,15 @@ and
and
[`../research/2026-07-26-slice-j5-7-simulation-ownership-closeout.md`](../research/2026-07-26-slice-j5-7-simulation-ownership-closeout.md)
and
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md)
and
[`../research/2026-07-27-slice-k4-resource-telemetry-checkpoint.md`](../research/2026-07-27-slice-k4-resource-telemetry-checkpoint.md)
and
[`2026-07-26-modern-runtime-slice-k.md`](2026-07-26-modern-runtime-slice-k.md)
and
[`../research/2026-07-27-slice-l0-platform-services.md`](../research/2026-07-27-slice-l0-platform-services.md)
and
[`../research/2026-07-27-slice-l1-graphical-capability-checkpoint.md`](../research/2026-07-27-slice-l1-graphical-capability-checkpoint.md).
The intended order is therefore:
@ -1352,9 +1369,9 @@ honest metrics + committed baselines (A — exit criteria block C)
-> delta GPU submission (G)
-> residual frame cleanup (H-a, H-b, H-c)
-> flat collision assets (I — COMPLETE)
-> presentation-independent runtime (J — CURRENT at J5)
-> Linux/headless/multi-session (K)
-> evidence-gated GPU jobs (L)
-> presentation-independent runtime (J — COMPLETE)
-> Linux/headless/multi-session (K — COMPLETE)
-> Linux graphical / GPU evidence (L — DEFERRED at L1)
```
This order improves the current graphical client first while laying clean