Releases: crossworks-engineering/jackdaw
Release list
v0.6.117
v0.6.116
Desktop builds for v0.6.116. Publish deliberately once every platform's assets are attached.
v0.6.115
v0.6.115
The deployment tour waits for its first screen
MANTLE_TOUR used to start on whatever screen a visitor landed on and then push them to the tour's first route, so a deep link to Pages became a trip to the dashboard nobody asked for. The tour now opens only when the visitor is on its first screen, and re-checks on every route change so it opens when they get there. ?tour=<id> still opens from anywhere.
No other product change.
v0.6.114
v0.6.114
Tour fixes from the first live walk
- A step now measures the first visible match for its anchor. The account menu renders twice (desktop rail and mobile bar), and the hidden one is a zero-size box at the top-left corner, which is where that stop's card had pinned itself.
- The Traces stop frames the screen itself: traces are reached from the operator view, not the rail.
No other product change.
v0.6.113
v0.6.113
A guided tour
A tour is a scripted walk through the owner UI: a spotlight on one element at a time and a card beside it saying what that element is, with Next, Back and Skip. Arrow keys, Enter and Escape walk it. The dim never blocks the screen, so the highlighted control stays usable, and the tour never writes to the API.
MANTLE_TOUR=<id>on the client container opens a tour once per browser;?tour=<id>on any URL opens it on demand.- Tours are scripts in
client/web/lib/tour/tours.ts; steps point at stabledata-touranchors the shell now carries (brand,profile,nav:<href>,help,assistant,main,activity). - The card stays inside the viewport on whichever side fits, and centres over a target that fills the screen. The dim is a theme tint, so it reads correctly on every generated theme.
- Ships the
demotour: nine stops written for the public demo.
See docs/tour.md.
v0.6.112
v0.6.112
The route coverage gate, now in this repo
pnpm e2e:routes -- <base-url> walks every screen under client/web/app in a real browser against a deployment you name and fails on anything that does not actually render: an unresolved React placeholder, an empty content region, a 5xx behind a tidy empty state, a bounce to the login page. GET-only, so it is safe against a brain people rely on and against a read-only edge.
It came from the mantle demo branch, where its fixture-driven predecessor had shipped 85 blank screens. It lives here now because the route list is derived from the screens beside it, and those screens left the mantle repo in the August split.
- Fixtures for the dynamic screens added since: draws, changelog, the docs reader, account settings.
ROUTES_BEARERseeds the owner bearer and presence cookie, the same contract the split e2e suite uses, so it runs against a split deployment as well as the demo edge.ROUTES_ONLYnarrows the sweep;ROUTES_API_LOGwatches a local API log for server-side errors the browser cannot see.- A webfont blocked inside the app sandbox is noted, not failed, whether the block comes from CSP or from CORS on the sandbox's opaque origin.
No product code changed in this release.
v0.6.111
v0.6.111
Documentation only, published after the fact: the README now says how to run, get and develop the client after the split; dead links fixed; desktop media permissions noted; the detached-frontend example uses a placeholder host.
No product code changed. Superseded by v0.6.112 and later; this release is published so the version history has no gap.
v0.6.110
Desktop builds for v0.6.110. Publish deliberately once every platform's assets are attached.
v0.6.109
Desktop builds for v0.6.109. Publish deliberately once every platform's assets are attached.
v0.6.100
First cut since v0.6.93 — this release carries v0.6.94 through v0.6.100, none of which had ever been tagged.
The kit stopped forcing a choice between the house rule and the layout
Raw form controls: 188 → 0. house/no-raw-form-control is now error and pnpm lint runs at --max-warnings 0, the fourth and last house rule to finish its ratchet. Every <select>, radio, checkbox and inline field in the owner UI is a kit component, or carries a written reason for not being one.
Two size scales made that possible, both on Button's rungs so a field, a select and a button in one row line up without anyone hand-setting a height:
Inputgainedxs/sm/default/lg. Small boxed fields — a tab rename, a popover search — no longer have to drop out of the kit to be the right size.SelectTriggergained the same rungs, and its default moved fromh-9toh-10to matchInput. 28 of 76 call sites had been setting their own height, 15 of them spelling out the default they already had;/settings/profilewas rendering four selects 4px short of the four fields beside them.
Accessibility
Arrow keys now move the selection in radio groups, not just the focus — RadioGroup and ToggleGroup type="single" both. Native radios and the WAI-ARIA pattern select on arrow; these moved focus and left aria-checked behind.
It was a race between two Radix packages: roving focus defers the move through a setTimeout, while the radio group clears its "arrow key is down" flag from a document-level keyup — so the selection followed focus only if the key was still held when the deferred focus landed. Every automated key press loses that race (Playwright and CDP send keyup 0 ms after keydown), which is why a green e2e suite never caught it.
Three heartbeats radios that carried no name — so the browser never grouped them at all, giving three tab stops and dead arrow keys — are one RadioGroup each.
Regression net
pnpm e2e is green: 163 passed, 1 skipped. It was 135/161 when first measured this month.
Fixes
- The embedding config's provider and API key save correctly through the kit's
Select(a hidden native control would have submitted a sentinel value as the API key id). - The
/tableslist no longer restores into a half-collapsed state. - Checkboxes in the IMAP folder picker announce their folder name.