@miller-tech/uap 2.48.0 → 2.48.2

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.
@@ -250,3 +250,59 @@ deliver run), which inflates its latency but not its gate outcomes. The
250
250
  frontier anatomy counts Droid-native tool results, not the UAP tool layer the
251
251
  monitoring round measured — the classes are aligned but the instruments
252
252
  differ; cross-comparison of rates between the two instruments is qualitative.
253
+
254
+ ---
255
+
256
+ ## Monitoring round 2 (2026-11-14 evening) — post-O-C/O-D/O-B state
257
+
258
+ Re-mined the live corpus after the day's merges (v2.46.0 O-C hints+readGate,
259
+ v2.47.0 O-D shim+O-E corpus, v2.48.0 turnpack ports; master `6dd4fc90`),
260
+ with the O-B GLM-5.3 baseline now available as the frontier reference.
261
+
262
+ ### Finding 1 — THE CLIENT IS STALE (the round's headline)
263
+
264
+ The running Droid qwen3.8 UAP client executes the **globally-installed
265
+ `@miller-tech/uap` = v2.45.0** (NVM path, verified: the global dist lacks
266
+ `delivery/path-hints.js`; the npm registry's `latest` is also 2.45.0 while
267
+ master is 2.48.0). Every deliver/client session today therefore runs
268
+ **pre-fix code** — none of O-C's hints, the readGate, or the turnpack
269
+ listing-anchor ports are in any live client. The only fix that reached the
270
+ client is O-D's proxy-side shim (the proxy serves from the repo tree and was
271
+ restarted 19:14 and again 20:50 for v2.48.0). The npm-publish workflow
272
+ (manual-trigger) was fired 09:58 UTC; until it lands and the global install
273
+ is updated, **every measured "post-fix" window is actually shim-only.**
274
+
275
+ ### Finding 2 — the shim-only window (era B, n=209, directional)
276
+
277
+ | Class | Era A (pre-shim, n=19,794) | Era B (shim live, n=209) |
278
+ |---|---:|---:|
279
+ | ok | 75.7% | **81.8%** |
280
+ | stub-refusal | 5.4% | 7.2% |
281
+ | edit-miss | 3.2% | **0** |
282
+ | path-not-found | 2.6% | **0** |
283
+ | no-op | 3.8% | 1.9% |
284
+
285
+ Zero edit-miss and zero path-not-found in era B is encouraging but
286
+ underpowered (one deliver run's task mix, n=209) — directional, not a
287
+ finding. stub-refusal persists at 7.2% (all write_file gutting re-sends) —
288
+ exactly the class the not-yet-client-live readGate targets, consistent with
289
+ Finding 1.
290
+
291
+ ### The ranked levers now (against the measured O-B frontier reference)
292
+
293
+ - **R2-A — Update the global client (free, minutes, the biggest immediate
294
+ lever):** once the npm publish lands, `npm i -g @miller-tech/uap@latest`
295
+ puts O-C + turnpack in every new client session. The next monitoring
296
+ window after that is the first true post-fix read; watch stub-refusal
297
+ (readGate) and edit-miss (turnpack) first.
298
+ - **R2-B — Serve v31 for client sessions (free):** iq2_xs (floor tier) is
299
+ STILL serving all client work. The O-B suite measured what that tier
300
+ costs on identical tasks: same gates at ~24x tool volume and ~10x wall
301
+ time. This is the original O-A, still unexecuted.
302
+ - **R2-C — Route frontier-class client sessions to glm-5.3 (one flag, now
303
+ measured):** `droid -m glm-5.3` / the session default (already set).
304
+ The O-B baseline quantifies the buy: same gates, 1/24 the tool activity,
305
+ 1/10 the wall time, zero edit/write misses. This is the concrete
306
+ "Opus 5.5 / Fable 5.2 levels" lever on this box today.
307
+ - **R2-D — Re-measure after R2-A:** the post-client-update window is the
308
+ honest post-fix read; era B's zeros become testable at population scale.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miller-tech/uap",
3
- "version": "2.48.0",
3
+ "version": "2.48.2",
4
4
  "description": "Autonomous AI agent memory system with CLAUDE.md protocol enforcement",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -66,6 +66,20 @@ _UAP_DROID_SYNC_CONTRACTS_LOADED=1
66
66
  # local model id — it must never carry a qwen id.
67
67
  : "${DROID_ANTHROPIC_BASE_MODEL:=claude-sonnet-4-6}"
68
68
 
69
+ # DROID_CHAT_BASE_MODEL — the Factory BUILT-IN catalog id written into
70
+ # `baseModelId` of the OpenAI-shaped local entries (the proxy chat /v1 route
71
+ # and the direct Responses :8080 route). qwen3.8-max is the choice because the
72
+ # served stack IS the Qwen3.8 family (Flash-Next 125B arms and its Edge0-145B
73
+ # latent-MoE derivative): the entry inherits the built-in's Qwen3.8-class
74
+ # prompts, tool-call conventions, reasoning levels, and Script-mode
75
+ # eligibility instead of tripping the "does not map to a built-in model"
76
+ # warning. Same family, same catalog — this is a BUILT-IN id, never a local
77
+ # wire id: it must never be the served alias, a retired arm, or anything the
78
+ # registry's advertises lists carry. (The prefix-era guard "never a qwen id"
79
+ # predates the Factory catalog gaining Qwen3.8 built-ins; the exact local-id
80
+ # check lives in the sandbox suite.)
81
+ : "${DROID_CHAT_BASE_MODEL:=qwen3.8-max}"
82
+
69
83
  # DROID_SYNC_LOCK — lock file serialising concurrent Droid config writes
70
84
  # (session-start hook + manual installer run + a second Droid window).
71
85
  # Without it two writers read-modify-write the same JSON and one set of
@@ -95,15 +109,23 @@ fi
95
109
  # in place or left alone. "0" = patch only when present.
96
110
  # Reads from the caller's scope: MODEL_ALIAS, PROXY_URL, DIRECT_URL,
97
111
  # CTX_SESSION, CTX_POOL, MAX_OUTPUT, DROID_ANTHROPIC_BASE_MODEL,
98
- # PROXY_TOKEN (via UAP_SYNC_TOKEN env), DRY_RUN.
112
+ # DROID_CHAT_BASE_MODEL, PROXY_TOKEN (via UAP_SYNC_TOKEN env), DRY_RUN.
99
113
  # Migration rules (idempotent; no change => file left byte-identical):
100
- # * entries whose model is a RETIRED local id — or already the live
101
- # alias, or model-less but pointed at :4000/:8080 — converge onto
102
- # MODEL_ALIAS;
114
+ # * entries whose model is a RETIRED local id — already the live alias,
115
+ # a FLEET wire id (any registry advertises entry) pointed at this
116
+ # box's :4000/:8080, or model-less but pointed at :4000/:8080 —
117
+ # converge onto MODEL_ALIAS (fleet ids are gated on a local base:
118
+ # the compat names collide with real cloud ids, so a cloud-router
119
+ # entry carrying one survives untouched);
103
120
  # * route by existing shape: baseUrl with :8080 -> direct strata route
104
121
  # (pool-sized); :4000 WITHOUT /v1 -> Anthropic Messages root (proxy
105
- # root + baseModelId + apiKey only if absent, session-sized); anything
106
- # else local -> proxy chat route ($PROXY_URL/v1 + token);
122
+ # root + baseModelId=DROID_ANTHROPIC_BASE_MODEL + apiKey only if
123
+ # absent, session-sized); anything else local -> proxy chat route
124
+ # ($PROXY_URL/v1 + token); every camelCase local route also gains
125
+ # baseModelId (anthropic shape -> DROID_ANTHROPIC_BASE_MODEL, OpenAI
126
+ # shapes -> DROID_CHAT_BASE_MODEL) when absent, so Droid inherits the
127
+ # built-in's prompts/tools/reasoning instead of warning the entry
128
+ # "does not map to a built-in model";
107
129
  # * cloud models (anything else, including the :8317 router entries) are
108
130
  # deliberate user choices and are never repointed;
109
131
  # * a settings.json with NO local entry after migration gains the