chore(deps): update dependency ink-stepper to v0.2.3 - #142
Conversation
d5ee4ee to
f732c90
Compare
dawsontoth
left a comment
There was a problem hiding this comment.
Blocked: this is a real regression from ink-stepper 0.2.3, not the old flake
ink/main.test.tsx has a history of flaking, so I checked carefully before attributing it — this one is caused by the bump.
CI evidence:
main(unchanged, commit2ac96543): I dispatchedverify-pr.yamlthree times — 3/3 green.- This PR:
Test (Node 24)has now failed twice (original run + my re-run of the failed job). - Siblings #143, #144, #145, #146 all carry the byte-identical
ink/main.test.tsxand all passTest. The only thing unique to this PR isink-stepper 0.2.1 → 0.2.3.
Local isolation — main's tree, COLUMNS=200, changing only ink-stepper:
| ink-stepper | npx vitest --run ink/main.test.tsx |
|---|---|
| 0.2.1 (main) | 1 failed / 5 passed |
| 0.2.3 (this PR) | 4 failed / 2 passed |
and those 4 are exactly the 4 CI reports:
AssertionError: expected '\n AI Provider API Key Model …' to contain 'Can you provide us with your OpenAI A…'
❯ ink/main.test.tsx:44:45 (same for Anthropic, Google, and 'Where are you hosting Ollama?')
The rendered frame shows the progress header but never the step body, i.e. the walkthrough never advances off step 1.
Likely cause
0.2.2/0.2.3 reworked step ordering. 0.2.1 assigned order from a module-global counter:
var globalMountOrder = 0;
...
if (orderRef.current === null) { orderRef.current = globalMountOrder++; }0.2.3 replaces that with a per-Stepper counter claimed in layout-effect order, plus an orderGeneration that forces every Step to re-claim when a new step id appears:
if (orderRef.current === null || claimedGenerationRef.current !== orderGeneration) {
orderRef.current = claimOrder();
claimedGenerationRef.current = orderGeneration;
}MainConfig's tests derive navigation from the rendered highlight (added in 706ec5f), so a change in when steps register/order shifts what's on screen at the moment the test writes input. Also new in this range: initialStep, onError, pulse, and a stable Step.id.
Note this is a 0.x line, where even a patch-looking bump can carry breaking behavior — worth treating ink-stepper as major-risk in Renovate until it hits 1.0.
Either the component needs a look at the new ordering semantics, or the walkthrough tests need to adapt to them — but it shouldn't merge as-is.
This PR contains the following updates:
0.2.1→0.2.3Release Notes
archcorsair/ink-stepper (ink-stepper)
v0.2.3Compare Source
Added
pulseprop onStepper- animates the current-step marker in the default progress bar bycycling its brightness (bright → normal → dim → normal), the same frame-swapping technique CLI
spinners use. Off by default; composes with custom
markers; ignored withrenderProgress.Fixed
marker) overflowed flush into the next label with no gap; overflowing labels now keep at least
one space of separation.
Changed
Example wizard polish: default pulsing markers (matching the README demo), a keycap-styled hint
bar per step showing only the keys active right now, an "m" key cycling marker themes to demo the
markersprop live, a braille spinner during async validation, and a color-coded lifecycle log.CI runs an ink compatibility matrix covering the full declared peer range - the exact 6.x floor
(6.6.0) and the latest 7.x - in addition to the lockfile-pinned version, so the dual-major claim
stays verified. An API-surface audit against ink 7 confirmed every ink API this library uses is
unchanged or additive across the two majors.
v0.2.2Compare Source
Added
onErrorprop onStepper- receives any error thrown by an asynccanProceedoronExitStepcallback. Without it, errors are logged via
console.errorinstead of crashing the host process.initialStepprop onStepper- starting step index for uncontrolled mode (default0, ignoredwhen the controlled
stepprop is provided).ProgressContext.stepsentries now carry a stableid, usable as a React key in customprogress renderers.
examples/wizard.tsx(bun run example,INITIAL_STEP=<n>to startelsewhere) exercising render-function steps,
useStepperInput, async validation,onError,a conditional step, and
goTo.Fixed
react/jsx-dev-runtime). The build nowruns with
NODE_ENV=production, emittingreact/jsx-runtime.in the tree.
canProceedoronExitStepescaped as unhandled rejections, whichterminates the host Node process. Navigation is now blocked and the error is reported.
goNext,goBack, andgoToare no-ops while validation is in flight or navigation is disabled -previously only the keyboard path honoured those guards.
goTonow fires the full lifecycle (onExitStep->onStepChange->onEnterStep) and can becancelled by returning
falsefromonExitStep. It still deliberately skipscanProceed(raw-jump semantics).
keys off the registered step id.
out of alignment with mixed-width markers. Widths are now per-step.
Removed
StepConfiginterface.Changed
inkpeer range is widened to^6.6.0 || ^7.0.0- the test suite passes against ink 7.1.1.The JSR import map pins
npm:ink@^7.0.0(Deno npm specifiers cannot express compound ranges, andJSR validates imports against the installed ink 7); a JSR publish dry run now gates the publish
workflow so an unsatisfiable import range fails before anything ships.
@biomejs/biome2.5.x with a migrated config,@types/bun,@types/react,bunup) andreact-devtools-coreremoved (unused; it pulled in ashell-quoteversion with a critical advisory).bun auditis clean for both the root and thedocs workspace, whose vitepress toolchain was also brought current.
onExitStepreturn type widened tovoid | boolean | Promise<void | boolean>. Side-effect-onlyhandlers no longer have to return a value; only an explicit
falsecancels navigation.active step is now pinned by id rather than by index, and these repairs fire no lifecycle callbacks.
typecheckandlintalongside tests, and typecheckstests/.checkjob, asserts the pushed tag matches bothpackage.jsonandjsr.json, and publishes to npm before JSR.jsr.jsonfrompackage.jsonvia the npm-styleversionlifecycle script(
scripts/sync-versions.ts+git add), so the release commit thatbun pm versiontags alwayscarries both manifests in agreement.
jsr.jsonnow excludestests/,examples/,docs/,.github/, andscripts/from the JSRpackage.
version, failing the run otherwise. Each registry's publish step is also guarded by an
already-published check, so re-running the workflow after a partial failure retries only the
registry that is still missing the version. The tag ↔ manifest assertion now runs in the
checkjob, before the credentialed publish job starts.
author,homepage,bugs, andsideEffects(scoped to./src/**, which marksevery published file under
dist/as side-effect free for consumer tree-shaking)..editorconfig.goTolifecycle, step-ordering rules, andthe input-coordination ordering caveat.
Configuration
📅 Schedule: (in timezone America/New_York)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.