What's Changed
- docs(changelog): trim recent releases and hold back the iPhone announcement by @dastratakos in #670
- feat(ios): remove background tiles from provider logos and status icons by @dastratakos in #666
- fix(ios): let the voice screen follow the system appearance by @dastratakos in #671
- fix(ios): move the voice screen's status text below the talk button by @dastratakos in #672
- feat(ios): open a Conductor cloud session in its own app by @dastratakos in #665
- feat(web): ship the About page headshots as full-resolution JPEGs by @dastratakos in #673
- refactor(session): drop the announcement news check and rename observedAt to lastActivityAt by @charleslpan in #663
- fix(ios): fill the voice screen's talk button with its tint by @dastratakos in #675
- feat(ios): WatchConnectivity sign-in handoff by @dastratakos in #653
- refactor(session): remove recap and re-source what it carried by @charleslpan in #664
- docs(changelog): add screenshots and allow real-session captures by @dastratakos in #676
- feat(ios): remove an archived chat at the press and pop its screen by @dastratakos in #674
- feat(ios): carry the desktop's acts in the phone's conversation by @dastratakos in #659
- feat(providers): detect Claude desktop app chats and open them by deep link by @dastratakos in #678
- feat(settings): replace Pause announcements with Announce when sessions need you by @dastratakos in #686
- feat(ios): let the voice conversation outlive the voice screen by @dastratakos in #667
- feat(ios): re-seed a new voice call with the recent conversation by @dastratakos in #668
- feat(session): make the notice tracker's memory portable by @dastratakos in #687
- feat(web): register phone push tokens and add an APNs sender by @dastratakos in #688
- feat(ios): add native watchOS session companion by @dastratakos in #677
- feat(ios): draw the Luke face in the voice screen's empty state by @dastratakos in #694
- feat(ios): add a typed way in on the voice screen by @dastratakos in #695
- fix(ios): center the sessions list's empty states by @dastratakos in #698
- fix(ios): show the Watch app as Luke by @dastratakos in #700
- fix(ios): improve Markdown rendering by @dastratakos in #702
- feat(ios): add bottom tab navigation with Sessions, Luke, and New by @dastratakos in #699
- feat(ios): watchOS push-to-talk by @dastratakos in #693
- fix(ios): sign the watch app so a paired Apple Watch can install it by @dastratakos in #701
- feat(ios): carry the phone's voice tools on the watch by @dastratakos in #703
- fix(ios): restore controls after keyboard dismissal by @dastratakos in #708
- feat(ios): count product events from the watch app like the phone by @dastratakos in #705
- fix(ios): open the watch's Realtime socket where watchOS grants it by @dastratakos in #704
- Add watchOS voice settings button by @dastratakos in #712
- fix(ios): match watch talk prompt by @dastratakos in #717
- feat(web): prerender the site's pages by @dastratakos in #716
- fix(desktop): open a bubble's popups on the pill's own strip height by @dastratakos in #715
- Remove duplicate iOS session search button by @dastratakos in #734
- feat(ios): keep the phone's and watch's settings equal over WatchConnectivity by @dastratakos in #733
- feat(providers): add incremental transcript reads and spool watching by @charleslpan in #735
- feat(brain): add the guarded brain runtime and persistent request lifecycle by @charleslpan in #736
- feat(web): serve hosted brain inference alongside existing clients by @charleslpan in #737
- feat(desktop): switch conversation and announcements to the brain by @charleslpan in #738
- chore: remove migration remnants left behind the brain cutover by @charleslpan in #739
- feat(guide): ground the persona in the evidence each surface actually hands Luke by @charleslpan in #741
- refactor(desktop): give the hidden voice window its own narrow bootstrap by @charleslpan in #742
- docs(web): draw the current panel in the site mock and README talking capture by @charleslpan in #744
- refactor(desktop): drop the roster's spoken tally sentence by @dastratakos in #743
- feat(desktop): render Markdown in captions and History by @dastratakos in #740
- refactor(runtime): introduce durable agent and conversation state by @charleslpan in #745
- feat(desktop): keep History stamps off the edge until the thread is pulled by @dastratakos in #747
- chore(ios): prepare the TestFlight archive without naming a team by @dastratakos in #748
- refactor(brain): separate agent execution from model transport by @charleslpan in #746
- feat(history): separate transcripts from context and adopt session lifecycle by @charleslpan in #749
- feat(runtime): add registries, workspace prompts, and configured tool policy by @charleslpan in #750
- Add Conductor Fable 5.1 support by @dastratakos in #758
- Add Conductor GPT-6 Astra support by @dastratakos in #759
- feat(brain): default to no automatic session reset, keeping stored history and old checkpoints by @charleslpan in #753
- feat(runtime): route observed sessions into independent conversations by @charleslpan in #751
- feat(history): date the thread over long silences the way iMessage does by @dastratakos in #762
- feat(agents): add durable child execution and completion handoff by @charleslpan in #752
- fix(brain): withdraw a cancelled queued ask's words before its turn opens by @charleslpan in #761
- fix(desktop): leave a closing conversation to its close, and reopen only after it by @charleslpan in #764
- feat(memory): add shared notebooks and cross-conversation retrieval by @charleslpan in #755
- feat(memory): add capture, pre-compaction flush, and consolidation by @charleslpan in #756
- refactor(agents): type the child access, one child-end shape, and wiring-children by @charleslpan in #763
- refactor(memory): host the notebook index and recall in packages/memory behind injected seams by @charleslpan in #766
- refactor(desktop): introduce the Gateway client and node protocol by @charleslpan in #757
- Persist iOS workspace agent defaults by @dastratakos in #772
- fix(desktop): keep the lead provider mark still as the capsule unfolds by @dastratakos in #777
- feat(gateway): run Luke's runtime in a Gateway process of its own, with the desktop as its operator client and native node by @charleslpan in #760
- fix(memory): sync follow-on, exact-token History admission, trusted recall signals, live recall cache invalidation by @charleslpan in #769
- feat(memory): durable flush cycle and memory maintenance cleanup (PR 8 follow-up) by @charleslpan in #767
- refactor(desktop): seat History's Clear beside the tab bar by @dastratakos in #778
- fix(memory): let a recall run settle only its own in-flight registration by @charleslpan in #770
- fix(memory): generic private-key header, whole-block note exclusion, and a settled flush-marker write by @charleslpan in #771
- fix(gateway): restore memory start, trace forwarding, and quit event flush after the process split by @charleslpan in #779
- refactor(memory): move the consolidation sweep into the memory package and fold the maintenance duplicates (PR 8 follow-up part 3) by @charleslpan in #780
- Add hosted account preferences contract by @dastratakos in #773
- chore(web): remove the oauth-preview page by @charleslpan in #781
- refactor(providers): remove speculative auth scheme and hook-spec generality by @charleslpan in #783
- refactor(desktop): table-drive the hotkey registrar by @charleslpan in #786
- chore(web): remove the legacy attention review and subject derivation surface by @charleslpan in #782
- chore(tools): keep one copy of the anti-slop lint rules by @charleslpan in #785
- ci: run the full check once per pull request by @charleslpan in #787
- Sync account preferences on desktop by @dastratakos in #774
- refactor(analytics): import the credentials vocabulary instead of mirroring it by @charleslpan in #784
- chore(design): delete generated brand assets nothing references by @charleslpan in #788
- refactor(gateway): remove conversation operations and protocol methods nothing calls by @charleslpan in #797
- test(ios): parity with the TypeScript contract, and a testable app target by @charleslpan in #793
- chore: delete compatibility branches for installs that never existed by @charleslpan in #790
- test(packages): fill the holes by @charleslpan in #796
- refactor(session): split the vocabulary and unify Session with its observation by @charleslpan in #794
- chore(desktop): delete dead files and test-only production code by @charleslpan in #791
- refactor(host): one onboarding state file by @charleslpan in #804
- refactor(memory): remove consolidation and recall by @charleslpan in #789
- feat(wire): a schema combinator by @charleslpan in #792
- feat(iOS): sync account preferences by @dastratakos in #775
- chore(web): remove the v1 brain contract and the usage route by @charleslpan in #798
- feat(ios): uncover conversation timestamps with a sideways pull by @dastratakos in #799
- test(desktop): delete tests that assert source text, libraries, or one-liners by @charleslpan in #805
- feat(watch): uncover conversation timestamps with a sideways pull by @dastratakos in #801
- refactor(hosted): import the vocabularies instead of mirroring them by @charleslpan in #800
- fix(ios): build the workspace sheet against the optional model default by @dastratakos in #807
- feat(ios): date the conversation after a long silence by @dastratakos in #802
- chore(desktop): remove the compatibility barrel and duplicate wire guards by @charleslpan in #806
- feat(watch): date the conversation after a long silence by @dastratakos in #803
- test(providers): a contract suite over recorded fixtures by @charleslpan in #808
- chore(packages): delete dead exports by @charleslpan in #809
- refactor: fold one-caller files into their callers by @charleslpan in #810
- refactor(desktop): one native line-watcher by @charleslpan in #815
- refactor(host): one settings-store write path by @charleslpan in #816
- feat(acts): admit() mints the only ValidatedAct by @charleslpan in #812
- feat(web): one hosted quota counter by @charleslpan in #811
- test(desktop): shared fixtures by @charleslpan in #813
- refactor: one home for each copy-pasted helper by @charleslpan in #817
- chore: delete test-only knobs from production signatures by @charleslpan in #818
- refactor(hosted): wire shapes as schemas; split hosted-service; dedupe web routes by @charleslpan in #814
- refactor(providers): a provider is a plugin value by @charleslpan in #819
- refactor(web): split the admin dashboard by @charleslpan in #821
- refactor(acts): adapters accept only ValidatedAct; delete the redundant layers by @charleslpan in #822
- refactor(providers): OMP as a plugin by @charleslpan in #823
- refactor(gateway): keep the protocol; remove the local second-process spawner by @charleslpan in #820
- refactor(providers): Claude Code as a plugin by @charleslpan in #824
- refactor(providers): Codex local as a plugin by @charleslpan in #825
- refactor(providers): Codex cloud as a plugin by @charleslpan in #826
- refactor(providers): Superset as a plugin by @charleslpan in #828
- refactor: extract packages/gateway and packages/host from the desktop by @charleslpan in #827
- refactor(providers): fold process and superset into providers by @charleslpan in #830
- refactor(providers): Conductor as a plugin, and the last base class goes by @charleslpan in #829
- refactor(credentials): fold account and trackers into credentials by @charleslpan in #832
- refactor(host): split composeHost into composers by @charleslpan in #833
- refactor(runtime): fold runtime-contracts into runtime by @charleslpan in #831
- refactor(credentials): one loopback consent flow by @charleslpan in #834
- refactor(session): fold issues and fixtures into session by @charleslpan in #836
- refactor(voice): the capability assembler stays a package; fold the minter subclass by @charleslpan in #838
- refactor(brain): fold runtime-store into brain/src/store by @charleslpan in #837
- refactor(desktop): a composition root with services that start and stop by @charleslpan in #835
- refactor(realtime): move the conversation model and standing context out of the transport package by @charleslpan in #839
- refactor(brain): split the agent into its collaborators by @charleslpan in #840
- refactor(brain): one transport base by @charleslpan in #843
- refactor(desktop): main owns one AppState document by @charleslpan in #842
- refactor(desktop): speak-only is a type by @charleslpan in #841
- docs: delete orphaned and narrating comments in packages by @charleslpan in #844
- refactor(desktop): split the conversation call into its collaborators by @charleslpan in #845
- refactor(desktop): the renderer subscribes to app:state by @charleslpan in #846
- refactor(voice): voice policy leaves the React hook by @charleslpan in #848
- refactor(LUKE-96): rename History to Conversation and acts to actions by @dastratakos in #795
- refactor(desktop): one act channel and one registrar by @charleslpan in #849
- refactor(desktop): the introduction runs as a panel route by @charleslpan in #847
- refactor(desktop): split the App component by @charleslpan in #850
- refactor(settings): declare each setting once by @charleslpan in #853
- fix(desktop): retire the developer's idle call and end an expired one quietly by @charleslpan in #854
- refactor(runtime): remove the scheduled heartbeat and carry a prompt cache key by @charleslpan in #855
- refactor(desktop): one connection row and one confirm swap by @charleslpan in #856
- fix(brain): migrate a pre-rename store forward instead of refusing it by @charleslpan in #857
- refactor(desktop): the guide derives from the schema by @charleslpan in #858
- fix(desktop): admit a voice view whose live lines are still streaming by @charleslpan in #859
- fix(desktop): draw the listening meter while a press's call opens by @charleslpan in #861
- docs: delete orphaned and narrating comments in apps by @charleslpan in #860
- feat(LUKE-97): Postgres schema and store for the hosted conversation by @dastratakos in #851
- docs: one agent guide per directory, and stale statements by @charleslpan in #862
- feat(LUKE-98): device registration with presence for Mac, iPhone, and watch by @dastratakos in #852
- docs: split AGENTS.md's two 1,000-line bullet lists into sections by @charleslpan in #864
- feat(providers): the brain reads a Conductor session's conversation by @charleslpan in #865
- fix(voice): captions follow the preference and the mute alone by @dastratakos in #869
- fix(realtime): ask the voice for the brain's words verbatim by @dastratakos in #870
- fix(host): age settled sessions off the roster again by @dastratakos in #866
- refactor(providers): drop Codex cloud observation and the composite adapter by @charleslpan in #696
- feat(desktop): draw Luke's turn in the thread and make the composer disc its stop by @dastratakos in #873
- fix(actions): a target_id cannot hide a project listed without one by @dastratakos in #876
- fix(desktop): an open asked of Luke stands the panel down again by @dastratakos in #879
- fix(brain): let the hold, the live exchange, and a closed chat reach the brain by @dastratakos in #877
- fix(desktop): draw a refused typed ask on the caption strip again by @dastratakos in #878
- fix(desktop): restore the row composer and provider-advertised controls by @dastratakos in #880
- feat(wire): IDisposable, DisposableStore, and the Emitter/Event pair by @charleslpan in #871
- chore(repo): break the two barrel cycles and drop the tests that assert nothing by @charleslpan in #872
- refactor(host): the composers share one ComposerContext by @charleslpan in #867
- chore(repo): trim declared dependencies that no import reaches by @charleslpan in #868
- refactor(hosted): one AccountCall behind every call to Luke's service by @charleslpan in #874
- feat(LUKE-99): observe Conductor on a cron and store the roster snapshot by @dastratakos in #863
- fix(brain): keep every message a run said, and draw its reply once by @dastratakos in #891
- feat(desktop): caption every segment under the housing by @dastratakos in #883
- fix(actions): ignore a volunteered effort on a setting that takes none by @dastratakos in #895
- feat(desktop): play the conversation wait's thinking animation on the notch strip by @dastratakos in #896
- fix(voice): draw the developer's speech live in Conversation by @dastratakos in #899
- feat(voice): hold a spoken turn's place in the thread until its first words by @dastratakos in #902
- fix(brain): wake the brain for cloud sessions too by @charleslpan in #903
- feat(guide): rebuild the persona as rules and retire SOUL.md by @charleslpan in #875
- feat(realtime): briefings join the conversation, and every call is seeded from the record by @charleslpan in #905
- refactor(hosted): three callers stop copying the account call by @charleslpan in #887
- refactor(realtime): collapse the voice scenes into one table and one function by @charleslpan in #901
- test: assert values and structure, never the words by @charleslpan in #886
- fix(desktop): drop a quit report to a closed stderr instead of crashing by @charleslpan in #906
- chore: remove dead code and gate unused exports with knip by @charleslpan in #907
- feat(gateway): live session methods and event by @charleslpan in #909
- feat(brain): backend preamble, streamed reply, slow-step and settled seams by @charleslpan in #910
- feat(live): add the @sidecar/live wire package by @charleslpan in #911
- feat(hosted): live session contract and service paths by @charleslpan in #912
- feat(web): internal voice authorize and usage routes by @charleslpan in #913
- feat(voice): live session sources by @charleslpan in #914
- feat(voice-service): hosted voice service by @charleslpan in #915
- fix(providers): render transcript messages whole and walk Conductor chats to their end by @charleslpan in #916
- feat(LUKE-115): reasoning summaries, response ids, and usage on the run by @dastratakos in #918
- feat(LUKE-110): UIMessage storage vocabulary by @dastratakos in #917
- feat(host): live sideband and live session service by @charleslpan in #921
- feat(LUKE-118): the notebook as a memory provider by @dastratakos in #920
- feat(LUKE-111): one output envelope for every action tool by @dastratakos in #922
- feat(LUKE-119): conversations, messages, and turns tables by @dastratakos in #924
- feat(LUKE-117): context derived from UIMessages by @dastratakos in #925
- feat(LUKE-112): run events for every turn kind by @dastratakos in #923
- fix(LUKE-117): keep retained rows in written order across a compaction cut by @dastratakos in #927
- feat(LUKE-120): events, prompts, tool_sets, and provider_cursors tables by @dastratakos in #926
- feat(LUKE-147): name every brain-authored user message in the metadata vocabulary by @dastratakos in #928
- feat(LUKE-121): voice_sessions and voice_transcript_segments tables by @dastratakos in #931
- feat(LUKE-133): the Conversation view selection by @dastratakos in #930
- chore: collapse generated files in GitHub diffs by @dastratakos in #932
- feat(LUKE-116): compaction as a summary message by @dastratakos in #929
- refactor(LUKE-113): action tools as modules by @dastratakos in #935
- feat(LUKE-135): render UIMessage tool parts and the action envelope by @dastratakos in #936
- feat(desktop): the voice window becomes a GPT Live peer by @charleslpan in #933
- refactor(web): host the voice service on Vercel Functions by @charleslpan in #934
- feat(LUKE-123): the store writer by @dastratakos in #937
- feat(LUKE-136): fold turns, collapse read tools, mark own judgment by @dastratakos in #939
- refactor(LUKE-114): read, workspace, memory, announce, and delegation tools as modules by @dastratakos in #940
- refactor(host): remove the speech arbiter ledger and receiver epochs by @charleslpan in #942
- feat(LUKE-124): message reads and soft delete by @dastratakos in #938
- fix(LUKE-148): an unknown action is not a refusal on the record by @dastratakos in #943
- feat(settings): live voices, no speed by @charleslpan in #941
- feat(desktop): the introduction is a greeting by @charleslpan in #945
- fix(host): register the live exchange before awaiting the record write by @charleslpan in #949
- fix(LUKE-149): an unknown action reads as unknown to the model on resume by @dastratakos in #951
- feat(LUKE-125): the voice writer by @dastratakos in #947
- chore(deps): pnpm catalog for shared dependencies by @charleslpan in #944
- refactor(LUKE-150): carry the lost-result envelope on the ContextEngine seam by @dastratakos in #954
- feat(LUKE-130): ratings as events by @dastratakos in #952
- refactor(voice): remove push-to-talk orchestration and renderer reply claims by @charleslpan in #955
- feat(deps): add vitest and root vitest projects configuration by @charleslpan in #948
- test(wire): run wire's tests on vitest by @charleslpan in #950
- refactor: delete @sidecar/realtime, keep the phone's mint document by @charleslpan in #958
- feat(LUKE-99): serve and admit against the stored roster snapshot by @dastratakos in #881
- fix(voice): the microphone follows the talk key by @charleslpan in #956
- feat(LUKE-101): per-resource read routes by @dastratakos in #953
- test(tools): run ios-parity and trace-export tests on vitest by @charleslpan in #960
- chore(deps): pin effect 3.22.2 in the catalog and spike it in wire by @charleslpan in #946
- test(providers): run providers' tests on vitest by @charleslpan in #965
- perf(web): bundle the Vercel functions instead of handing the builder TypeScript by @charleslpan in #959
- chore(repo): finish the Effect ADR and budget the renderer bundles by @charleslpan in #971
- test(gateway): run gateway, devtrace, settings, and voice tests on vitest by @charleslpan in #962
- chore(wire): scope no-unknown-parameters off for the wire Schema bridge by @charleslpan in #973
- feat(LUKE-137): rows draw the stored roster snapshot by @dastratakos in #972
- fix(deps): hold the smaller workspaces to exactOptionalPropertyTypes by @charleslpan in #974
- test(desktop): run desktop's tests on vitest by @charleslpan in #964
- refactor(gateway,devtrace): retire the Realtime vocabulary by @charleslpan in #968
- feat(wire): bridge IDisposable to Effect Scope by @charleslpan in #976
- test(web): run web's tests on vitest by @charleslpan in #967
- fix(providers): hold providers to exactOptionalPropertyTypes by @charleslpan in #978
- chore: phase A sweep after the GPT Live cutover by @charleslpan in #980
- test(packages): run runtime, session, guide, and live tests on vitest by @charleslpan in #969
- fix(desktop): exactOptionalPropertyTypes fixes in desktop by @charleslpan in #982
- test(host): run host's tests on vitest by @charleslpan in #966
- test(packages): run hosted, actions, credentials, calendar, surface, realtime, analytics, memory, and feedback tests on vitest by @charleslpan in #961
- feat(wire): bridge CloudFetch and @effect/platform's HttpClient by @charleslpan in #981
- feat(wire): bridge Event and Emitter to Effect Stream by @charleslpan in #983
- test(gateway): record the protocol's envelopes as byte goldens by @charleslpan in #975
- fix(web): hold apps/web to exactOptionalPropertyTypes by @charleslpan in #984
- feat(LUKE-105): Conversation screen over messages by @dastratakos in #979
- test(brain): run brain's tests on vitest by @charleslpan in #963
- fix(host): hold host to exactOptionalPropertyTypes by @charleslpan in #985
- feat(LUKE-103): presence reporting by @dastratakos in #970
- chore: give the web suite a timeout its database tests can meet by @dastratakos in #987
- feat(wire): add Effect test helpers to wire's testing door by @charleslpan in #986
- fix(LUKE-151): the Conversation view's window starts at the current main by @dastratakos in #991
- fix(web): commit api/ stubs so Vercel deploys the bundled functions by @charleslpan in #992
- ci: speed up and clean up the GitHub checks by @charleslpan in #988
- chore(tsconfig): enable exactOptionalPropertyTypes in the base tsconfig by @charleslpan in #989
- feat(LUKE-142): rating control by @dastratakos in #990
- feat(LUKE-106): Conversation list over messages by @dastratakos in #995
- test(deps): retire node:test and tsx as the test runner by @charleslpan in #993
- test(wire): record the JSON Schema every model-facing declaration emits by @charleslpan in #994
- fix: drop the unused biome-ignore suppressions in function-stubs.ts by @dastratakos in #999
- feat(wire): add the @sidecar/wire/effect door by @charleslpan in #1000
- fix(LUKE-153): strip providerMetadata.openai on every read route by @dastratakos in #1001
- feat(LUKE-154): child_completion in TURN_ORIGIN by @dastratakos in #998
- feat(session): declare the session vocabularies as Effect Schema literals by @charleslpan in #1002
- fix(LUKE-106): the watch folds without DisclosureGroup by @dastratakos in #1003
- feat(wire): emit the model-facing JSON Schema from an Effect Schema by @charleslpan in #1004
- fix(host): a released talk key never tells Luke to stop by @charleslpan in #1006
- feat(LUKE-152): fold the latest rating into the view's message by @dastratakos in #997
- feat(surface): declare panel form factor as an Effect Schema literal by @charleslpan in #1008
- feat(guide): declare the guide vocabulary as Effect Schema literals by @charleslpan in #1007
- feat(panel): declare the mark id vocabulary as an Effect Schema literal by @charleslpan in #1010
- feat(LUKE-155): step-start parts and the end-to-end turn test by @dastratakos in #1011
- feat(settings): route settings guards through Effect Schema and Either by @charleslpan in #1009
- feat(live): declare the live vocabularies as Effect Schema literals by @charleslpan in #1012
- feat(runtime): schedule delayed work on Effect's Clock by @charleslpan in #1005
- feat(LUKE-100): brain host composed over the v2 store by @dastratakos in #957
- feat(LUKE-102): Conversation from the service by @dastratakos in #977
- feat(runtime): wrap the ported reply queue in an Effect sibling by @charleslpan in #1014
- feat(runtime): keep the observation cadence on an Effect Schedule by @charleslpan in #1015
- fix(LUKE-160): the devices table's new instants become timestamptz by @dastratakos in #1017
- feat(desktop,host): voice only, the composer and typed asks go by @charleslpan in #1013
- feat(runtime): add Effect-native test scaffolding to runtime/testing by @charleslpan in #1020
- feat(LUKE-158): ownership hardening on the eve door by @dastratakos in #1021
- feat(wire): build the s.* schema facade over Effect Schema by @charleslpan in #1019
- feat(memory): wrap the housekeeping flush in an Effect sibling by @charleslpan in #1024
- feat(runtime): wrap the ported workspace, prompt, and skills files in Effect siblings by @charleslpan in #1022
- feat(LUKE-157): the eve relay tells steps and orders reasoning into them by @dastratakos in #1026
- feat(wire): json guards over Effect Schema by @charleslpan in #1028
- feat(wire): declare message metadata and action results as Effect Schema by @charleslpan in #1031
- feat(runtime): wrap tool-policy and storage in Effect siblings by @charleslpan in #1023
- feat(hosted): declare the brain contract in Effect Schema by @charleslpan in #1033
- feat(LUKE-131): the turn event stream over HTTP by @dastratakos in #1032
- feat(LUKE-139): the rating write path from the Mac to the service by @dastratakos in #1027
- feat(LUKE-129): announce writes speech.offered; delivery state as events by @dastratakos in #1030
- feat(runtime): wrap the lanes and children siblings in Effect by @charleslpan in #1025
- feat(session): read stored UI message metadata through Standard Schema twins by @charleslpan in #1035
- feat(LUKE-139): rating control on Luke's messages by @dastratakos in #1029
- feat(hosted): declare action, conversation, and device wire in Effect Schema by @charleslpan in #1036
- refactor(LUKE-132): move the live session machinery behind @sidecar/voice/live-session by @dastratakos in #1040
- feat(hosted): carry the account call over an HttpClient by @charleslpan in #1042
- feat(hosted): declare live, mint, observe, and projects wire in Effect Schema by @charleslpan in #1039
- feat(actions): admit as an Effect with a typed AdmitRefusal by @charleslpan in #1043
- feat(LUKE-129): the speech sweep holds, releases, and expires offers on the tick by @dastratakos in #1034
- feat(hosted): declare service-wire and vault-wire schemas in Effect Schema by @charleslpan in #1037
- feat(feedback): carry feedback delivery over an HttpClient by @charleslpan in #1047
- feat(hosted): carry the device, vault, and action clients over HttpClient by @charleslpan in #1046
- fix(LUKE-132): the delegated write runs for every delegated ask and precedes the reply by @dastratakos in #1049
- feat(runtime): declare the runtime vocabulary as Effect Schema literals by @charleslpan in #1016
- feat(hosted): declare rating-wire, reads-wire, and turn-events-wire schemas in Effect Schema by @charleslpan in #1044
- feat(LUKE-157): the ask wire, the host's calls into eve, and the first main by @dastratakos in #1038
- feat(brain): carry the brain transport over an HttpClient by @charleslpan in #1048
- feat(hosted): carry the changes, conversation, and roster clients over HttpClient by @charleslpan in #1051
- fix(LUKE-134): a push never lands over a claim by @dastratakos in #1054
- feat(brain): replace zod with Effect Standard Schema in tests, drop zod by @charleslpan in #1056
- chore(runtime): grep the vocabulary door's import graph for a Node reach by @charleslpan in #1057
- feat(LUKE-132): the live record over the voice writer and the upstream sideband by @dastratakos in #1041
- feat(runtime): resolve a configuration as an Either, and BUILTINS as a Layer by @charleslpan in #1058
- feat(analytics): flush product events on a Schedule over HttpClient by @charleslpan in #1053
- feat(web): one memoized ManagedRuntime as the web functions' runtime edge by @charleslpan in #1063
- feat(desktop): read the renderer's app state through an atom over the bridge's deliveries by @charleslpan in #1062
- feat(actions): action tool requests as direct Effect Schema by @charleslpan in #1064
- feat(providers): the provider registry as a Layer, refusing a duplicate id at build by @charleslpan in #1060
- feat(LUKE-134): APNs push for an unclaimed briefing by @dastratakos in #1055
- test(hosted): drive the six client tests on it.effect against fakeCloudApi by @charleslpan in #1067
- feat(brain): an @effect/sql client over node:sqlite for the store by @charleslpan in #1061
- feat(devtrace): the development trace as an Effect Logger and Tracer by @charleslpan in #1065
- feat(credentials): single-flight and its two clients over HttpClient by @charleslpan in #1052
- chore(LUKE-146): drop the v1 conversation tables and the briefings table by @dastratakos in #1066
- feat(web): an @effect/sql-pg client on the web runtime beside drizzle by @charleslpan in #1071
- feat(calendar): carry the calendar reader and OAuth exchange over HttpClient by @charleslpan in #1050
- feat(desktop): make the renderer's act channel an atom function by @charleslpan in #1072
- feat(web): a route built from an HttpApp, refusing in the same bytes by @charleslpan in #1068
- feat(brain): Effect siblings for archives, compression, and maintenance-run by @charleslpan in #1078
- feat(brain): notebook flush marker retry as an Effect retry by @charleslpan in #1074
- feat(web): the storage migrations on the Effect migrator, with Drizzle's history adopted by @charleslpan in #1081
- feat(brain): settle a run's abort as Effect interruption by @charleslpan in #1059
- feat(brain): Effect siblings for compaction, context-engine, and state-store by @charleslpan in #1076
- feat(web): the auth routes as a group over Better Auth's own handler by @charleslpan in #1083
- feat(desktop): run the voice call's session as a fiber on the renderer's runtime by @charleslpan in #1073
- feat(brain): the store's schema migration as an Effect over the SqlClient by @charleslpan in #1077
- fix(web): scope the roster's ineligible sweep to named accounts by @dastratakos in #1084
- feat(brain): the run/turn event emitter as a PubSub stream by @charleslpan in #1085
- feat(web): the hosted store's workspace files on @effect/sql and Schema by @charleslpan in #1087
- feat(credentials): the PKCE loopback consent on a scoped HttpServer by @charleslpan in #1082
- feat(brain): the agent seam as a Layer, with a TestClock harness by @charleslpan in #1088
- feat(brain): the wake queue over an Effect Queue and Stream by @charleslpan in #1090
- feat(desktop): the voice hook's streams as atoms over LiveCall by @charleslpan in #1092
- feat(web): the actions routes as an HttpApi group by @charleslpan in #1089
- feat(web): the brain contract's four routes as one HttpApi group by @charleslpan in #1093
- feat(brain): the ask ledger's pending submissions over a Ref by @charleslpan in #1086
- feat(web): the sessions, projects, events, observe, and tick routes as one group by @charleslpan in #1091
- feat(brain): the conversation and transcript tables as effects over the store's client by @charleslpan in #1096
- refactor(providers): the shared cloud requests, spool watch, and SQLite reads on Effect by @charleslpan in #1080
- feat(web): the roster snapshot, standing conversations, and soft delete on @effect/sql by @charleslpan in #1097
- feat(tools): trace-export on NodeRuntime.runMain, ios-parity on Effect Schema by @charleslpan in #1098
- test(brain): move ledger and observation-inbox tests onto the Effect harness by @charleslpan in #1103
- feat(gateway): the protocol as an RpcGroup speaking the existing envelope by @charleslpan in #1100
- feat(web): the account routes as an HttpApi group by @charleslpan in #1094
- test(brain): move journal, run-events, children, transcript-reads, and guarantees onto the Effect harness by @charleslpan in #1099
- test(providers): settle the hook spool's window on the stream's own terms by @charleslpan in #1105
- feat(brain): the envelope and its generation as effects over the store's client by @charleslpan in #1106
- feat(brain): the generation's adoption over a Ref and its retirement over a Scope by @charleslpan in #1107
- feat(web): the hosted store's writers and speech on @effect/sql and Schema by @charleslpan in #1104
- test(brain): move agent.test.ts onto the Effect harness, retiring reviewing() by @charleslpan in #1110
- feat(web): the devices and vault routes as an HttpApi group by @charleslpan in #1095
- feat(brain): the children, notebook, memory index, and flush tables as effects by @charleslpan in #1109
- refactor(providers): the Claude Code and Codex adapters' reads as effects by @charleslpan in #1111
- feat(web): the hosted store's facts, ratings, and message reads on @effect/sql by @charleslpan in #1101
- feat(web): the Realtime mints as HttpApi groups by @charleslpan in #1102
- feat(brain): the archive registry and workspace files as effects by @charleslpan in #1108
- feat(brain): the tool loop's run as a fiber the cancel interrupts by @charleslpan in #1113
- feat(web): the admin dashboard's routes as one group behind an Effect gate by @charleslpan in #1112
- feat(web): the brain host's standing main, defaults, and vault rows on @effect/sql by @charleslpan in #1114
- feat(web): the brain host's conversation admission and transcript cursors on @effect/sql by @charleslpan in #1116
- feat(brain): the maintenance and notebook result unions as Either and TaggedError by @charleslpan in #1118
- refactor(providers): the Conductor and OMP adapters on the shared Effect faces by @charleslpan in #1119
- feat(voice): the live voice orchestrator and reattach as fibers on a Schedule by @charleslpan in #1122
- feat(web): device store and vault queries on @effect/sql by @charleslpan in #1117
- feat(runtime): the agent runtime seam as effects, with the promise door over it by @charleslpan in #1121
- feat(web): outbound clients over HttpClient and hosted-tier env consolidation by @charleslpan in #1124
- refactor(providers): the Superset adapter on the shared Effect faces by @charleslpan in #1125
- feat(LUKE-141): push opens the Conversation by @dastratakos in #1075
- feat(voice): the voice services as Layers over their plain seam objects by @charleslpan in #1126
- feat(web): the hosted rate brake on Clock and quota on @effect/sql by @charleslpan in #1120
- feat(brain): the store worker as an Rpc server on the worker runner by @charleslpan in #1123
- feat(LUKE-127): the deployment acts for an account at eve's door by @dastratakos in #1069
- docs(LUKE-161): PRIVACY.md says what the service actually stores by @dastratakos in #1128
- feat(LUKE-127): the wake cron enqueues coalesced roster-diff turns by @dastratakos in #1070
- fix(LUKE-127): the tick's bounds and the opener's record read leave the modules every function shares by @dastratakos in #1132
- chore(web): hold a layer hook to the database test's timeout by @dastratakos in #1130
- feat(LUKE-157): the ask routes over the asks record by @dastratakos in #1129
- feat(brain): the store worker's runtime edge moves into the desktop entry by @charleslpan in #1135
- docs(agents): vendor the Effect agent skills by @charleslpan in #1136
- feat(LUKE-132): the live session service answers the brain in process by @dastratakos in #1131
- feat(LUKE-132): briefings claimed before they are spoken on the hosted path by @dastratakos in #1133
- perf(web): group the Vercel functions by duration bound by @charleslpan in #1140
- feat(LUKE-127): the opener drains hold-release turns into eve by @dastratakos in #1079
- feat(renderer): delete the act, LiveCall, and app-state promise doors by @charleslpan in #1138
- fix(LUKE-170): a poll before the calendars are observed leaves the quiet instant by @dastratakos in #1141
- feat(LUKE-132): the hosted live exchange composed whole by @dastratakos in #1134
- fix(LUKE-171): the door refuses an open that names no kind of turn by @dastratakos in #1142
- feat(LUKE-128): prompts and tool sets content-addressed on the turn by @dastratakos in #1045
- fix(LUKE-168): one spoken ask leaves one developer line on the hosted record by @dastratakos in #1144
- test(LUKE-167): assert each function bundle's whole external set, and falsify the guard on purpose by @dastratakos in #1143
- feat(web): the observation group's own queries on @effect/sql by @charleslpan in #1137
- feat(gateway): the server as an RpcServer with its ledger and replay as middleware by @charleslpan in #1139
- revert: "docs(agents): vendor the Effect agent skills (#1136)" by @charleslpan in #1146
- test(web): the twelve-releases drain test says which of three stages lost a row by @dastratakos in #1147
- feat(web): speech push and the voice session record on @effect/sql by @charleslpan in #1127
- fix(LUKE-169): two first asks of a conversation open one session between them by @dastratakos in #1145
- feat(host): the host's seams as Context tags and the kernel as a Layer by @charleslpan in #1149
- feat(LUKE-138): the brain's acts leave the local performer by @dastratakos in #1152
- test(web): scope the resource-reads test's seq-5 delete to its own conversation by @dastratakos in #1153
- feat(web): the last hosted-store Drizzle query stragglers onto @effect/sql by @charleslpan in #1151
- feat(web): the account seams and the dashboard's metrics on @effect/sql by @charleslpan in #1157
- chore(repo): make the ignore rules conventional, and stop ignoring .claude whole by @charleslpan in #1156
- feat(LUKE-138): the desktop names its device on the voice handshake by @dastratakos in #1160
- fix(voice): the stop key follows the live guide's steering example by @charleslpan in #1161
- fix(voice): keep input audio flowing between presses by @charleslpan in #1162
- feat(brain): stream the spoken reply and quiet progress under the delegation by @charleslpan in #1164
- feat(gateway): the socket binding on the platform Socket over the server's own Protocol by @charleslpan in #1154
- docs(agents): vendor the Effect agent skills by @charleslpan in #1148
- feat(web): the dashboard's roster, day, and account queries on @effect/sql by @charleslpan in #1163
- feat(LUKE-166): a consumed roster per account, so an undrained wake re-derives itself instead of being dropped by @dastratakos in #1150
- ci: one Linux job, no macOS runner, no queue wait by @charleslpan in #1165
- refactor(voice): the seed is history alone; the roster stays with the brain by @charleslpan in #1167
- feat(voice): the view reports both speakers by @charleslpan in #1166
- feat(host): the composers as Layers and the quit as one Scope by @charleslpan in #1159
- feat(panel): the developer's meter takes the right wing by @charleslpan in #1168
- feat(web): the store test harness's PGlite bootstrap and four store tests onto @effect/sql by @charleslpan in #1170
- feat(gateway): the attach retry and the shutdown deadline on Effect by @charleslpan in #1169
- refactor(live): the GPT-Live template with its brackets filled, as one prompt by @charleslpan in #1171
- feat(host): the settings store's environment overrides as Config reads by @charleslpan in #1173
- fix(web): greet the way the GPT-Live guide documents by @charleslpan in #1172
- feat(web): nine more store tests off the Drizzle handle, onto sql by @charleslpan in #1174
- refactor(desktop): one ManagedRuntime at main, and the launch as one Layer by @charleslpan in #1176
- docs(gateway): correct the GatewayServer deletion prediction for P8-04 by @charleslpan in #1175
- feat(host): the small JSON state files' shape over Schema and FileSystem by @charleslpan in #1177
- feat(host): the account composer as an effect and the device heartbeat on a Schedule by @charleslpan in #1178
- ci(LUKE-175): the Postgres job runs the major production runs by @dastratakos in #1179
- feat(web): eight more store tests off the Drizzle handle, onto sql by @charleslpan in #1181
- feat(web): the eve agent as a flat eve app root under apps/web/eve by @dastratakos in #1182
- feat(host): the settings store's body over FileSystem and Either by @charleslpan in #1180
- refactor(gateway): the in-process transports on the server's own layers by @charleslpan in #1183
- feat(host): the devices composer as an effect over the kernel tag by @charleslpan in #1187
- feat(host): compose-live.ts over the kernel as a tag, and the live brain/record as Effect layers by @charleslpan in #1188
- refactor(desktop): the act router and stderr report on Effect by @charleslpan in #1189
- fix(voice): the silent track is fed a source so it actually renders by @charleslpan in #1195
- feat(host): the observation composer as an effect, and conversation maintenance on a Schedule by @charleslpan in #1190
- feat(LUKE-157): the deployment actor may cancel one turn of a session for the account it acts for by @dastratakos in #1194
- refactor(desktop): the update service's timers as Schedules on its own Scope by @charleslpan in #1186
- feat(host): the settings composer as an effect over the kernel tag by @charleslpan in #1196
- feat(host): the brain composer and the store wiring on the host's runtime by @charleslpan in #1191
- feat(web): the last two store test files off the Drizzle handle, onto sql by @charleslpan in #1197
- fix(panel): the thinking dots stand whenever the brain works, hold or not by @charleslpan in #1198
- feat(LUKE-157): the Stop on an ask, and its honour at the turn's start by @dastratakos in #1155
- refactor(LUKE-145): the host and desktop leave @sidecar/providers by @dastratakos in #1184
- refactor(desktop): the app-state document as a SubscriptionRef by @charleslpan in #1185
- refactor(LUKE-145): delete Superset and the local Conductor workspace creator by @dastratakos in #1200
- feat(web): the build writes the Build Output tree Vercel deploys by @dastratakos in #1199
- feat(host): the calendars and issues composers as effects by @charleslpan in #1192
- refactor(LUKE-145): delete the local plugins, hooks, spool watcher, and the introduction peek by @dastratakos in #1201
- refactor(brain): the synchronous shims off Effect.runSync, onto MutableRef by @charleslpan in #1202
- feat(web): the /api/ rewrites generate into a committed table vercel.json is assembled from by @dastratakos in #1203
- fix(LUKE-172): a spoken ask's developer line is tied to the turn the ask ran by @dastratakos in #1158
- refactor(LUKE-145): delete the Linear integration by @dastratakos in #1207
- feat(web): the last drizzle handle, deleted by @charleslpan in #1205
- refactor(desktop): AppStateStore off the default runtime, subscribe deleted by @charleslpan in #1206
- fix(LUKE-186): every /api/ path a client builds resolves to a route by @dastratakos in #1212
- refactor(host): the quit's drain as one effect and the cadences' scopes as the host's by @charleslpan in #1208
- fix(LUKE-184): the auth service reads no environment at import by @dastratakos in #1211
- docs(LUKE-145): retire the deleted integrations from the agent guides, README, and PRIVACY by @dastratakos in #1213
- refactor(wire): delete toSchemaRead, callers read the Either directly by @charleslpan in #1217
- refactor(LUKE-145): retire comments that describe deleted capabilities by @dastratakos in #1218
- docs(LUKE-145): the four guide sentences that needed a product ruling by @dastratakos in #1215
- docs(web): the Services preset sitting as a runbook by @dastratakos in #1210
- feat(LUKE-173): the hosted exchange attaches to the sessions route, behind a seam the route does not pass yet by @dastratakos in #1209
- refactor(desktop): the updater's scope becomes the launch's own by @charleslpan in #1214
- test(host): host tests over Layers on TestClock, FakeClock out by @charleslpan in #1219
- feat(oxlint): lint rules for raw async primitives, node:test, and runtime edges by @charleslpan in https://github.com/ReviewStage/luke/pull/1216
- fix(web): Better Auth back on the Drizzle adapter over the auth schema by @charleslpan in https://github.com/ReviewStage/luke/pull/1222
- refactor(gateway): the host's method handlers as effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1220
- fix(LUKE-189): a socket's frames are held from the moment they could start until its consumer listens by @dastratakos in https://github.com/ReviewStage/luke/pull/1221
- refactor(wire): delete DisposableStore/Emitter/lateRef and their Scope/Stream bridges by @charleslpan in https://github.com/ReviewStage/luke/pull/1223
- refactor(host): delete the host's composition adaptors by @charleslpan in https://github.com/ReviewStage/luke/pull/1227
- feat(voice): release read-only answers at once, drop the receipt note by @charleslpan in https://github.com/ReviewStage/luke/pull/1230
- refactor(runtime): delete ScheduledTimer seam, FakeClock, and drainMicrotasks by @charleslpan in https://github.com/ReviewStage/luke/pull/1228
- refactor(wire): delete the s.* schema facade by @charleslpan in https://github.com/ReviewStage/luke/pull/1231
- refactor(host): the account gate as an effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1232
- feat(voice): seed the voice with the roster, refresh it on change by @charleslpan in https://github.com/ReviewStage/luke/pull/1226
- feat(brain): speculative read prefetch from transcript fragments by @charleslpan in https://github.com/ReviewStage/luke/pull/1229
- refactor(credentials): the account lifecycle's two promise doors deleted by @charleslpan in https://github.com/ReviewStage/luke/pull/1233
- refactor(host): a composer's start and stop as one scoped lifetime by @charleslpan in https://github.com/ReviewStage/luke/pull/1235
- refactor(brain): run a turn as a fiber end to end, delete the Settled door by @charleslpan in https://github.com/ReviewStage/luke/pull/1234
- refactor(voice): the live voice orchestrator's verbs answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1237
- docs(adr): the store client's promise face is permanent, not unscheduled by @charleslpan in https://github.com/ReviewStage/luke/pull/1238
- refactor(hosted): CloudFetch construction retired from the account call chain by @charleslpan in https://github.com/ReviewStage/luke/pull/1236
- refactor(web): the hosted store's interface answers Effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1224
- refactor(hosted): the roster, changes, and conversation clients answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1241
- refactor(host): the remaining clock-seam copies deleted by @charleslpan in https://github.com/ReviewStage/luke/pull/1239
- refactor(hosted): the account token and event sender close over effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1240
- refactor(providers): cloud-pass and calendar build their HttpClient ambiently by @charleslpan in https://github.com/ReviewStage/luke/pull/1242
- feat(LUKE-156): the eve service's deploy shape by @dastratakos in https://github.com/ReviewStage/luke/pull/1018
- docs(web): the api_dir_ignored warning may not appear, and its absence is not a failure by @dastratakos in https://github.com/ReviewStage/luke/pull/1244
- refactor(brain): runCall and tracedModelAdapter share one promise door by @charleslpan in https://github.com/ReviewStage/luke/pull/1243
- refactor(web): the hosted tier's handlers hold effects end to end by @charleslpan in https://github.com/ReviewStage/luke/pull/1245
- refactor(wire): delete the CloudFetch seam and its HTTP bridge shims by @charleslpan in https://github.com/ReviewStage/luke/pull/1250
- fix(desktop): the panel stays stationary through the takeover's level change by @dastratakos in https://github.com/ReviewStage/luke/pull/1225
- fix(web): the api-callers check skips a package directory with no src by @dastratakos in https://github.com/ReviewStage/luke/pull/1248
- fix(desktop): the introduction's greeting has a ceiling by @dastratakos in https://github.com/ReviewStage/luke/pull/1247
- fix(desktop): a cleared setting reaches the host as an absent field by @dastratakos in https://github.com/ReviewStage/luke/pull/1252
- feat(desktop): the introduction is a scripted greeting again by @dastratakos in https://github.com/ReviewStage/luke/pull/1249
- docs: prune the agent guides to rules a tool does not already enforce by @charleslpan in https://github.com/ReviewStage/luke/pull/1251
- refactor(credentials): the account session manager answers effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1246
- fix(LUKE-198): every stored instant becomes timestamptz by @dastratakos in https://github.com/ReviewStage/luke/pull/1253
- feat(desktop): the introduction is for a signed-in developer, greeted by name by @dastratakos in https://github.com/ReviewStage/luke/pull/1254
- test(LUKE-163): the migrator's applied ids equal the journal's, on both dialects by @dastratakos in https://github.com/ReviewStage/luke/pull/1259
- fix(LUKE-181): the store places a spoken line ahead of its turn and re-delivers what it moves by @dastratakos in https://github.com/ReviewStage/luke/pull/1261
- fix(LUKE-187): check.sh runs the vitest suite in CI's four shards, in turn by @dastratakos in https://github.com/ReviewStage/luke/pull/1262
- fix(LUKE-192): a greeting refusal is logged as refused wherever its id sits by @dastratakos in https://github.com/ReviewStage/luke/pull/1263
- feat(analytics): a signed-out run's counts wait on disk for the next sign-in by @dastratakos in https://github.com/ReviewStage/luke/pull/1264
- refactor(brain): delete the hook wake kind nothing in the product fires by @dastratakos in https://github.com/ReviewStage/luke/pull/1266
- feat(LUKE-164): a deployed-shape probe reads a deployment as the runbook does by @dastratakos in https://github.com/ReviewStage/luke/pull/1268
- refactor(host): the settings store's own methods answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1270
- refactor(host): settingsWrite and refusedSettings answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1271
- fix(LUKE-180): a Stop cancels only the turn it was aimed at by @dastratakos in https://github.com/ReviewStage/luke/pull/1258
- refactor(host): the calendars composer reads and writes the store as effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1272
- fix(web): the scheduled pass reseeds silently across a stale gap by @dastratakos in https://github.com/ReviewStage/luke/pull/1265
- refactor(runtime): the observation loop's pass and poke answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1273
- docs(LUKE-182): the release rehearsal is the only Mac gate by @dastratakos in https://github.com/ReviewStage/luke/pull/1255
- feat(LUKE-191): the merge-queue watcher lives in the repository with a test by @dastratakos in https://github.com/ReviewStage/luke/pull/1257
- refactor(voice): the capability assembler reads settings as effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1275
- chore(desktop): tighten the renderer bundle budget slack to five percent by @charleslpan in https://github.com/ReviewStage/luke/pull/1277
- ci(LUKE-164): CI probes the PR's own preview for the deployed shape by @dastratakos in https://github.com/ReviewStage/luke/pull/1269
- docs: the guide names the scheduled pass and the phone push by @dastratakos in https://github.com/ReviewStage/luke/pull/1256
- refactor(host): the preferences and vault chains as queues a fiber drains by @charleslpan in https://github.com/ReviewStage/luke/pull/1276
- refactor(gateway): the event log's own append and the quit's steps as effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1278
- refactor(runtime): the tool executor seam and the brain's tools answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1279
- refactor(host): the observation and live composers read the settings store as effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1274
- feat(LUKE-104): the Conductor key is held by the vault, never the device by @dastratakos in https://github.com/ReviewStage/luke/pull/1260
- refactor(host): the session action performer and the hosted write settle as effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1280
- refactor(host): the awaited settings store shim is deleted by @charleslpan in https://github.com/ReviewStage/luke/pull/1281
- refactor(actions): the admission reads and the action performers answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1282
- refactor(actions): admitEffect is the one gauntlet and the promise door is deleted by @charleslpan in https://github.com/ReviewStage/luke/pull/1283
- feat(desktop): the Conductor key step of onboarding, ahead of any row by @dastratakos in https://github.com/ReviewStage/luke/pull/1267
- refactor(memory): the memory provider seam answers effects on the turn's fiber by @charleslpan in https://github.com/ReviewStage/luke/pull/1284
- refactor(web): the actions group's handlers answer effects and the route runner is deleted by @charleslpan in https://github.com/ReviewStage/luke/pull/1285
- refactor(session): the provider action dispatch and every provider write answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1286
- test(LUKE-177): each store test file runs on a Postgres of its own by @dastratakos in https://github.com/ReviewStage/luke/pull/1287
- refactor(host): the observation composer's last promises answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1288
- refactor(brain): the brain's read and access dependencies answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1289
- test(LUKE-197): a spoken exchange never empties a Mac's picture of the Conversation by @dastratakos in https://github.com/ReviewStage/luke/pull/1290
- refactor(calendar): the calendar readers answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1291
- refactor(credentials): the account session manager's changes as an effect subscription by @charleslpan in https://github.com/ReviewStage/luke/pull/1292
- refactor(web): the turn event stream polls on a fiber of its own and the fiber runner's contracts are decided by @charleslpan in https://github.com/ReviewStage/luke/pull/1293
- chore(LUKE-176): test:store is read from the files that open a database by @dastratakos in https://github.com/ReviewStage/luke/pull/1295
- refactor(brain): the agent's wake face answers effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1296
- fix(LUKE-178): the store places the developer's line ahead of the turn's work on every path a line enters a turn by by @dastratakos in https://github.com/ReviewStage/luke/pull/1297
- refactor(credentials): the account session manager built by an effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1300
- refactor(web): runTool provides the request's SqlClient over WebStoreRun by @charleslpan in https://github.com/ReviewStage/luke/pull/1301
- refactor(brain): the read prefetch runs its slot on a fiber of its own by @charleslpan in https://github.com/ReviewStage/luke/pull/1305
- refactor(web): eve's stream relay and its stop carrier answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1304
- refactor(providers): the providers' reads answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1299
- refactor(web): the hosted live exchange stands in the socket's own scope by @charleslpan in https://github.com/ReviewStage/luke/pull/1303
- test(web): the nine promise-era web suites move onto it.effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1307
- refactor(web): the voice brain, briefings, and record run on the socket's own fibers by @charleslpan in https://github.com/ReviewStage/luke/pull/1306
- refactor(brain): the agent's ask face, its queue, and the host's lane answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1308
- refactor(brain): the generation's context open and the host's reset answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1309
- refactor(host): the child service's executor seams answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1310
- refactor(web): the hosted brain's last tool seams answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1312
- refactor(host): the live brain adapter's ask and subscription run on the composer's own runtime by @charleslpan in https://github.com/ReviewStage/luke/pull/1311
- refactor(host): the brain host's transitions and the publication's marks yield the brain by @charleslpan in https://github.com/ReviewStage/luke/pull/1313
- refactor(voice): the live brain and record contracts answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1314
- refactor(brain): the agent's detach begins its turn on the detach door by @charleslpan in https://github.com/ReviewStage/luke/pull/1315
- refactor(host): the brain wiring's rebuild, close, open, and retire answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1316
- feat(LUKE-197): the store writer's spoken-line writes by @dastratakos in https://github.com/ReviewStage/luke/pull/1318
- refactor(voice): the live session service stands as an effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1317
- refactor(hosted): the account call's promise door and the feedback courier are deleted by @charleslpan in https://github.com/ReviewStage/luke/pull/1320
- refactor(desktop): the update service runs on the launch's runtime by @charleslpan in https://github.com/ReviewStage/luke/pull/1323
- refactor(gateway): the suites own the host's scope and the attach retry goes by @charleslpan in https://github.com/ReviewStage/luke/pull/1322
- refactor(web): the last three hosted routes yield the rate brake by @charleslpan in https://github.com/ReviewStage/luke/pull/1321
- fix(LUKE-199): the messages head stands still while an open journal stands still by @dastratakos in https://github.com/ReviewStage/luke/pull/1302
- refactor(voice): the live session source's authorization reads and handshake wait answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1325
- refactor(host): the gateway test service is a scoped effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1329
- refactor(voice): the live session's internals keep time on Effect's Clock by @charleslpan in https://github.com/ReviewStage/luke/pull/1328
- refactor(hosted): the hosted and credentials clients answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1324
- refactor(web): the hosted route seams answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1330
- refactor(brain): the agent keeps time on Effect's Clock and its own scope by @charleslpan in https://github.com/ReviewStage/luke/pull/1326
- refactor(brain): the transcript-read seams answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1333
- refactor(analytics): the sender and the trace writer give up their own runtimes by @charleslpan in https://github.com/ReviewStage/luke/pull/1335
- refactor(brain): the generation clock keeps time on Effect's Clock by @charleslpan in https://github.com/ReviewStage/luke/pull/1338
- feat(LUKE-197): a spoken exchange Luke answers himself is kept on the service like a delegated one by @dastratakos in https://github.com/ReviewStage/luke/pull/1319
- refactor(web): the message rating route answers effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1339
- refactor(voice): the socket seam's open and the hold's first arrival answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1336
- refactor(voice): the live session takes its collaborators from context by @charleslpan in https://github.com/ReviewStage/luke/pull/1337
- refactor(gateway): the client composes effects and the transport's run goes by @charleslpan in https://github.com/ReviewStage/luke/pull/1332
- refactor(host): the device cadence beats on a fiber and the Google exchange answers an effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1334
- refactor(web): the hosted bearer resolution answers effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1340
- refactor(desktop): the host operator answers effects and the act rows yield them by @charleslpan in https://github.com/ReviewStage/luke/pull/1342
- fix(host): a fiber an arming forks is one its disarm can end by @charleslpan in https://github.com/ReviewStage/luke/pull/1343
- refactor(voice): the live session source's create and attach answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1341
- refactor(web): the voice service speaks over the platform socket by @charleslpan in https://github.com/ReviewStage/luke/pull/1331
- refactor(web): the hosted voice service's lifecycle is a scope by @charleslpan in https://github.com/ReviewStage/luke/pull/1344
- refactor(voice): the live socket's frames are a stream and the sideband is a scoped effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1345
- chore(deps): knip and the discarded-effect check by @charleslpan in https://github.com/ReviewStage/luke/pull/1346
- refactor(voice): the sideband's events are a stream its session reads on one fiber by @charleslpan in https://github.com/ReviewStage/luke/pull/1347
- docs(effect): the Effect idioms are normative and the migration ADR is deleted by @charleslpan in https://github.com/ReviewStage/luke/pull/1348
- refactor(voice): the standing session's socket and reader live in a scope of its own by @charleslpan in https://github.com/ReviewStage/luke/pull/1349
- refactor(gateway): the host's node invocation ledger answers effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1352
- refactor(host): conversation deletion answers an effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1354
- refactor(voice): the notice strip's clock is Effect's, and the rule sees a bare timer reference by @charleslpan in https://github.com/ReviewStage/luke/pull/1353
- refactor(web): the observation tick's reads answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1351
- refactor(memory): the notebook index is a scoped effect over the platform's file system by @charleslpan in https://github.com/ReviewStage/luke/pull/1355
- refactor(gateway): the node's invocation ledger answers effects over a scoped connection by @charleslpan in https://github.com/ReviewStage/luke/pull/1356
- refactor(brain): the notebook memory store answers effects over the store client's own door by @charleslpan in https://github.com/ReviewStage/luke/pull/1357
- refactor(brain): steered deliveries wait on a Deferred by @charleslpan in https://github.com/ReviewStage/luke/pull/1350
- docs(migration): leftover comments and tags say what the code does by @charleslpan in https://github.com/ReviewStage/luke/pull/1358
- refactor(brain): the ask ledger's wait is a Deferred by @charleslpan in https://github.com/ReviewStage/luke/pull/1360
- refactor(web): the route groups' seams answer effects over the ambient client by @charleslpan in https://github.com/ReviewStage/luke/pull/1362
- refactor(desktop): operator client and telemetry service compose effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1361
- refactor(host): the brain wiring seeds the workspace through the effect sibling by @charleslpan in https://github.com/ReviewStage/luke/pull/1359
- refactor(hosted): account preferences client reads with the Effect schema by @charleslpan in https://github.com/ReviewStage/luke/pull/1364
- refactor(host): the brain composer yields the host's late service by @charleslpan in https://github.com/ReviewStage/luke/pull/1363
- refactor(web): the vault's readVaultKeys seam answers the store's effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1365
- refactor(host): the settings and account composers await their links by @charleslpan in https://github.com/ReviewStage/luke/pull/1366
- refactor(web): the voice meters, brain host, and admin seams answer effects by @charleslpan in https://github.com/ReviewStage/luke/pull/1367
- chore(lint): the run rule sees the web edge's runner by @charleslpan in https://github.com/ReviewStage/luke/pull/1369
- docs(guide): the checks and guide stand without plan or PR references by @charleslpan in https://github.com/ReviewStage/luke/pull/1370
- refactor(host): the calendars composer writes onboarding state as an effect by @charleslpan in https://github.com/ReviewStage/luke/pull/1368
- refactor(host): the late service's sync peek goes and the event door queues by @charleslpan in https://github.com/ReviewStage/luke/pull/1371
- chore(web): the dead promise handlers and stale sign-off sentences go by @charleslpan in https://github.com/ReviewStage/luke/pull/1372
- feat(web): the footer closes on the Stage Inc. copyright by @dastratakos in https://github.com/ReviewStage/luke/pull/1380
- feat(voice): offer every GPT Live voice on the desktop, the Realtime ten on the phone by @charleslpan in https://github.com/ReviewStage/luke/pull/1381
- feat(voice): greet the developer by first name at every signed-in launch by @charleslpan in https://github.com/ReviewStage/luke/pull/1204
- feat(LUKE-200): the exchange is the service's, and the sessions route admits what the desktop still sends by @dastratakos in https://github.com/ReviewStage/luke/pull/1327
- refactor(host): the local brain keeps nothing on disk (LUKE-143, 1 of 2) by @dastratakos in https://github.com/ReviewStage/luke/pull/1294
- refactor(brain): delete the SQLite brain store, and a launch removes what it left (LUKE-143, 2 of 2) by @dastratakos in https://github.com/ReviewStage/luke/pull/1298
- feat(LUKE-201): the stop is a service frame the relay reads and the exchange appends for by @dastratakos in https://github.com/ReviewStage/luke/pull/1385
- feat(LUKE-202): the announcement pause and the introduction hold reach the service on the heartbeat's quiet instant by @dastratakos in https://github.com/ReviewStage/luke/pull/1386
- docs: no sentence names the deleted SQLite store or its reader code (LUKE-107) by @dastratakos in https://github.com/ReviewStage/luke/pull/1387
- refactor(desktop): delete the dead conversation-append bridge (LUKE-144, 1 of 4) by @dastratakos in https://github.com/ReviewStage/luke/pull/1389
- chore(brain): delete the SQLite store's schema fixtures (LUKE-144) by @dastratakos in https://github.com/ReviewStage/luke/pull/1393
- refactor(gateway): delete conversation.append and conversation.lines (LUKE-144, 2 of 4) by @dastratakos in https://github.com/ReviewStage/luke/pull/1392
- feat(LUKE-202): the onboarding beats and the launch greeting are frames the service speaks from its own script by @dastratakos in https://github.com/ReviewStage/luke/pull/1390
- refactor(host): delete action narration and the brain's conversation-line readers (LUKE-144, 3a of 4) by @dastratakos in https://github.com/ReviewStage/luke/pull/1394
- refactor(host): delete the in-memory conversation thread and its relay event (LUKE-144, 3b of 4) by @dastratakos in https://github.com/ReviewStage/luke/pull/1397
- refactor(session): the conversation vocabulary keeps the caption and seed lines alone (LUKE-144, 4 of 4) by @dastratakos in https://github.com/ReviewStage/luke/pull/1398
- feat(LUKE-202): the holder asks the service to speak a beat and hears back that it was spoken by @dastratakos in https://github.com/ReviewStage/luke/pull/1399
- refactor(voice): a key of the developer's own stands no brain (LUKE-205, 1a) by @dastratakos in https://github.com/ReviewStage/luke/pull/1401
- feat(LUKE-202): the desktop decides the beats and asks the service to speak them by @dastratakos in https://github.com/ReviewStage/luke/pull/1391
- test(brain): the acceptance suite runs on the hosted adapter alone (LUKE-205, 1b-i) by @dastratakos in https://github.com/ReviewStage/luke/pull/1403
- refactor(brain): delete the keyed model adapter and its transport (LUKE-205, 1b-ii) by @dastratakos in https://github.com/ReviewStage/luke/pull/1405
- docs: the third-party notice names every OpenClaw port the code carries by @dastratakos in https://github.com/ReviewStage/luke/pull/1411
- refactor(voice): no live session opens on a key of the developer's own (LUKE-205, 2a) by @dastratakos in https://github.com/ReviewStage/luke/pull/1412
- fix(runtime): ObservationLoop.settled waits past the follow-up a coalesced poke earned (LUKE-204) by @dastratakos in https://github.com/ReviewStage/luke/pull/1407
- refactor(voice): the assembler and the store read no key and no source (LUKE-205, 2b) by @dastratakos in https://github.com/ReviewStage/luke/pull/1414
- feat(LUKE-202): the Mac opens a muted session for a briefing on offer, from the offer's row and its own presence by @dastratakos in https://github.com/ReviewStage/luke/pull/1404
- refactor(settings): delete the voice-source setting and the Voice page's Provider section (LUKE-205, 3) by @dastratakos in https://github.com/ReviewStage/luke/pull/1417
- refactor(host): nothing hears the local brain's runs (LUKE-206, 1 of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1418
- refactor(credentials): delete the OpenAI credential, and a launch drops the key it stored (LUKE-205, 4) by @dastratakos in https://github.com/ReviewStage/luke/pull/1419
- refactor(host): the Gateway service answers the node vocabulary alone (LUKE-206, 2 of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1420
- docs(comments): two comments no longer name a keyed client (LUKE-205) by @dastratakos in https://github.com/ReviewStage/luke/pull/1423
- refactor(repo): Effect 3.22.2 becomes 4.0.0-rc.115 by @charleslpan in https://github.com/ReviewStage/luke/pull/1416
- refactor(desktop): the panel draws no local wait (LUKE-206, 4a of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1424
- docs: PRIVACY.md and README.md describe voice on the account alone (LUKE-205, 5) by @dastratakos in https://github.com/ReviewStage/luke/pull/1422
- fix(LUKE-207): the turn cursor's instant is rendered in UTC in SQL, whatever zone the session keeps by @dastratakos in https://github.com/ReviewStage/luke/pull/1408
- chore(repo): Biome leaves the local .claude/settings.json alone by @dastratakos in https://github.com/ReviewStage/luke/pull/1410
- refactor(host): delete the local brain composition on the desktop (LUKE-206, 3 of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1421
- test(voice): the source test waits on the frames it asserts, not on a fixed pause by @dastratakos in https://github.com/ReviewStage/luke/pull/1426
- test(gateway): the protocol tests exercise names the host answers (LUKE-209, 1 of 2) by @dastratakos in https://github.com/ReviewStage/luke/pull/1427
- refactor(host): the session performer becomes the opens a row press reaches (LUKE-206, 4c of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1425
- docs(gateway): the brain's method and event names are the protocol's test vocabulary (LUKE-206, 5 of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1429
- refactor(gateway): remove the methods and events no host answers (LUKE-209, 2 of 2) by @dastratakos in https://github.com/ReviewStage/luke/pull/1430
- refactor(desktop): delete the app-action chain and the errand flight (LUKE-206, 4b of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1428
- docs: PRIVACY.md and README.md describe a Mac that composes no brain (LUKE-206, 6 of 6) by @dastratakos in https://github.com/ReviewStage/luke/pull/1431
- docs: AGENTS.md loses what the Effect v4 migration added by @charleslpan in https://github.com/ReviewStage/luke/pull/1432
- docs: AGENTS.md gains nothing without the user's explicit approval by @charleslpan in https://github.com/ReviewStage/luke/pull/1433
- fix(web): the hosted brain defaults to gpt-5.6-terra, the one brain default by @charleslpan in https://github.com/ReviewStage/luke/pull/1436
- fix(web): the deployment dials eve on its production domain, not its protected host by @dastratakos in https://github.com/ReviewStage/luke/pull/1437
- feat: simplify conversation tool-call folding by @dastratakos in https://github.com/ReviewStage/luke/pull/1439
- feat(desktop): keep created workspace chips openable by @dastratakos in https://github.com/ReviewStage/luke/pull/1438
- refactor(brain,web): delete the relay the Mac brain reached OpenAI through by @charleslpan in https://github.com/ReviewStage/luke/pull/1441
- refactor(web): core.ts names what the server reaches from the brain package by @charleslpan in https://github.com/ReviewStage/luke/pull/1442
- fix(web): a hosted creation rides the developer's stored agent pairing again by @dastratakos in https://github.com/ReviewStage/luke/pull/1443
- refactor(brain,runtime): delete the Mac brain's agent loop and the ports only it read by @charleslpan in https://github.com/ReviewStage/luke/pull/1444
- test(LUKE-162): LukeKit's test suites compile and run on Linux, in CI by @dastratakos in https://github.com/ReviewStage/luke/pull/1446
- feat(LUKE-215): the sessions route admits a phone, and says so where it logs by @dastratakos in https://github.com/ReviewStage/luke/pull/1445
- refactor: delete the Effect siblings and scaffolding nothing reached by @charleslpan in https://github.com/ReviewStage/luke/pull/1447
- feat(LUKE-222): the Live WebSocket session document and the primary-socket door by @dastratakos in https://github.com/ReviewStage/luke/pull/1451
- feat(desktop): tool calls as worded rows, one inline and more under a chevron fold by @dastratakos in https://github.com/ReviewStage/luke/pull/1449
- feat(LUKE-213): a WebRTC peer in LukeKit, on the desktop's live-peer terms by @dastratakos in https://github.com/ReviewStage/luke/pull/1450
- feat(voice): the picker auditions the voice a developer just chose by @charleslpan in https://github.com/ReviewStage/luke/pull/1435
- feat(LUKE-214): the sessions socket client for the phone — create, attach, activity, stop, close by @dastratakos in https://github.com/ReviewStage/luke/pull/1448
- feat(voice): shorter briefings, speaking rules for the voice, prompts in plain English by @charleslpan in https://github.com/ReviewStage/luke/pull/1378
- feat(LUKE-223): the audio route's frame vocabulary by @dastratakos in https://github.com/ReviewStage/luke/pull/1453
- feat(LUKE-223): a third voice route for a device that streams its audio through the service by @dastratakos in https://github.com/ReviewStage/luke/pull/1454
- revert(voice): the picker no longer auditions the voice a developer chose (#1435) by @charleslpan in https://github.com/ReviewStage/luke/pull/1458
- feat(LUKE-216): the phone's voice call on the hosted exchange by @dastratakos in https://github.com/ReviewStage/luke/pull/1455
- feat(ios): thumbs up and down behind a press and hold on Luke's messages by @dastratakos in https://github.com/ReviewStage/luke/pull/1457
- fix(desktop): the wait is the thread's last object, never above a later turn by @dastratakos in https://github.com/ReviewStage/luke/pull/1461
- feat(LUKE-216): the phone's voice screen on the hosted exchange by @dastratakos in https://github.com/ReviewStage/luke/pull/1456
- Port iOS and watch telemetry crash reporting to Sentry by @dastratakos in https://github.com/ReviewStage/luke/pull/1463
- feat(LUKE-224): the audio route's client in LukeKit, with its vocabulary held to the goldens by @dastratakos in https://github.com/ReviewStage/luke/pull/1459
- feat(conversation): the thumbs move behind an ellipsis beside the copy control by @dastratakos in https://github.com/ReviewStage/luke/pull/1462
- fix(desktop): the composer a thumbs down offers returns to the Conversation by @dastratakos in https://github.com/ReviewStage/luke/pull/1466
- feat(voice): live captions for the developer's own words by @charleslpan in https://github.com/ReviewStage/luke/pull/1464
- test(LUKE-218): a standing phone or watch call claims a briefing, and a present device without a call is pushed to by @dastratakos in https://github.com/ReviewStage/luke/pull/1468
- feat(LUKE-224): the watch speaks to Luke through the service's audio route by @dastratakos in https://github.com/ReviewStage/luke/pull/1460
- feat(conversation): a press on the filled thumb takes the rating back by @dastratakos in https://github.com/ReviewStage/luke/pull/1467
- test(LUKE-225): LiveCall's idle window runs on an injected clock, and its test stops sleeping by @dastratakos in https://github.com/ReviewStage/luke/pull/1471
- refactor(LUKE-219): delete the phone's legacy Realtime path by @dastratakos in https://github.com/ReviewStage/luke/pull/1469
- feat(live): the backchannel policy asks for frequent, eager backchannels by @charleslpan in https://github.com/ReviewStage/luke/pull/1472
- refactor(LUKE-219): delete the watch's legacy Realtime path and the remote mint by @dastratakos in https://github.com/ReviewStage/luke/pull/1474
- feat(runtime): USER.md and MEMORY.md carry OpenClaw's 4,000-character budgets, and an oversize write is refused by @dastratakos in https://github.com/ReviewStage/luke/pull/1475
- fix(voice): a record write that lands nothing no longer refuses the ask aloud by @charleslpan in https://github.com/ReviewStage/luke/pull/1476
- fix(desktop,web): a spoken line stays on the Conversation until its row shows, and Luke's own words are always written by @dastratakos in https://github.com/ReviewStage/luke/pull/1465
- feat(brain): append_daily_note and list_daily_notes, and whole-file writes stay with the bootstrap files by @dastratakos in https://github.com/ReviewStage/luke/pull/1477
- docs(LUKE-221): PRIVACY.md, AGENTS.md, and the iOS README describe voice that runs through the service on every device by @dastratakos in https://github.com/ReviewStage/luke/pull/1480
- feat(desktop,web): a message Luke read aloud folds behind the words he actually said by @dastratakos in https://github.com/ReviewStage/luke/pull/1473
- refactor(brain): USER.md is the facts store, and the standing context carries the roster and projects alone by @dastratakos in https://github.com/ReviewStage/luke/pull/1478
- feat(web): memory_search and memory_get over the hosted workspace rows by @dastratakos in https://github.com/ReviewStage/luke/pull/1479
- fix(web,voice): a delegated ask's row carries the utterance's last word by @dastratakos in https://github.com/ReviewStage/luke/pull/1482
- fix(watch): explicit self in the voice socket's ready-state lock closure by @dastratakos in https://github.com/ReviewStage/luke/pull/1483
- feat(web): the pre-compaction memory flush on the hosted brain by @dastratakos in https://github.com/ReviewStage/luke/pull/1484
- feat(watch): one stack rooted on Luke, sessions top-left, settings top-right by @dastratakos in https://github.com/ReviewStage/luke/pull/1487
- fix(web): the hosted action routes ride the developer's stored agent pairing by @dastratakos in https://github.com/ReviewStage/luke/pull/1486
- fix(voice): a voice chosen in settings ends the standing session, so the next opens in it by @charleslpan in https://github.com/ReviewStage/luke/pull/1470
- fix(session,web,host,brain): a stored row naming a retired tool reads back without that part by @dastratakos in https://github.com/ReviewStage/luke/pull/1488
- feat(desktop,web,hosted): a read-only Memory page in Settings shows what Luke has saved by @dastratakos in https://github.com/ReviewStage/luke/pull/1491
- fix(web,desktop): the brain's words fold as thinking, placed where they came in the exchange by @dastratakos in https://github.com/ReviewStage/luke/pull/1489
- refactor(web): workspace_file holds its content in the clear by @dastratakos in https://github.com/ReviewStage/luke/pull/1490
- docs(release): step 2 names the introduction's WebSocket, not the retired mint by @charleslpan in https://github.com/ReviewStage/luke/pull/1492
- chore(release): bump the workspace to 0.6.0 and write its changelog by @charleslpan in https://github.com/ReviewStage/luke/pull/1485
Full Changelog: v0.5.0...v0.6.0