The issue.make ui-visual-update UI_ARGS=<path> re-recorded every screenshot baseline in the repo rather than the one file
named. vitest takes the positional after a bare --update as the
flag's value, so the path was swallowed and the run had no filter at
all; two paths were worse — the first was eaten and only the second
ran. That is #196's own hazard living in the tool meant to resolve it:
the rule is "refresh the reference your change moved, and never one you
did not cause", and the documented way to refresh one blessed all ten.
The change.--update=true in the ui-visual-update recipe, with
the reason in a comment above it because =true reads like something
to tidy away, and UI_ARGS=<path> to filter in the help text.
I also ran the issue's closing sweep — every other place a variable is
interpolated after a flag (--seed, --fresh, --label, --range, E2E_ARGS, and UI_ARGS's other two call sites). The trap is specific
to this one recipe: the rest are either value flags that always carry a
value, or hand-rolled case parsers in shell scripts. make ui-visual
and make ui-test are unaffected — their $(UI_ARGS) follows run,
with no flag to swallow it.
Verification. Mostly against vitest's collector rather than by
re-recording, since the point is which files are selected.
tier
result
npx vitest list --filesOnly (honours the same filter)
bare --update <path> lists 99 files; --update=true <path> lists 1. --update a b lists only b; --update=true a b lists both. The issue's measurement reproduced, then inverted.
make ui-visual-update UI_ARGS='test/components/transport.test.ts'
1 file, 40 tests, git status clean afterwards. On the pre-fix recipe that command is the whole suite.
that the flag still updates
checked rather than assumed: with a deliberately wrong image in seek-bar's baseline slot the same command passes and rewrites it, where make ui-visual fails on it. The committed baseline was restored byte-for-byte from a copy taken first; the tree is clean.
make skill-check
47 documented targets, all present.
Not run, and why: no Go, no shipped frontend code and no .sql/ .templ changed, so make lint, make test, make generate and make bindings have nothing to say here; make e2e needs a running
app and this recipe is not in that path; make ui-test exercises the
suite, not the recipe that invokes it.
Deliberately not done. No documentation edit. #196's branch (open,
unmerged) rewrites .pi/skills/yellowjacket-dev/references/ui-tier.md
and its new text carries "Until #204 lands, record one file with --update=true" — editing the same paragraph from here would be a
conflict for the sake of one sentence. Whichever of the two merges
second should trim that bullet to the rule without the workaround.
One observation, filed nowhere because it is the property the tier is
already opt-in for: a fresh capture of seek-bar on this machine
differs byte-wise from the committed baseline while comparing green.
**The issue.** `make ui-visual-update UI_ARGS=<path>` re-recorded
**every** screenshot baseline in the repo rather than the one file
named. vitest takes the positional after a bare `--update` as the
flag's *value*, so the path was swallowed and the run had no filter at
all; two paths were worse — the first was eaten and only the second
ran. That is #196's own hazard living in the tool meant to resolve it:
the rule is "refresh the reference your change moved, and never one you
did not cause", and the documented way to refresh one blessed all ten.
**The change.** `--update=true` in the `ui-visual-update` recipe, with
the reason in a comment above it because `=true` reads like something
to tidy away, and `UI_ARGS=<path> to filter` in the help text.
I also ran the issue's closing sweep — every other place a variable is
interpolated after a flag (`--seed`, `--fresh`, `--label`, `--range`,
`E2E_ARGS`, and `UI_ARGS`'s other two call sites). The trap is specific
to this one recipe: the rest are either value flags that always carry a
value, or hand-rolled `case` parsers in shell scripts. `make ui-visual`
and `make ui-test` are unaffected — their `$(UI_ARGS)` follows `run`,
with no flag to swallow it.
**Verification.** Mostly against vitest's collector rather than by
re-recording, since the point is which files are selected.
| tier | result |
|---|---|
| `npx vitest list --filesOnly` (honours the same filter) | bare `--update <path>` lists **99 files**; `--update=true <path>` lists **1**. `--update a b` lists only `b`; `--update=true a b` lists both. The issue's measurement reproduced, then inverted. |
| `make ui-visual-update UI_ARGS='test/components/transport.test.ts'` | 1 file, 40 tests, `git status` clean afterwards. On the pre-fix recipe that command is the whole suite. |
| that the flag still *updates* | checked rather than assumed: with a deliberately wrong image in `seek-bar`'s baseline slot the same command **passes** and rewrites it, where `make ui-visual` fails on it. The committed baseline was restored byte-for-byte from a copy taken first; the tree is clean. |
| `make skill-check` | 47 documented targets, all present. |
Not run, and why: no Go, no shipped frontend code and no `.sql`/
`.templ` changed, so `make lint`, `make test`, `make generate` and
`make bindings` have nothing to say here; `make e2e` needs a running
app and this recipe is not in that path; `make ui-test` exercises the
suite, not the recipe that invokes it.
**Deliberately not done.** No documentation edit. #196's branch (open,
unmerged) rewrites `.pi/skills/yellowjacket-dev/references/ui-tier.md`
and its new text carries "**Until #204 lands**, record one file with
`--update=true`" — editing the same paragraph from here would be a
conflict for the sake of one sentence. **Whichever of the two merges
second should trim that bullet to the rule without the workaround.**
One observation, filed nowhere because it is the property the tier is
already opt-in for: a fresh capture of `seek-bar` on this machine
differs byte-wise from the committed baseline while comparing green.
Closes #204
vitest parses a bare `--update` as taking the next positional as its
value, so `make ui-visual-update UI_ARGS=<path>` handed the path to the
flag and ran with no filter at all: 99 files, every baseline in the repo
re-recorded, any stale one blessed in silence. Two paths were worse
still — the first was eaten and only the second ran.
That is #196's own hazard living in the tool meant to resolve it: the
rule is "refresh the reference your change moved and never one you did
not cause", and the documented way to refresh one refreshed the set.
`--update=true` is the whole fix, with the reason beside it because
`=true` reads like something to tidy away. `make ui-visual` and
`make ui-test` are unaffected — their `$(UI_ARGS)` follows `run`, with
no flag to swallow it — and no other target interpolates a variable
after a boolean flag.
Closes#204
CI green on the first run: check (task 21828) and e2e (task 21829)
both success, over both Playwright projects.
Not merging — leaving it for review. #204 keeps Status/In Progress.
CI green on the first run: `check` (task 21828) and `e2e` (task 21829)
both success, over both Playwright projects.
Not merging — leaving it for review. #204 keeps `Status/In Progress`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The issue.
make ui-visual-update UI_ARGS=<path>re-recordedevery screenshot baseline in the repo rather than the one file
named. vitest takes the positional after a bare
--updateas theflag's value, so the path was swallowed and the run had no filter at
all; two paths were worse — the first was eaten and only the second
ran. That is #196's own hazard living in the tool meant to resolve it:
the rule is "refresh the reference your change moved, and never one you
did not cause", and the documented way to refresh one blessed all ten.
The change.
--update=truein theui-visual-updaterecipe, withthe reason in a comment above it because
=truereads like somethingto tidy away, and
UI_ARGS=<path> to filterin the help text.I also ran the issue's closing sweep — every other place a variable is
interpolated after a flag (
--seed,--fresh,--label,--range,E2E_ARGS, andUI_ARGS's other two call sites). The trap is specificto this one recipe: the rest are either value flags that always carry a
value, or hand-rolled
caseparsers in shell scripts.make ui-visualand
make ui-testare unaffected — their$(UI_ARGS)followsrun,with no flag to swallow it.
Verification. Mostly against vitest's collector rather than by
re-recording, since the point is which files are selected.
npx vitest list --filesOnly(honours the same filter)--update <path>lists 99 files;--update=true <path>lists 1.--update a blists onlyb;--update=true a blists both. The issue's measurement reproduced, then inverted.make ui-visual-update UI_ARGS='test/components/transport.test.ts'git statusclean afterwards. On the pre-fix recipe that command is the whole suite.seek-bar's baseline slot the same command passes and rewrites it, wheremake ui-visualfails on it. The committed baseline was restored byte-for-byte from a copy taken first; the tree is clean.make skill-checkNot run, and why: no Go, no shipped frontend code and no
.sql/.templchanged, somake lint,make test,make generateandmake bindingshave nothing to say here;make e2eneeds a runningapp and this recipe is not in that path;
make ui-testexercises thesuite, not the recipe that invokes it.
Deliberately not done. No documentation edit. #196's branch (open,
unmerged) rewrites
.pi/skills/yellowjacket-dev/references/ui-tier.mdand its new text carries "Until #204 lands, record one file with
--update=true" — editing the same paragraph from here would be aconflict for the sake of one sentence. Whichever of the two merges
second should trim that bullet to the rule without the workaround.
One observation, filed nowhere because it is the property the tier is
already opt-in for: a fresh capture of
seek-baron this machinediffers byte-wise from the committed baseline while comparing green.
Closes #204
CI green on the first run:
check(task 21828) ande2e(task 21829)both success, over both Playwright projects.
Not merging — leaving it for review. #204 keeps
Status/In Progress.