The homelab has no rsync, so the tree goes over as a tar stream, and the
destination is wiped first - a stale content-hashed chunk left behind would be
served forever, since /assets/* is cached as immutable.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Found by running the app in a browser for the first time.
- Undo was only reachable from the team tab, and only after a team solve had
finished, so an equip made from the character view had no way back. Both
views now show it whenever there is something to undo.
- The owner-group naming dropdown listed all 23 espers from the game database
rather than the characters the capture says you own. Two espers are both
published as "Zero", so the list held two identical entries and picking the
wrong one misattributed a whole loadout; conversely a character the game
database has never heard of had no entry at all and its group could not be
named. Options now come from the captured roster, labelled with the esper
name and disambiguated by codename when two owned characters share one.
- An inline SVG favicon, so the page stops requesting one that does not exist.
Inline rather than a file because the single-file build must make no
requests at all.
Verified headless against the real 819-item export: import writes 819 items,
20 characters and 99 equipment rows to IndexedDB; a solve runs in a real
Worker and scores 0.6690 for Zankou, matching the Node bench; equip writes 8
app rows and displaces 7; undo restores all 99 imported rows; state survives
a reload. The file:// build renders, imports, solves inline and issues no
network request.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Client-side optimizer for Neverness to Everness console builds. Imports a
gear export from nte-history-exporter, keeps it in IndexedDB, and solves for
the best module placement per character or across a team.
- domain/: pure ports of the Python research scripts (shapes, cartridges,
board tiling, stats, scoring, set bonuses, Arc effects, sheet prediction).
No DOM, no storage imports, so they stay worker-safe and Node-testable.
- solver/: single-character solve with branch and bound, plus a three-phase
team solve (portfolio, leximin, column generation) over disjoint item sets.
Runs in a Worker when one can be constructed, inline otherwise.
- db/: three storage tiers selected by use rather than feature detection,
fail-closed import validation, and undo that restores both sides of a steal.
- ui/: React 19 views for items, characters and teams; the board is drawn as
the deliverable rather than a score.
- Two build targets: a hosted bundle and a single self-contained nte.html
with no external requests.
Values the model cannot measure are reported as unavailable rather than
guessed: cartridge set bonuses, the level 80 base-stat multiplier, and the
distinction between "optimal for this packing" and globally optimal.
145 tests, tsc clean, both build targets clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>