@miller-tech/uap 1.222.0 → 2.0.0

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.
Files changed (234) hide show
  1. package/README.md +19 -9
  2. package/config/exl3-profiles/qwen38-27b-exl3.env +68 -0
  3. package/config/llama-profiles/qwen38-27b-dflash2.env +6 -1
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/benchmarks/paired/adapter.d.ts +15 -0
  6. package/dist/benchmarks/paired/adapter.d.ts.map +1 -1
  7. package/dist/benchmarks/paired/adapter.js +22 -1
  8. package/dist/benchmarks/paired/adapter.js.map +1 -1
  9. package/dist/bin/cli.js +20 -24
  10. package/dist/bin/cli.js.map +1 -1
  11. package/dist/cli/deliver.d.ts +34 -0
  12. package/dist/cli/deliver.d.ts.map +1 -1
  13. package/dist/cli/deliver.js +147 -20
  14. package/dist/cli/deliver.js.map +1 -1
  15. package/dist/cli/guided-setup.d.ts.map +1 -1
  16. package/dist/cli/guided-setup.js +15 -0
  17. package/dist/cli/guided-setup.js.map +1 -1
  18. package/dist/cli/init.d.ts.map +1 -1
  19. package/dist/cli/init.js +3 -0
  20. package/dist/cli/init.js.map +1 -1
  21. package/dist/cli/plan.d.ts.map +1 -1
  22. package/dist/cli/plan.js +8 -2
  23. package/dist/cli/plan.js.map +1 -1
  24. package/dist/cli/policy.d.ts.map +1 -1
  25. package/dist/cli/policy.js +104 -2
  26. package/dist/cli/policy.js.map +1 -1
  27. package/dist/cli/quality.d.ts +11 -0
  28. package/dist/cli/quality.d.ts.map +1 -0
  29. package/dist/cli/quality.js +213 -0
  30. package/dist/cli/quality.js.map +1 -0
  31. package/dist/cli/wizard-config.d.ts.map +1 -1
  32. package/dist/cli/wizard-config.js +19 -9
  33. package/dist/cli/wizard-config.js.map +1 -1
  34. package/dist/cli/worktree.d.ts.map +1 -1
  35. package/dist/cli/worktree.js +8 -1
  36. package/dist/cli/worktree.js.map +1 -1
  37. package/dist/dashboard/savings.d.ts +1 -4
  38. package/dist/dashboard/savings.d.ts.map +1 -1
  39. package/dist/dashboard/savings.js +2 -52
  40. package/dist/dashboard/savings.js.map +1 -1
  41. package/dist/delivery/acceptance-judge.d.ts +10 -0
  42. package/dist/delivery/acceptance-judge.d.ts.map +1 -1
  43. package/dist/delivery/acceptance-judge.js +45 -3
  44. package/dist/delivery/acceptance-judge.js.map +1 -1
  45. package/dist/delivery/agentic-executor.d.ts +12 -1
  46. package/dist/delivery/agentic-executor.d.ts.map +1 -1
  47. package/dist/delivery/agentic-executor.js +25 -5
  48. package/dist/delivery/agentic-executor.js.map +1 -1
  49. package/dist/delivery/bash-sweep.d.ts +12 -0
  50. package/dist/delivery/bash-sweep.d.ts.map +1 -1
  51. package/dist/delivery/bash-sweep.js +8 -1
  52. package/dist/delivery/bash-sweep.js.map +1 -1
  53. package/dist/delivery/convergence-loop.d.ts.map +1 -1
  54. package/dist/delivery/convergence-loop.js +6 -4
  55. package/dist/delivery/convergence-loop.js.map +1 -1
  56. package/dist/delivery/execution-gate.d.ts +1 -1
  57. package/dist/delivery/execution-gate.d.ts.map +1 -1
  58. package/dist/delivery/execution-gate.js +248 -5
  59. package/dist/delivery/execution-gate.js.map +1 -1
  60. package/dist/delivery/snapshot.d.ts +16 -0
  61. package/dist/delivery/snapshot.d.ts.map +1 -1
  62. package/dist/delivery/snapshot.js +113 -2
  63. package/dist/delivery/snapshot.js.map +1 -1
  64. package/dist/delivery/user-validation.d.ts.map +1 -1
  65. package/dist/delivery/user-validation.js +55 -10
  66. package/dist/delivery/user-validation.js.map +1 -1
  67. package/dist/delivery/verifier-ladder.d.ts +24 -0
  68. package/dist/delivery/verifier-ladder.d.ts.map +1 -1
  69. package/dist/delivery/verifier-ladder.js +119 -2
  70. package/dist/delivery/verifier-ladder.js.map +1 -1
  71. package/dist/generators/claude-md.js +17 -4
  72. package/dist/generators/claude-md.js.map +1 -1
  73. package/dist/policies/liveness.d.ts +105 -0
  74. package/dist/policies/liveness.d.ts.map +1 -0
  75. package/dist/policies/liveness.js +251 -0
  76. package/dist/policies/liveness.js.map +1 -0
  77. package/dist/policies/policy-memory.d.ts.map +1 -1
  78. package/dist/policies/policy-memory.js +3 -4
  79. package/dist/policies/policy-memory.js.map +1 -1
  80. package/dist/quality/baseline.d.ts +29 -0
  81. package/dist/quality/baseline.d.ts.map +1 -0
  82. package/dist/quality/baseline.js +79 -0
  83. package/dist/quality/baseline.js.map +1 -0
  84. package/dist/quality/complexity.d.ts +38 -0
  85. package/dist/quality/complexity.d.ts.map +1 -0
  86. package/dist/quality/complexity.js +239 -0
  87. package/dist/quality/complexity.js.map +1 -0
  88. package/dist/quality/config.d.ts +40 -0
  89. package/dist/quality/config.d.ts.map +1 -0
  90. package/dist/quality/config.js +77 -0
  91. package/dist/quality/config.js.map +1 -0
  92. package/dist/quality/crap.d.ts +11 -0
  93. package/dist/quality/crap.d.ts.map +1 -0
  94. package/dist/quality/crap.js +54 -0
  95. package/dist/quality/crap.js.map +1 -0
  96. package/dist/quality/languages.d.ts +25 -0
  97. package/dist/quality/languages.d.ts.map +1 -0
  98. package/dist/quality/languages.js +150 -0
  99. package/dist/quality/languages.js.map +1 -0
  100. package/dist/quality/report.d.ts +38 -0
  101. package/dist/quality/report.d.ts.map +1 -0
  102. package/dist/quality/report.js +251 -0
  103. package/dist/quality/report.js.map +1 -0
  104. package/dist/quality/scanner.d.ts +32 -0
  105. package/dist/quality/scanner.d.ts.map +1 -0
  106. package/dist/quality/scanner.js +127 -0
  107. package/dist/quality/scanner.js.map +1 -0
  108. package/dist/quality/tools.d.ts +28 -0
  109. package/dist/quality/tools.d.ts.map +1 -0
  110. package/dist/quality/tools.js +189 -0
  111. package/dist/quality/tools.js.map +1 -0
  112. package/dist/types/config.d.ts +148 -0
  113. package/dist/types/config.d.ts.map +1 -1
  114. package/dist/types/config.js +35 -0
  115. package/dist/types/config.js.map +1 -1
  116. package/docs/ATTRIBUTION.md +0 -1
  117. package/docs/INDEX.md +38 -4
  118. package/docs/analysis/MARKET_POSITION.md +179 -0
  119. package/docs/architecture/OVERVIEW.md +82 -18
  120. package/docs/architecture/PROTOCOL.md +1 -1
  121. package/docs/benchmarks/PAIRED_FINDINGS.md +106 -0
  122. package/docs/benchmarks/PAIRED_HARNESS.md +16 -0
  123. package/docs/benchmarks/README.md +59 -0
  124. package/docs/design/UAP_REACTOR.md +0 -1
  125. package/docs/getting-started/INSTALLATION.md +1 -1
  126. package/docs/guides/AUTOMATIC.md +0 -14
  127. package/docs/guides/AUTOMATIC_FEATURES.md +1 -9
  128. package/docs/guides/COORDINATION.md +1 -1
  129. package/docs/guides/DELIVERY_PIPELINE.md +5 -0
  130. package/docs/guides/DEPLOY_BATCHING.md +1 -1
  131. package/docs/guides/DROIDS_AND_SKILLS.md +1 -1
  132. package/docs/guides/LOCAL_MODELS.md +6 -1
  133. package/docs/guides/MCP_ROUTER.md +1 -1
  134. package/docs/guides/MEMORY.md +1 -1
  135. package/docs/guides/MULTI_MODEL.md +1 -1
  136. package/docs/guides/ORCHESTRATOR.md +1 -1
  137. package/docs/guides/POLICIES.md +19 -3
  138. package/docs/guides/QWEN38_EXL3.md +114 -0
  139. package/docs/guides/WORKTREE_WORKFLOW.md +45 -1
  140. package/docs/integrations/MCP_ROUTER.md +1 -4
  141. package/docs/plans/deliver-hardening-plan-2026-07-13.md +173 -0
  142. package/docs/plans/deliver-hardening-review-response-2026-07-13.md +180 -0
  143. package/docs/plans/k3-uap-uplift-validation.md +216 -0
  144. package/docs/plans/qwen38-uap-retest-plan.md +196 -0
  145. package/docs/reference/API.md +1 -1
  146. package/docs/reference/CLI.md +49 -14
  147. package/docs/reference/COMPARISON.md +248 -0
  148. package/docs/reference/CONFIGURATION.md +1 -3
  149. package/docs/reference/DATABASE_SCHEMA.md +1 -1
  150. package/docs/reference/FEATURES.md +3 -3
  151. package/docs/reference/PATTERNS.md +1 -1
  152. package/docs/reference/PLATFORMS.md +1 -1
  153. package/package.json +2 -2
  154. package/scripts/maintenance/update-skills.py +0 -22
  155. package/scripts/maintenance/verify-compliance.sh +3 -3
  156. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  157. package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-312.pyc +0 -0
  158. package/src/policies/enforcers/adr_guard.py +0 -0
  159. package/src/policies/enforcers/bearer_lockdown.py +0 -0
  160. package/src/policies/enforcers/branch_freshness.py +0 -0
  161. package/src/policies/enforcers/design_token_gate.py +0 -0
  162. package/src/policies/enforcers/enforcement_self_protect.py +70 -0
  163. package/src/policies/enforcers/expert_review_required.py +22 -0
  164. package/src/policies/enforcers/iac_plan_destruction_check.py +0 -0
  165. package/src/policies/enforcers/quality_metrics_gate.py +447 -0
  166. package/src/policies/enforcers/ship_loop_gate.py +0 -0
  167. package/src/policies/enforcers/validate_plan_on_change.py +0 -0
  168. package/src/policies/enforcers/visual_verification.py +0 -0
  169. package/src/policies/enforcers/workdir_scope.py +0 -0
  170. package/src/policies/schemas/policies/expert-review-required.md +9 -1
  171. package/src/policies/schemas/policies/quality-metrics-gate.md +74 -0
  172. package/templates/CLAUDE.template.md +1 -1
  173. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  174. package/templates/hooks/pre-tool-use-bash.sh +50 -3
  175. package/templates/hooks/pre-tool-use-edit-write.sh +31 -0
  176. package/templates/hooks/session-start.sh +15 -0
  177. package/templates/hooks/uap-policy-gate.sh +187 -5
  178. package/templates/stryker.config.json +14 -0
  179. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
  180. package/tools/agents/scripts/anthropic_proxy.py +254 -28
  181. package/tools/agents/tests/run_acceptance.py +0 -0
  182. package/tools/agents/tests/test_client_disconnect.py +0 -0
  183. package/tools/agents/tests/test_cycle_break_exploration.py +0 -0
  184. package/tools/agents/tests/test_deferral_break.py +0 -0
  185. package/tools/agents/tests/test_delivery_enforcement_all_langs.py +0 -0
  186. package/tools/agents/tests/test_delivery_enforcement_exemptions.py +0 -0
  187. package/tools/agents/tests/test_delivery_enforcement_filepath.py +0 -0
  188. package/tools/agents/tests/test_delivery_enforcement_web_and_bash.py +0 -0
  189. package/tools/agents/tests/test_delivery_enforcement_worktree.py +0 -0
  190. package/tools/agents/tests/test_delivery_enforcement_write_complexity.py +0 -0
  191. package/tools/agents/tests/test_disconnect_watcher.py +0 -0
  192. package/tools/agents/tests/test_doubling_break.py +0 -0
  193. package/tools/agents/tests/test_empty_maxtokens_recovery.py +0 -0
  194. package/tools/agents/tests/test_empty_tool_loop_break.py +0 -0
  195. package/tools/agents/tests/test_enforcement_self_protect.py +90 -0
  196. package/tools/agents/tests/test_enforcer_escape_hatches.py +0 -0
  197. package/tools/agents/tests/test_error_loop_break.py +0 -0
  198. package/tools/agents/tests/test_expert_review_pr_scope.py +13 -5
  199. package/tools/agents/tests/test_fastpath_config.py +0 -0
  200. package/tools/agents/tests/test_finalize_suppression.py +0 -0
  201. package/tools/agents/tests/test_gate_evidence.py +0 -0
  202. package/tools/agents/tests/test_gate_failclosed_indirection.py +0 -0
  203. package/tools/agents/tests/test_gate_integrity.py +0 -0
  204. package/tools/agents/tests/test_live_deliver_kill.py +0 -0
  205. package/tools/agents/tests/test_malformed_unclosed_think.py +0 -0
  206. package/tools/agents/tests/test_mandate_beats_recon.py +0 -0
  207. package/tools/agents/tests/test_mandate_deliver.py +0 -0
  208. package/tools/agents/tests/test_non_stream_resp_log.py +0 -0
  209. package/tools/agents/tests/test_output_token_ceilings.py +0 -0
  210. package/tools/agents/tests/test_overflow_truncate_count_tokens.py +0 -0
  211. package/tools/agents/tests/test_path_containment.py +0 -0
  212. package/tools/agents/tests/test_path_normalizer_hardened.py +0 -0
  213. package/tools/agents/tests/test_repeat_call_guard.py +0 -0
  214. package/tools/agents/tests/test_repeat_guard.py +0 -0
  215. package/tools/agents/tests/test_session_admission.py +0 -0
  216. package/tools/agents/tests/test_stream_heartbeat.py +0 -0
  217. package/tools/agents/tests/test_stream_thinking_deltas.py +405 -0
  218. package/tools/agents/tests/test_stuck_break_hard.py +0 -0
  219. package/tools/agents/tests/test_stuck_break_reattach.py +0 -0
  220. package/tools/agents/tests/test_turn_count_breaker_periodic.py +0 -0
  221. package/tools/agents/tests/test_upstream_chokepoint.py +0 -0
  222. package/tools/agents/tests/test_upstream_model_aliases.py +0 -0
  223. package/tools/agents/tests/test_validate_plan_gate.py +0 -0
  224. package/tools/agents/tests/test_vision_passthrough.py +0 -0
  225. package/tools/agents/tests/test_workdir_scope_enforcer.py +0 -0
  226. package/dist/cli/rtk.d.ts +0 -34
  227. package/dist/cli/rtk.d.ts.map +0 -1
  228. package/dist/cli/rtk.js +0 -401
  229. package/dist/cli/rtk.js.map +0 -1
  230. package/docs/integrations/RTK.md +0 -113
  231. package/scripts/setup/install-rtk.sh +0 -184
  232. package/src/policies/enforcers/rtk_wrap.py +0 -205
  233. package/src/policies/schemas/policies/rtk-wrap.md +0 -50
  234. package/tools/agents/tests/test_rtk_wrap.py +0 -151
