Repository navigation
fix(decision): count failed actions as no progress in the stall guard - #844
Conversation
There was a problem hiding this comment.
All reported issues were addressed across 4 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
|
Thanks for the detailed repro, it pinpoints a real bug, but we'd like to fix it differently. Masking clock-shaped text means any real change that only touches such text (a time picker going 10:30 to 10:45, a score, a duration) reads as "nothing changed", and the regex duplicates In your repro every "Finish" tap failed with |
|
Makes sense, I've dropped the masking (672e778). |
|
Thanks! I merged main into this branch and renamed |
|
Thanks for this. #965 just landed and restructured the decision package, so this conflicts now. The fix is still wanted: It's the same one-line change in |
stalled() looked only at pageChanged, so a timer ticking on screen made every observation look new and hid a run of failed actions. In the repro every "Finish" tap failed with APP_UNREACHABLE while the rest timer ticked, and the model kept tapping until it claimed the step failed. An entry now stalls when it errored or left the page unchanged, and the blocked message says so. Any action that ran without an error and changed the page still breaks the run of three. Skipped picks and rejected done or failed claims also record an error in history, so they count too.
f1c7584 to
dfd2cb9
Compare
|
Rebased onto main and reapplied: the |
What and why
stalled()inpackages/decision/src/executor.tsonly readpageChanged, so on a screen with a ticking timer every observation looked new, and a run of failed actions never tripped it.doneorfailedclaim are history entries with an error too, so they count toward the three as well. Before, they counted only when the page had not changed. The changeset says so.executor.test.tsand the no-vision half of the point-tap test inexecutor-vision.test.ts); they now expect the new one.Verified
Ran it locally: yes
executor.tsand passes here.packages/decision/tests/executor.test.ts,blocks three failed actions while a timer ticks: every tap fails withAPP_UNREACHABLEwhile a clock node ticks each observation.e2e run tests/client-workout.e2e.ts --no-cachewith Jev 1.13. After typing, a number pad covers "Log set" and every tap on "Finish" fails withAPP_UNREACHABLEwhile the rest timer ticks.blockedafter 3 failed taps: "Three actions in a row failed or changed nothing on screen."failedand the check confirms it, so the run reportsACTION_FAILED, an app failure that isn't oneblockedafter 3 failed taps: "Three actions in a row failed or changed nothing on screen." All three still read as a page change, so the errors alone tripped the guardChecklist
pnpm changeset) for any change to a published package, or the change is testbed, docs, or CI only.!, the changeset body names what breaks and what replaces it, and the deprecation warning landed a window earlier (stability policy in CONTRIBUTING.md).docs/**/*.mdxpage for the behavior, andskills/e2e/if the skill describes it..d.tsreviewed,tests/types/sdk-types.tsupdated; wire change edits the schema and both fixtures.e2e/engine): changesets fore2e,@e2e-dev/web, and@e2e-dev/mobile.