Repository navigation
Releases: adamgreenwell/wayfindr
Release list
v1.3.0
What's Changed
- Document 1.2.0 publication and verified ARM64 recovery by @adamgreenwell in #1132
- Fix Docker 29 managed image binding and add recoverable helper upgrades by @adamgreenwell in #1133
- Record clean helper upgrades and atomic-exchange recovery by @adamgreenwell in #1134
- Prepare 1.3.0 helper publication and bind VM upgrade provenance by @adamgreenwell in #1135
Full Changelog: v1.2.0...v1.3.0
v1.2.0
What's Changed
- Record 1.1.1 publication and begin 1.2.0 development by @adamgreenwell in #1104
- Add optional managed updates with durable progress and recovery by @adamgreenwell in #1128
- Harden terminal upgrades with staged activation and release verification by @adamgreenwell in #1120
- Add read-only update plans and installation capability reporting by @adamgreenwell in #1121
- Add the independent host updater and durable preparation journal by @adamgreenwell in #1122
- Protect managed updates with write draining and verified backup custody by @adamgreenwell in #1123
- Add root-managed update application and interruption recovery by @adamgreenwell in #1124
- Authorize operator updates and preserve host-backed history by @adamgreenwell in #1125
- Add exact release review and reconnecting update progress by @adamgreenwell in #1126
- Add disposable VM qualification tooling and failure recovery matrix by @adamgreenwell in #1127
- Patch widget test dependency and clarify managed update guidance by @adamgreenwell in #1130
Full Changelog: v1.1.1...v1.2.0
v1.1.1
What's Changed
- Let the release guard name the CI run it refused on by @adamgreenwell in #1096
- Begin 1.2.0 development after v1.1.0, and point the docs at it by @adamgreenwell in #1098
- Fix the pager's chevrons and the spacing of form field grids by @adamgreenwell in #1097
- Record that #994 closed on October 1 by @adamgreenwell in #1099
- Make dashboard typography, spacing, and work context consistent by @adamgreenwell in #1100
- Polish Reports, authentication, and dashboard keyboard flows by @adamgreenwell in #1102
- Make widget forms readable and easier to use on phones by @adamgreenwell in #1101
- Prepare the 1.1.1 patch release by @adamgreenwell in #1103
Full Changelog: v1.1.0...v1.1.1
v1.1.0
What's Changed
- Begin 1.1.0 development after v1.0.0, and point the docs at it by @adamgreenwell in #1090
- Accept ADR 0026: erasing a visitor, and exporting what is held about them by @adamgreenwell in #1091
- Erase a contact on request (ADR 0026, delivery 1) by @adamgreenwell in #1092
- Re-apply erasures after a restore (ADR 0026, delivery 2) by @adamgreenwell in #1093
- Export everything held about a contact (ADR 0026, delivery 3) by @adamgreenwell in #1094
- Release 1.1.0 by @adamgreenwell in #1095
Full Changelog: v1.0.0...v1.1.0
v1.0.0
What's Changed
- Begin 1.0.0 development after v0.11.0, and point the docs at it by @adamgreenwell in #1087
- Record #797's closure: a non-author installed Wayfindr from the public docs by @adamgreenwell in #1088
- Release 1.0.0 by @adamgreenwell in #1089
Full Changelog: v0.11.0...v1.0.0
v0.11.0
What's Changed
- Begin 1.0.0 development after v0.10.0, and point the docs at it by @adamgreenwell in #1081
- deps(deps-dev): bump jsdom from 30.1.0 to 30.1.1 in /packages/widget-js in the routine-updates group by @dependabot[bot] in #1078
- deps(deps): bump the routine-updates group in /apps/server with 3 updates by @dependabot[bot] in #1076
- Take laravel/ai 1.0 and read its renamed token counts by @adamgreenwell in #1082
- Give the account's people a Team page of their own by @adamgreenwell in #1083
- Split API and webhooks into an API tokens tab and a webhooks tab by @adamgreenwell in #1084
- Fold Integrations connections under their rows, and keep connection secrets out of the session by @adamgreenwell in #1085
- Release 0.11.0 by @adamgreenwell in #1086
Full Changelog: v0.10.0...v0.11.0
v0.10.0
What's Changed
- Recover draft release staging and failed-job reruns by @adamgreenwell in #1049
- Begin 1.0.0 development after v0.9.0 by @adamgreenwell in #1050
- Correct AI evidence identity and recapture guidance by @adamgreenwell in #1048
- Verify rendered operator version in public-artifact smoke by @adamgreenwell in #1052
- Update public docs and Wiki for published v0.9.0 by @adamgreenwell in #1051
- Keep alerting agents when Reverb is unreachable by @adamgreenwell in #1053
- Read the whole installer before running any of it by @adamgreenwell in #1054
- Make the articles pages speak the account area's component language by @adamgreenwell in #1055
- Deliver agent replies by email: the view read the mailer's $message by @adamgreenwell in #1060
- Email replies to visitors who wrote while the desk was away by @adamgreenwell in #1063
- Fix layout, density and copy defects on the Roles, Security, Audit and Operator access pages by @adamgreenwell in #1061
- Make visitor messages and SLA deadlines always reach an agent who can be alerted by @adamgreenwell in #1057
- Tab the automations index and land dry-run previews on their verdict by @adamgreenwell in #1059
- Scope row errors on labels and reply templates, and make template archiving undoable by @adamgreenwell in #1062
- Fix shown-once secrets, checkbox groups and dead hovers on API and Integrations by @adamgreenwell in #1058
- Give the account area a context sidebar by @adamgreenwell in #1064
- Stop offering a refused close, focus failed saves, and return to the proactive tab by @adamgreenwell in #1066
- Stop dashboard pages scrolling sideways on phones by @adamgreenwell in #1071
- Keep a refused article's body and close three small form gaps by @adamgreenwell in #1065
- Fix account-area layout and copy defects left after the context sidebar by @adamgreenwell in #1070
- Email ticket-page replies, and stop mailing email conversations into log by @adamgreenwell in #1067
- Make a malformed id in any URL a 404 rather than a 500 by @adamgreenwell in #1069
- Stop stale and rule-made closes from silencing visitor messages by @adamgreenwell in #1068
- Serve the widget minified by @adamgreenwell in #1072
- Refuse over-long widget messages up front and tag automated openers by @adamgreenwell in #1056
- Refuse an empty first message before opening its conversation by @adamgreenwell in #1073
- Darken --wf-muted so secondary text reaches AA on every fill by @adamgreenwell in #1075
- Refuse an unreadable widget request as unreadable, not as a missing site by @adamgreenwell in #1074
- Hold stranded reply emails for a delivering mailer, and collapse the context sidebar at 1100px by @adamgreenwell in #1079
- Release 0.10.0 by @adamgreenwell in #1080
Full Changelog: v0.9.0...v0.10.0
v0.9.0
What's Changed
- Speak German on the conversation detail page: the chrome by @adamgreenwell in #792
- Speak German in the cobrowse panel: the vocabulary by @adamgreenwell in #793
- Speak Italian: the vocabulary, the catalogues, and the pipeline that drafted them by @adamgreenwell in #803
- Say which languages reach whom, now that they differ by @adamgreenwell in #806
- Stop storing the query string a visitor was carrying by @adamgreenwell in #804
- Decide to watch visitors who have not made contact, and what that costs by @adamgreenwell in #801
- Record that somebody is here, and stop keeping them forever by @adamgreenwell in #807
- Tell the visitor before reporting, and stop when they say so by @adamgreenwell in #808
- Show who is on the site right now by @adamgreenwell in #809
- Stop shipping Blade directives to the browser as text by @adamgreenwell in #811
- Give the agent conversation socket the discipline the board already has by @adamgreenwell in #812
- Keep the realtime connection alive from the client by @adamgreenwell in #813
- Say plainly that the client keepalive does not replace the proxy setting by @adamgreenwell in #815
- deps(deps): bump the routine-updates group across 1 directory with 2 updates by @dependabot[bot] in #788
- Reduce the page addresses cobrowse stores by @adamgreenwell in #818
- Derive cobrowse pressure from the counts, not the sentence by @adamgreenwell in #819
- Send the rejection key to the widget, so it can say it in the visitor's language by @adamgreenwell in #820
- Correct the WebSocket keepalive documentation, in both self-hosting guides by @adamgreenwell in #816
- Give every agent their own clock, and convert at one seam by @adamgreenwell in #822
- Group a number the way the agent reading it groups numbers by @adamgreenwell in #824
- Write a date the way the reader writes dates by @adamgreenwell in #825
- Let an operator set the install's language and clock in the browser by @adamgreenwell in #823
- Verify what mail providers actually send, and document switching it on by @adamgreenwell in #821
- Say that an agent has a clock, and that their numbers follow them by @adamgreenwell in #826
- Sweep the addresses cobrowse already stored whole by @adamgreenwell in #827
- Record what has landed since 0.7.0, and correct what it made untrue by @adamgreenwell in #828
- Speak the agent's language on the reply-templates page by @adamgreenwell in #829
- Speak the agent's language on the ticket-labels page by @adamgreenwell in #830
- Let the articles pages speak the agent's language by @adamgreenwell in #831
- Let the API-tokens page speak the agent's language by @adamgreenwell in #832
- Let the live-visitors board speak the agent's language by @adamgreenwell in #833
- Say which surfaces speak the agent's language now by @adamgreenwell in #834
- Stop a translation catalogue declaring a key twice by @adamgreenwell in #835
- deps(deps): bump docker/login-action from 3 to 4 by @dependabot[bot] in #790
- deps(deps): bump laravel/framework from 13.26.1 to 13.29.0 in /apps/server in the routine-updates group by @dependabot[bot] in #817
- Use the ticket queue's eager-loaded audit events by @adamgreenwell in #840
- Measure the dashboard with a desk's worth of data in it by @adamgreenwell in #836
- Give the measurement desk a history the reports can read by @adamgreenwell in #844
- Measure the report tabs, and publish what they cost by @adamgreenwell in #846
- Cap the conversation queue at one page of rows by @adamgreenwell in #848
- Tell operators what the desk measurement found by @adamgreenwell in #851
- Decide the ticket queue's attention state in SQL by @adamgreenwell in #850
- Let the planner see the desk that was just seeded by @adamgreenwell in #852
- Move ticket external-issue filtering into SQL by @adamgreenwell in #854
- Cap the ticket queue at 200 rows by @adamgreenwell in #855
- Restore the test environment after production checks by @adamgreenwell in #856
- Select the conversation that owns the cobrowse fixture by @adamgreenwell in #857
- Age abandoned cobrowse sessions out of active queues by @adamgreenwell in #858
- Evaluate cobrowse attention in bounded chunks by @adamgreenwell in #859
- Translate the visitor directory and profiles by @adamgreenwell in #860
- Measure heavy-page cobrowse performance by @adamgreenwell in #865
- Establish Reverb concurrent-agent capacity by @adamgreenwell in #866
- Measure attachment retention at a large object count by @adamgreenwell in #867
- Translate the account audit screen by @adamgreenwell in #868
- Localize account operator access by @adamgreenwell in #869
- Localize account integrations by @adamgreenwell in #870
- Localize the account overview and team management by @adamgreenwell in #871
- Localize the operator language and region settings by @adamgreenwell in #872
- Localize the operator scanning settings by @adamgreenwell in #873
- Localize the operator mail settings by @adamgreenwell in #874
- Localize operator storage settings by @adamgreenwell in #875
- Localize backup settings and history by @adamgreenwell in #876
- Localize the backup restore flow by @adamgreenwell in #877
- Localize the guided setup checklist by @adamgreenwell in #878
- Localize the complete operator dashboard by @adamgreenwell in #879
- Localize the operator break-glass flow by @adamgreenwell in #880
- Localize the ticket detail workspace by @adamgreenwell in #881
- Localize the alert center by @adamgreenwell in #882
- Localize the support reports dashboard by @adamgreenwell in #883
- Localize the sites directory and creation flow by @adamgreenwell in #884
- Localize the hosted site tester by @adamgreenwell in #885
- Localize the Site Settings workspace by @adamgreenwell in #886
- Add the narrow public API write surface by @adamgreenwell in #887
- Add durable outbound webhooks by @adamgreenwell in #888
- Add TOTP two-factor authentication by @adamgreenwell in #889
- Add account-owned OpenID Connect single sign-on by @adamgreenwell in #890
- Add account-owned custom roles by @adamgreenwell in #891
- Add owner-controlled OIDC role provisioning by @adamgreenwell in #892
- Add business-hours SLA policies and breach warnings by @adamgreenwell in #893
- Add automatic assignment and routing by @adamgreenwell in #894
- Type the support lifecycle before au...
v0.7.0
What's Changed
- Point the installer at the readiness surface that still owns it by @adamgreenwell in #738
- deps(deps): bump the routine-updates group across 1 directory with 7 updates by @dependabot[bot] in #730
- Break the queue the backup job actually dispatches on by @adamgreenwell in #739
- Point the changelog at the release page's screenshots by @adamgreenwell in #740
- Let an agent recover their own password by @adamgreenwell in #766
- Give a site support hours, and tell visitors when nobody is home by @adamgreenwell in #765
- Ask a visitor who they are, when the site wants to know by @adamgreenwell in #769
- Let somebody close the desk early, and mean it by @adamgreenwell in #770
- Record when conversations close and reopen, before it is too late by @adamgreenwell in #767
- List the visitors this desk has heard from by @adamgreenwell in #771
- Report whether support is working by @adamgreenwell in #772
- Give the widget a language by @adamgreenwell in #774
- Let a visitor find the answer before they ask by @adamgreenwell in #776
- Let a site's widget look like it belongs to them by @adamgreenwell in #777
- Let people email support, and get an answer back by @adamgreenwell in #778
- Ask the visitor whether it helped by @adamgreenwell in #780
- Report the tickets, not just the conversations by @adamgreenwell in #779
- Read-only public API, with the isolation model decided first by @adamgreenwell in #783
- Run the suite against the database people actually deploy by @adamgreenwell in #781
- Dashboard language: the seam, and the first surface by @adamgreenwell in #786
- Speak German on the conversation queue by @adamgreenwell in #787
- Teach the app shell to speak by @adamgreenwell in #789
- Speak German on the ticket queue by @adamgreenwell in #791
- Describe the product that exists by @adamgreenwell in #794
Full Changelog: v0.6.0...v0.7.0
v0.6.0
No operator action required. Pull, restart, and migrations run themselves.
The interface renovation described in ADR 0014 lands in this release. Your data, URLs, and the install snippet on your pages are untouched — this is the same application wearing a different face.
One access change is worth reading before you upgrade: the readiness report is now operator-only. See the changelog for what to do if someone other than a platform operator was using it.
Every site has a colour, and a queue fits on a screen
Rows were about 130px behind three stacked bands of controls. Lanes now carry their own counts, and each row wears its site's colour — because the question a desk covering many sites asks all day is whose visitor is this?
A conversation looks like a conversation
The widget always showed a back-and-forth. The agent's view of the same exchange stacked every message full width in one column, so only the visitor got a chat and the agent got a log.
Dark mode, everywhere
Tokens are authored with a light and a dark value from the outset, so both modes ship together rather than one being retrofitted later.
The operator console says what it does
Sixteen sections on one page became five tabs named for the question being asked. Pages named after the machinery behind them — break-glass, dogfood readiness, post-install smoke path — are named for the job instead.
What's Changed
- Generate design tokens from one source for both interfaces by @adamgreenwell in #721
- Rebuild the shell on a persistent rail and light up the palette by @adamgreenwell in #723
- Rebuild the conversation queue so a queue fits on a screen by @adamgreenwell in #725
- Make the agent's transcript a conversation, and give the widget the tokens by @adamgreenwell in #727
- Bring the operator console inside the application shell by @adamgreenwell in #728
- Give every site a colour, from the operator's choice to the visitor's widget by @adamgreenwell in #724
- Ship the typeface and the icon set with the application by @adamgreenwell in #722
- Put tickets, alerts and sites on the queue pattern by @adamgreenwell in #726
- 0.6.0 interface renovation by @adamgreenwell in #729
- Let an agent walk the queue without going back to it by @adamgreenwell in #731
- Say "Operator access" where the product said "break-glass" by @adamgreenwell in #732
- Give readiness one owner, and make it the operator's by @adamgreenwell in #733
- Say what the screen is for, not what we called it internally by @adamgreenwell in #734
- Group the operator console into five tabs by @adamgreenwell in #735
- Fix five things a real install showed and the suite could not by @adamgreenwell in #736
- Constrain the readiness grid track, not the elements inside it by @adamgreenwell in #737
Full Changelog: v0.5.0...v0.6.0