@@ -0,0 +1,196 @@
1
+ # Qwen3.8-27B — With-UAP vs Without-UAP Comparison Plan (UAP v1.224.x)
2
+
3
+ **Status:** Proposed (no benchmark runs start without an explicit go)
4
+ **Date:** 2026-09-02
5
+ **Supersedes:** nothing — extends [PAIRED_FINDINGS.md](../benchmarks/PAIRED_FINDINGS.md) to the current model and current UAP
6
+
7
+ ## Goal
8
+
9
+ Run the **same Qwen3.8-27B model, same tasks, same seeds, twice — once with
10
+ UAP, once without** — and quantify the difference. The model under test is the
11
+ current production local stack: **Qwen3.8-27B (dense, UD-IQ4_XS, native
12
+ draft-mtp)** on llama.cpp, and the UAP under test is the **latest (v1.224.x)**.
13
+
14
+ Every experiment below produces one headline number: the **paired delta
15
+ (UAP-on minus UAP-off)** for accuracy, with the cost side of the ledger
16
+ (tokens, turns, latency) reported alongside it. Two questions the existing
17
+ findings cannot answer:
18
+
19
+ 1. **Replication:** does the decisive non-agentic gate-loop result — **+20pp
20
+ accuracy [95% CI +8, +32], p=0.008**, measured on qwen36-35b-a3b — hold on
21
+ this denser, stronger 27B model, or was it partly a property of the older
22
+ MoE?
23
+ 2. **Regression check:** the findings predate the two biggest recent ships —
24
+ the quality-metrics gate (v1.223.0) and the deliver-pipeline hardening
25
+ (v1.224.0: scoped rollback, declared gates, polyglot execution, config
26
+ routing, liveness, signed overrides). The paired harness's gate loop is the
27
+ `uap deliver` mechanism in miniature; confirm the hardened pipeline did not
28
+ regress the measured lift or its token economics.
29
+
30
+ ## Why now
31
+
32
+ - **Model changed under the findings.** Production serving switched
33
+ 2026-08-20 from qwen36-35b-a3b (MoE, ~3B active) to Qwen3.8-27B (dense,
34
+ qwen35-arch, native MTP head, 60–91% draft acceptance) — profile
35
+ `config/llama-profiles/qwen38-27b-mtp.env`, served as alias `Qwen3.8-27B`
36
+ on `:8080` (legacy aliases retained, so old client configs still resolve).
37
+ - **UAP changed under the findings.** The paired runs are from the v1.21x era;
38
+ the deliver loop they exercise has since been substantially hardened.
39
+ - **Newer suites exist that were not in the findings.** `real-gate-medium`,
40
+ `real-gate-power`, `real-gate-brutal`, and `real-gate-heldout` directly
41
+ address the findings' own ceiling-effect caveat (agentic baseline pinned at
42
+ 100% on the older suites, so UAP showed 0pp there).
43
+
44
+ ## Stack preflight (Phase 0 — before any measurement)
45
+
46
+ 1. Bring up / verify the serving stack:
47
+ `scripts/bootstrap/bootstrap-uap-llama-proxy-stack.sh` (llama-server
48
+ `:8080` + anthropic proxy `:4100`). Server is currently live with
49
+ `Qwen3.8-27B` loaded (131072 ctx/slot, 2 slots); the proxy did not answer
50
+ `/v1/models` at plan time — confirm it is up and routing.
51
+ 2. Confirm tool-call plumbing: `uap tool-calls status` (qwen-sharp.jinja
52
+ active, `--jinja` on).
53
+ 3. Freeze the served model id used by every run (`Qwen3.8-27B` or the proxy's
54
+ advertised id — verify once via `/props`, then hold it fixed across all
55
+ arms and phases so the paired design is not contaminated by an alias swap).
56
+ 4. Plumbing check with the deterministic mock adapter:
57
+ `uap bench paired --suite benchmarks/suites/smoke --adapter mock --epochs 8`.
58
+ 5. Concurrency discipline: the box is a single RTX 3090 with **2 server
59
+ slots** — run the harness at `--concurrency 2` max and keep
60
+ `PROXY_CONCURRENCY_LIMIT` == slot count. Latency numbers remain
61
+ queue-confounded (known caveat from the prior findings); we read
62
+ correctness and token deltas, not wall-clock.
63
+
64
+ ## Experimental design — the two arms
65
+
66
+ Every run pair toggles **only** the UAP surface. Model (`Qwen3.8-27B`),
67
+ serving stack, task fixture, seed, and prompt are identical in both arms.
68
+
69
+ | | **WITHOUT UAP** (baseline arm) | **WITH UAP** (treatment arm) |
70
+ |---|---|---|
71
+ | Raw (non-agentic) experiments | One raw completion endpoint call; whatever the model writes is final | The UAP gate loop (the `uap deliver` mechanism in miniature): execute → run the visible in-repo gate → feed failures back → regenerate until green |
72
+ | Agentic experiments (opencode adapter) | Bare opencode on the same model and prompt, no UAP files injected | Identical opencode run plus the paired-harness UAP surface: `AGENTS.md` operating protocol, `.uap-bench.json` manifest, `UAP_BENCH_COMPONENTS` env — the inspectable, diffable "treatment" |
73
+ | Deliver-path spot check (E4) | Model without the deliver pipeline | The actual hardened v1.224.0 `uap deliver` surface: scoped rollback, declared gates, liveness |
74
+
75
+ What "the difference" means, precisely, per run:
76
+
77
+ - **Accuracy Δ** — UAP-on success rate minus UAP-off success rate, with a
78
+ bootstrap 95% CI and permutation p-value; McNemar 2×2 ("UAP fixed" vs
79
+ "UAP regressed") on discordant pairs.
80
+ - **Cost Δ** — paired deltas for tokens, turns, tool-calls, latency. A win is
81
+ higher accuracy at acceptable cost, or equal accuracy at lower cost.
82
+ - **Ablation (E2)** — the WITH-UAP arm decomposed: leave-one-out per
83
+ component (gates / worktree / memory / experts / skills / patterns) so we
84
+ can see which parts of UAP earn their token overhead on this model.
85
+
86
+ All scoring is deterministic `verifyCmd` (no LLM judge). Artifacts land in
87
+ `benchmark-results/paired-qwen38-*`. Statistics per the established format:
88
+ bootstrap 95% CI (10k seeded resamples) + sign-flip permutation p.
89
+
90
+ ## Experiments
91
+
92
+ | # | Question | Suite | Adapter | WITHOUT UAP | WITH UAP |
93
+ |---|---|---|---|---|---|
94
+ | E1 | Does the gate loop still rescue one-shot failures? | `real-gate-gated` × 10 epochs | raw | single-shot | gate loop |
95
+ | E2 | Does UAP cost or add anything on a self-verifying agent? | `real-gate-hard` × 4 epochs | opencode | bare opencode | opencode + UAP surface (+ per-component ablation) |
96
+ | E3 | Is there headroom for UAP lift on harder/held-out tasks? | `real-gate-heldout`, `-power`, `-medium`, `-brutal` | raw + opencode | both baselines | both treatments |
97
+ | E4 | Does the hardened v1.224.0 deliver path converge as well as the miniature? | `real-gate-gated` subset | raw → deliver | no deliver | full deliver surface |
98
+
99
+ ### E1 — Headline replication (raw adapter, non-agentic gate value)
100
+
101
+ ```bash
102
+ UAP_RAW_TEMPERATURE=0.6 uap bench paired \
103
+ --adapter raw --model "Qwen3.8-27B" \
104
+ --suite benchmarks/suites/real-gate-gated \
105
+ --epochs 10 --concurrency 2
106
+ ```
107
+
108
+ Identical design to the decisive qwen36 run (5 edge-case tasks ×
109
+ {single-shot, gate-loop} × 10 epochs, temp 0.6). The comparison to beat:
110
+ **+20.0pp [+8.0, +32.0], McNemar net +10, +1,072 tokens / +0.3 turns.**
111
+ Hypotheses to distinguish: (a) lift replicates ≈ +20pp — gate value is
112
+ model-independent; (b) lift shrinks because the stronger model one-shots more
113
+ edge cases (baseline above 78%) — ceiling moves, gate still nets positive on
114
+ the remainder; (c) lift vanishes — report honestly.
115
+
116
+ ### E2 — Agentic ceiling check + component ablation (opencode adapter)
117
+
118
+ ```bash
119
+ uap bench paired --adapter opencode --model "Qwen3.8-27B" \
120
+ --suite benchmarks/suites/real-gate-hard --ablation --epochs 4
121
+ ```
122
+
123
+ Replicates the 0pp-at-ceiling agentic result and re-ranks per-component token
124
+ overhead (gates / worktree / memory / experts / skills / patterns) on the new
125
+ model. Watch for the known harness wedge (detached opencode process tree
126
+ surviving SIGTERM) — the process-group SIGKILL fix is in, but flag any
127
+ 158–190/192-style shortfall.
128
+
129
+ ### E3 — Headroom re-openers (the suites the findings never saw)
130
+
131
+ Paired runs (raw + opencode adapters) over, in priority order:
132
+
133
+ 1. `real-gate-heldout` — held-out tasks; guards against suite overfitting of
134
+ the E1/E2 conclusions.
135
+ 2. `real-gate-power` — designed for statistical power; the primary candidate
136
+ for a tighter CI on the agentic delta.
137
+ 3. `real-gate-medium`, then `real-gate-brutal` — harder multi-file tasks
138
+ where even a self-verifying agentic baseline should drop below 100%,
139
+ re-opening the headroom the older suites lacked. This is the run that can
140
+ show UAP lift *inside* an agentic harness, which the prior findings could
141
+ not measure.
142
+
143
+ ### E4 — Deliver-pipeline spot check (post-hardening)
144
+
145
+ E1's gate loop is the deliver mechanism in miniature; it does not exercise
146
+ the actual v1.224.0 deliver path (scoped rollback, declared gates, liveness).
147
+ Unit/integration coverage for those shipped with the feature (90+ tests), so
148
+ E4 is a small paired run where the UAP arm routes through the **current full
149
+ deliver surface** rather than the raw miniature, confirming the hardened loop
150
+ converges at least as well on the same suite. If the paired harness cannot
151
+ drive the real deliver path today, note the gap and scope the adapter
152
+ extension instead of hand-waving it.
153
+
154
+ ## Analysis plan
155
+
156
+ - Primary claims are the **with-UAP vs without-UAP paired deltas** (E1–E4),
157
+ each with CI + p, in the `PAIRED_FINDINGS.md` report format. The summary
158
+ table leads with one row per experiment: suite, UAP-off accuracy, UAP-on
159
+ accuracy, Δ, CI, p, token Δ.
160
+ - Cross-model (qwen36 → qwen38) comparisons are **not paired** — report as
161
+ side-by-side findings with the confound named (model, serving stack, and
162
+ UAP version all moved).
163
+ - Success criteria, decided in advance: E1 CI excludes 0 with the same sign
164
+ as before; E3 shows at least one suite where the agentic baseline leaves
165
+ headroom (else the 0pp agentic conclusion stands, strengthened); E4 shows
166
+ no convergence regression vs E1's loop.
167
+ - Write-up lands as an update section in `docs/benchmarks/PAIRED_FINDINGS.md`
168
+ (new runs, same tables), not a parallel document.
169
+
170
+ ## Cost
171
+
172
+ Local GPU, so the currency is wall-clock, not dollars. Rough budget on one
173
+ RTX 3090 at 2-slot concurrency: E1 ≈ 100 runs, E2 ≈ 192 runs (ablation), E3
174
+ similar order per suite. Expect several GPU-hours per experiment; schedule
175
+ sequentially, keep `--concurrency 2`, and watch the host's kernel OOM-kill
176
+ history at the 131072-ctx tier (~0.95 GiB free VRAM) — drop to 65536/slot if
177
+ instability appears, and re-derive `PROXY_CONTEXT_WINDOW` to match.
178
+
179
+ ## Risks
180
+
181
+ | Risk | Mitigation |
182
+ |---|---|
183
+ | Proxy `:4100` not answering at plan time | Phase 0 preflight before any run |
184
+ | Stronger model lifts the non-agentic baseline, shrinking measurable headroom | Expected; report baseline→UAP pair regardless, lean on E3 suites for headroom |
185
+ | Thin VRAM headroom at 131072 ctx/slot under harness load | Drop to 65536/slot tier, re-derive proxy limits |
186
+ | Alias confusion (`Qwen3.8-27B` vs legacy qwen35/36 aliases on the same server) | Freeze one id in Phase 0, assert it in run metadata |
187
+ | Harness process-tree wedge under opencode adapter | Group-SIGKILL fix is in; verify completion counts per run |
188
+
189
+ ## Deliverables when executed
190
+
191
+ 1. `benchmark-results/paired-qwen38-*` artifacts (records.jsonl, report.json,
192
+ report.md) for E1–E4
193
+ 2. An update to `docs/benchmarks/PAIRED_FINDINGS.md` adding the qwen38 /
194
+ UAP-v1.224.x tables alongside the qwen36 originals
195
+ 3. If E4 surfaces the deliver-path adapter gap: a scoped follow-up task for
196
+ the paired-harness extension
@@ -1,6 +1,6 @@
1
1
  # UAP Programmatic API Reference
