@gotcos/glasses-server 6.27.10 → 6.27.11
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 +30 -0
- package/package.json +1 -1
- package/server/routes/meeting.ts +18 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
## Unreleased
|
|
2
2
|
|
|
3
|
+
## 6.27.11
|
|
4
|
+
- **SAFETY REVERT: the 6.27.10 relabel enrolment is disabled.** It joined two
|
|
5
|
+
different index spaces. `plan.value.changed` are positions in the COMPACTED sidecar
|
|
6
|
+
array (`meeting-relabel.ts:119`, over rows already filtered to those carrying text)
|
|
7
|
+
while the chunk-embedding store is keyed on the RAW capture index
|
|
8
|
+
(`transcribe-stream.ts:1868`). They diverge at the first text-less chunk.
|
|
9
|
+
- Measured on a live session: naming ONE voice enrolled **73 of 103 rows belonging to
|
|
10
|
+
other people**, including **22 chunks of the owner**, plus five colleagues. It
|
|
11
|
+
reported success because rows do come back — the wrong ones. 73 of 74 live sessions
|
|
12
|
+
with embeddings have gaps, so this was the normal case, not an edge case.
|
|
13
|
+
- `attachRawChunkIndices` is the conversion for exactly this. It was already imported
|
|
14
|
+
in the file, used correctly by the review path, and carries a comment three hundred
|
|
15
|
+
lines above the change reading "`chunks` is NOT the WAV number".
|
|
16
|
+
- **Anyone on 6.27.10 should update.** Naming a voice in the review panel could write
|
|
17
|
+
other people — including the owner — into that person's profile, permanently and
|
|
18
|
+
across every future meeting. The relabel itself was always correct; only the
|
|
19
|
+
enrolment side effect was wrong.
|
|
20
|
+
|
|
21
|
+
Re-enabling requires all of: the `attachRawChunkIndices` mapping with a refusal when
|
|
22
|
+
it is unavailable; a coherence gate (an `Ext` bucket is many voices — 98% of its
|
|
23
|
+
pairwise cosines fall below the identifier's own 0.55 accept threshold); a
|
|
24
|
+
`correction:<sessionId>` source tag so samples are human-tier, quota-protected and
|
|
25
|
+
retractable by the existing de-attribute path (a bare `meeting-relabel` tag matches
|
|
26
|
+
none of the three prefixes `isSampleFromSession` accepts, so "Not in this meeting"
|
|
27
|
+
silently retracts nothing); `greedyDiversitySelect` to bound the loop (~41ms per
|
|
28
|
+
cycle against a 7.9 MB store x 109 chunks blocks the event loop past the helper's
|
|
29
|
+
30s timeout); and honest reporting so a zero enrolment is distinguishable from
|
|
30
|
+
success. The COS Control scope-picker copy also still reads "Corrects this meeting
|
|
31
|
+
only. Other meetings are left alone."
|
|
32
|
+
|
|
3
33
|
## 6.27.10
|
|
4
34
|
- **Naming an unidentified voice now creates a real profile.** `POST /api/meeting/:id/relabel`
|
|
5
35
|
was TEXT ONLY: it rewrote `speaker` strings in the sidecar and never touched the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gotcos/glasses-server",
|
|
3
|
-
"version": "6.27.
|
|
3
|
+
"version": "6.27.11",
|
|
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": {
|
package/server/routes/meeting.ts
CHANGED
|
@@ -1195,7 +1195,24 @@ export function createMeetingRouter(deps: MeetingRouteDependencies = {}): Router
|
|
|
1195
1195
|
// user asked for, and a voice store that refuses must not undo it. Reported so
|
|
1196
1196
|
// the panel can say a profile was created rather than leaving the user to
|
|
1197
1197
|
// discover, in another meeting, that it was not.
|
|
1198
|
-
|
|
1198
|
+
// DISABLED in 6.27.11. 6.27.10 shipped this joining the WRONG INDEX SPACE:
|
|
1199
|
+
// `plan.value.changed` are positions in the COMPACTED sidecar array
|
|
1200
|
+
// (meeting-relabel.ts:119, over rows already filtered to those with text) while
|
|
1201
|
+
// the embedding store is keyed on the RAW capture index
|
|
1202
|
+
// (transcribe-stream.ts:1868). They diverge at the first text-less chunk.
|
|
1203
|
+
//
|
|
1204
|
+
// Measured on a live session: naming one voice enrolled 73 of 103 rows belonging
|
|
1205
|
+
// to OTHER people, including 22 chunks of the owner. It reported success because
|
|
1206
|
+
// rows do come back — just the wrong ones. 73 of 74 live sessions have gaps, so
|
|
1207
|
+
// this was the normal case.
|
|
1208
|
+
//
|
|
1209
|
+
// `attachRawChunkIndices` is the conversion for this and is imported at line 126,
|
|
1210
|
+
// used correctly by the review path at 755 and 856. Re-enable only WITH that
|
|
1211
|
+
// mapping, a refusal when the mapping is unavailable, a coherence gate (an `Ext`
|
|
1212
|
+
// bucket is many voices — 98% of its pairwise cosines fall below the identifier's
|
|
1213
|
+
// own 0.55 accept threshold), and a `correction:<sessionId>` source tag so the
|
|
1214
|
+
// samples are human-tier, quota-protected and retractable.
|
|
1215
|
+
const enrolled = 0
|
|
1199
1216
|
res.json({ ok: true, correctionId: id, enrolledEmbeddings: enrolled, ...preview })
|
|
1200
1217
|
})
|
|
1201
1218
|
|