Skip to content

Tags: s-nems/open-northland

Tags

build-c96210e

Toggle build-c96210e's commit message
test: Pin the desktop mod-discovery expectations to the '/' seam

Moving mod discovery onto the Vfs seam made it join the found folder name with
'/', so on Windows the returned root is the native mods dir plus '/CnMod 1.3.1'
and the node-joined expectation no longer matched. The installed root is now
built the way discovery builds it, and the hand-picked root stays natively
spelled to keep proving that a picked path is validated, not rewritten.

build-3b51623

Toggle build-3b51623's commit message
fix: Restate the HUD-scale bounds where the old formula was quoted

The layout sweep in details-panel-layout built its anchors from `uiScaleFor`,
so the ceiling collapsed its two largest entries onto duplicates of the third
and dropped the wide layouts it existed to cover; it now spans the reachable
band and keeps one pinned high scale. The window-placement ticket claimed 2x
was reachable in play, which the ceiling makes false.

build-bdb9552

Toggle build-bdb9552's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(deps): bump undici (#3)

Bumps  and [undici](https://github.com/nodejs/undici). These dependencies needed to be updated together.

Updates `undici` from 7.28.0 to 7.29.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v7.28.0...v7.29.0)

Updates `undici` from 6.27.0 to 6.28.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v7.28.0...v7.29.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 7.29.0
  dependency-type: indirect
- dependency-name: undici
  dependency-version: 6.28.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build-2d981b5

Toggle build-2d981b5's commit message
fix: Split either separator when resolving a source path

resolveSourceFile split on the platform sep, but callers pass two shapes:
joined constants carry the platform separator, while ini-borne references
arrive forward-slashed from normalizeAssetPath. On Windows the normalized
shape never split, so the whole reference became one segment, the walk
missed, and the armor recipes degraded the player LUT from 5 tiers to 1 -
failing the pipeline's player-colours test on that platform only.

build-594e655

Toggle build-594e655's commit message
docs: Re-measure the planner and file the combat spatial rebuild

Three perf commits have landed since this ticket recorded its numbers,
and each removed the term it named. The walk-block union copy went in
c5a6428, the farmer's sow scan in c70b50e. Re-profiling on an idle box
finds no planner hotspot left: the ladder is spread thin, and combat has
overtaken the planner as the heaviest slot, 31.0% against 24.4%.

Rewrite ai-planner-scale-curve to the work that is actually left, the
population/map-area axis split still blocked on the synthetic fixture,
and record that measuring this on a loaded box distorts the shares
themselves rather than only the timings.

File the combat finding: combatSystem walks its target list twice per
tick with the same nodesOf resolver, once into NodeBuckets and once into
HostilePresence, which is 20.6% of step between them.

build-b14e940

Toggle build-b14e940's commit message
fix: Stop the overlay claiming a shortfall on a session that has none

The delivered-speed readout smoothed a per-frame ratio, and `steps` is an integer: at 60 fps and x1 the
loop runs one tick every fifth frame, so every sample read either 0 or 5 and the average sawtoothed
between 0.80 and 1.22 forever. The arrow fired on 20% of frames at x1 and 35% at x0.25 while the loop
was delivering exactly what was asked and discarding nothing, and the line reflowed at frame rate.

Delivered speed is now a time average over a rolling one-second window rather than a smoothed
per-frame ratio, and the arrow is gated on a shortfall that survived two consecutive windows. Loading
a map costs a few ticks on every session; that is a hitch the loop recovers from within a window, not
the machine failing to keep up. Frames long enough to be a blocking load or an unpainted tab are kept
out of the average entirely.

The dropped-tick count follows the same window instead of the monotonic session total, so a stall
leaves the readout once it stops rather than pinning a number there for the rest of the session.

Verified in a browser on magiczny_las with six AI seats: x1 and x0.25 are arrow-free and drop-free
both immediately after load and settled, and x10 reports the shortfall on every frame.

