@modelstatus/cli 0.1.36 → 0.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modelstatus/cli",
3
- "version": "0.1.36",
3
+ "version": "0.1.37",
4
4
  "description": "Track which AI models you use, where, and never get surprised by a retirement. Free offline model-health for any repo (mm status), browser sign-in for cloud inventory + alerts.",
5
5
  "keywords": [
6
6
  "llm",
@@ -394,8 +394,14 @@ function stepPlaying(s, input, dt) {
394
394
  // (and isn't trying to jump). Up only latches if there's run above; down only
395
395
  // if there's run below — so standing at an endpoint and pressing "off" doesn't
396
396
  // glue you to the ladder.
397
- const wantUp = input.up && onLad && row > onLad.yTop;
398
- const wantDown = input.down && onLad && row < onLad.yBottom;
397
+ // Gate on the FIXED-POINT position, not the rounded cell: once the player rounds
398
+ // into the top cell (cell(py)===yTop) but py hasn't yet reached the exact snap
399
+ // point toFx(yTop), `cell(py) > yTop` is false — the climb would stall a fraction
400
+ // below the girder AND the unlatch can't fire while up is held → a deadlock at
401
+ // the top of every ladder. Comparing px/py in fx lets the climb finish onto the
402
+ // girder (the step-off below snaps + unlatches). Same fix for descending.
403
+ const wantUp = input.up && onLad && p.py > toFx(onLad.yTop);
404
+ const wantDown = input.down && onLad && p.py < toFx(onLad.yBottom);
399
405
  if ((wantUp || wantDown) && !input.jump) {
400
406
  p.onLadder = true;
401
407
  p.vx = 0; p.vy = 0;