@miller-tech/uap 1.221.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.
- package/README.md +19 -9
- package/config/exl3-profiles/qwen38-27b-exl3.env +68 -0
- package/config/llama-profiles/qwen38-27b-dflash2.env +6 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/benchmarks/paired/adapter.d.ts +15 -0
- package/dist/benchmarks/paired/adapter.d.ts.map +1 -1
- package/dist/benchmarks/paired/adapter.js +22 -1
- package/dist/benchmarks/paired/adapter.js.map +1 -1
- package/dist/bin/cli.js +20 -24
- package/dist/bin/cli.js.map +1 -1
- package/dist/cli/deliver.d.ts +34 -0
- package/dist/cli/deliver.d.ts.map +1 -1
- package/dist/cli/deliver.js +147 -20
- package/dist/cli/deliver.js.map +1 -1
- package/dist/cli/guided-setup.d.ts.map +1 -1
- package/dist/cli/guided-setup.js +15 -0
- package/dist/cli/guided-setup.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -0
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +8 -2
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/policy.d.ts.map +1 -1
- package/dist/cli/policy.js +104 -2
- package/dist/cli/policy.js.map +1 -1
- package/dist/cli/quality.d.ts +11 -0
- package/dist/cli/quality.d.ts.map +1 -0
- package/dist/cli/quality.js +213 -0
- package/dist/cli/quality.js.map +1 -0
- package/dist/cli/wizard-config.d.ts.map +1 -1
- package/dist/cli/wizard-config.js +19 -9
- package/dist/cli/wizard-config.js.map +1 -1
- package/dist/cli/worktree.d.ts.map +1 -1
- package/dist/cli/worktree.js +8 -1
- package/dist/cli/worktree.js.map +1 -1
- package/dist/dashboard/savings.d.ts +1 -4
- package/dist/dashboard/savings.d.ts.map +1 -1
- package/dist/dashboard/savings.js +2 -52
- package/dist/dashboard/savings.js.map +1 -1
- package/dist/delivery/acceptance-judge.d.ts +10 -0
- package/dist/delivery/acceptance-judge.d.ts.map +1 -1
- package/dist/delivery/acceptance-judge.js +45 -3
- package/dist/delivery/acceptance-judge.js.map +1 -1
- package/dist/delivery/agentic-executor.d.ts +12 -1
- package/dist/delivery/agentic-executor.d.ts.map +1 -1
- package/dist/delivery/agentic-executor.js +25 -5
- package/dist/delivery/agentic-executor.js.map +1 -1
- package/dist/delivery/bash-sweep.d.ts +12 -0
- package/dist/delivery/bash-sweep.d.ts.map +1 -1
- package/dist/delivery/bash-sweep.js +8 -1
- package/dist/delivery/bash-sweep.js.map +1 -1
- package/dist/delivery/convergence-loop.d.ts.map +1 -1
- package/dist/delivery/convergence-loop.js +6 -4
- package/dist/delivery/convergence-loop.js.map +1 -1
- package/dist/delivery/execution-gate.d.ts +1 -1
- package/dist/delivery/execution-gate.d.ts.map +1 -1
- package/dist/delivery/execution-gate.js +248 -5
- package/dist/delivery/execution-gate.js.map +1 -1
- package/dist/delivery/snapshot.d.ts +16 -0
- package/dist/delivery/snapshot.d.ts.map +1 -1
- package/dist/delivery/snapshot.js +113 -2
- package/dist/delivery/snapshot.js.map +1 -1
- package/dist/delivery/user-validation.d.ts.map +1 -1
- package/dist/delivery/user-validation.js +55 -10
- package/dist/delivery/user-validation.js.map +1 -1
- package/dist/delivery/verifier-ladder.d.ts +24 -0
- package/dist/delivery/verifier-ladder.d.ts.map +1 -1
- package/dist/delivery/verifier-ladder.js +119 -2
- package/dist/delivery/verifier-ladder.js.map +1 -1
- package/dist/delivery/visual-gate.d.ts +24 -0
- package/dist/delivery/visual-gate.d.ts.map +1 -1
- package/dist/delivery/visual-gate.js +70 -9
- package/dist/delivery/visual-gate.js.map +1 -1
- package/dist/generators/claude-md.js +17 -4
- package/dist/generators/claude-md.js.map +1 -1
- package/dist/policies/liveness.d.ts +105 -0
- package/dist/policies/liveness.d.ts.map +1 -0
- package/dist/policies/liveness.js +251 -0
- package/dist/policies/liveness.js.map +1 -0
- package/dist/policies/policy-memory.d.ts.map +1 -1
- package/dist/policies/policy-memory.js +3 -4
- package/dist/policies/policy-memory.js.map +1 -1
- package/dist/quality/baseline.d.ts +29 -0
- package/dist/quality/baseline.d.ts.map +1 -0
- package/dist/quality/baseline.js +79 -0
- package/dist/quality/baseline.js.map +1 -0
- package/dist/quality/complexity.d.ts +38 -0
- package/dist/quality/complexity.d.ts.map +1 -0
- package/dist/quality/complexity.js +239 -0
- package/dist/quality/complexity.js.map +1 -0
- package/dist/quality/config.d.ts +40 -0
- package/dist/quality/config.d.ts.map +1 -0
- package/dist/quality/config.js +77 -0
- package/dist/quality/config.js.map +1 -0
- package/dist/quality/crap.d.ts +11 -0
- package/dist/quality/crap.d.ts.map +1 -0
- package/dist/quality/crap.js +54 -0
- package/dist/quality/crap.js.map +1 -0
- package/dist/quality/languages.d.ts +25 -0
- package/dist/quality/languages.d.ts.map +1 -0
- package/dist/quality/languages.js +150 -0
- package/dist/quality/languages.js.map +1 -0
- package/dist/quality/report.d.ts +38 -0
- package/dist/quality/report.d.ts.map +1 -0
- package/dist/quality/report.js +251 -0
- package/dist/quality/report.js.map +1 -0
- package/dist/quality/scanner.d.ts +32 -0
- package/dist/quality/scanner.d.ts.map +1 -0
- package/dist/quality/scanner.js +127 -0
- package/dist/quality/scanner.js.map +1 -0
- package/dist/quality/tools.d.ts +28 -0
- package/dist/quality/tools.d.ts.map +1 -0
- package/dist/quality/tools.js +189 -0
- package/dist/quality/tools.js.map +1 -0
- package/dist/types/config.d.ts +148 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +35 -0
- package/dist/types/config.js.map +1 -1
- package/docs/ATTRIBUTION.md +0 -1
- package/docs/INDEX.md +38 -4
- package/docs/analysis/MARKET_POSITION.md +179 -0
- package/docs/architecture/OVERVIEW.md +82 -18
- package/docs/architecture/PROTOCOL.md +1 -1
- package/docs/benchmarks/PAIRED_FINDINGS.md +106 -0
- package/docs/benchmarks/PAIRED_HARNESS.md +16 -0
- package/docs/benchmarks/README.md +59 -0
- package/docs/design/UAP_REACTOR.md +0 -1
- package/docs/getting-started/INSTALLATION.md +1 -1
- package/docs/guides/AUTOMATIC.md +0 -14
- package/docs/guides/AUTOMATIC_FEATURES.md +1 -9
- package/docs/guides/COORDINATION.md +1 -1
- package/docs/guides/DELIVERY_PIPELINE.md +5 -0
- package/docs/guides/DEPLOY_BATCHING.md +1 -1
- package/docs/guides/DROIDS_AND_SKILLS.md +1 -1
- package/docs/guides/LOCAL_MODELS.md +6 -1
- package/docs/guides/MCP_ROUTER.md +1 -1
- package/docs/guides/MEMORY.md +1 -1
- package/docs/guides/MULTI_MODEL.md +1 -1
- package/docs/guides/ORCHESTRATOR.md +1 -1
- package/docs/guides/POLICIES.md +19 -3
- package/docs/guides/QWEN38_EXL3.md +114 -0
- package/docs/guides/WORKTREE_WORKFLOW.md +45 -1
- package/docs/integrations/MCP_ROUTER.md +1 -4
- package/docs/plans/deliver-hardening-plan-2026-07-13.md +173 -0
- package/docs/plans/deliver-hardening-review-response-2026-07-13.md +180 -0
- package/docs/plans/k3-uap-uplift-validation.md +216 -0
- package/docs/plans/qwen38-uap-retest-plan.md +196 -0
- package/docs/reference/API.md +1 -1
- package/docs/reference/CLI.md +49 -14
- package/docs/reference/COMPARISON.md +248 -0
- package/docs/reference/CONFIGURATION.md +1 -3
- package/docs/reference/DATABASE_SCHEMA.md +1 -1
- package/docs/reference/FEATURES.md +3 -3
- package/docs/reference/PATTERNS.md +1 -1
- package/docs/reference/PLATFORMS.md +1 -1
- package/package.json +2 -2
- package/scripts/maintenance/update-skills.py +0 -22
- package/scripts/maintenance/verify-compliance.sh +3 -3
- package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
- package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-312.pyc +0 -0
- package/src/policies/enforcers/adr_guard.py +0 -0
- package/src/policies/enforcers/bearer_lockdown.py +0 -0
- package/src/policies/enforcers/branch_freshness.py +0 -0
- package/src/policies/enforcers/design_token_gate.py +0 -0
- package/src/policies/enforcers/enforcement_self_protect.py +70 -0
- package/src/policies/enforcers/expert_review_required.py +22 -0
- package/src/policies/enforcers/iac_plan_destruction_check.py +0 -0
- package/src/policies/enforcers/quality_metrics_gate.py +447 -0
- package/src/policies/enforcers/ship_loop_gate.py +0 -0
- package/src/policies/enforcers/validate_plan_on_change.py +0 -0
- package/src/policies/enforcers/visual_verification.py +0 -0
- package/src/policies/enforcers/workdir_scope.py +0 -0
- package/src/policies/schemas/policies/expert-review-required.md +9 -1
- package/src/policies/schemas/policies/quality-metrics-gate.md +74 -0
- package/templates/CLAUDE.template.md +1 -1
- package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
- package/templates/hooks/pre-tool-use-bash.sh +50 -3
- package/templates/hooks/pre-tool-use-edit-write.sh +31 -0
- package/templates/hooks/session-start.sh +15 -0
- package/templates/hooks/uap-policy-gate.sh +187 -5
- package/templates/stryker.config.json +14 -0
- package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
- package/tools/agents/scripts/anthropic_proxy.py +254 -28
- package/tools/agents/tests/run_acceptance.py +0 -0
- package/tools/agents/tests/test_client_disconnect.py +0 -0
- package/tools/agents/tests/test_cycle_break_exploration.py +0 -0
- package/tools/agents/tests/test_deferral_break.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_all_langs.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_exemptions.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_filepath.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_web_and_bash.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_worktree.py +0 -0
- package/tools/agents/tests/test_delivery_enforcement_write_complexity.py +0 -0
- package/tools/agents/tests/test_disconnect_watcher.py +0 -0
- package/tools/agents/tests/test_doubling_break.py +0 -0
- package/tools/agents/tests/test_empty_maxtokens_recovery.py +0 -0
- package/tools/agents/tests/test_empty_tool_loop_break.py +0 -0
- package/tools/agents/tests/test_enforcement_self_protect.py +90 -0
- package/tools/agents/tests/test_enforcer_escape_hatches.py +0 -0
- package/tools/agents/tests/test_error_loop_break.py +0 -0
- package/tools/agents/tests/test_expert_review_pr_scope.py +13 -5
- package/tools/agents/tests/test_fastpath_config.py +0 -0
- package/tools/agents/tests/test_finalize_suppression.py +0 -0
- package/tools/agents/tests/test_gate_evidence.py +0 -0
- package/tools/agents/tests/test_gate_failclosed_indirection.py +0 -0
- package/tools/agents/tests/test_gate_integrity.py +0 -0
- package/tools/agents/tests/test_live_deliver_kill.py +0 -0
- package/tools/agents/tests/test_malformed_unclosed_think.py +0 -0
- package/tools/agents/tests/test_mandate_beats_recon.py +0 -0
- package/tools/agents/tests/test_mandate_deliver.py +0 -0
- package/tools/agents/tests/test_non_stream_resp_log.py +0 -0
- package/tools/agents/tests/test_output_token_ceilings.py +0 -0
- package/tools/agents/tests/test_overflow_truncate_count_tokens.py +0 -0
- package/tools/agents/tests/test_path_containment.py +0 -0
- package/tools/agents/tests/test_path_normalizer_hardened.py +0 -0
- package/tools/agents/tests/test_repeat_call_guard.py +0 -0
- package/tools/agents/tests/test_repeat_guard.py +0 -0
- package/tools/agents/tests/test_session_admission.py +0 -0
- package/tools/agents/tests/test_stream_heartbeat.py +0 -0
- package/tools/agents/tests/test_stream_thinking_deltas.py +405 -0
- package/tools/agents/tests/test_stuck_break_hard.py +0 -0
- package/tools/agents/tests/test_stuck_break_reattach.py +0 -0
- package/tools/agents/tests/test_turn_count_breaker_periodic.py +0 -0
- package/tools/agents/tests/test_upstream_chokepoint.py +0 -0
- package/tools/agents/tests/test_upstream_model_aliases.py +0 -0
- package/tools/agents/tests/test_validate_plan_gate.py +0 -0
- package/tools/agents/tests/test_vision_passthrough.py +0 -0
- package/tools/agents/tests/test_workdir_scope_enforcer.py +0 -0
- package/dist/cli/rtk.d.ts +0 -34
- package/dist/cli/rtk.d.ts.map +0 -1
- package/dist/cli/rtk.js +0 -401
- package/dist/cli/rtk.js.map +0 -1
- package/docs/integrations/RTK.md +0 -113
- package/scripts/setup/install-rtk.sh +0 -184
- package/src/policies/enforcers/rtk_wrap.py +0 -205
- package/src/policies/schemas/policies/rtk-wrap.md +0 -50
- package/tools/agents/tests/test_rtk_wrap.py +0 -151
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
Performance and accuracy results for the Universal Agent Protocol.
|
|
4
4
|
|
|
5
|
+
## How to read these numbers (the rationale)
|
|
6
|
+
|
|
7
|
+
UAP's core claim is *process* value: gates, memory, and coordination make an
|
|
8
|
+
agent's output more reliable. Measuring that honestly is hard, because an
|
|
9
|
+
agentic scaffold changes many variables at once (prompts, retries, tools,
|
|
10
|
+
budgets). So the benchmark program runs in two tiers, and they answer
|
|
11
|
+
different questions:
|
|
12
|
+
|
|
13
|
+
1. **Controlled paired A/B** (`uap bench paired`) — same model, same tasks,
|
|
14
|
+
same seeds, same harness; the *only* thing toggled is the UAP scaffold.
|
|
15
|
+
This is the only design that isolates UAP's causal contribution, and it's
|
|
16
|
+
the tier whose numbers we quote as findings.
|
|
17
|
+
2. **Uncontrolled field runs** (Terminal-Bench 2.0, uplift sweeps) — real
|
|
18
|
+
tasks, real agents, real token bills. These show magnitude and cost shape
|
|
19
|
+
but can't attribute causation; the
|
|
20
|
+
[TBench Investigation](TBENCH_INVESTIGATION.md) documents exactly how
|
|
21
|
+
apparent lifts dissolve into confounds when you control the variables.
|
|
22
|
+
|
|
23
|
+
The headline below is therefore deliberately narrower than a marketing page
|
|
24
|
+
would like — that's the point.
|
|
25
|
+
|
|
5
26
|
## Controlled paired result (start here)
|
|
6
27
|
|
|
7
28
|
The rigorous, reproducible finding from the [paired harness](PAIRED_HARNESS.md)
|
|
@@ -41,4 +62,42 @@ authoritative.
|
|
|
41
62
|
| [Accuracy Analysis](ACCURACY_ANALYSIS.md) | Success-rate and error analysis |
|
|
42
63
|
| [Comprehensive Benchmarks](COMPREHENSIVE_BENCHMARKS.md) | Extended measurements |
|
|
43
64
|
|
|
65
|
+
## Task suites and raw runs
|
|
66
|
+
|
|
67
|
+
Reproduce or extend any of it:
|
|
68
|
+
|
|
69
|
+
- **Task suites** (`benchmarks/suites/`) — the paired-harness suites, ordered
|
|
70
|
+
roughly by difficulty: `smoke/` (easy/medium/hard sanity checks),
|
|
71
|
+
`real-gate/` and `real-gate-medium/` (small real tasks), `real-gate-hard/`,
|
|
72
|
+
`real-gate-brutal/`, `real-gate-power/`, `real-gate-gated/` (tasks with a
|
|
73
|
+
deterministic `verifyCmd` as ground truth — no LLM judge),
|
|
74
|
+
`real-gate-heldout/` (kept out of tuning), and `swe-bench-pro/` (generator +
|
|
75
|
+
A/B runner for SWE-bench-style tasks).
|
|
76
|
+
- **Cluster jobs** (`benchmarks/harbor-*.yaml`, `benchmarks/harbor-configs/`,
|
|
77
|
+
`benchmarks/harbor-tasks/`) — Harbor job definitions for running the suites
|
|
78
|
+
on a GPU box against local llama.cpp models (e.g. the Qwen3.5/3.6 configs).
|
|
79
|
+
- **Terminal-Bench shim** (`benchmarks/terminal_bench/`) — the opencode agent
|
|
80
|
+
adapter used for the TBench runs.
|
|
81
|
+
- **Raw results** (`benchmark-results/`, untracked — local only) — every
|
|
82
|
+
paired run drops a named directory (timestamped or version-labeled) with
|
|
83
|
+
`records.jsonl`, `report.json`, and `report.md`. Notable series: the June
|
|
84
|
+
2026 `paired-qwen36-*` sweeps (model/adapter/budget ablations), the
|
|
85
|
+
`paired-uplift-*` regression series (per-version uplift tracking), and
|
|
86
|
+
`real-uplift-1610/` (an agentic-baseline run: 100% → 83.3%, Δ −16.7pp with
|
|
87
|
+
CI [−0.50, 0.00] spanning 0 — i.e. no measurable lift against an agent that
|
|
88
|
+
already self-verifies, matching the paired finding).
|
|
89
|
+
|
|
90
|
+
A typical reproduction:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
uap bench paired --adapter raw --suite benchmarks/suites/real-gate-gated
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## What we measure
|
|
97
|
+
|
|
98
|
+
Each paired run reports a vector, not a single score: correctness delta with a
|
|
99
|
+
bootstrap 95% CI, a McNemar gate-value 2×2 (tasks the gates rescued vs tasks
|
|
100
|
+
they broke), token/turn/latency deltas, and a leave-one-out ablation over UAP
|
|
101
|
+
components so you can see which station earns its keep.
|
|
102
|
+
|
|
44
103
|
See the [documentation index](../INDEX.md) for the rest of the docs.
|
|
@@ -137,7 +137,6 @@ mode (Assist = intake/routing context; Enforce = a station gate):
|
|
|
137
137
|
| completion gate | stop | Enforce |
|
|
138
138
|
| HALO analyze | session-end | Assist |
|
|
139
139
|
| deploy flush | on deliver success | Enforce |
|
|
140
|
-
| rtk token-opt | pre-tool (bash) | Enforce (already) |
|
|
141
140
|
| ideate | on-demand only (router suggests when stuck) | Assist |
|
|
142
141
|
|
|
143
142
|
## 5. Per-harness wiring
|
|
@@ -9,7 +9,7 @@ edits your main branch, writes plausible-but-wrong code, and cheerfully declares
|
|
|
9
9
|
"done" on something that never actually ran. UAP puts a station at each of those
|
|
10
10
|
break points so the work that comes off the line is trustworthy.
|
|
11
11
|
|
|
12
|
-
It ships as a single npm package (`@miller-tech/uap`, v1.
|
|
12
|
+
It ships as a single npm package (`@miller-tech/uap`, v1.224.0) that installs the
|
|
13
13
|
`uap` CLI. This page gets it onto your machine and wired into your project.
|
|
14
14
|
|
|
15
15
|
## Prerequisites
|
package/docs/guides/AUTOMATIC.md
CHANGED
|
@@ -137,7 +137,6 @@ automatically on every operation. No manual code reviews for common issues.
|
|
|
137
137
|
|
|
138
138
|
| Gate | What it checks | When it fires |
|
|
139
139
|
|---|---|---|
|
|
140
|
-
| rtk_wrap | Token optimization | Every CLI command |
|
|
141
140
|
| iac_parity | Infrastructure-as-Code safety | kubectl, helm, aws, gcloud, doctl |
|
|
142
141
|
| delivery_enforcement | Verified output | Every source file edit |
|
|
143
142
|
|
|
@@ -233,18 +232,6 @@ changes are batched together and deployed as a single atomic unit.
|
|
|
233
232
|
|
|
234
233
|
---
|
|
235
234
|
|
|
236
|
-
### rtk — 60–90% Token Savings
|
|
237
|
-
|
|
238
|
-
**Benefit:** Massive token savings on every CLI command. rtk intercepts commands,
|
|
239
|
-
optimizes them, and proxies through a token-efficient layer.
|
|
240
|
-
|
|
241
|
-
**When it kicks in:** On every CLI command. rtk rewrites commands to use
|
|
242
|
-
optimized paths and caches results.
|
|
243
|
-
|
|
244
|
-
**You get:** Dramatically lower API costs and faster command execution.
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
235
|
### HALO — Human Oversight
|
|
249
236
|
|
|
250
237
|
**Benefit:** Critical operations require human approval before execution.
|
|
@@ -288,7 +275,6 @@ VRAM-tiered configurations.
|
|
|
288
275
|
| Schema-diff | API contract safety | Schema edits |
|
|
289
276
|
| Completion gates | Verify "done" is done | Agent claims done |
|
|
290
277
|
| Deploy batching | Atomic multi-change deploys | Deployable changes |
|
|
291
|
-
| rtk | 60–90% token savings | Every CLI command |
|
|
292
278
|
| HALO | Human oversight for critical ops | Critical actions |
|
|
293
279
|
|
|
294
280
|
**Install UAP. Use your coding agent normally. Everything else is automatic.**
|
|
@@ -195,16 +195,9 @@ the definition of done, and work resumes across sessions without being asked.
|
|
|
195
195
|
|
|
196
196
|
## Developer Experience
|
|
197
197
|
|
|
198
|
-
### RTK (Rust Token Killer)
|
|
199
|
-
**What it does:** CLI proxy that intercepts common commands (`git status`, `npm install`, etc.) and rewrites them for token efficiency — 60-90% token savings on dev operations.
|
|
200
|
-
|
|
201
|
-
**When it kicks in:** Automatically for every shell command you run. No flags needed.
|
|
202
|
-
|
|
203
|
-
**Why it matters:** Token costs add up fast. RTK transparently optimizes every command without you thinking about it.
|
|
204
|
-
|
|
205
198
|
### Dashboard — Savings & Orchestration Visibility
|
|
206
199
|
**What it does:** `uap dash serve` shows **Token Savings by Influence** (real
|
|
207
|
-
tokens/cost saved per mechanism —
|
|
200
|
+
tokens/cost saved per mechanism — model routing, context compression — with
|
|
208
201
|
honest *measured/estimated* labels) and an **Orchestrations & Hierarchy** tree
|
|
209
202
|
(the live mission → epic → task tree with the agents on each node and the active
|
|
210
203
|
build ledger's progress).
|
|
@@ -277,7 +270,6 @@ long-running build is progressing — no guesswork.
|
|
|
277
270
|
| Pattern RAG | ✅ | Every prompt | Battle-tested implementations |
|
|
278
271
|
| Coordination | ✅ | Complex tasks | Parallel subagent execution |
|
|
279
272
|
| Deploy batching | ✅ | Multiple changes | Atomic, efficient deploys |
|
|
280
|
-
| RTK | ✅ | Every command | 60-90% token savings |
|
|
281
273
|
| HALO | ✅ | Substantial prompts | Automatic task decomposition |
|
|
282
274
|
| Model presets | ✅ | Model selection | Optimal params per model |
|
|
283
275
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Multi-Agent Coordination
|
|
2
2
|
|
|
3
|
-
> UAP v1.
|
|
3
|
+
> UAP v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** LINE COORDINATION — the station where parallel agents on the [delivery pipeline](./DELIVERY_PIPELINE.md) quietly step on each other: two of them editing the same file, duplicating work, or deadlocking at merge. **What it delivers:** agents register, announce what they're about to touch, and check for overlaps *before* they start — so the line runs many workers at once and still stays conflict-free.
|
|
6
6
|
|
|
@@ -62,6 +62,8 @@ Two things run the length of the whole line: **policy gates** (the rules are *ex
|
|
|
62
62
|
|
|
63
63
|
**What UAP puts here:**
|
|
64
64
|
- **[`uap deliver`](DELIVER.md)** — a convergence loop that keeps iterating a model against your real gates until the work is actually built.
|
|
65
|
+
- **Your gates, including the ones you declare** — build/test/lint are discovered from `package.json`, and anything extra (a migration check, a codegen diff, a contract test) can be declared in `delivery.gates[]` in `.uap.json` and joins the same ladder.
|
|
66
|
+
- **A polyglot execution gate** — not everything is `node`: Python packages get a venv-aware import smoke test, native binaries are actually executed, and a binary that can't run on this host is an honest *skip*, never fabricated pass-evidence.
|
|
65
67
|
- **Serving-layer recipes** — Fusion / Confidence / Ratings / ReMoM run behind the proxy to raise output quality, *escalating to a stronger, distinct judge* when it counts. (A same-model judge — qwen grading qwen — was measured to add nothing, so recipes only spend that budget when a genuinely stronger judge is wired.)
|
|
66
68
|
- **[Local-model handling](LOCAL_MODELS.md)** — the proxy's guardrails (loop-breaker, recon-convergence, the no-tool empty-output guard, path normalization) keep a cheap local model on the rails so it produces real modules, not scaffolding.
|
|
67
69
|
|
|
@@ -74,8 +76,10 @@ Two things run the length of the whole line: **policy gates** (the rules are *ex
|
|
|
74
76
|
**What UAP puts here:**
|
|
75
77
|
- **Completion gates** — build, tests, lint, type-check must be green before anything can claim "done."
|
|
76
78
|
- **Execution / runtime verify** (`uap verify`) — the generated code is actually *run* (headless browser, vm-dom, or child process) to prove it works, not just that it parses.
|
|
79
|
+
- **The quality-metrics gate** (`uap quality check`) — ten code-quality budgets (complexity, coverage, CRAP, surviving mutants, dead code, duplicates, `any` types…) enforced deterministically, with a ratchet baseline so existing debt is frozen but the floor can only rise. Reviewers adjudicate the numbers; they can't outvote them.
|
|
77
80
|
- **The acceptance judge** — an independent check that the behaviour matches the spec.
|
|
78
81
|
- **Generator ≠ evaluator** — the thing that grades the work is deliberately *not* the thing that wrote it.
|
|
82
|
+
- **Scoped rollback** — when a turn makes things worse, keep-best restores *only the files that run actually wrote* (tracked per-write plus a shell sweep), never the whole tree — so a rollback on a shared floor can't eat another agent's work.
|
|
79
83
|
|
|
80
84
|
**Delivered:** "done" you can trust, because a different checker signed off.
|
|
81
85
|
|
|
@@ -98,6 +102,7 @@ Two things run the length of the whole line: **policy gates** (the rules are *ex
|
|
|
98
102
|
- **Worktree → PR flow** with completion and version gates, so merges are clean and versioned.
|
|
99
103
|
- **CI feedback watcher** — when CI goes red after a push, the loop re-converges instead of walking away.
|
|
100
104
|
- **Never-regress + git-safety** — destructive git operations are guarded; passing work stays passing.
|
|
105
|
+
- **Policy liveness + operator overrides** — the gates themselves are watched: a liveness registry tracks whether each liveness-declaring policy's compliant path (its tools, dirs, skills) is still satisfiable, and emergency bypasses live in a root-owned, expiring `.uap/operator-overrides.json` — so an agent can neither quietly let a gate rot nor mint its own exemption.
|
|
101
106
|
|
|
102
107
|
**Delivered:** changes reach `main` clean, versioned, and CI-verified.
|
|
103
108
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Running UAP Against Local Models
|
|
2
2
|
|
|
3
|
-
> UAP v1.
|
|
3
|
+
> UAP v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** BUILD — this is the station where a cheap local model
|
|
6
6
|
> flails: plausible-but-wrong code, empty output, or a loop that never lands a
|
|
@@ -23,6 +23,11 @@ productive station on your [delivery pipeline](./DELIVERY_PIPELINE.md).
|
|
|
23
23
|
> [Qwen3.6 35B-A3B on llama.cpp, by VRAM tier](QWEN36_LLAMACPP.md) for
|
|
24
24
|
> copy-paste launch commands for 8 / 12 / 16 / 24 / 32 GB GPUs, and how
|
|
25
25
|
> `uap deliver` uplifts a small local model to *verified* results.
|
|
26
|
+
>
|
|
27
|
+
> **Production note (2026-09-04):** the reference box now serves Qwen3.8-27B
|
|
28
|
+
> via **exllamav3/EXL3** (~1.5x faster decode at the same 131k context) —
|
|
29
|
+
> see [Qwen3.8-27B on exllamav3 (EXL3)](QWEN38_EXL3.md). The llama.cpp path
|
|
30
|
+
> below remains fully supported and is the rollback stack there.
|
|
26
31
|
|
|
27
32
|
There are two endpoint shapes involved, and it matters which client speaks
|
|
28
33
|
which protocol:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Router
|
|
2
2
|
|
|
3
|
-
> UAP v1.
|
|
3
|
+
> UAP v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** CROSS-CUTTING — keeping the context window lean at every station of the [delivery pipeline](./DELIVERY_PIPELINE.md). In a normal agentic workflow every tool call dumps its full result into context, so mostly-irrelevant output crowds out the details your agent actually needs. **What it delivers:** a proxy that compresses tool output before it reaches the model — up to 98% fewer tokens on large results — so the agent keeps room for real work and you spend less per session.
|
|
6
6
|
|
package/docs/guides/MEMORY.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Memory System
|
|
2
2
|
|
|
3
|
-
> UAP v1.
|
|
3
|
+
> UAP v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** INTAKE + FEEDBACK — the front and back doors of the [delivery pipeline](./DELIVERY_PIPELINE.md). At intake, a fresh agent forgets everything the last session learned and re-hallucinates scope; at feedback, nobody records the lesson, so the same mistake ships again next week. **What it delivers:** a persistent, searchable memory that hands each new agent the relevant past learnings on the way in, and captures durable lessons on the way out — so your team of agents gets smarter every run instead of starting from zero.
|
|
6
6
|
|
|
@@ -186,7 +186,7 @@ this machinery:
|
|
|
186
186
|
per-node status and the agents working each node, plus the active build
|
|
187
187
|
ledger's progress.
|
|
188
188
|
- **Token Savings by Influence** — real tokens/cost saved, attributed per
|
|
189
|
-
mechanism (
|
|
189
|
+
mechanism (model routing, context compression), with honest
|
|
190
190
|
*measured / estimated* labels.
|
|
191
191
|
|
|
192
192
|
---
|
package/docs/guides/POLICIES.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Policies
|
|
2
2
|
|
|
3
|
-
> Applies to UAP v1.
|
|
3
|
+
> Applies to UAP v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** CROSS-CUTTING — the executable rules bolted to every station of the [delivery pipeline](./DELIVERY_PIPELINE.md). In a normal agentic workflow the "rules" live in a prose prompt the model is free to ignore; that's how work escapes isolation, skips tests, or ships without review. **What it delivers:** each rule is a Python enforcer that actually inspects an operation and can *block* it before it runs — worktree isolation, test deltas, expert review, schema diffs, artifact hygiene, and more — so the guardrails hold instead of merely being suggested.
|
|
6
6
|
|
|
@@ -62,10 +62,13 @@ Each enforcer guards a specific station of the pipeline. The enforcers in
|
|
|
62
62
|
| Enforcer | What it gates |
|
|
63
63
|
|----------|---------------|
|
|
64
64
|
| `worktree_required` | Edit/Write/MultiEdit must target a `.worktrees/` path |
|
|
65
|
+
| `workdir_scope` | File-mutating tool calls must stay within the project working directory |
|
|
65
66
|
| `task_required` | A UAP task must be `in_progress` before mutating work |
|
|
66
67
|
| `coord_overlap` | Checks for in-flight agent path reservations (parallel-agent overlap) |
|
|
67
68
|
| `branch_freshness` | Worktree edits blocked once the branch drifts too far from the integration branch (warn 50, block 200) |
|
|
68
69
|
| `delivery_enforcement` | Route substantive coding through `uap deliver` |
|
|
70
|
+
| `commitment_reserve` | Blocks all-in, no-way-back moves that exhaust the commitment reserve |
|
|
71
|
+
| `adr_guard` | Generic ADR-driven tool-call gate |
|
|
69
72
|
|
|
70
73
|
### Plan discipline
|
|
71
74
|
|
|
@@ -73,7 +76,7 @@ Each enforcer guards a specific station of the pipeline. The enforcers in
|
|
|
73
76
|
|----------|---------------|
|
|
74
77
|
| `memory_before_plan` | Plans require a recent `uap memory query` |
|
|
75
78
|
| `codebase_read_before_plan` | Plans require prior reads of the target paths |
|
|
76
|
-
| `
|
|
79
|
+
| `validate_plan_on_change` | A plan must be validated before building (fires before the build, not on the write) |
|
|
77
80
|
|
|
78
81
|
### Quality & review gates
|
|
79
82
|
|
|
@@ -83,6 +86,11 @@ Each enforcer guards a specific station of the pipeline. The enforcers in
|
|
|
83
86
|
| `schema_diff_gate` | Schema/pool changes must pass `uap schema-diff` |
|
|
84
87
|
| `expert_review_required` | A parallel expert review must precede ship |
|
|
85
88
|
| `architecture_review` | Merge / PR-ready operations need an architecture review when the diff warrants it |
|
|
89
|
+
| `quality_metrics_gate` | Edits must not introduce NEW or WORSENED metric debt (complexity, coverage, duplication, `any` types) against the ratchet baseline |
|
|
90
|
+
| `design_token_gate` | UI edits must stay on the project's DESIGN.md token system |
|
|
91
|
+
| `visual_verification` | Under MAX fidelity, a commit that changes UI files requires visual verification |
|
|
92
|
+
| `local_build_before_push` | Branches with C++ API source changes need a local Docker `--target builder` compile before `git push` / `gh pr create` / `gh pr merge` |
|
|
93
|
+
| `ship_loop_gate` | A task may only transition to `completed` with evidence it was merged, deployed, monitored, and verified |
|
|
86
94
|
|
|
87
95
|
### Hygiene & artifacts
|
|
88
96
|
|
|
@@ -97,7 +105,6 @@ Each enforcer guards a specific station of the pipeline. The enforcers in
|
|
|
97
105
|
| Enforcer | What it gates |
|
|
98
106
|
|----------|---------------|
|
|
99
107
|
| `mcp_router_first` | MCP tools must be loaded on demand |
|
|
100
|
-
| `rtk_wrap` | Heavy CLIs must be invoked via `rtk` |
|
|
101
108
|
| `parallel_reads` | Nudge when serial read fan-out is detected |
|
|
102
109
|
|
|
103
110
|
### Infrastructure
|
|
@@ -105,8 +112,17 @@ Each enforcer guards a specific station of the pipeline. The enforcers in
|
|
|
105
112
|
| Enforcer | What it gates |
|
|
106
113
|
|----------|---------------|
|
|
107
114
|
| `iac_parity` | Live-state changes must have a matching infrastructure-as-code diff |
|
|
115
|
+
| `iac_plan_destruction_check` | Destructive IaC plan operations are blocked |
|
|
108
116
|
| `cluster_routing` | Cluster tooling context must match the component domain |
|
|
109
117
|
|
|
118
|
+
### Enforcement protection
|
|
119
|
+
|
|
120
|
+
| Enforcer | What it gates |
|
|
121
|
+
|----------|---------------|
|
|
122
|
+
| `enforcement_self_protect` | The model must not be able to disable the enforcement layer |
|
|
123
|
+
| `enforcement_infra_protect` | The model must not kill or displace the inference stack (the Anthropic proxy, llama-server, their ports) |
|
|
124
|
+
| `bearer_lockdown` | ADR-0007 cookie-only frontend gate — blocks bearer-token auth in the frontend |
|
|
125
|
+
|
|
110
126
|
> The `architecture_review` enforcer file is stored with a policy-ID prefix
|
|
111
127
|
> (`<uuid>_architecture_review.py`) because it is attached to a specific
|
|
112
128
|
> installed policy; the others are named directly after their policy slug.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Qwen3.8-27B on exllamav3 (EXL3) — the production serving stack
|
|
2
|
+
|
|
3
|
+
> UAP v1.224.7 — added 2026-09-04, the day the box switched over.
|
|
4
|
+
|
|
5
|
+
Since 2026-09-04 the production local model is served by **exllamav3**
|
|
6
|
+
(MiaAI-Lab fork 1.4.2), not llama.cpp: **Qwen3.8-27B EXL3 3.5bpw** (14.2 GB,
|
|
7
|
+
workload-calibrated) with a **DFlash2 EXL3 5.0bpw** draft model (1.4 GB) for
|
|
8
|
+
speculative decoding. The recipe comes from yume_arasaki's RTX 4090 write-up
|
|
9
|
+
and the Mia-AiLab quant cards, adapted for this box's RTX 3090.
|
|
10
|
+
|
|
11
|
+
The llama.cpp stack (binary, `config/llama-profiles/`, `uap-llama-server`
|
|
12
|
+
unit) is untouched and remains the **rollback path** — see the bottom of this
|
|
13
|
+
doc.
|
|
14
|
+
|
|
15
|
+
## Why switch
|
|
16
|
+
|
|
17
|
+
| | llama.cpp (UD-IQ4_XS GGUF) | exllamav3 (EXL3 3.5bpw) |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| decode, short ctx, warm | ~55 tok/s (measured essay probe) | **~82 tok/s** (same probe) |
|
|
20
|
+
| decode, deep into a long ctx | similar falloff | ~41–51 tok/s (KV grows) |
|
|
21
|
+
| context | 131072 per slot, `--parallel 1` | 131072 per request, batch-1 + queue |
|
|
22
|
+
| VRAM | ~21.9 GB resident | 20964 MiB resident |
|
|
23
|
+
| tool calling | jinja template + grammar | native OpenAI-style, verified |
|
|
24
|
+
| model id handling | `--alias` list, std::set-ordered | accepts any client-sent id |
|
|
25
|
+
|
|
26
|
+
## The 3090 adaptation (read before copying the 4090 recipe)
|
|
27
|
+
|
|
28
|
+
The article's `CACHE_QUANT=nvfp4` (and `fp8`) **does not compile on this
|
|
29
|
+
box**: those Triton kernels need compute capability ≥ 8.9 (Ada/Hopper). The
|
|
30
|
+
RTX 3090 is Ampere, **sm_86 — compute capability is fixed in hardware**, no
|
|
31
|
+
driver or toolkit update changes it. The equivalent-density fallback is
|
|
32
|
+
`CACHE_QUANT=4` (Hadamard int4, same ~4.5 bits/element), which is what runs.
|
|
33
|
+
|
|
34
|
+
Second 3090 gotcha: the kit's default torch index (cu130) cannot compile the
|
|
35
|
+
engine's CUDA kernels against this box's nvcc 12.4 — `TORCH_INDEX_URL` is
|
|
36
|
+
pinned to `cu124` in the kit `.env`.
|
|
37
|
+
|
|
38
|
+
## Layout
|
|
39
|
+
|
|
40
|
+
Everything lives outside the repo at `/home/cogtek/Qwen3.8-EXL3-kit/`:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Qwen3.8-EXL3-kit/
|
|
44
|
+
├── .env # the config (PORT, CONTEXT_SIZE, CACHE_QUANT, …)
|
|
45
|
+
├── start.sh / stop.sh # launcher (bootstraps venv on first run)
|
|
46
|
+
├── models/
|
|
47
|
+
│ ├── Qwen3.8-27B-EXL3-3.5bpw/ # target, 15 GB
|
|
48
|
+
│ └── Qwen3.8-27B-DFlash2-EXL3-5.0bpw/ # draft, 1.4 GB
|
|
49
|
+
├── .venv/ # torch 2.6.0+cu124, exllamav3 fork 1.4.2, triton 3.3.1
|
|
50
|
+
└── tools/
|
|
51
|
+
├── serve_openai.py # OpenAI-compatible server (+ local shim, below)
|
|
52
|
+
├── healthcheck.py # start.sh's venv gate (local addition)
|
|
53
|
+
└── tokps.sh # live tok/s monitor: tools/tokps.sh [interval] [port]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
A reference copy of the `.env` is versioned at
|
|
57
|
+
[`config/exl3-profiles/qwen38-27b-exl3.env`](../../config/exl3-profiles/qwen38-27b-exl3.env).
|
|
58
|
+
|
|
59
|
+
## Local patches in the kit (reapply if the kit is re-cloned)
|
|
60
|
+
|
|
61
|
+
1. **`triton_paged.py` parenthesization** — the fork's jit kernel used chained
|
|
62
|
+
boolean operators (`A and not B and not C`) that current Triton rejects;
|
|
63
|
+
lines ~1698/1719 parenthesized to `A and (not B and not C)`.
|
|
64
|
+
2. **`torch.compile` → identity shim** in `tools/serve_openai.py` — the fork's
|
|
65
|
+
Hadamard-4 KV path needs triton ≥ 3.3 (`ASTSource(constexprs=…)`), but
|
|
66
|
+
torch 2.6's inductor imports `AttrsDescriptor`, which triton 3.3 removed,
|
|
67
|
+
so fla's import-time `@torch.compile` decorators exploded the import chain.
|
|
68
|
+
Nothing on the serving hot path uses inductor (the speed comes from
|
|
69
|
+
hand-written Triton kernels), so the shim falls back to the undecorated
|
|
70
|
+
function. torch 2.7 was not an option: no cu124 wheels.
|
|
71
|
+
3. **`tools/healthcheck.py`** — start.sh gates its bootstrap on a bare
|
|
72
|
+
`import torch, exllamav3, aiohttp, huggingface_hub`, which fails for the
|
|
73
|
+
reason in (2) and re-entered setup, downgrading triton back to 3.2 (torch's
|
|
74
|
+
pin) and breaking the engine again. The health check now applies the same
|
|
75
|
+
shim, so bootstrap runs only when the venv is genuinely incomplete.
|
|
76
|
+
|
|
77
|
+
Do **not** "fix" the triton version to match torch's pin: torch 2.6.0 asks
|
|
78
|
+
for triton 3.2.0, but the engine fork requires ≥ 3.3. The pair
|
|
79
|
+
(torch 2.6.0+cu124, triton 3.3.1, shim) is the working combination; pip will
|
|
80
|
+
keep printing a dependency-conflict warning about it — that warning is the
|
|
81
|
+
price of admission, not a problem.
|
|
82
|
+
|
|
83
|
+
## Service management
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
systemctl --user status uap-exl3-server # enabled, Restart=always
|
|
87
|
+
journalctl --user -u uap-exl3-server -f # live log
|
|
88
|
+
/home/cogtek/Qwen3.8-EXL3-kit/tools/tokps.sh # live tok/s
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Unit: `~/.config/systemd/user/uap-exl3-server.service` → kit `start.sh`.
|
|
92
|
+
The server binds `0.0.0.0:8080` (the port every client config already points
|
|
93
|
+
at) and reports `max_model_len=131072` at `/v1/models`.
|
|
94
|
+
|
|
95
|
+
**Proxy rails unchanged and still correct:** `PROXY_CONTEXT_WINDOW=131072`
|
|
96
|
+
(exllamav3's `--cache_size` is per-request, matching llama.cpp's per-slot
|
|
97
|
+
131072 at `--parallel 1`) and `PROXY_CONCURRENCY_LIMIT=1` (the EXL3 server is
|
|
98
|
+
batch-1 and serializes concurrent callers internally — same shape as the
|
|
99
|
+
1-slot llama.cpp config these rails were last tuned for). The server's
|
|
100
|
+
`/v1/models` id is `qwen3.8-27b-exl3-3.5bpw-wm`, but it accepts any
|
|
101
|
+
client-sent model id, so presets (`qwen3.8-27b`, etc.) flow through
|
|
102
|
+
unmodified.
|
|
103
|
+
|
|
104
|
+
## Rollback
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
systemctl --user stop uap-exl3-server
|
|
108
|
+
systemctl --user enable --now uap-llama-server # unit + env + binary untouched
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The llama.cpp env (`~/.config/uap/llama-server.env` →
|
|
112
|
+
`config/llama-profiles/qwen38-27b-dflash2.env`) and the ik/DFlash2 binary are
|
|
113
|
+
exactly as they were; the service was only `disable`d so it stops competing
|
|
114
|
+
for VRAM and port 8080 on boot.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Worktree Workflow
|
|
2
2
|
|
|
3
|
-
> Applies to UAP v1.
|
|
3
|
+
> Applies to UAP v1.224.0
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** ISOLATION — the station where a normal agentic workflow smears half-finished edits across `main`, clobbers files, and lets parallel agents collide into corrupt merge state. **What it delivers:** every agent works on its own branch in its own checkout, so the project root stays clean, each unit of work has a tidy PR boundary, and any number of agents can run at once without stepping on each other.
|
|
6
6
|
|
|
@@ -85,6 +85,50 @@ check; the advisory variant is for interactive orientation.
|
|
|
85
85
|
The same `.worktrees/` containment is enforced at edit time by the
|
|
86
86
|
`worktree-required` policy enforcer — see [POLICIES.md](./POLICIES.md).
|
|
87
87
|
|
|
88
|
+
### Making enforcement optional
|
|
89
|
+
|
|
90
|
+
Worktree *enforcement* is a project choice, asked at setup time. In the guided
|
|
91
|
+
setup wizard (`uap setup`), the **Worktree isolation** toggle under
|
|
92
|
+
"Multi-agent coordination" drives it:
|
|
93
|
+
|
|
94
|
+
- **On (default)** — the pre-edit hooks hard-block edits outside
|
|
95
|
+
`.worktrees/`, the `worktree-required` policy enforcer stays active, and
|
|
96
|
+
generated CLAUDE.md files carry the MANDATORY worktree section.
|
|
97
|
+
- **Off** — setup writes `"worktrees": { "enabled": true, "enforce": false }`
|
|
98
|
+
to `.uap.json`, deactivates the `worktree-required` policy, and omits the
|
|
99
|
+
MANDATORY section from generated CLAUDE.md. Worktrees remain fully
|
|
100
|
+
*supported* (`uap worktree create/pr/finish` all work); edits in the project
|
|
101
|
+
root are simply no longer blocked.
|
|
102
|
+
|
|
103
|
+
You can flip it later by editing `.uap.json` — set both keys so every layer
|
|
104
|
+
agrees:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
"worktrees": { "enabled": true, "enforce": false },
|
|
108
|
+
"template": { "sections": { "worktreeWorkflow": false } }
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
and stand the policy enforcer down with:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
uap policy disable worktree-required
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The three enforcement layers read different signals: the pre-edit hooks and
|
|
118
|
+
`uap worktree ensure` honor the `.uap.json` flags at runtime (no reinstall
|
|
119
|
+
needed), while the `worktree-required` policy enforcer follows its active
|
|
120
|
+
state in the policy database. A missing or unreadable flag defaults to
|
|
121
|
+
`enforce: true` (the historical behavior). For a one-off bypass,
|
|
122
|
+
`UAP_NO_WORKTREE=1` wins over the file for the edit and commit/push guards
|
|
123
|
+
(the `git reset --hard` / `git clean -f` data-loss guard keys on the config
|
|
124
|
+
only).
|
|
125
|
+
|
|
126
|
+
**Integrity note:** the self-disable path relies on the
|
|
127
|
+
`enforcement-self-protect` policy (installed by `uap init`) — it hard-blocks
|
|
128
|
+
agent edits to `.uap.json` on both the Edit/Write and Bash channels, so an
|
|
129
|
+
agent cannot flip `enforce` itself. Projects that deploy the hook templates
|
|
130
|
+
*without* the seeded policy DB get no such protection on the Bash channel.
|
|
131
|
+
|
|
88
132
|
## Parallel-agent safety
|
|
89
133
|
|
|
90
134
|
The numeric ID is allocated from the SQLite registry, not from a directory
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Router
|
|
2
2
|
|
|
3
|
-
`v1.
|
|
3
|
+
`v1.224.0` · `src/mcp-router/`
|
|
4
4
|
|
|
5
5
|
> **🏭 Where this fits:** Cross-cutting (keeps the belt from jamming) — every
|
|
6
6
|
> station downstream stalls when your agent's context window is choked with
|
|
@@ -151,6 +151,3 @@ router's view, not deleted) and re-run `uap mcp-setup`.
|
|
|
151
151
|
- The 98% / 75k→700 figures are the documented design target for tool hiding;
|
|
152
152
|
per-output FTS5 savings are computed live for each call and reported by
|
|
153
153
|
`uap mcp-router stats`.
|
|
154
|
-
- Pair the router with **RTK** for CLI-output savings — see
|
|
155
|
-
[RTK.md](RTK.md). The two are complementary (tool definitions + CLI output),
|
|
156
|
-
and together they keep the whole belt clear of context clutter.
|