2
2
 
3
- > Public API of the `@miller-tech/uap` package. Version v1.93.1.
3
+ > Public API of the `@miller-tech/uap` package. Version v1.224.0.
4
4
 
5
5
  > **🏭 Where this fits:** Cross-cutting — the machine parts behind the line.
6
6
  > **What it delivers:** when the `uap` CLI isn't the right shape for your job,
@@ -1,7 +1,7 @@
1
1
  # UAP CLI Reference
2
2
 
3
3
  > Complete command reference for the Universal Agent Protocol command-line interface (`uap`).
4
- > Version v1.93.1.
4
+ > Version v1.224.0.
5
5
 
6
6
  > **🏭 Where this fits:** Every station — this is the control panel for the whole
7
7
  > line. **What it delivers:** one binary that drives each stage of your
@@ -36,6 +36,7 @@ runs, keeping `--help` fast.
36
36
  | [`memory`](#memory) | Manage the agent memory system |
37
37
  | [`patterns`](#patterns) | Manage pattern RAG (on-demand retrieval via Qdrant) |
38
38
  | [`worktree`](#worktree) | Manage git worktrees |
39
+ | [`merge`](#merge) | Serialized landing of concurrent agent PRs |
39
40
  | [`sync`](#sync) | Sync configuration between platforms |
40
41
  | [`droids`](#droids) | Manage custom droids/agents |
41
42
  | [`expert-route`](#expert-route) | Recommend an expert droid chain for a task |
@@ -67,10 +68,23 @@ runs, keeping `--help` fast.
67
68
  | [`mcp-router`](#mcp-router) | Hierarchical MCP router for 98%+ token reduction |
68
69
  | [`hooks`](#hooks) | Manage session hooks across platforms |
69
70
  | [`tool-calls`](#tool-calls) | Manage Qwen3.5 tool call fixes and chat templates |
70
- | [`rtk`](#rtk) | Manage RTK (Rust Token Killer) integration |
71
71
  | [`mcp-setup`](#mcp-setup) | Configure MCP Router for all AI harnesses |
72
72
  | [`schema-diff`](#schema-diff) | Detect breaking schema changes between branches |
73
73
  | [`policy`](#policy) | UAP policy management |
74
+ | [`quality`](#quality) | Quality-metrics gate: complexity, coverage, CRAP, mutation, duplication, any-types |
75
+ | `plan` | Validate + record plan validation (validate-plan-on-change gate): `uap plan validate [file]` reviews the plan, then stamps |
76
+ | `principles` | Engineering principles: show them, and answer the backward-compatibility stance (`status \| ask \| compat \| maturity \| show`) |
77
+ | `fidelity` | Inspect or set the maximum-fidelity verification mode (raised gates + always-on visual/vision review) |
78
+ | `interaction` | Interaction gate: derive probes from the requirements and play the artifact through them |
79
+ | `harness card` | ETCSOVG harness disclosure card for the current configuration |
80
+ | `harness evidence` | Per-tool-call evidence corpus: failure classes, component attribution, edit-tool health |
81
+ | `ideate ideas` | Print the curated ideas produced for a project |
82
+ | `self-harness mine-prod` | Mine weaknesses from production traces (HALO + proxy log) and enqueue proposals for gated validation (never applies) |
83
+ | `self-harness pending` | List queued proposals awaiting validation + gate (from mine-prod) |
84
+ | `bench paired` | Run the paired A/B over a real-gate suite; reports accuracy + efficiency deltas with CIs |
85
+ | `self-harness prune` | Ablation-prune: drop stale / no-longer-paying-off transfer + pending entries |
86
+ | `self-harness run` | Autonomous loop: mine → propose → validate (real paired bench per Mod) → decide → (with `--apply`) commit + versioned snapshot |
87
+ | `self-harness transfer` | List the cross-model transfer store (accepted/rejected Mods keyed by failure signature) |
74
88
  | [`uap-omp`](#uap-omp) | UAP integration commands for oh-my-pi (omp) users |
75
89
 
76
90
  ---
@@ -1000,18 +1014,6 @@ Manage Qwen3.5 tool call fixes and chat templates.
1000
1014
 
1001
1015
  ---
1002
1016
 
1003
- ## `rtk`
1004
-
1005
- Manage RTK (Rust Token Killer) integration for token optimization.
1006
-
1007
- | Subcommand | Key flags | Purpose |
1008
- |------------|-----------|---------|
1009
- | `install` | `--force`, `--method` (npm/cargo/binary) | Install the RTK CLI proxy for 60-90% token savings |
1010
- | `status` | — | Check RTK installation and token savings |
1011
- | `help` | — | Show RTK usage information |
1012
-
1013
- ---
1014
-
1015
1017
  ## `mcp-setup`
1016
1018
 
1017
1019
  Configure MCP Router for all AI harnesses (Claude, Factory, VSCode, Cursor).
@@ -1080,6 +1082,39 @@ uap policy stage POL-1 -s pre-exec
1080
1082
 
1081
1083
  ---
1082
1084
 
1085
+ ## `quality`
1086
+
1087
+ Quality-metrics gate: deterministic policing of complexity, coverage, CRAP,
1088
+ surviving mutants, duplication, dead code, and explicit `any`/`unknown` types.
1089
+ Activated by `.uap/quality-metrics.json`; existing debt is frozen in the
1090
+ ratchet baseline `.uap/quality-baseline.json` so only NEW or WORSENED
1091
+ violations block. The proxy enforcer `quality_metrics_gate.py` mirrors the fast
1092
+ path (LOC, complexity, any-types) so agent edits are blocked pre-exec with the
1093
+ same thresholds this command enforces at commit/CI time.
1094
+
1095
+ | Subcommand | Key flags | Purpose |
1096
+ |------------|-----------|---------|
1097
+ | `init` | — | Write `.uap/quality-metrics.json` with the default thresholds (activates the gate) |
1098
+ | `check` | `--staged`, `--files <list>`, `-f, --file <path>`, `--json` | Scan files for metric violations and ratchet against the baseline; exit 2 on blocking violations |
1099
+ | `baseline` | `--update` | Show, or with `--update` regenerate, `.uap/quality-baseline.json` from a fresh scan |
1100
+ | `report` | `--files <list>`, `--json` | Verbose report including grandfathered violations, improvements, and skips |
1101
+ | `mutate` | `--changed` | Stryker incremental mutation run scoped to files changed vs the upstream base (advisory when Stryker is not installed) |
1102
+
1103
+ Global flags: `-d, --project-dir <path>`.
1104
+
1105
+ ```bash
1106
+ uap quality init # write the config
1107
+ uap quality baseline --update # freeze current debt (commit the diff — it is the reviewable record)
1108
+ uap quality check # full scan; fails on new/worsened violations
1109
+ uap quality check --staged # scan only files changed vs upstream
1110
+ uap quality check --file src/x.ts # single file (content may come from stdin — enforcer parity path)
1111
+ ```
1112
+
1113
+ Escape hatch for agents: `UAP_QUALITY_GATE_OFF=1`. Regenerating the baseline is
1114
+ a deliberate act — do it only with reviewer sign-off.
1115
+
1116
+ ---
1117
+
1083
1118
  ## `uap-omp`
1084
1119
 
1085
1120
  UAP integration commands for oh-my-pi (omp) users. Thin wrappers over the
@@ -0,0 +1,248 @@
1
+ # UAP vs Other Agent Harnesses and Tooling
2
+
3
+ > Applies to UAP v1.224.0. Competitor profiles reflect public sources as of
4
+ > September 2026; vendor-reported numbers are flagged as such, and claims we
5
+ > could not verify are marked or omitted. UAP's own claims in this document
6
+ > were verified against the code.
7
+ >
8
+ > Companion: [Market Position & Competitive Analysis](../analysis/MARKET_POSITION.md)
9
+ > (2026-09) — the dated, strategy-level read (market structure, moats, risks,
10
+ > options) above this feature-level comparison.
11
+
12
+ UAP is frequently miscast as "another agent harness." It isn't one — it's the
13
+ **discipline layer that sits underneath the harness you're already using**, and
14
+ that positioning determines what an honest comparison looks like. Against
15
+ harnesses (Claude Code, Codex, Cursor, Aider, …) UAP is *complementary*: it
16
+ installs into them. Against per-capability tooling (memory systems,
17
+ orchestration frameworks, spec-driven-development products, review bots,
18
+ policy engines) UAP is *comparable*: it ships its own answer to the same
19
+ problem. This document does both comparisons, then says plainly where UAP
20
+ loses.
21
+
22
+ ---
23
+
24
+ ## The one-slide version
25
+
26
+ | | Typical agent harness | Typical point tool | **UAP** |
27
+ |---|---|---|---|
28
+ | What it is | The agent's runtime/UI | One capability (memory OR review OR orchestration) | A process layer under the harness: memory + policy + verification + coordination |
29
+ | Model lock-in | Often (Claude Code, Codex, Jules) or partial (Cursor) | Usually none | None — frontier or local llama.cpp/Qwen |
30
+ | Rules are | Conventions in a context file | Config of the point tool | **Executable hooks that block** (exit 2), 32 enforcers |
31
+ | "Done" means | The model says so | N/A | Your **real gates pass**, judged by a different checker than the writer |
32
+ | Memory | Context files (CLAUDE.md / AGENTS.md / rules) | The product (Mem0, Zep, Letta) | 4-tier memory with write-gates + promotion, built in |
33
+ | Multi-agent | Subagents, cloud task pools | N/A or framework | Live file-claim blocking across worktrees + deploy batching |
34
+ | Cost | Subscription / API | Free tier → per-seat SaaS | MIT, self-hosted, free |
35
+
36
+ ---
37
+
38
+ ## 1. UAP vs agent harnesses (complementary, not competitive)
39
+
40
+ UAP installs hooks into the harness and mediates its tool calls; it does not
41
+ replace the model, the UI, or the session runtime. It currently supports
42
+ [9 harnesses](PLATFORMS.md) — Claude Code, Factory, Cursor, VSCode, OpenCode,
43
+ Codex, ForgeCode, Oh-My-Pi, Hermes.
44
+
45
+ | Harness | Layer | Memory | Extensibility | Verification gate | Multi-agent | Models | License |
46
+ |---|---|---|---|---|---|---|---|
47
+ | **Claude Code** | CLI + IDE/web | CLAUDE.md, skills | Richest hook surface (PreToolUse etc.), MCP, subagents | Convention + hooks; `/verify` skill (2026) | Subagents, Agent SDK | Anthropic only | Proprietary |
48
+ | **OpenAI Codex** | CLI + cloud + IDE | AGENTS.md | MCP, skills, sandbox/approvals | Cloud sandbox + diffs; tests user-configured | Parallel cloud tasks | OpenAI only | CLI Apache-2.0, usage paid |
49
+ | **Cursor** | IDE + CLI | .cursor/rules, Memories | MCP, rules, BugBot | Prompt/rule-driven | Background/cloud agents | Multi + own Composer | Proprietary freemium |
50
+ | **Aider** | Terminal CLI | CONVENTIONS.md, config | Config, scripting (no MCP) | **Auto-lint/auto-test built in** — the closest to UAP's gate loop among harnesses | Single-session | Fully agnostic | Apache-2.0 |
51
+ | **OpenCode** | TUI + desktop + IDE | AGENTS.md | MCP, plugins, custom agents | In-session commands; no hard gate | Subagents, headless run | 75+ providers | Open source |
52
+ | **Cline** | IDE ext + CLI/SDK | .clinerules, Memory Bank | MCP (originated the marketplace), approvals | Human approval per step; checkpoints | Single; SDK scripting | BYOK 30+ providers | Apache-2.0 |
53
+ | **Factory Droid** | Harness platform | Sessions, instruction files, skills | Skills, MCP, plugins, Spec Mode | Spec Mode + CI droids; configurable | Missions, parallel droids, worktrees | Model-agnostic | Proprietary SaaS |
54
+ | **Gemini CLI / Jules → Antigravity** | CLI (sunset 2026) + async cloud | GEMINI.md | MCP, extensions | Jules runs tests in VM + PR approval | Task pool; Antigravity multi-agent | Gemini only | Mixed |
55
+ | **Devin (Cognition)** | Autonomous cloud agent + IDE (absorbed Windsurf, June 2026) | Playbooks, persistent VMs | API, webhooks | Runs tests in own VM before PR | Parallel sessions | Proprietary SWE + frontier | Commercial |
56
+
57
+ ### What a harness gives you that UAP doesn't
58
+
59
+ The agent itself: the UI, the session loop, the tool surface, the model
60
+ subscription, and (for the commercial ones) support. If you have no harness,
61
+ UAP is not the thing to install first.
62
+
63
+ ### What UAP adds underneath any of them
64
+
65
+ - **Executable policy, not conventions.** Every harness above persists guidance
66
+ as *context files* (CLAUDE.md, AGENTS.md, .cursor/rules) — prose the model
67
+ may honor or ignore. UAP turns the same rules into hook-bound Python
68
+ enforcers that return exit 2 and **block** the tool call: worktree isolation,
69
+ test deltas, schema diffs, expert review, quality budgets. The harness's own
70
+ hook surface (Claude Code's is the strongest) is the mounting point, not a
71
+ substitute.
72
+ - **A hard definition of done.** Aider's auto-test and Jules's VM runs are
73
+ real verification, but they answer "did the edit pass" for one edit. UAP's
74
+ `deliver` loop iterates against your *project's* gates (build → typecheck →
75
+ test → lint → declared custom gates → execution/polyglot gates) until they
76
+ pass, with a separate acceptance judge — the generator never grades its own
77
+ homework.
78
+ - **Cross-harness consistency.** The same policy file, memory, and gate set
79
+ applies whether today's session runs in Claude Code and tomorrow's in
80
+ OpenCode — harness choice becomes a preference, not a process change.
81
+ - **Local-model viability.** The inference proxy's guardrails (loop-breakers,
82
+ empty-output recovery, grammar constraints, model-slot leases) make cheap
83
+ local models (llama.cpp/Qwen) usable on the same floor as frontier models.
84
+
85
+ ---
86
+
87
+ ## 2. UAP vs memory & context tooling
88
+
89
+ | Tool | Layer | Memory model | Write quality control | Consumption | Benchmarks | License |
90
+ |---|---|---|---|---|---|---|
91
+ | **Mem0** | Library + SaaS (+ MCP via OpenMemory) | Semantic facts, multi-scope; optional graph | LLM ADD/UPDATE/DELETE/NOOP gate with dedup | SDK, REST, MCP | LoCoMo 92.5, LongMemEval 94.4 *(vendor-reported)* | Apache-2.0 + paid tiers |
92
+ | **Zep / Graphiti** | Service + OSS engine | Temporal bi-temporal knowledge graph | Entity resolution + edge invalidation | SDK, REST, MCP | DMR > MemGPT (2025 paper) | Graphiti Apache-2.0; Zep commercial |
93
+ | **Letta** | Agent runtime | Core/archival/recall blocks, agent self-edits | Agent's own tool-call judgment; no auto-dedup | SDK, REST, ADE, MCP | No fresh 2026 public numbers | Apache-2.0 + cloud |
94
+ | **Context7** | MCP server | None — doc injection, not memory | Server-side curation | MCP | None published | OSS + freemium |
95
+ | **LLMLingua line** | Library | None — prompt compression | N/A | pip | 20× compression (EMNLP'23) | MIT; stable, low momentum |
96
+ | **LangMem / LlamaIndex memory** | Framework modules | Semantic/episodic/procedural | Configurable extractors | SDK | None public | OSS |
97
+ | **UAP memory** | Built into the discipline layer | **4 tiers**: working (SQLite FTS5) → session → semantic (Qdrant, 768-dim) → knowledge graph | Score-gated writes + consolidation + promotion; dedup by hash + embedding similarity | CLI + hook injection into 9 harnesses | Not independently benchmarked on LoCoMo/LongMemEval | MIT |
98
+
99
+ ### Where the specialists win
100
+
101
+ Mem0, Zep, and Letta are *products about memory*: managed services, enterprise
102
+ compliance (Zep is SOC 2), published benchmark numbers (Mem0's are
103
+ vendor-reported), SDK ecosystems, and 20+ framework integrations. If you are
104
+ *building* an agent product and need a memory API, use one of them — UAP's
105
+ memory is not exposed as a general-purpose service, has no hosted tier, and
106
+ has not been run against the standard memory benchmarks.
107
+
108
+ ### Where UAP differs
109
+
110
+ UAP's memory is **operational, not archival**: its tiers exist to keep a coding
111
+ agent's *workflow* honest (recent actions, open loops, promoted lessons), and
112
+ its distinguishing feature is the feedback loop — lessons graduate from
113
+ session notes to long-term memory only through a quality write-gate, and
114
+ patterns that stop paying off fade (pattern reinforcement). It is also the
115
+ only option in the table that arrives pre-wired into the agent's session
116
+ lifecycle (injected at session start, recorded per turn) across nine harnesses
117
+ with zero application code. Context7-style doc injection and LLMLingua-style
118
+ compression have their UAP analogues in the MCP Router (tool hiding + FTS5
119
+ BM25 output compression, ~98% smaller big-tool payloads) — again, hook-native
120
+ rather than an API you integrate.
121
+
122
+ ---
123
+
124
+ ## 3. UAP vs orchestration frameworks
125
+
126
+ | Framework | Model-agnostic | Durable state | Human-in-loop | Executable gates | License | Maturity |
127
+ |---|---|---|---|---|---|---|
128
+ | **LangGraph** | Yes | Strong (checkpoints; Temporal plugin) | Strong (interrupts) | Advisory/external (LangSmith evals) | MIT | Very high — the default |
129
+ | **CrewAI** | Yes | Partial | Per-task | Output validators; enterprise governance tier | MIT + commercial | High |
130
+ | **AutoGen → MS Agent Framework** | Yes | Legacy → improved in successor | Yes | Advisory | MIT | AutoGen in maintenance; successor young |
131
+ | **OpenAI Agents SDK** | OpenAI-first | Sessions only | Patterns | Guardrails primitive (LLM-level) | MIT | High |
132
+ | **Google ADK** | Gemini-first | Pluggable sessions | Callbacks | Built-in eval framework (`adk eval`) | Apache-2.0 | High, growing |
133
+ | **UAP** | Yes (incl. local models) | SQLite task DAG + coordination DB + run state | Operator guidance channel mid-run | **Yes — exit-code-blocking enforcers + real-gate convergence loop** | MIT | Single-operator production use |
134
+
135
+ These frameworks answer "how do I *build* a multi-agent application in code";
136
+ UAP answers "how do I *govern* the coding agents I already run." The overlap
137
+ is real but narrow — if you use LangGraph to build an agent product, you could
138
+ still put UAP under the coding agents that maintain that product's repo. The
139
+ sharpest differences: none of the frameworks ship executable, deterministic
140
+ gates on what the agent may *do to a codebase* (their guardrails are LLM-level
141
+ validators), and none carry a verification loop tied to the project's real
142
+ build/test/lint. Conversely, UAP has no visual graph builder, no
143
+ checkpoint-replay durability à la LangGraph+Temporal, and no framework-level
144
+ abstractions for novel agent topologies.
145
+
146
+ ---
147
+
148
+ ## 4. UAP vs spec-driven development & agent governance
149
+
150
+ | Tool | What it does | Enforcement mode | License |
151
+ |---|---|---|---|
152
+ | **GitHub spec-kit** | Structured specify → plan → tasks → implement workflow with a project "constitution" | Prompt-level templates and checklists | MIT |
153
+ | **AWS Kiro** | Spec workflow (EARS requirements → design → tasks) + event-driven agent hooks | **Mixed**: hooks are executable; specs/steering are prompt-level | Proprietary |
154
+ | **Tessl** | Pivoted Jan 2026 to an "Agent Enablement Platform" (skills registry); spec-driven skills remain | Prompt-level + eval scenarios | Proprietary |
155
+ | **AGENTS.md convention** | The de facto standard agent-readme; 60k+ repos, 20+ tools read it | None — convention only | Open format |
156
+ | **UAP** | Reads the same instruction files (CLAUDE.md/AGENTS.md) *and* binds their rules to hook-enforced gates; plan validation gate; P35 decoder-first pre-execution check | **Executable** for the rules it covers (edit/commit/ship plane); prompt-level for everything else | MIT |
157
+
158
+ The axis that matters here is *suggests vs blocks*. Spec-kit, AGENTS.md, and
159
+ Tessl's skills improve what the agent *knows*; Kiro's hooks and UAP's
160
+ enforcers constrain what the agent *does*. UAP and Kiro are the only two with
161
+ an executable component; Kiro's hooks automate *tasks* (on file save, run X),
162
+ while UAP's hooks *gate the action itself* (block the write, the push, the
163
+ merge). They compose fine — a spec-kit constitution can name UAP's gates as
164
+ the enforcement mechanism.
165
+
166
+ ---
167
+
168
+ ## 5. UAP vs verification, review & policy engines
169
+
170
+ | Tool | What it gates | Where it sits | Executable? | License |
171
+ |---|---|---|---|---|
172
+ | **SWE-agent** | Nothing itself — research scaffold measured by SWE-bench | Task execution | N/A | MIT |
173
+ | **CodeRabbit** | PR review (bugs, security, custom rules) | **PR stage** | Via platform merge checks; findings advisory | Proprietary SaaS |
174
+ | **Greptile** | PR review with full-repo context | PR stage (self-host option in v3) | Via merge checks; advisory by default | Proprietary |
175
+ | **NeMo Guardrails** | Agent I/O: injection, dialog, tool-call constraints | Runtime middleware | Yes — blocking rails | Apache-2.0 |
176
+ | **OPA (agent use)** | Which tools an agent may call, with what parameters — now a first-class OPA use case (OWASP Agentic Top 10 write-ups) | Runtime middleware | Yes — deterministic Rego deny | Apache-2.0 (CNCF) |
177
+ | **UAP** | Codebase integrity: where edits land, whether tests/builds/schema/review gates ran, quality budgets, trust anchors | **Edit/commit/ship plane**, pre-PR | Yes — exit-2 hook enforcers, fail-closed | MIT |
178
+
179
+ ### The real distinctions
180
+
181
+ - **Stage.** CodeRabbit/Greptile review *after* the code is written, at the PR.
182
+ UAP gates *while* the agent is writing — the violation never becomes a commit.
183
+ They compose well: UAP reduces what the PR reviewer has to catch.
184
+ - **Determinism.** OPA and UAP are the deterministic options: policy-as-code
185
+ with no LLM in the verdict path. OPA is the more general, more battle-tested
186
+ engine (CNCF-graduated, huge ecosystem) and the better choice for
187
+ platform-wide authorization. UAP's enforcers trade that generality for being
188
+ **pre-built for coding-agent failure modes** (worktree discipline, test
189
+ gates, self-protection against an agent disabling its own guardrails —
190
+ including interpreter-mediated tampering) and for hooking directly into
191
+ harness events with no sidecar to run.
192
+ - **Verification depth.** Nobody else in this table runs the project's real
193
+ build/test/lint as a convergence gate with a separate acceptance judge.
194
+ SWE-agent measures agents; UAP's paired harness (`uap bench paired`)
195
+ measures *its own* uplift with controlled A/B — see
196
+ [benchmarks](../benchmarks/PAIRED_FINDINGS.md).
197
+ - **UAP's quality gate vs review bots.** CodeRabbit-style review is LLM
198
+ judgment; UAP's `quality` gate is deterministic budgets (complexity, CRAP,
199
+ coverage, mutants, duplicates, `any` types) with a ratchet baseline — the
200
+ two catch different things.
201
+
202
+ ---
203
+
204
+ ## 6. Where UAP loses — honest trade-offs
205
+
206
+ 1. **Single-operator tool.** No user auth, no teams, no hosted service, no
207
+ enterprise compliance story (Zep/Mem0/Cognition all have one). The
208
+ dashboard binds unauthenticated; it's a local console.
209
+ 2. **Not a harness.** You still need Claude Code/OpenCode/etc. underneath;
210
+ UAP alone runs no agent.
211
+ 3. **Not a framework.** No graph builder, no replay durability, no agent-topology
212
+ abstractions — LangGraph/ADK territory.
213
+ 4. **Memory is not benchmarked.** Mem0/Zep publish LoCoMo/LongMemEval/DMR
214
+ numbers (vendor caveats aside); UAP's memory has none. Its benchmark
215
+ discipline is applied to *delivery uplift* instead (paired A/B with CIs).
216
+ 5. **Platform breadth.** The kernel sandbox is Linux-only (bubblewrap); hook
217
+ depth varies by harness; the full memory tier wants Docker/Qdrant.
218
+ 6. **Ecosystem size.** One vendor, MIT, small community vs LangChain-scale
219
+ ecosystems; fewer integrations, fewer eyes.
220
+ 7. **Enforcement has a known escape hatch.** `--dangerously-skip-permissions`
221
+ bypasses harness hooks by design; UAP's compensating control is the bwrap
222
+ sandbox, not the hook plane.
223
+ 8. **Vendor momentum elsewhere.** The 2026 market moved fast (Windsurf → Devin
224
+ Desktop, Gemini CLI → Antigravity, AutoGen → Agent Framework, Tessl's
225
+ pivot); harness-specific UAP integrations can lag those shifts.
226
+
227
+ ---
228
+
229
+ ## 7. Choosing
230
+
231
+ - **Building an agent product in code** → LangGraph / Google ADK (+ Mem0 or
232
+ Zep for memory). UAP is irrelevant to your runtime, useful for your repo.
233
+ - **Running coding agents on a real codebase and tired of unverified "done"** →
234
+ UAP under your current harness; add CodeRabbit/Greptile at the PR if you
235
+ want a second, post-hoc net.
236
+ - **Regulated / multi-tenant agent authorization** → OPA as the policy engine;
237
+ UAP's enforcers are the coding-agent-specific complement.
238
+ - **Local-model shop** → UAP's proxy + guardrails + routing are the differentiator;
239
+ nothing else in this document is built for that floor.
240
+
241
+ ## Sources & method
242
+
243
+ UAP capabilities verified against the v1.224.0 codebase (see
244
+ [FEATURES.md](FEATURES.md), [architecture](../architecture/OVERVIEW.md)).
245
+ Competitor profiles compiled September 2026 from vendor docs and secondary
246
+ reviews; vendor-reported benchmark and adoption figures are flagged inline,
247
+ and market events we could not confirm from primary sources (e.g. a reported
248
+ Cursor–Continue acquisition) were omitted. Corrections welcome via PR.
@@ -1,6 +1,6 @@
1
1
  # Configuration Reference
2
2
 
3
- > Universal Agent Protocol (UAP) v1.163
3
+ > Universal Agent Protocol (UAP) v1.224.0
4
4
 
5
5
  > **🏭 Where this fits:** Cross-cutting — the settings that tune every station.
6
6
  > **What it delivers:** the dials that decide how your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)
@@ -111,8 +111,6 @@ Top level: `version`, `project`, `memory`, `worktree`, `costOptimization`,
111
111
  | `FACTORY_API_KEY` / `DROID_API_KEY` | Factory/droid benchmark API key | — |
112
112
  | `NODE_ENV` / `UAM_ENV` / `CI` | Serverless env detection | — |
113
113
  | `HOME` | `~/.uap/omp`, droids dir resolution | — |
114
- | `TMPDIR` | rtk temp dir | `/tmp` |
115
- | `FORCE_INSTALL` | Force rtk reinstall | off |
116
114
  | `APPDATA` / `USERPROFILE` | Windows MCP config path expansion | — |
117
115
 
118
116
  Per-model API key env var names are configurable via the model config field
@@ -1,6 +1,6 @@
1
1
  # Database Schema Reference
2
2
 
3
- > Universal Agent Protocol (UAP) v1.93.1
3
+ > Universal Agent Protocol (UAP) v1.224.0
4
4
 
5
5
  > **🏭 Where this fits:** Cross-cutting — the shop's records and shift log.
6
6
  > **What it delivers:** the durable memory of your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)
@@ -1,6 +1,6 @@
1
1
  # Feature Catalog
2
2
 
3
- > Universal Agent Protocol (UAP) v1.163
3
+ > Universal Agent Protocol (UAP) v1.224.0
4
4
 
5
5
  > **🏭 Where this fits:** Every station on the line — this catalog is the parts list for the whole factory. **What it delivers:** each feature below is mapped to the stage of your [delivery pipeline](../guides/DELIVERY_PIPELINE.md) it protects, so you can see exactly where your agent's work stops being plausible-looking and starts being genuinely shippable.
6
6
 
@@ -153,7 +153,7 @@ DB-driven policy enforcement engine.
153
153
  | Policy memory (`policy-memory.ts`) | Persists policies (`policies.db`). |
154
154
  | Enforced tool router (`enforced-tool-router.ts`) | Routes tool calls through the gate. |
155
155
  | CLAUDE.md conversion (`convert-policy-to-claude.ts`) | Renders policies into CLAUDE.md. |
156
- | Enforcers (`enforcers/`) | ~20 Python enforcers (worktree_required, test_gate, schema_diff_gate, memory_before_plan, coord_overlap, mcp_router_first, rtk_wrap, iac_parity, expert_review_required, etc.). |
156
+ | Enforcers (`enforcers/`) | ~20 Python enforcers (worktree_required, test_gate, schema_diff_gate, memory_before_plan, coord_overlap, mcp_router_first, iac_parity, expert_review_required, etc.). |
157
157
 
158
158
  ## Delivery (`src/delivery/`) — Build & QC / Verify
159
159
 
@@ -284,5 +284,5 @@ The `uap` CLI is the single door into the whole factory (top-level commands):
284
284
  `handsfree` (`hf`), `challenge`, `sandbox`, `react`, `ideate`, `coord`, `agent`,
285
285
  `deploy`, `task`, `compliance`, `coordination`, `skill`, `update`,
286
286
  `dashboard` (alias `dash`), `model`, `mcp-router`, `hooks`, `tool-calls`,
287
- `rtk`, `mcp-setup`, `schema-diff`, `policy`, `uap-omp`. See
287
+ `mcp-setup`, `schema-diff`, `policy`, `uap-omp`. See
288
288
  [CLI reference](CLI.md) for every command and flag.
@@ -1,6 +1,6 @@
1
1
  # Pattern Library Reference
2
2
 
3
- > Universal Agent Protocol (UAP) v1.93.1
3
+ > Universal Agent Protocol (UAP) v1.224.0
4
4
 
5
5
  > **🏭 Where this fits:** Prep / Routing — before your agent starts cutting, it
6
6
  > should pick the right technique for the job. **What it delivers:** the right
@@ -1,6 +1,6 @@
1
1
  # Platform & Harness Reference
2
2
 
3
- > Universal Agent Protocol (UAP) v1.93.1
3
+ > Universal Agent Protocol (UAP) v1.224.0
4
4
 
5
5
  > **🏭 Where this fits:** Cross-cutting — the same line, whichever floor you work
6
6
  > on. **What it delivers:** every station of your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)