@gotcos/glasses-server 6.36.7 → 6.36.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  ## Unreleased
2
2
 
3
+ ## 6.36.8
4
+ - **The queue now covers the refusal that actually fires.** Device diagnostics, once the
5
+ path was finally instrumented, recorded `native_target_busy` on every Continue that
6
+ reached the server — never `native_thread_working`, which is what 6.36.7 was built
7
+ around. Selecting Continue SUCCEEDS and mints a binding; if the dictation is not
8
+ completed the binding lingers to its TTL, and every Continue inside that window
9
+ refuses. Twelve such bindings had stacked up on one thread over an evening.
10
+ - `native_target_busy` and `native_turn_in_progress` are now queueable. Both are
11
+ transient by construction — a clock clears them — and both are COS's OWN bookkeeping
12
+ rather than a foreign process holding the thread. Delivery still re-runs the full
13
+ gate, so nothing about the safety model changes.
14
+ - `native_target_fenced` is deliberately NOT queueable: "may or may not have been
15
+ delivered" cannot be resolved by waiting, and queueing it risks a duplicate turn in a
16
+ real conversation.
17
+
18
+
3
19
  ## 6.36.7
4
20
  - **A turn spoken at a busy thread is now queued instead of refused.** Miles: "if
5
21
  there's a session that's still running, that would just put it into the queue the same
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gotcos/glasses-server",
3
- "version": "6.36.7",
3
+ "version": "6.36.8",
4
4
  "description": "COS Glasses \u2014 self-hosted AI heads-up-display server for Even G2 smart glasses, powered by Claude Code, Codex, or Cursor Agent CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -120,6 +120,19 @@ export const MAX_DELIVERY_ATTEMPTS = 5
120
120
  */
121
121
  const QUEUEABLE_REFUSALS: ReadonlySet<string> = new Set([
122
122
  'native_thread_working',
123
+ // COS'S OWN LEFTOVER BINDING, and the reason this feature did not work for a day.
124
+ // Proven from device diagnostics 2026-08-17: every Continue that reached the server
125
+ // was refused `native_target_busy` ("already attached to another COS chat"), never
126
+ // `native_thread_working`. Selecting Continue SUCCEEDS and mints a binding; if the
127
+ // dictation is not completed the binding lingers to its TTL, and every Continue in
128
+ // that window refuses. Twelve such bindings had stacked up on one thread.
129
+ //
130
+ // It belongs here because it is transient BY CONSTRUCTION -- the binding expires on
131
+ // a clock -- and because it is COS's own bookkeeping, not a foreign process holding
132
+ // the thread. Queueing waits it out, and delivery re-runs the whole gate as always.
133
+ 'native_target_busy',
134
+ // Same shape: a COS turn is mid-flight on this thread and will finish.
135
+ 'native_turn_in_progress',
123
136
  'live_desktop_process',
124
137
  'thread_busy',
125
138
  'binding_conflict',