build-78a7721

Toggle build-78a7721's commit message
feat: Drive the carry look from the original's [gfxwalkatomic] table

Settlers delivering honey hauled a wood log. The per-good carry animation was a
hand-maintained name join from the good's slug to a `<body>_walk_<slug>` bobseq,
and every good with no cycle of its own — 26 of 65, honey among them — fell back
to the character's generic loaded gait, which is the log.

The join is not guesswork the project has to make: the mod ships the table in
plaintext. `DataCnmd/animation/mapmoveableanimations/animations.ini` carries 511
[gfxwalkatomic] records keyed (logictribe, logicjob, logicgoodtype) ->
gfxbobseqbody, in the same file the pipeline already reads for [bobseq] and
[gfxanimatomic]. Extract them into ir.json `gfxWalkAtomics` and bind the loaded
gait from them instead of from the good's name.

The table contradicts what a name join can reach: honey binds the potion cycle,
wool the flour sack, ornament the stone pillar, the amulets the tile hold, and
all four armours share the leather bundle. It also corrects two pre-existing
mismatches (coin, food_extra) and settles two open questions with data — the
woman's nine hauled goods, and the soldier binding its empty walk for every good,
so a warrior never shows a load.

Where the table covers a job it is complete, so no generic fallback applies: a
good it omits genuinely draws no load. The `<prefix>wood` gait remains only as
the floor for an IR without the lane.

The remaining fidelity gap is the per-good palette recolour the original applies
on top (honey and the potions share one cycle), filed as
docs/tickets/render/per-good-carry-recolour.md.

build-7fa1f13

Toggle build-7fa1f13's commit message
docs: File deferred camera-controller tickets from the edge-drift review

Two review discoveries left out of the edge-drift fix: sharpen the existing
DOM-test-environment ticket with the camera controller as a second silent-
regression instance and a jsdom test target, and file the pre-existing
alt-tab-refocus edge-scroll quirk (edge-pan doesn't resume when the cursor is
already over the canvas on return).

build-44a80e6

Toggle build-44a80e6's commit message
refactor: Delete the stale sandbox scene copy the bench still built from

Re-expose the offset-taking buildSandboxSettlement(sim, ox, oy) and
SANDBOX_SETTLEMENT_PITCH from src/scenes/sandbox/, point bench/world.ts
at them, and delete the dead full copy in src/scenes/sandbox.ts that had
already let a scene-budget edit land in the wrong world.

The bench's tiled world hash moves to the live scene's placements — the
intended one-time re-baseline, not a regression. New
ON_BENCH_SETTLEMENTS=1 state hash: b7f24f60.

build-ae2bfec

Toggle build-ae2bfec's commit message
fix: Apply the mod-root review-battery findings

Pipeline: the two-root union now dedups on the case-folded relative path
(overlay wins a case-divergent spelling, as an over-install on the default
case-insensitive filesystems would); resolveModRoot moved beside SourceRoots
and requires DataCnmd to be a directory; readSourceFile loop simplified;
stale --mod prose trimmed. Fidelity pinned for real: a clean base (real
install minus every zip-shipped file) converted with --mod-root is
byte-identical to the same base with the mod extracted over it, except the
manifest's provenance paths.

Desktop: the wizard's Cancel now also aborts the extraction phase (and reads
as a cancellation, not a failure); mod events are throttled like pipeline item
events; ModInstallEvent deduped into ipc.ts's ModEvent; .installing/ staging
is never discovered as an installed mod and a running download blocks
conversion; a stale hand-picked modPath is dropped from the config. Zip
reader hardening: inflate capped at the declared uncompressed size (zip
bombs), central-directory/entry offsets validated against the file size, EOCD
candidates must reach end-of-file, Windows drive-relative member names
rejected, Drive confirm-form action pinned to google.com, non-2xx hops
surface their status, and the interstitial read is bounded.