From e35a538da82cf47188b88f4f490532c761544452 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 10:59:58 -0700 Subject: [PATCH 01/41] fix: a liveness check that killed the process it checked (Windows) os.kill(pid, 0) is the standard existence probe on POSIX, where signal 0 means 'check, do not send'. On Windows it is not a probe: CTRL_C_EVENT is 0, so the call delivers a real Ctrl-C to the target's console group. check_live wrote a marker carrying its own pid; snapshot() checked it; the check raised KeyboardInterrupt inside an unrelated subprocess several tests later. The traceback pointed at check_test_runner, which had nothing to do with it, sixteen seconds into the job. Green through 6921707, first red at af026e8 -- the live dashboard commit, and only ever on windows/amd64. Lint, both Validate jobs, linux/arm64 and macos/arm64 were all green throughout. _alive now declines to answer off POSIX and the caller falls back to evidence that cannot misfire. Guarded in the selftest, because the failure mode of getting this wrong is a viewer that terminates what it observes. --- Makefile | 8 ++- src/adherence/live.py | 119 ++++++++++++++++++++++++++++++++++++-- src/adherence/selftest.py | 9 +++ 3 files changed, 129 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index a1a3cc9..d669c96 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ RUNNER = $(PYTHON) -m adherence.runner --adapter $(ADAPTER) --model $(MODEL) \ --trials $(TRIALS) $(ARMFLAGS) --out $(OUT) .PHONY: help check ci-local compile selftest schema lint table matrix report \ - analyze floors live calibrate screen mkpr mkscenarios trees probe run all clean + analyze floors live clean-runs calibrate screen mkpr mkscenarios trees probe run all clean help: @printf '%s\n' \ @@ -29,6 +29,7 @@ help: '' \ 'viewing — read-only, never spends a GPU-second:' \ ' make live what is running right now, one-shot' \ + ' make clean-runs delete sandboxes/out-dirs from dead runs' \ ' make table [FILTER=a3/*] one-shot snapshot (NOCOLOR=1 to strip ANSI)' \ ' make matrix [FILTER=a3/*] interactive results matrix' \ ' FILES= scopes to one run (default: all of' \ @@ -87,6 +88,11 @@ lint: live: @$(PY) -m adherence.live +## Delete sandboxes and out-dirs left by finished or killed runs. +## Refuses while anything is running. +clean-runs: + @$(PY) -m adherence.live --clean + table: @FILTER="$(FILTER)" REF="$(REF)" PROXY="$(PROXY)" FILES="$(FILES)" \ $(PY) -m adherence.table $(FILTER) diff --git a/src/adherence/live.py b/src/adherence/live.py index 94c0f42..a35d314 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -23,6 +23,7 @@ import glob import json import os +import subprocess import tempfile import time from pathlib import Path @@ -43,7 +44,21 @@ def out_dirs(tmp: str | None = None): def _alive(pid: int) -> bool: - if not pid: + """Does this pid exist? POSIX only -- see below. + + `os.kill(pid, 0)` is the standard existence probe on POSIX, where + signal 0 is "check, do not send". On Windows it is not a probe at all: + `signal.CTRL_C_EVENT == 0`, so the call delivers a real Ctrl-C to the + target's console group. The selftest wrote a marker carrying its own + pid, this function checked it, and the check raised KeyboardInterrupt + inside an unrelated subprocess several tests later. Sixteen seconds + into the Windows job, with a traceback pointing at code that had + nothing to do with it. + + A liveness check must never be able to affect what it observes, so on + Windows it declines to answer and the caller falls back to evidence + that cannot misfire.""" + if not pid or os.name != "posix": return False try: os.kill(pid, 0) @@ -52,6 +67,40 @@ def _alive(pid: int) -> bool: return True +def busy_out_dirs() -> set[str] | None: + """Out-dirs named on the command line of some live process. + + The runner passes the out-dir to the adapter as an argument, so it is + right there in `ps` for the whole life of the trial. That makes it a + direct liveness signal, and a much better one than the fallback it + replaces: without a marker there is no pid, so liveness was inferred + from "the stream file moved recently", which reports a run killed ten + seconds ago as still running for another three minutes. Observed + exactly that after a teardown -- four rows claiming to run while `ps` + showed nothing at all. + + None means ps was unavailable and the caller should fall back.""" + try: + out = subprocess.run(["ps", "-eo", "args"], capture_output=True, + text=True, timeout=10) + except (OSError, subprocess.SubprocessError): + return None + if out.returncode != 0: + return None + busy = set() + for line in out.stdout.splitlines(): + for tok in line.split(): + if "adh-out-" in tok: + # prompt.txt lives inside the out-dir; take the directory. + p = tok.rstrip("/") + if not p.endswith("adh-out-") and "/adh-out-" in f"/{p}": + while p and "adh-out-" not in os.path.basename(p): + p = os.path.dirname(p) + if p: + busy.add(p) + return busy + + # The stream nests everything one level down under "part"; the useful # fields are part.tokens for a step_finish and part.tool / part.state.input # for a tool_use. Read off opencode 1.18.10 -- the same moving target the @@ -177,6 +226,7 @@ def snapshot(tmp: str | None = None, root: Path | None = None, """One record per run currently in flight, newest activity first.""" root = root or REPO_ROOT now = now or time.time() + busy = busy_out_dirs() runs = [] for d in out_dirs(tmp): p = Path(d) @@ -214,11 +264,15 @@ def snapshot(tmp: str | None = None, root: Path | None = None, except OSError: elapsed = 0.0 - # No marker means no pid to check, so liveness falls back to "the - # stream moved recently", which is the same evidence a viewer would - # use by eye. - alive = (_alive(int(m["pid"])) if m.get("pid") - else age < STALE_S) + # Liveness, best evidence first: a process still naming this + # out-dir, then the runner's recorded pid, and only if `ps` is + # unavailable the weak "stream moved recently" guess. + if busy is not None: + alive = d in busy + elif m.get("pid") and os.name == "posix": + alive = _alive(int(m["pid"])) + else: + alive = age < STALE_S if age > ABANDONED_S and not alive: continue # debris from a killed run @@ -295,7 +349,60 @@ def fmt_age(s) -> str: return f"{s // 3600}h{(s % 3600) // 60:02d}m" +def sweep(tmp: str | None = None, dry: bool = False) -> tuple[int, int]: + """Remove sandboxes and out-dirs no live process is using. + + A trial that completes cleans up after itself; one that is killed does + not, and the leftovers are not harmless. They are what the live view + reads, so a torn-down run keeps rendering as rows long after it is + gone, and at ~30MB of git checkout apiece they are not free either. + + Refuses while anything is running, because the only way to decide a + directory is dead is to know nothing is using it.""" + import shutil + busy = busy_out_dirs() + if busy is None: + raise RuntimeError("cannot enumerate processes; refusing to delete " + "directories that might be in use") + if busy: + raise RuntimeError( + f"{len(busy)} run(s) still active. Stop them first -- deleting a " + f"sandbox under a running agent produces a garbage transcript " + f"and a result row that looks real.") + root = tmp or tempfile.gettempdir() + freed = n = 0 + for d in sorted(glob.glob(os.path.join(root, "adh-*"))): + try: + size = sum(f.stat().st_size for f in Path(d).rglob("*") + if f.is_file()) + except OSError: + size = 0 + n += 1 + freed += size + if not dry: + shutil.rmtree(d, ignore_errors=True) + return n, freed + + def main(): + import argparse + ap = argparse.ArgumentParser() + ap.add_argument("--clean", action="store_true", + help="delete sandboxes and out-dirs from finished or " + "killed runs; refuses while anything is running") + ap.add_argument("--dry-run", action="store_true") + a = ap.parse_args() + if a.clean: + try: + n, freed = sweep(dry=a.dry_run) + except RuntimeError as e: + print(e) + return 1 + verb = "would remove" if a.dry_run else "removed" + print(f"{verb} {n} director{'y' if n == 1 else 'ies'}, " + f"{freed / 1e6:.0f} MB") + return 0 + runs = snapshot() if not runs: print("nothing in flight") diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index ff72819..524932d 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -621,6 +621,15 @@ def ev(**kw): f"half-written last line must be counted, not " f"raised") + # A liveness check must not be able to affect what it observes. + # os.kill(pid, 0) is a probe on POSIX and a real Ctrl-C on Windows, + # where signal.CTRL_C_EVENT == 0 -- checking our own pid took the + # whole selftest down with a KeyboardInterrupt raised inside an + # unrelated subprocess several checks later. + if lv._alive(_os.getpid()) and _os.name != "posix": + problems.append("_alive() answered on a non-POSIX platform; " + "os.kill(pid, 0) is not an existence probe there") + # No marker: scenario is recoverable from the path, arm is not. runs = lv.snapshot(tmp=tmp) if len(runs) != 1: From 90887615fa1bf6e7d2f24aa07c73a8f0ce3a33d5 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:01:18 -0700 Subject: [PATCH 02/41] calib tab: say why it is empty, and point at something that exists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The message told you to 'run under bench/with-proxy.sh'. That script does not exist and never did -- the proxy starts from ADH_PROXY_LOG inside bench/isolate.sh. It also omitted the reason the tab is empty for most runs. The proxy holds one trial mark at a time and nothing in an inference request identifies its trial, so under --jobs>1 the runner skips the mark rather than writing a wrong attribution. The H4 gate cannot be measured in parallel at all, which makes 'pass --proxy' useless advice for exactly the runs people are watching when they find this tab. Now prints the two commands that work, states that JOBS=1 is a precondition rather than a preference, and names it as the second cost of parallelism (§16.4). --- src/adherence/matrix_tui.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index a09b686..d8dae87 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -523,12 +523,26 @@ def view_cost(self, cs, body, max_x): def view_calib(self, body, max_x): C = self.curses if not self.proxy_rows: - self._put(3, 3, "no proxy log loaded — pass --proxy runs/" - "proxy.jsonl, or run under bench/with-proxy.sh", - C.A_DIM) - self._put(5, 3, "Without it the adapter's token counts are " - "unverified: design §3.2 makes the proxy " - "authoritative, not the adapter.", C.A_DIM) + # The old text pointed at bench/with-proxy.sh, which does not + # exist and never did, and omitted the reason this tab is empty + # for most runs: the gate cannot be measured in parallel at all. + self._put(3, 3, "no proxy log loaded. The recording proxy runs " + "only when ADH_PROXY_LOG is set:", C.A_DIM) + self._put(4, 5, "ADH_PROXY_LOG=runs/proxy.jsonl make all " + "TRIALS=5 JOBS=1", C.A_BOLD) + self._put(5, 5, "make matrix PROXY=runs/proxy.jsonl", C.A_BOLD) + self._put(7, 3, "JOBS=1 is not optional. The proxy carries one " + "trial mark at a time and nothing in an " + "inference request", C.A_DIM) + self._put(8, 3, "identifies its trial, so under --jobs>1 the " + "runner skips the mark rather than writing a " + "wrong attribution.", C.A_DIM) + self._put(9, 3, "The H4 gate therefore has to be measured " + "serially — that is the second cost of " + "parallelism (§16.4).", C.A_DIM) + self._put(11, 3, "Without it the adapter's token counts are " + "unverified: design §3.2 makes the proxy " + "authoritative, not the adapter.", C.A_DIM) return 0, 0 cal = sd.calibration(self.rows, self.proxy_rows) if not cal: From 88ebb049cb83dc285aa29be8e527b1d9a13aa84c Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:06:29 -0700 Subject: [PATCH 03/41] proxy: attribute calls by request path, not by shared state The registration listed 'per-trial proxy attribution becomes impossible' as the second cost of parallelism. It was not a cost, it was a missing key. The premise was right and measured: nothing in an inference request body identifies its trial -- the sandbox path is not in it, not even in the system prompt. So the runner marked trial boundaries by POSTing a label to the proxy, which is one piece of shared state; two concurrent trials write into whichever label was set last. Rather than record an attribution it knew was wrong, the runner skipped marking under --jobs>1 -- which meant the H4 gate, the thing that decides whether any cost number in this suite can be trusted, was unavailable for every parallel run. The request PATH is ours. Each trial now gets a config whose provider baseURL is /__run//v1; the proxy strips the prefix before forwarding and stamps the record. Attribution arrives with the call. Upstream sees exactly what it saw before, because a proxy that alters the request is not measuring it. Selftest drives two trials at one proxy concurrently with overlapping requests and asserts 4 and 6 calls land in their own buckets, tokens survive, and upstream saw only /v1/chat/completions. 22/22. marks are kept for serial runs and for reading existing logs; run_id wins wherever present. --- docs/EVAL.md | 21 +++++--- src/adherence/matrix_tui.py | 26 +++++---- src/adherence/metrics.py | 26 +++++++-- src/adherence/proxy.py | 37 ++++++++++++- src/adherence/runner.py | 54 +++++++++++++++++-- src/adherence/selftest.py | 102 ++++++++++++++++++++++++++++++++++++ 6 files changed, 238 insertions(+), 28 deletions(-) diff --git a/docs/EVAL.md b/docs/EVAL.md index f6e2958..b9de238 100644 --- a/docs/EVAL.md +++ b/docs/EVAL.md @@ -429,18 +429,25 @@ absent entirely on some runs. Real spend, but not attributable to the instruction surface, so they are excluded from arm comparisons and reported separately. Stating the rule beats quietly picking a total. -## Two costs of parallelism +## The cost of parallelism -`--jobs > 1` buys throughput and spends two things: +`--jobs > 1` buys throughput and spends one thing: - **Wall-clock stops being comparable across arms.** Latency becomes a function of GPU scheduling. Contended runs are stamped `contended: true` rather than left to be compared against serial ones later. -- **Per-trial proxy attribution becomes impossible.** The proxy mark is one - piece of state and *nothing in an inference request identifies the trial* — - measured: the sandbox path appears nowhere in the request body, not even in - the system prompt. The runner skips marks and warns rather than writing an - attribution that is wrong. **Calibration runs serially.** + +~~**Per-trial proxy attribution becomes impossible.**~~ This was recorded as the +second cost and it was not a cost, it was a missing key. The premise was right — +*nothing in an inference request body identifies its trial*, measured: the +sandbox path appears nowhere in it, not even in the system prompt — but the +request **path** is ours. Each trial now routes through +`/__run//v1`, the proxy strips the prefix before forwarding, and +attribution arrives with the call instead of being read off one piece of shared +state that two concurrent trials would fight over. The H4 gate is measurable at +any `--jobs`. Verified in the selftest by driving two trials at one proxy +concurrently and asserting no call lands in the wrong bucket, and that upstream +never sees the prefix. Concurrent `opencode run` against one `XDG_DATA_HOME` also dies with `database is locked`, so each parallel trial gets its own data home. diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index d8dae87..923fdbe 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -528,21 +528,19 @@ def view_calib(self, body, max_x): # for most runs: the gate cannot be measured in parallel at all. self._put(3, 3, "no proxy log loaded. The recording proxy runs " "only when ADH_PROXY_LOG is set:", C.A_DIM) - self._put(4, 5, "ADH_PROXY_LOG=runs/proxy.jsonl make all " - "TRIALS=5 JOBS=1", C.A_BOLD) + self._put(4, 5, "ADH_PROXY_LOG=runs/proxy.jsonl make probe " + "ARMSDIR=... JOBS=3", C.A_BOLD) self._put(5, 5, "make matrix PROXY=runs/proxy.jsonl", C.A_BOLD) - self._put(7, 3, "JOBS=1 is not optional. The proxy carries one " - "trial mark at a time and nothing in an " - "inference request", C.A_DIM) - self._put(8, 3, "identifies its trial, so under --jobs>1 the " - "runner skips the mark rather than writing a " - "wrong attribution.", C.A_DIM) - self._put(9, 3, "The H4 gate therefore has to be measured " - "serially — that is the second cost of " - "parallelism (§16.4).", C.A_DIM) - self._put(11, 3, "Without it the adapter's token counts are " - "unverified: design §3.2 makes the proxy " - "authoritative, not the adapter.", C.A_DIM) + self._put(7, 3, "Parallel runs are fine: each trial routes " + "through its own /__run/ path, so " + "attribution", C.A_DIM) + self._put(8, 3, "arrives with the request instead of coming " + "from a mark two trials would fight over.", + C.A_DIM) + self._put(10, 3, "Without a proxy the adapter's token counts " + "are unverified: design §3.2 makes the proxy " + "authoritative,", C.A_DIM) + self._put(11, 3, "not the adapter.", C.A_DIM) return 0, 0 cal = sd.calibration(self.rows, self.proxy_rows) if not cal: diff --git a/src/adherence/metrics.py b/src/adherence/metrics.py index 6a05ab0..58b5aec 100644 --- a/src/adherence/metrics.py +++ b/src/adherence/metrics.py @@ -323,13 +323,33 @@ def proxy_totals(rows: list[dict]) -> dict: def split_by_mark(rows: list[dict]) -> dict: - """Group proxy records by the trial mark the runner wrote before each - trial. Records before any mark land under ''.""" + """Group proxy records by trial. + + Two mechanisms, and the per-record one wins wherever it is present: + + `run_id` is carried on the request path, so it is correct no matter how + many trials are in flight. `mark` is a single piece of proxy state set + between trials -- fine serially, meaningless under --jobs>1, where two + trials interleave into whichever label was set last. + + Records with neither land under ''.""" out, cur = {}, "" for r in rows: if r.get("type") == "mark": cur = r.get("label", "") out.setdefault(cur, []) continue - out.setdefault(cur, []).append(r) + key = trial_key(r.get("run_id") or r.get("mark") or cur) + out.setdefault(key, []).append(r) return out + + +def trial_key(run_id: str) -> str: + """`scenario|arm|trial`, the unit a result row is joined on. + + A run id carries a fourth field so two out-dirs for the same trial + (a retry, a re-run) stay distinct as processes. Calibration joins on + the trial, so the suffix is dropped here rather than at every call + site that would otherwise have to know about it.""" + parts = (run_id or "").split("|") + return "|".join(parts[:3]) if len(parts) >= 3 else (run_id or "") diff --git a/src/adherence/proxy.py b/src/adherence/proxy.py index 7903063..d2ce310 100644 --- a/src/adherence/proxy.py +++ b/src/adherence/proxy.py @@ -33,6 +33,7 @@ import threading import time import urllib.error +import urllib.parse import urllib.request from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer @@ -64,7 +65,12 @@ def record(self, rec: dict) -> int: self.seq += 1 rec["type"] = "call" rec["seq"] = seq - rec["mark"] = self.current_mark + # A run id carried on the request path beats the global mark and + # is the only one of the two that survives concurrency: the mark + # is one piece of shared state, so two trials in flight write + # into whichever label happened to be set last. `mark` stays for + # serial runs and for reading old logs. + rec.setdefault("mark", self.current_mark) self._write(rec) return seq @@ -134,6 +140,28 @@ def log_message(self, fmt, *a): # quiet; the JSONL is the log # ---- control plane ------------------------------------------------- + def _split_run(self) -> str: + """Pull a `/__run/` prefix off the request path. + + This is how a trial identifies itself under --jobs>1. The runner + gives each trial a provider baseURL carrying its own run id, so the + attribution arrives with the request instead of being inferred from + proxy state that two concurrent trials would fight over. Nothing in + an inference request body identifies its trial -- measured; the + sandbox path is not even in the system prompt -- so the path is the + only place left to put it. + + Returns the id and rewrites self.path to what upstream should see. + """ + if not self.path.startswith("/__run/"): + return "" + rest = self.path[len("/__run/"):] + rid, sep, tail = rest.partition("/") + if not sep: + return "" + self.path = "/" + tail + return urllib.parse.unquote(rid) + def _control(self, body: bytes) -> bool: if not self.path.startswith("/__proxy/"): return False @@ -177,6 +205,9 @@ def _proxy(self, method: str) -> None: body = self.rfile.read(n) if n else b"" if self._control(body): return + # Strip before anything reads self.path: upstream must never see + # the routing prefix, and every record below should carry the id. + run_id = self._split_run() parsed, fp = None, {} if body: @@ -213,6 +244,7 @@ def _proxy(self, method: str) -> None: resp, status = e, e.code except Exception as e: # upstream down/refused self.recorder.record({**fp, "status": 0, "error": str(e), + **({"mark": run_id} if run_id else {}), "duration_ms": int((time.time() - t0) * 1000)}) self._json(502, {"error": f"proxy upstream: {e}"}) return @@ -226,6 +258,9 @@ def _proxy(self, method: str) -> None: rec = {**fp, "status": status, "path": self.path, "duration_ms": int((time.time() - t0) * 1000), "finish_reason": finish} + if run_id: + rec["mark"] = run_id + rec["run_id"] = run_id rec.update(usage or {"input_tokens": 0, "output_tokens": 0, "total_tokens": 0, "cached_tokens": 0, "usage_missing": True}) diff --git a/src/adherence/runner.py b/src/adherence/runner.py index 2ef1f11..8cc5488 100755 --- a/src/adherence/runner.py +++ b/src/adherence/runner.py @@ -274,6 +274,49 @@ def install_reapers() -> None: signal.signal(sig, _reap_all) +def per_trial_bench_config(out_dir: Path, run_id: str) -> Path | None: + """A copy of the harness config whose baseURL names this trial. + + The proxy is authoritative for token counts (H4), but it could only + attribute calls to a trial via a single global mark -- so under + --jobs>1 the runner skipped marking entirely rather than write an + attribution it knew was wrong, and the gate could not be measured in + parallel at all. That was a real limitation of the design, recorded as + "the second cost of parallelism". + + It does not have to be. Nothing in an inference request body identifies + its trial, but the request *path* is ours: routing this trial through + `/__run//v1` makes attribution arrive with the call. + The proxy strips the prefix before forwarding, so upstream sees exactly + what it saw before. + + Returns None when no proxy is in use, leaving the adapter on whatever + config it would otherwise have picked.""" + base = os.environ.get("ADH_PROXY") + src = os.environ.get("ADH_BENCH_CONFIG") or str(ROOT / "bench" / + "opencode-bench.json") + if not base or not Path(src).is_file(): + return None + try: + cfg = json.loads(Path(src).read_text()) + except (OSError, json.JSONDecodeError): + return None + + root = base.rsplit("/v1", 1)[0].rstrip("/") + tagged = f"{root}/__run/{urllib.parse.quote(run_id, safe='')}/v1" + changed = False + for prov in (cfg.get("provider") or {}).values(): + opts = prov.get("options") if isinstance(prov, dict) else None + if isinstance(opts, dict) and opts.get("baseURL"): + opts["baseURL"] = tagged + changed = True + if not changed: + return None + dest = out_dir / "opencode-bench.json" + dest.write_text(json.dumps(cfg, indent=2)) + return dest + + def wait_or_kill(proc, out_dir: Path, hard_s: int, idle_s: int): """Wait for the adapter, killing it only for a reason worth killing for. @@ -645,6 +688,9 @@ def run_one(scen_dir: Path, adapter: Path, model: str, keep: bool, # start_new_session puts the adapter in its own process group so a # deadline can kill everything it spawned. See kill_process_group. env["ADH_RUN_ID"] = run_id + cfg = per_trial_bench_config(out_dir, run_id) + if cfg: + env["ADH_BENCH_CONFIG"] = str(cfg) proc = subprocess.Popen( [str(adapter), str(sandbox), model, str(prompt_file), str(out_dir), target_agent], @@ -844,9 +890,11 @@ def emit(out, item, r, errs): + (f" [out_dir={r['out_dir']}]" if r.get("out_dir") else "")) if args.jobs > 1 and os.environ.get("ADH_PROXY"): - print("WARNING: --jobs>1 with a recording proxy — per-trial proxy " - "attribution is unavailable and trial marks are skipped. Run " - "the H4 calibration serially.", file=sys.stderr) + print("note: --jobs>1 with a recording proxy. Trial marks are " + "skipped (they are one piece of shared state and two trials " + "would interleave), but each trial routes through its own " + "/__run/ path, so per-trial attribution is exact and the " + "H4 gate is measurable in parallel.", file=sys.stderr) install_reapers() with open(args.out, "a") as out: diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index 524932d..11ba854 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -722,6 +722,107 @@ def check_process_hygiene() -> list[str]: return problems +def check_proxy_attribution() -> list[str]: + """The H4 gate must be measurable with trials running concurrently. + + The proxy could only attribute a call to a trial through one global + mark, so under --jobs>1 the runner skipped marking rather than write an + attribution it knew was wrong -- and the gate, which decides whether + any cost number in this suite can be trusted, was simply unavailable + for every parallel run. The registration called that "the second cost + of parallelism". + + It is not a cost, it is a missing key. Each trial now routes through + `/__run//v1`, so attribution arrives with the request. + This drives two trials at one proxy concurrently and asserts no call + lands in the wrong bucket -- and that upstream never sees the prefix, + because a proxy that alters the request is not measuring it.""" + import json as _json + import tempfile as _tf + import threading as _th + import urllib.request as _ur + from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer + from pathlib import Path as _P + + from adherence import metrics as _M + from adherence import proxy as _px + problems = [] + seen_paths = set() + + class Up(BaseHTTPRequestHandler): + def log_message(self, *a): + pass + + def do_POST(self): + seen_paths.add(self.path) + n = int(self.headers.get("Content-Length") or 0) + self.rfile.read(n) + time.sleep(0.05) # force the requests to overlap + body = _json.dumps({ + "choices": [{"message": {"content": "ok"}, + "finish_reason": "stop"}], + "usage": {"prompt_tokens": 100, "completion_tokens": 5, + "total_tokens": 105}}).encode() + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + + up = ThreadingHTTPServer(("127.0.0.1", 0), Up) + _th.Thread(target=up.serve_forever, daemon=True).start() + tmp = _tf.mkdtemp(prefix="self-proxy-") + log = _P(tmp) / "proxy.jsonl" + _px.Handler.recorder = _px.Recorder(str(log)) + _px.Handler.upstream = f"http://127.0.0.1:{up.server_address[1]}" + px = ThreadingHTTPServer(("127.0.0.1", 0), _px.Handler) + _th.Thread(target=px.serve_forever, daemon=True).start() + port = px.server_address[1] + + def fire(run_id, n): + for _ in range(n): + req = _ur.Request( + f"http://127.0.0.1:{port}/__run/{run_id}/v1/chat/completions", + data=_json.dumps({"model": "m", "messages": [], + # tools present, or is_auxiliary() would + # class these as title-generation overhead + "tools": [{"type": "function"}]}).encode(), + headers={"Content-Type": "application/json"}, method="POST") + _ur.urlopen(req, timeout=30).read() + + try: + a, b = "s01|a1|0|aaa", "s02|a3|2|bbb" + ts = [_th.Thread(target=fire, args=(a, 4)), + _th.Thread(target=fire, args=(b, 6))] + for t in ts: + t.start() + for t in ts: + t.join() + + rows = [_json.loads(x) for x in log.read_text().splitlines() if x.strip()] + groups = _M.split_by_mark(rows) + for key, want in (("s01|a1|0", 4), ("s02|a3|2", 6)): + got = len(groups.get(key, [])) + if got != want: + problems.append( + f"{key} got {got} of {want} calls; concurrent trials " + f"cross-attributed, which is what the single global " + f"mark did and the whole point of the run id") + tot = _M.proxy_totals(groups.get("s01|a1|0", [])) + if tot["tok_in_billed"] != 400: + problems.append(f"tok_in_billed {tot['tok_in_billed']}, expected " + f"400 -- usage is not surviving attribution") + if seen_paths != {"/v1/chat/completions"}: + problems.append(f"upstream saw {seen_paths}; the routing prefix " + f"must be stripped, or the proxy is altering " + f"the request it claims to be measuring") + finally: + px.shutdown() + up.shutdown() + shutil.rmtree(tmp, ignore_errors=True) + return problems + + def check_analysis() -> list[str]: """The pre-specified analysis (docs/EVAL.md) must detect a planted effect, stay silent when there is none, and REFUSE when a precondition @@ -834,6 +935,7 @@ def dataset(ratio, floor=9500, passed=True, arms=("a1", "a2", "a3")): ("harness fault is not a model failure", check_harness_exclusion), ("live run reader", check_live), ("process hygiene", check_process_hygiene), + ("proxy attribution under concurrency", check_proxy_attribution), ("pre-specified analysis", check_analysis), ("stdlib test runner", check_test_runner), ("fixture noise filter", check_noise_filter), From b740880467c0d451238d1400bc8af3802ac8fc44 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:12:14 -0700 Subject: [PATCH 04/41] proxy on by default; live view gains graded + rollup sections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three things the TUI surfaced by being looked at. SUBAGENTS READ 0. The live view counted distinct sessionIDs in the root stream, which is always 1: a subagent runs in its OWN opencode session and the root stream carries none of its calls -- measured at 3.1x under-report on s13. So a trial that had dispatched two 'explore' agents showed sub=0 while its own detail pane listed the spawns. The runner already gives each trial its own XDG_DATA_HOME, so opencode's store is in the out-dir and readable live: child sessions now come from there, read-only and best-effort. Totals are explicitly labelled ROOT SESSION ONLY when children exist, because E3 is the claim that this handoff is free and quoting a root-only total would confirm it by construction. PROXY WAS OPT-IN. It records the tokens and round trips this suite exists to measure and §3.2 makes it authoritative over the adapter -- so the ordinary path was producing numbers nothing had verified, and the H4 gate could not be checked for the run you were actually doing. It now starts by default, logs to a path paired with the results (runs/probe.jsonl -> runs/probe.proxy.jsonl) so a log always belongs to exactly one run, and the viewers find it without being told. ADH_NO_PROXY=1 opts out. PROGRESS BAR READ AS AN ELLIPSIS. '..................' at 0% looks like truncated output. Bracketed now, with a track character that cannot be mistaken for one. Live view is now three sections: running (cursor, [space] detail), graded most-recent-first with verdict and failing checks, and a per-(arm, scenario) rollup carrying pass rate, median and p90 tokens, tool averages, subagents, median and p90 duration, trials left and ETA. The cells detail pane gained a median/mean/p90 table with a p90:median ratio, flagged when the tail is 2x the middle -- a treatment that halves the median while doubling the tail has not made anything cheaper. --- bench/isolate.sh | 26 ++++ src/adherence/live.py | 43 +++++- src/adherence/matrix_tui.py | 269 +++++++++++++++++++++++++++--------- src/adherence/suitedata.py | 67 +++++++++ 4 files changed, 342 insertions(+), 63 deletions(-) diff --git a/bench/isolate.sh b/bench/isolate.sh index 197ff10..6af6d02 100755 --- a/bench/isolate.sh +++ b/bench/isolate.sh @@ -27,6 +27,32 @@ ROOT="$(cd "$HERE/.." && pwd)" BENCH_XDG="${ADH_BENCH_XDG:-$HERE/.xdg}" PORT="${ADH_PROXY_PORT:-8010}" +# The proxy records the tokens and round trips this suite exists to +# measure, and design §3.2 makes it AUTHORITATIVE over the adapter -- so +# it runs by default. It used to be opt-in behind ADH_PROXY_LOG, which +# meant the ordinary path produced numbers nothing had verified and the +# H4 agreement gate could not be checked at all for the run you were +# actually doing. +# +# The log is paired to the results file rather than shared, so a proxy log +# always belongs to exactly one run: runs/probe.jsonl -> runs/probe.proxy.jsonl. +# ADH_NO_PROXY=1 opts out (no endpoint, or deliberately measuring the +# adapter alone). +if [ -z "${ADH_PROXY_LOG:-}" ] && [ "${ADH_NO_PROXY:-0}" != "1" ]; then + _out="" + _next=0 + for _a in "$@"; do + if [ "$_next" = "1" ]; then _out="$_a"; _next=0; fi + if [ "$_a" = "--out" ]; then _next=1; fi + done + if [ -n "$_out" ]; then + ADH_PROXY_LOG="${_out%.jsonl}.proxy.jsonl" + else + ADH_PROXY_LOG="$ROOT/runs/proxy.jsonl" + fi + export ADH_PROXY_LOG +fi + mkdir -p "$BENCH_XDG/opencode" cp "$HERE/opencode-bench.json" "$BENCH_XDG/opencode/opencode.json" diff --git a/src/adherence/live.py b/src/adherence/live.py index a35d314..61284db 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -23,6 +23,7 @@ import glob import json import os +import sqlite3 import subprocess import tempfile import time @@ -131,6 +132,7 @@ def _stream(path: Path) -> dict: spawns: list[str] = [] first_ts = last_ts = 0 partial = 0 + root_sid = "" try: with open(path, errors="replace") as f: for line in f: @@ -148,6 +150,8 @@ def _stream(path: Path) -> dict: first_ts = first_ts or ts last_ts = ts sid = e.get("sessionID") or "" + if sid and not root_sid: + root_sid = sid t = e.get("type") if t == "step_finish": calls += 1 @@ -188,7 +192,37 @@ def _stream(path: Path) -> dict: "sessions": len(sessions), "subagent_calls": sum(sorted(sessions.values())[:-1]) if len(sessions) > 1 else 0, "first_ts": first_ts, "last_ts": last_ts, - "partial_lines": partial} + "root_session": root_sid, "partial_lines": partial} + + +def _subagents(out_dir: Path, root_session: str) -> dict: + """Child sessions this trial has dispatched, read live. + + A subagent runs in its OWN opencode session, and neither the root + stream nor the root export carries a single one of its inference calls + -- measured at 3.1x under-report on s13. So the stream this view reads + cannot see subagent cost at all, and reporting its totals without + saying so would understate exactly the number E3 is a claim about. + + The runner gives every trial its own XDG_DATA_HOME under the out-dir, + so opencode's store is right here while the run is live. Read-only and + best-effort: the writer is active, the schema is private and may move + between versions, and a viewer must never block a run. On any failure + this reports nothing rather than a number it cannot stand behind.""" + db = out_dir / "xdg" / "data" / "opencode" / "opencode.db" + if not db.exists(): + return {"sessions": [], "root": root_session, "readable": False} + try: + con = sqlite3.connect(f"file:{db}?mode=ro", uri=True, timeout=2) + con.execute("PRAGMA query_only=ON") + rows = list(con.execute( + "SELECT id, parent_id, COALESCE(agent,'') FROM session " + "WHERE parent_id IS NOT NULL ORDER BY time_created ASC")) + con.close() + except Exception: + return {"sessions": [], "root": root_session, "readable": False} + kids = [(sid, agent) for sid, parent, agent in rows] + return {"sessions": kids, "root": root_session, "readable": True} def _scenario_info(scenario: str, root: Path) -> dict: @@ -283,6 +317,7 @@ def snapshot(tmp: str | None = None, root: Path | None = None, if st["first_ts"]: elapsed = max(elapsed, (now * 1000 - st["first_ts"]) / 1000.0) + kids = _subagents(p, st.get("root_session", "")) timeout = int(m.get("timeout") or 0) if graded: state = "grading" @@ -313,6 +348,12 @@ def snapshot(tmp: str | None = None, root: Path | None = None, "idle_s": age, "state": state, "unlabelled": bool(m.get("unlabelled")), + # Dispatched subagents, from opencode's own store. `tok_in` + # above is ROOT ONLY -- their calls are in separate sessions + # the root stream never sees. + "child_sessions": len(kids["sessions"]), + "child_agents": [a for _s, a in kids["sessions"] if a], + "children_readable": kids["readable"], "info": _scenario_info(m.get("scenario", ""), root), **st, }) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 923fdbe..48cf974 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -169,7 +169,10 @@ def header(self, max_x): pct = 100.0 * n / self.expect bar_w = 18 fill = int(bar_w * min(n / self.expect, 1.0)) - prog = (f"{'#' * fill}{'.' * (bar_w - fill)} " + # Bracketed, and a track character that cannot be mistaken for + # an ellipsis: an empty bar rendered as "................" + # reads as truncated output, not as 0%. + prog = (f"[{'█' * fill}{'·' * (bar_w - fill)}] " f"{n}/{self.expect} {pct:.0f}%") done = n >= self.expect self._put(1, max(len(VIEW_HELP[v]) + 3, max_x - len(prog) - 2), @@ -250,44 +253,144 @@ def render(self, max_y, max_x): STATE_COLOR = {"running": 2, "grading": 5, "stalled": 4, "dead": 4} def view_live(self, body, max_x): + """Three stacked sections: what is running, what has just been + graded, and the per-(arm, scenario) rollup that says whether the + grid is on pace. A single flat table cannot answer 'is it working' + and 'how long will this take' at the same time.""" C = self.curses runs = self.live - if not runs: - self._put(3, 3, "nothing in flight — start a run, or [tab] to " - "the results views", C.A_DIM) - return 0, 0 + y = 3 s = lv.summarize(runs) - self._put(3, 1, f"{s['running']} running · {s['grading']} grading · " - f"{s['stalled']} stalled · {s['calls']} calls · " - f"{s['tok_in']:,} input tokens", C.A_BOLD) - self._put(4, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'state':>9}" - f"{'calls':>7}{'tools':>7}{'sub':>5}{'tok_in':>12}" - f"{'elapsed':>9}{'budget':>8} doing", C.A_DIM) - avail = max(1, body - 3) - self.live_cursor = max(0, min(self.live_cursor, len(runs) - 1)) - for i, r in enumerate(runs[:avail]): - y = 5 + i - base = C.color_pair(5) if i == self.live_cursor else 0 - self._put(y, 1, f"{r['scenario'][:19]:<20}", base) - self._put(y, 21, f"{r['arm']:>4}", C.A_DIM if r["unlabelled"] - else 0) - self._put(y, 25, f"{r['trial'] if r['trial'] >= 0 else '?':>3}", - C.A_DIM) - self._put(y, 28, f"{r['state']:>9}", - C.color_pair(self.STATE_COLOR.get(r["state"], 0))) - self._put(y, 37, f"{r['calls']:>7}", 0) - self._put(y, 44, f"{r['tools']:>7}", C.A_DIM) - self._put(y, 51, f"{r['sessions'] - 1 if r['sessions'] else 0:>5}", + done = len(self.rows) + self._put(y, 1, f"{s['running']} running · {s['grading']} grading · " + f"{s['stalled']} stalled · {done} graded" + + (f"/{self.expect}" if self.expect else "") + + f" · {s['calls']} calls · {s['tok_in']:,} in", + C.A_BOLD) + y += 2 + + # ---- running --------------------------------------------------- + if runs: + self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'state':>9}" + f"{'calls':>7}{'tools':>6}{'sub':>5}{'tok_in':>12}" + f"{'elapsed':>9}{'budget':>8} doing", C.A_DIM) + y += 1 + self.live_cursor = max(0, min(self.live_cursor, len(runs) - 1)) + shown = runs[:max(1, min(len(runs), body - 12))] + for i, r in enumerate(shown): + base = C.color_pair(5) if i == self.live_cursor else 0 + self._put(y, 1, f"{r['scenario'][:19]:<20}", base) + self._put(y, 21, f"{r['arm']:>4}", + C.A_DIM if r["unlabelled"] else 0) + self._put(y, 25, + f"{r['trial'] if r['trial'] >= 0 else '?':>3}", + C.A_DIM) + self._put(y, 28, f"{r['state']:>9}", + C.color_pair(self.STATE_COLOR.get(r["state"], 0))) + self._put(y, 37, f"{r['calls']:>7}", 0) + self._put(y, 44, f"{r['tools']:>6}", C.A_DIM) + # Child SESSIONS, from opencode's own store -- the root + # stream carries none of a subagent's calls, so counting + # session ids in the stream always answered 0. + self._put(y, 50, f"{r['child_sessions']:>5}", + C.color_pair(3) if r["child_sessions"] else C.A_DIM) + self._put(y, 55, f"{r['tok_in']:>12,}", C.color_pair(2)) + self._put(y, 67, f"{lv.fmt_age(r['elapsed_s']):>9}", C.A_DIM) + b = r["budget"] + self._put(y, 76, f"{lv.fmt_budget(b):>8}", + C.color_pair(4) if b and b > 0.8 else C.A_DIM) + self._put(y, 86, r["last_tool"][:max(0, max_x - 88)], C.A_DIM) + y += 1 + if len(runs) > len(shown): + self._put(y, 1, f" … {len(runs) - len(shown)} more running", + C.A_DIM) + y += 1 + else: + self._put(y, 3, "nothing in flight", C.A_DIM) + y += 1 + y += 1 + + # ---- graded ---------------------------------------------------- + # Newest first: a run in progress is judged by what just landed, + # not by what landed an hour ago. + recent = sorted(self.rows, key=lambda r: r.get("_seq", 0))[-6:][::-1] + if recent: + self._put(y, 1, "graded — most recent first", C.A_BOLD) + y += 1 + self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'verdict':>9}" + f"{'calls':>7}{'tok_in':>12}{'dur':>9} failing", C.A_DIM) - self._put(y, 56, f"{r['tok_in']:>12,}", C.color_pair(2)) - self._put(y, 68, f"{lv.fmt_age(r['elapsed_s']):>9}", C.A_DIM) - # Red once the run is close enough to its timeout that it is - # probably going to be killed rather than finish. - b = r["budget"] - self._put(y, 77, f"{lv.fmt_budget(b):>8}", - C.color_pair(4) if b and b > 0.8 else C.A_DIM) - self._put(y, 87, r["last_tool"][:max(0, max_x - 89)], C.A_DIM) - return len(runs), avail + y += 1 + for r in recent: + if y >= 3 + body - 6: + break + m = r.get("metrics") or {} + ung = [c for c in r["checks"] + if c.get("name") == "adapter" + and c.get("status") != "pass"] + verdict = ("ungradeable" if ung else + "pass" if r["all_pass"] else "fail") + col = (C.color_pair(3) if ung else + C.color_pair(1) if r["all_pass"] else C.color_pair(4)) + fails = ", ".join(c["name"] for c in r["checks"] + if c["status"] == "fail") or "—" + self._put(y, 1, f"{r['scenario'][:19]:<20}") + self._put(y, 21, f"{r.get('arm', '-'):>4}", C.A_DIM) + self._put(y, 25, f"{r['trial']:>3}", C.A_DIM) + self._put(y, 28, f"{verdict:>9}", col) + self._put(y, 37, f"{m.get('calls', 0):>7}", C.A_DIM) + self._put(y, 44, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) + self._put(y, 56, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", + C.A_DIM) + self._put(y, 67, fails[:max(0, max_x - 69)], C.A_DIM) + y += 1 + y += 1 + + # ---- per (arm, scenario) rollup -------------------------------- + cells = sd.load_cells(paths=self.files) + if cells: + self._put(y, 1, "per arm × scenario — pace and cost so far", + C.A_BOLD) + y += 1 + self._put(y, 1, f"{'arm/scenario':<24}{'done':>6}{'ung':>5}" + f"{'pass':>6}{'med tok':>11}{'p90 tok':>11}" + f"{'calls':>7}{'tools':>7}{'sub':>5}" + f"{'med dur':>9}{'p90 dur':>9}{'left':>5}" + f"{'eta':>8}", C.A_DIM) + y += 1 + # Trials per cell, from the batch size when it is known. + per_cell = 0 + if self.expect and cells: + per_cell = max(1, round(self.expect / max(1, len(cells)))) + for c in cells: + if y >= 3 + body - 1: + break + left = max(0, per_cell - c["trials"]) if per_cell else 0 + eta = left * c["dur_s"] + self._put(y, 1, f"{c['tag'][:23]:<24}") + self._put(y, 25, f"{c['trials']:>6}", C.A_DIM) + self._put(y, 31, f"{c['ungradeable']:>5}", + C.color_pair(3) if c["ungradeable"] else C.A_DIM) + self._put(y, 36, f"{c['pass_rate']:>5.0f}%", + self.pass_attr(c["pass_rate"])) + self._put(y, 42, f"{c['tok']:>11,.0f}", C.color_pair(2)) + # p90 in red when the tail is far past the middle: a median + # that halves while the tail doubles is not a saving. + tail = (c["p90_tok"] / c["tok"]) if c["tok"] else 0 + self._put(y, 53, f"{c['p90_tok']:>11,.0f}", + C.color_pair(4) if tail >= 2 else C.A_DIM) + self._put(y, 64, f"{c['calls']:>7.0f}", C.A_DIM) + self._put(y, 71, f"{c['avg_tools']:>7.1f}", C.A_DIM) + self._put(y, 78, f"{c['n_subagents']:>5.0f}", + C.color_pair(3) if c["n_subagents"] else C.A_DIM) + self._put(y, 83, f"{lv.fmt_age(c['dur_s']):>9}", C.A_DIM) + self._put(y, 92, f"{lv.fmt_age(c['p90_dur']):>9}", C.A_DIM) + self._put(y, 101, f"{left:>5}" if per_cell else f"{'—':>5}", + C.A_DIM) + self._put(y, 106, f"{lv.fmt_age(eta):>8}" if eta + else f"{'—':>8}", C.A_DIM) + y += 1 + return 0, 0 def view_live_detail(self, r, max_y, max_x): C = self.curses @@ -349,10 +452,23 @@ def wrapped(label, text, limit=6): C.color_pair(self.STATE_COLOR.get(r["state"], 0))) line("cost so far", f"{r['calls']} calls · {r['tok_in']:,} in · " f"{r['tok_out']:,} out · cache " - f"{r['cache_read']:,}r/{r['cache_write']:,}w") - if r["sessions"] > 1: - line("subagents", f"{r['sessions'] - 1} session(s), " - f"{r['subagent_calls']} of the calls above") + f"{r['cache_read']:,}r/{r['cache_write']:,}w" + + (" (ROOT SESSION ONLY)" + if r["child_sessions"] else "")) + if r["child_sessions"]: + # Measured at 3.1x under-report on s13: a subagent runs in its + # own opencode session and the root stream carries none of its + # calls. Saying the total is root-only matters most here, + # because E3 is the claim that this handoff is free. + line("subagents", f"{r['child_sessions']} dispatched session(s): " + f"{', '.join(r['child_agents'][:4]) or '?'}", + C.color_pair(3)) + line("", "their calls and tokens are NOT in the totals above — " + "separate sessions, counted at grading time", C.A_DIM) + elif not r["children_readable"] and r["spawns"]: + line("subagents", f"{len(r['spawns'])} spawn(s) seen in the " + f"stream; opencode's store was not readable", + C.A_DIM) if info.get("pr"): line("source PR", f"#{info['pr']} base " f"{info.get('base_commit', '')[:12]}") @@ -526,21 +642,20 @@ def view_calib(self, body, max_x): # The old text pointed at bench/with-proxy.sh, which does not # exist and never did, and omitted the reason this tab is empty # for most runs: the gate cannot be measured in parallel at all. - self._put(3, 3, "no proxy log loaded. The recording proxy runs " - "only when ADH_PROXY_LOG is set:", C.A_DIM) - self._put(4, 5, "ADH_PROXY_LOG=runs/proxy.jsonl make probe " - "ARMSDIR=... JOBS=3", C.A_BOLD) - self._put(5, 5, "make matrix PROXY=runs/proxy.jsonl", C.A_BOLD) - self._put(7, 3, "Parallel runs are fine: each trial routes " - "through its own /__run/ path, so " - "attribution", C.A_DIM) - self._put(8, 3, "arrives with the request instead of coming " - "from a mark two trials would fight over.", - C.A_DIM) - self._put(10, 3, "Without a proxy the adapter's token counts " - "are unverified: design §3.2 makes the proxy " - "authoritative,", C.A_DIM) - self._put(11, 3, "not the adapter.", C.A_DIM) + self._put(3, 3, "no proxy log for this run.", C.A_DIM) + self._put(5, 3, "The proxy now runs by default and writes " + "alongside the results — runs/probe.jsonl " + "pairs with", C.A_DIM) + self._put(6, 3, "runs/probe.proxy.jsonl, which this view finds " + "on its own. A run started before that change, " + "or one", C.A_DIM) + self._put(7, 3, "started with ADH_NO_PROXY=1, has no log to " + "find.", C.A_DIM) + self._put(9, 3, "Without it the adapter's token counts are " + "unverified: design §3.2 makes the proxy " + "authoritative,", C.A_DIM) + self._put(10, 3, "not the adapter, and the 2% H4 agreement " + "gate has nothing to compare.", C.A_DIM) return 0, 0 cal = sd.calibration(self.rows, self.proxy_rows) if not cal: @@ -588,23 +703,50 @@ def view_detail(self, c, max_y, max_x): f"{c['model']} · {c['adapter']}", C.A_BOLD) arm_name, arm_role = sd.ARMS.get(c["arm"], ("?", "")) self._put(4, 1, f"arm {c['arm']} — {arm_name}: {arm_role}", C.A_DIM) + self._put(6, 3, f"{'':<26}{'median':>14}{'mean':>14}{'p90':>14}" + f"{'p90/med':>10}", C.A_DIM) + # median, mean and p90 side by side. The analysis compares medians; + # the p90 column is what says whether the median is representative, + # and the ratio is the fastest way to see a cell whose tail is + # carrying the cost. + dist = [ + ("tok_in", c["tok"], c["avg_tok"], c["p90_tok"], "{:,.0f}"), + ("calls", c["calls"], c["avg_calls"], c["p90_calls"], "{:,.1f}"), + ("tool calls", c["tools"], c["avg_tools"], c["p90_tools"], + "{:,.1f}"), + ("probes to first edit", c["probes"], c["avg_probes"], + c["p90_probes"], "{:,.1f}"), + ("duration s", c["dur_s"], c["avg_dur"], c["p90_dur"], "{:,.0f}"), + ] + y = 7 + for name, med, avg, p90, fmt in dist: + ratio = (p90 / med) if med else 0 + self._put(y, 3, f"{name:<26}", C.A_DIM) + self._put(y, 29, f"{fmt.format(med):>14}") + self._put(y, 43, f"{fmt.format(avg):>14}", C.A_DIM) + self._put(y, 57, f"{fmt.format(p90):>14}", + C.color_pair(4) if ratio >= 2 else 0) + self._put(y, 71, f"{ratio:>9.1f}x" if ratio else f"{'—':>10}", + C.color_pair(4) if ratio >= 2 else C.A_DIM) + y += 1 + y += 1 lines = [ ("trials", f"{c['trials']}"), ("pass@1", f"{c['pass_rate']:.0f}% (± {c['spread']:.0f})"), - ("median tok_in", f"{c['tok']:,.0f}"), ("median tok_in | passed", f"{c['tok_won']:,.0f}"), - ("median calls", f"{c['calls']:.0f}"), - ("probes to first edit", f"{c['probes']:.0f}"), + ("ungradeable (harness)", f"{c['ungradeable']}/{c['trials']}"), ("redundant reads", f"{c['redundant']:.0f}"), - ("subagent calls", f"{c['subagent_calls']}"), + ("subagents dispatched", f"{c['n_subagents']:.0f} " + f"(median), {c['subagent_calls']} " + f"child calls total"), + ("subagent tok_in", f"{c['subagent_tok']:,.0f} (median)"), ("abandoned trials", f"{c['abandoned']}/{c['trials']}"), - ("median duration", sd.fmt_duration(c["dur_s"])), ("failing checks", ", ".join(c["fails"]) or "—"), ] for i, (k, v) in enumerate(lines): - self._put(6 + i, 3, f"{k:<26}", C.A_DIM) - self._put(6 + i, 29, v) - y = 6 + len(lines) + 1 + self._put(y + i, 3, f"{k:<26}", C.A_DIM) + self._put(y + i, 29, v) + y = y + len(lines) + 1 self._put(y, 1, "per-trial", C.A_DIM) for i, r in enumerate(c["rows"][:max(0, max_y - y - 4)]): m = r.get("metrics") or {} @@ -763,6 +905,9 @@ def main(): # of a run that just started, and watching it fill is the whole reason # to point the viewer at one. Only the unscoped case -- nothing named, # nothing on disk -- is a "you have not run anything yet" error. + # Find the run's own proxy log rather than making someone name it. + if not proxy: + proxy = sd.paired_proxy_log(files) or None if not files and not sd.load_rows(): print("no results found — run the suite first " "(make all), or pass FILES=", file=sys.stderr) diff --git a/src/adherence/suitedata.py b/src/adherence/suitedata.py index 044a787..1b26c91 100644 --- a/src/adherence/suitedata.py +++ b/src/adherence/suitedata.py @@ -87,6 +87,9 @@ def load_rows(paths=None): r.setdefault("arm", "-") r.setdefault("metrics", {}) r["_src"] = os.path.basename(p) + # File order is arrival order for an append-only log, + # which is the only "most recent" a viewer can know. + r["_seq"] = len(rows) rows.append(r) except (OSError, json.JSONDecodeError): continue @@ -105,6 +108,29 @@ def _med(vals): return st.median(vals) if vals else 0 +def _avg(vals): + vals = [v for v in vals if v is not None] + return sum(vals) / len(vals) if vals else 0 + + +def _p90(vals): + """90th percentile, nearest-rank. + + Reported next to the median rather than instead of it. A cost + comparison is made on medians because between-scenario variance is + enormous, but a median hides the runs that actually hurt: the trial + that explored for forty calls, the one that timed out. The gap between + the two is the thing to look at -- a treatment that halves the median + and doubles the tail has not made anything cheaper.""" + vals = sorted(v for v in vals if v is not None) + if not vals: + return 0 + # Nearest-rank, not interpolation: with 5-7 trials per cell an + # interpolated p90 invents a value no trial produced. + k = max(1, math.ceil(0.9 * len(vals))) + return vals[k - 1] + + def load_cells(paths=None, pattern=None): """One cell per (model, adapter, arm, scenario), trials aggregated. @@ -148,6 +174,33 @@ def load_cells(paths=None, pattern=None): "dur_s": _med([r.get("duration_s", 0) for r in rs]), "fails": fails, "rows": rs, + # Averages and tails, alongside the medians above. The median + # is what the analysis compares; the p90 is what says whether + # the median is telling the whole story. + "avg_tok": _avg(toks), + "p90_tok": _p90(toks), + "avg_calls": _avg(calls), + "p90_calls": _p90(calls), + "avg_dur": _avg([r.get("duration_s", 0) for r in rs]), + "p90_dur": _p90([r.get("duration_s", 0) for r in rs]), + "tools": _med([(r["metrics"] or {}).get("tool_calls", 0) + for r in rs]), + "avg_tools": _avg([(r["metrics"] or {}).get("tool_calls", 0) + for r in rs]), + "p90_tools": _p90([(r["metrics"] or {}).get("tool_calls", 0) + for r in rs]), + "avg_probes": _avg([(r["metrics"] or {}).get( + "probes_to_first_edit", 0) for r in rs]), + "p90_probes": _p90([(r["metrics"] or {}).get( + "probes_to_first_edit", 0) for r in rs]), + "n_subagents": _med([(r["metrics"] or {}).get("n_subagents", 0) + for r in rs]), + "subagent_tok": _med([(r["metrics"] or {}).get("subagent_tok_in", 0) + for r in rs]), + "ungradeable": sum(1 for r in rs + if any(c.get("name") == "adapter" + and c.get("status") != "pass" + for c in r["checks"])), }) cells.sort(key=lambda c: (c["arm"], c["scenario"])) if pattern: @@ -245,6 +298,20 @@ def pareto_front(cells, cost="ktok", quality="pass_rate"): # ---------- proxy / calibration ---------- +def paired_proxy_log(paths): + """The proxy log belonging to these results, if one exists. + + isolate.sh writes runs/probe.jsonl -> runs/probe.proxy.jsonl, so the + pairing is derivable and the viewer should not need to be told. Asking + the user to pass --proxy for a file the harness just wrote next to the + results is the kind of step that guarantees the H4 tab stays empty.""" + for p in paths or []: + cand = p[:-len(".jsonl")] + ".proxy.jsonl" if p.endswith(".jsonl") else "" + if cand and os.path.exists(cand): + return cand + return "" + + def load_proxy(path): rows = [] try: From 525d2b007949e19fa294f0e89681d1ffd469c5eb Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:16:12 -0700 Subject: [PATCH 05/41] subagent tokens are readable live; add an activity feed with tool output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two places I said 'not available' where the data was sitting on disk. SUBAGENT TOTALS. I labelled the live totals ROOT SESSION ONLY and left it there. The child sessions' tokens are in the same sqlite store the session ids came from -- measured on a live trial: 15 child calls, 767,215 input tokens the root-only figure was silently omitting. The live view now sums parent + children, which is the only total §7 permits quoting as a cost, and the detail pane shows the split plus the subagents' share, because E3 is a claim about the child half specifically. TOOL OUTPUT. The NDJSON stream carries a call's input and status but not what it returned, so the view could say 'it ran go test' and never what go test said -- the one thing worth knowing while a run is in flight. The store keeps the output. The detail pane now ends in a live activity feed: newest last, subagent lines tagged, failures in red, with the actual tool output. Caught an agent's own broken grep ('Unmatched ( or \(') on the first read. Both read-only and best-effort against a live writer and a private schema, like everything else in this module. --- src/adherence/live.py | 111 ++++++++++++++++++++++++++++++++---- src/adherence/matrix_tui.py | 73 ++++++++++++++++++------ 2 files changed, 155 insertions(+), 29 deletions(-) diff --git a/src/adherence/live.py b/src/adherence/live.py index 61284db..3e26a27 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -210,19 +210,95 @@ def _subagents(out_dir: Path, root_session: str) -> dict: between versions, and a viewer must never block a run. On any failure this reports nothing rather than a number it cannot stand behind.""" db = out_dir / "xdg" / "data" / "opencode" / "opencode.db" + empty = {"sessions": [], "root": root_session, "readable": False, + "calls": 0, "tok_in": 0, "tok_out": 0} if not db.exists(): - return {"sessions": [], "root": root_session, "readable": False} + return dict(empty) try: con = sqlite3.connect(f"file:{db}?mode=ro", uri=True, timeout=2) con.execute("PRAGMA query_only=ON") rows = list(con.execute( "SELECT id, parent_id, COALESCE(agent,'') FROM session " "WHERE parent_id IS NOT NULL ORDER BY time_created ASC")) + kids = [(sid, agent) for sid, _parent, agent in rows] + calls = tok_in = tok_out = 0 + if kids: + ids = [s for s, _a in kids] + placeholders = ",".join("?" * len(ids)) + q = f"SELECT data FROM part WHERE session_id IN ({placeholders})" + for (data,) in con.execute(q, ids): + try: + d = json.loads(data) + except (json.JSONDecodeError, TypeError): + continue + # Same event the root stream calls step_finish; the store + # spells it with a hyphen. + if d.get("type") == "step-finish": + calls += 1 + tk = d.get("tokens") or {} + tok_in += tk.get("input") or 0 + tok_out += tk.get("output") or 0 con.close() except Exception: - return {"sessions": [], "root": root_session, "readable": False} - kids = [(sid, agent) for sid, parent, agent in rows] - return {"sessions": kids, "root": root_session, "readable": True} + return dict(empty) + return {"sessions": kids, "root": root_session, "readable": True, + "calls": calls, "tok_in": tok_in, "tok_out": tok_out} + + +def activity(out_dir: Path, limit: int = 60) -> list[dict]: + """The trial's recent events, with tool output. + + The NDJSON stream carries a tool call's *input* and status but not + what it returned -- so a viewer built on the stream alone can say "it + ran go test" and never what go test said, which is the one thing worth + knowing while a run is in flight. opencode's store keeps the output, + and the runner puts that store in the out-dir. + + Read-only and best-effort, like everything else here: the writer is + live and the schema is private.""" + db = out_dir / "xdg" / "data" / "opencode" / "opencode.db" + if not db.exists(): + return [] + try: + con = sqlite3.connect(f"file:{db}?mode=ro", uri=True, timeout=2) + con.execute("PRAGMA query_only=ON") + kids = {s for (s,) in con.execute( + "SELECT id FROM session WHERE parent_id IS NOT NULL")} + rows = list(con.execute( + "SELECT session_id, data, time_created FROM part " + "ORDER BY time_created DESC LIMIT ?", (limit * 6,))) + con.close() + except Exception: + return [] + + out = [] + for sid, data, ts in rows: + try: + d = json.loads(data) + except (json.JSONDecodeError, TypeError): + continue + kind = d.get("type") + who = "subagent" if sid in kids else "agent" + if kind == "tool": + st = d.get("state") or {} + inp = st.get("input") or {} + body = st.get("error") or st.get("output") or "" + out.append({ + "ts": ts, "who": who, "kind": "tool", + "name": d.get("tool") or "?", + "target": _target(inp), + "status": st.get("status") or "", + "text": " ".join(str(body).split())[:400], + "failed": bool(st.get("error")), + }) + elif kind == "text": + body = " ".join((d.get("text") or "").split()) + if body: + out.append({"ts": ts, "who": who, "kind": "text", + "name": "", "target": "", "status": "", + "text": body[:400], "failed": False}) + out.sort(key=lambda e: e["ts"]) + return out[-limit:] def _scenario_info(scenario: str, root: Path) -> dict: @@ -354,6 +430,14 @@ def snapshot(tmp: str | None = None, root: Path | None = None, "child_sessions": len(kids["sessions"]), "child_agents": [a for _s, a in kids["sessions"] if a], "children_readable": kids["readable"], + "child_calls": kids["calls"], + "child_tok_in": kids["tok_in"], + "child_tok_out": kids["tok_out"], + # The number E3 is actually a claim about: parent + every + # child. Quoting the root total alone would confirm "subagent + # handoff is 0-cost" by leaving the cost out of the number. + "total_calls": st["calls"] + kids["calls"], + "total_tok_in": st["tok_in"] + kids["tok_in"], "info": _scenario_info(m.get("scenario", ""), root), **st, }) @@ -372,8 +456,9 @@ def summarize(runs) -> dict: "running": sum(1 for r in runs if r["state"] == "running"), "grading": sum(1 for r in runs if r["state"] == "grading"), "stalled": sum(1 for r in runs if r["state"] in ("stalled", "dead")), - "calls": sum(r["calls"] for r in runs), - "tok_in": sum(r["tok_in"] for r in runs), + "calls": sum(r["total_calls"] for r in runs), + "tok_in": sum(r["total_tok_in"] for r in runs), + "child_calls": sum(r["child_calls"] for r in runs), } @@ -450,14 +535,18 @@ def main(): return 0 s = summarize(runs) print(f"{s['running']} running, {s['grading']} grading, " - f"{s['stalled']} stalled — {s['calls']} calls, " - f"{s['tok_in']:,} input tokens so far\n") + f"{s['stalled']} stalled — {s['calls']} calls " + f"({s['child_calls']} in subagents), " + f"{s['tok_in']:,} input tokens so far\n" + f"calls and tokens are parent + children (§7)\n") print(f"{'scenario':<20}{'arm':>4}{'t':>3}{'state':>9}{'calls':>7}" - f"{'tools':>7}{'tok_in':>11}{'elapsed':>9}{'budget':>8} activity") + f"{'tools':>7}{'sub':>5}{'tok_in':>12}{'elapsed':>9}" + f"{'budget':>8} activity") for r in runs: print(f"{r['scenario'][:19]:<20}{r['arm']:>4}{r['trial']:>3}" - f"{r['state']:>9}{r['calls']:>7}{r['tools']:>7}" - f"{r['tok_in']:>11,}{fmt_age(r['elapsed_s']):>9}" + f"{r['state']:>9}{r['total_calls']:>7}{r['tools']:>7}" + f"{r['child_sessions']:>5}" + f"{r['total_tok_in']:>12,}{fmt_age(r['elapsed_s']):>9}" f"{fmt_budget(r['budget']):>8} {r['last_tool'][:50]}") if any(r["unlabelled"] for r in runs): print("\n? arm/trial: run started before the runner wrote its marker; " diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 48cf974..0c73e6a 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -24,6 +24,7 @@ import os import sys import time +from pathlib import Path from adherence import live as lv from adherence import suitedata as sd @@ -287,14 +288,15 @@ def view_live(self, body, max_x): C.A_DIM) self._put(y, 28, f"{r['state']:>9}", C.color_pair(self.STATE_COLOR.get(r["state"], 0))) - self._put(y, 37, f"{r['calls']:>7}", 0) + self._put(y, 37, f"{r['total_calls']:>7}", 0) self._put(y, 44, f"{r['tools']:>6}", C.A_DIM) # Child SESSIONS, from opencode's own store -- the root # stream carries none of a subagent's calls, so counting # session ids in the stream always answered 0. self._put(y, 50, f"{r['child_sessions']:>5}", C.color_pair(3) if r["child_sessions"] else C.A_DIM) - self._put(y, 55, f"{r['tok_in']:>12,}", C.color_pair(2)) + self._put(y, 55, f"{r['total_tok_in']:>12,}", + C.color_pair(2)) self._put(y, 67, f"{lv.fmt_age(r['elapsed_s']):>9}", C.A_DIM) b = r["budget"] self._put(y, 76, f"{lv.fmt_budget(b):>8}", @@ -450,21 +452,26 @@ def wrapped(label, text, limit=6): f" budget {lv.fmt_budget(r['budget'])}" f" idle {lv.fmt_age(r['idle_s'])}", C.color_pair(self.STATE_COLOR.get(r["state"], 0))) - line("cost so far", f"{r['calls']} calls · {r['tok_in']:,} in · " - f"{r['tok_out']:,} out · cache " - f"{r['cache_read']:,}r/{r['cache_write']:,}w" - + (" (ROOT SESSION ONLY)" - if r["child_sessions"] else "")) + # parent + children, which is the only total §7 permits quoting as + # a cost. The split is shown because E3 is a claim about the child + # half specifically. + line("cost so far", f"{r['total_calls']} calls · " + f"{r['total_tok_in']:,} in · " + f"{r['tok_out'] + r['child_tok_out']:,} out · " + f"cache {r['cache_read']:,}r/" + f"{r['cache_write']:,}w") + line(" parent", f"{r['calls']} calls · {r['tok_in']:,} in") if r["child_sessions"]: - # Measured at 3.1x under-report on s13: a subagent runs in its - # own opencode session and the root stream carries none of its - # calls. Saying the total is root-only matters most here, - # because E3 is the claim that this handoff is free. - line("subagents", f"{r['child_sessions']} dispatched session(s): " - f"{', '.join(r['child_agents'][:4]) or '?'}", + line(" subagents", f"{r['child_calls']} calls · " + f"{r['child_tok_in']:,} in " + f"({r['child_sessions']} session(s): " + f"{', '.join(r['child_agents'][:4]) or '?'})", C.color_pair(3)) - line("", "their calls and tokens are NOT in the totals above — " - "separate sessions, counted at grading time", C.A_DIM) + share = (r["child_tok_in"] / r["total_tok_in"] + if r["total_tok_in"] else 0) + line("", f"subagents are {share:.0%} of this trial's input " + f"tokens — read live from opencode's store, since the " + f"root stream carries none of them", C.A_DIM) elif not r["children_readable"] and r["spawns"]: line("subagents", f"{len(r['spawns'])} spawn(s) seen in the " f"stream; opencode's store was not readable", @@ -496,14 +503,44 @@ def wrapped(label, text, limit=6): for sp in r["spawns"][:3]: line("", f"· {sp}", C.A_DIM) y += 1 - line("last tool", r["last_tool"] or "—") - wrapped("last message", r["last_text"] or "—", limit=4) - y += 1 line("sandbox", r["sandbox"] or "—", C.A_DIM) line("out dir", r["out_dir"], C.A_DIM) if r["partial_lines"]: line("note", f"{r['partial_lines']} unparsed line(s) — normal " f"while the stream is being written", C.A_DIM) + y += 1 + + # ---- live activity, with what the tools actually returned ------- + # The NDJSON stream carries a call's input and status but not its + # output, so a feed built on the stream alone can say "it ran go + # test" and never what go test said. This comes from opencode's + # store, which keeps both. + room = max_y - y - 2 + if room > 3: + self._put(y, 1, "activity — newest last", C.A_BOLD) + y += 1 + try: + ev = lv.activity(Path(r["out_dir"]), limit=room) + except Exception: + ev = [] + if not ev: + self._put(y, 3, "no activity recorded yet", C.A_DIM) + for e in ev[-room:]: + if y >= max_y - 1: + break + tag = "sub" if e["who"] == "subagent" else " " + self._put(y, 1, f"{tag:>4}", C.color_pair(3) + if e["who"] == "subagent" else C.A_DIM) + if e["kind"] == "tool": + head = f"{e['name']} {e['target']}"[:44] + self._put(y, 6, f"{head:<44}", + C.color_pair(4) if e["failed"] else 0) + self._put(y, 51, e["text"][:max(0, max_x - 53)], + C.color_pair(4) if e["failed"] else C.A_DIM) + else: + self._put(y, 6, "say", C.A_DIM) + self._put(y, 51, e["text"][:max(0, max_x - 53)], C.A_DIM) + y += 1 def view_cells(self, cs, body, max_x): C = self.curses From c4297c77119f3eb10bc991c7ed6c2512291171c4 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:19:53 -0700 Subject: [PATCH 06/41] activity feed: navigable list, indexed newest-first, expand on demand Inline tool output turned the pane into a wall nobody could scan -- and the interesting line is rarely the last one. The feed is now a list: - newest first, each event one line, no output rendered inline - indexed by absolute position in the run, so the number means how many events the trial has produced and where this one sits among them, rather than how far down the screen you are - [j/k] moves, [space] expands the selected event over the whole pane with its full output, [space] or [q] collapses - a proportional scrollbar, so 'nothing more' is distinguishable from 'top of a long list' -- which a truncated list cannot say - subagent events tagged, failures marked and coloured in both views The live view now nests three levels: run list, run detail with the activity list, one expanded event. Each level consumes its own keys so [q] backs out one step instead of quitting from three levels deep. --- src/adherence/live.py | 15 +++- src/adherence/matrix_tui.py | 172 ++++++++++++++++++++++++++++++------ 2 files changed, 154 insertions(+), 33 deletions(-) diff --git a/src/adherence/live.py b/src/adherence/live.py index 3e26a27..3ee4616 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -245,7 +245,7 @@ def _subagents(out_dir: Path, root_session: str) -> dict: "calls": calls, "tok_in": tok_in, "tok_out": tok_out} -def activity(out_dir: Path, limit: int = 60) -> list[dict]: +def activity(out_dir: Path, limit: int = 400) -> list[dict]: """The trial's recent events, with tool output. The NDJSON stream carries a tool call's *input* and status but not @@ -288,7 +288,7 @@ def activity(out_dir: Path, limit: int = 60) -> list[dict]: "name": d.get("tool") or "?", "target": _target(inp), "status": st.get("status") or "", - "text": " ".join(str(body).split())[:400], + "text": " ".join(str(body).split())[:8000], "failed": bool(st.get("error")), }) elif kind == "text": @@ -296,9 +296,16 @@ def activity(out_dir: Path, limit: int = 60) -> list[dict]: if body: out.append({"ts": ts, "who": who, "kind": "text", "name": "", "target": "", "status": "", - "text": body[:400], "failed": False}) + "text": body[:8000], "failed": False}) out.sort(key=lambda e: e["ts"]) - return out[-limit:] + out = out[-limit:] + # Absolute position in the run, counted from the start. A reader + # scanning a newest-first list needs a number that means something + # other than "how far down the screen you are" -- this one says how + # many events the trial has produced and where this sits among them. + for i, e in enumerate(out, 1): + e["n"] = i + return out def _scenario_info(scenario: str, root: Path) -> dict: diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 0c73e6a..e7af97f 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -66,6 +66,9 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, self.live = [] self.live_cursor = 0 self.live_sel = "" # out_dir the cursor is anchored to + self.act_cursor = 0 # selected activity event, newest-first index + self.act_scroll = 0 + self.act_open = False self.proxy_rows = [] self.stamp = 0.0 self.seen_mtime = 0.0 @@ -120,6 +123,27 @@ def reload_live(self): self.live_sel = self.live[min(self.live_cursor, len(self.live) - 1)]["out_dir"] + def scrollbar(self, y0, rows, x, total, offset): + """A track with a proportional thumb, drawn down column `x`. + + Rendered whenever the list is longer than the window, so it is + possible to tell 'there is nothing more' from 'you are at the top + of a long list' -- which a plain truncated list cannot say.""" + C = self.curses + if rows <= 0: + return + if total <= rows: + for i in range(rows): + self._put(y0 + i, x, "│", C.A_DIM) + return + size = max(1, int(rows * rows / total)) + span = rows - size + pos = int(span * offset / max(1, total - rows)) if span else 0 + for i in range(rows): + inside = pos <= i < pos + size + self._put(y0 + i, x, "█" if inside else "│", + 0 if inside else C.A_DIM) + def _anchor_live(self): """Pin the selection to a run, not to a row number.""" if self.live: @@ -510,37 +534,86 @@ def wrapped(label, text, limit=6): f"while the stream is being written", C.A_DIM) y += 1 - # ---- live activity, with what the tools actually returned ------- - # The NDJSON stream carries a call's input and status but not its - # output, so a feed built on the stream alone can say "it ran go - # test" and never what go test said. This comes from opencode's - # store, which keeps both. + y += 1 + + # ---- activity --------------------------------------------------- + # Newest first, indexed by position in the run, and deliberately + # one line each: showing every tool's output inline turned the pane + # into a wall nobody could scan. [space] opens the selected one. room = max_y - y - 2 - if room > 3: - self._put(y, 1, "activity — newest last", C.A_BOLD) + if room < 4: + return + try: + ev = lv.activity(Path(r["out_dir"])) + except Exception: + ev = [] + ev = ev[::-1] # newest first + self.act_cursor = max(0, min(self.act_cursor, max(0, len(ev) - 1))) + + if not ev: + self._put(y, 1, "activity", C.A_BOLD) + self._put(y + 1, 3, "nothing recorded yet", C.A_DIM) + return + + sel = ev[self.act_cursor] + if self.act_open: + # Expanded: the selected event takes the whole remaining pane. + head = (f"#{sel['n']} {sel['name']} {sel['target']}" + if sel["kind"] == "tool" else f"#{sel['n']} message") + self._put(y, 1, head[:max_x - 2], + C.color_pair(4) if sel["failed"] else C.A_BOLD) + hint = f"{sel['who']} {sel['status']} [space] closes" + self._put(y, max(0, max_x - len(hint) - 3), hint, C.A_DIM) y += 1 - try: - ev = lv.activity(Path(r["out_dir"]), limit=room) - except Exception: - ev = [] - if not ev: - self._put(y, 3, "no activity recorded yet", C.A_DIM) - for e in ev[-room:]: - if y >= max_y - 1: - break - tag = "sub" if e["who"] == "subagent" else " " - self._put(y, 1, f"{tag:>4}", C.color_pair(3) - if e["who"] == "subagent" else C.A_DIM) - if e["kind"] == "tool": - head = f"{e['name']} {e['target']}"[:44] - self._put(y, 6, f"{head:<44}", - C.color_pair(4) if e["failed"] else 0) - self._put(y, 51, e["text"][:max(0, max_x - 53)], - C.color_pair(4) if e["failed"] else C.A_DIM) - else: - self._put(y, 6, "say", C.A_DIM) - self._put(y, 51, e["text"][:max(0, max_x - 53)], C.A_DIM) - y += 1 + body_lines = [] + width = max_x - 6 + for para in sel["text"].split("\n"): + cur = "" + for word in para.split(): + if len(cur) + len(word) + 1 > width: + body_lines.append(cur) + cur = word + else: + cur = f"{cur} {word}".strip() + body_lines.append(cur) + rows = max_y - y - 2 + self.act_scroll = max(0, min(self.act_scroll, + max(0, len(body_lines) - rows))) + window = body_lines[self.act_scroll:self.act_scroll + rows] + for i, ln in enumerate(window): + self._put(y + i, 3, ln[:width], + C.color_pair(4) if sel["failed"] else 0) + self.scrollbar(y, rows, max_x - 2, len(body_lines), + self.act_scroll) + return + + self._put(y, 1, f"activity — newest first, {len(ev)} events", + C.A_BOLD) + hint = "[j/k] move [space] open [q] back" + self._put(y, max(0, max_x - len(hint) - 3), hint, C.A_DIM) + y += 1 + rows = max_y - y - 2 + # Keep the cursor inside the window without yanking the view. + if self.act_cursor < self.act_scroll: + self.act_scroll = self.act_cursor + elif self.act_cursor >= self.act_scroll + rows: + self.act_scroll = self.act_cursor - rows + 1 + self.act_scroll = max(0, min(self.act_scroll, max(0, len(ev) - rows))) + for i, e in enumerate(ev[self.act_scroll:self.act_scroll + rows]): + idx = self.act_scroll + i + base = C.color_pair(5) if idx == self.act_cursor else 0 + self._put(y + i, 1, f"{e['n']:>5}", C.A_DIM) + self._put(y + i, 7, "sub" if e["who"] == "subagent" else " ", + C.color_pair(3) if e["who"] == "subagent" else C.A_DIM) + if e["kind"] == "tool": + label = f"{e['name']} {e['target']}" + mark = "!" if e["failed"] else " " + self._put(y + i, 11, f"{mark}{label}"[:max_x - 15], + C.color_pair(4) if e["failed"] else base) + else: + self._put(y + i, 11, f" say {e['text'][:max_x - 20]}", + C.A_DIM if idx != self.act_cursor else base) + self.scrollbar(y, rows, max_x - 2, len(ev), self.act_scroll) def view_cells(self, cs, body, max_x): C = self.curses @@ -868,6 +941,42 @@ def handle_key(self, key) -> bool: self.detail = False return False return True + # The live view nests: run list -> run detail with an activity + # list -> one expanded event. Each level consumes its own keys so + # [q] backs out one step instead of quitting from three levels deep. + if VIEWS[self.view] == "live" and self.detail: + if self.act_open: + if key in (ord(" "), 10, 13, ord("q"), ord("Q"), 27): + self.act_open = False + self.act_scroll = 0 + elif key in (ord("j"), C.KEY_DOWN): + self.act_scroll += 1 + elif key in (ord("k"), C.KEY_UP): + self.act_scroll = max(0, self.act_scroll - 1) + elif key == C.KEY_NPAGE: + self.act_scroll += 15 + elif key == C.KEY_PPAGE: + self.act_scroll = max(0, self.act_scroll - 15) + return False + if key in (ord("j"), C.KEY_DOWN): + self.act_cursor += 1 + return False + if key in (ord("k"), C.KEY_UP): + self.act_cursor = max(0, self.act_cursor - 1) + return False + if key == C.KEY_NPAGE: + self.act_cursor += 15 + return False + if key == C.KEY_PPAGE: + self.act_cursor = max(0, self.act_cursor - 15) + return False + if key in (ord(" "), 10, 13): + self.act_open, self.act_scroll = True, 0 + return False + if key in (ord("q"), ord("Q"), 27): + self.detail = False + self.act_cursor = self.act_scroll = 0 + return False if key == 9: # tab self.view = (self.view + 1) % len(VIEWS) self.scroll = 0 @@ -889,6 +998,11 @@ def handle_key(self, key) -> bool: self.scroll = 0 elif key == ord(" "): self.detail = not self.detail + if self.detail: + # Open on the newest event; that is what "what is it doing" + # means for a run still in flight. + self.act_cursor = self.act_scroll = 0 + self.act_open = False elif key in (ord("j"), C.KEY_DOWN): if VIEWS[self.view] == "live": self.live_cursor += 1 From 3ec0e38366625fd9b5c8e449f89c61e51a23294d Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:27:17 -0700 Subject: [PATCH 07/41] a delegating trial is not a stalled one; navigate all three tables FALSE STALL, and it was in the measurement path. The idle detector watched stdout.txt, which carries ROOT-session events only. A trial that dispatches a subagent and waits is silent there for as long as the child works. Observed live: parent 0 calls, subagent 5 calls and 206,689 tokens, forty tool calls deep, stream untouched for 3m27s -- reported 'stalled', and with --idle-timeout 300 the runner would have killed it as hung. It would also have done that MORE to the arms that route to subagents, which are the arms under test. A harness that kills the treatment for delegating would have produced a clean, wrong result. Progress is now either the event stream or opencode's session store moving, in both the runner's deadline and the live view's verdict. NAVIGATION. Only the running table had a cursor; graded and the per-arm rollup were read-only. [h/l] now moves between the three sections and [space] opens the right kind of detail for each: a live run, a graded result with every check's evidence, or the cell's median/mean/p90. Q WAS OVERLOADED. It meant 'quit' at the top and 'back' when nested, so from three levels deep there was no way to leave except pressing it repeatedly and no way to know which press would exit. Now [q]/[esc] back out one level, [Q] quits from any depth, and the footer says which one q currently means. Also: expanded events keep their structure. Collapsing whitespace turned every JSON blob and file listing into one unreadable line -- structure is most of what a tool result is. JSON is re-indented, the author's line breaks are kept, wrapped continuations are indented past the original, and the expanded view takes the full pane instead of the eight lines left under the run header. --- src/adherence/live.py | 52 +++++++- src/adherence/matrix_tui.py | 236 +++++++++++++++++++++++++++++------- src/adherence/runner.py | 31 +++-- 3 files changed, 265 insertions(+), 54 deletions(-) diff --git a/src/adherence/live.py b/src/adherence/live.py index 3ee4616..5b2ac8c 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -245,6 +245,41 @@ def _subagents(out_dir: Path, root_session: str) -> dict: "calls": calls, "tok_in": tok_in, "tok_out": tok_out} +MAX_BODY = 20000 + + +def _pretty(body) -> str: + """Readable text for an expanded event. + + Two jobs. Keep the line structure -- a file listing, a diff and a stack + trace are mostly structure, and joining them into one paragraph throws + away the thing being read. And re-indent JSON: a tool's input arrives + as a dict and its output is often a serialized blob, both of which are + a wall on one line and obvious over twelve.""" + if isinstance(body, (dict, list)): + try: + return json.dumps(body, indent=2)[:MAX_BODY] + except (TypeError, ValueError): + return str(body)[:MAX_BODY] + text = str(body or "") + stripped = text.strip() + if stripped[:1] in "[{" and stripped[-1:] in "]}": + try: + return json.dumps(json.loads(stripped), indent=2)[:MAX_BODY] + except (json.JSONDecodeError, ValueError): + pass + return text.replace("\r\n", "\n").replace("\r", "\n")[:MAX_BODY] + + +def preview(e: dict, width: int) -> str: + """One line for the list: the first non-empty line of the body.""" + for ln in (e.get("text") or "").splitlines(): + ln = ln.strip() + if ln: + return ln[:width] + return "" + + def activity(out_dir: Path, limit: int = 400) -> list[dict]: """The trial's recent events, with tool output. @@ -288,15 +323,20 @@ def activity(out_dir: Path, limit: int = 400) -> list[dict]: "name": d.get("tool") or "?", "target": _target(inp), "status": st.get("status") or "", - "text": " ".join(str(body).split())[:8000], + # Structure preserved. Collapsing whitespace made every + # JSON blob and every file listing one unreadable line -- + # and structure is most of what a tool result IS. + "text": _pretty(body), + "input": _pretty(inp) if inp else "", "failed": bool(st.get("error")), }) elif kind == "text": - body = " ".join((d.get("text") or "").split()) + body = (d.get("text") or "").strip() if body: out.append({"ts": ts, "who": who, "kind": "text", "name": "", "target": "", "status": "", - "text": body[:8000], "failed": False}) + "text": _pretty(d.get("text") or ""), + "input": "", "failed": False}) out.sort(key=lambda e: e["ts"]) out = out[-limit:] # Absolute position in the run, counted from the start. A reader @@ -369,9 +409,13 @@ def snapshot(tmp: str | None = None, root: Path | None = None, # transcript.jsonl is written after the harness returns, so its # presence means the agent is done and grading is under way. graded = (p / "transcript.jsonl").is_file() + # Same reason as runner.wait_or_kill: the root stream goes silent + # for the whole time a subagent is working, so a delegating trial + # reads as stalled when it is the busiest thing on the machine. + store = p / "xdg" / "data" / "opencode" / "opencode.db" try: touched = max(os.path.getmtime(x) for x in - (stdout, p) if os.path.exists(x)) + (stdout, store, p) if os.path.exists(x)) except (OSError, ValueError): touched = 0.0 age = now - touched if touched else 1e9 diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index e7af97f..250aba4 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -32,13 +32,15 @@ VIEWS = ("live", "cells", "arms", "cost", "calib") VIEW_HELP = { - "live": "runs in flight, read off their streams — [space] opens detail", + "live": "[h/l] section · [j/k] row · [space] detail — running, graded, " + "per arm×scenario", "cells": "every (arm, scenario) cell — [space] opens detail", "arms": "per-arm rollup; ratios are paired on scenario, geometric", "cost": "pass rate vs tokens — ★ is the Pareto frontier (§5)", "calib": "adapter vs proxy per run; >2% fails the H4 gate (§3.2)", } SORTS = ("tag", "pass", "tok") +SECTIONS = ("running", "graded", "summary") GATE = 0.02 # H4 tolerance @@ -69,6 +71,11 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, self.act_cursor = 0 # selected activity event, newest-first index self.act_scroll = 0 self.act_open = False + # Which of the live view's three tables has the cursor. [space] + # opens the selected row of whichever one is focused. + self.live_section = 0 # 0 running, 1 graded, 2 summary + self.graded_cursor = 0 + self.sum_cursor = 0 self.proxy_rows = [] self.stamp = 0.0 self.seen_mtime = 0.0 @@ -211,12 +218,22 @@ def header(self, max_x): def footer(self, max_y, max_x, total, avail): C = self.curses n_live = sum(1 for r in self.live if r["state"] == "running") + live_v = VIEWS[self.view] == "live" + # Depth decides what q does, so the footer says which one it is. + if self.act_open: + back = ("[q] back to activity", C.A_BOLD) + elif self.detail: + back = ("[q] back to list", C.A_BOLD) + else: + back = ("[q] quit", C.A_DIM) keys = [("[tab] view", C.A_DIM), - (f"[L] live·{n_live}", C.color_pair(2) if n_live else C.A_DIM), - ("[s] sort", C.A_DIM), - ("[/] filter", C.A_DIM), ("[F] clear", C.A_DIM), - ("[p] pick", C.A_DIM), ("[space] detail", C.A_DIM), - ("[r] reload", C.A_DIM), ("[q] quit", C.A_DIM)] + (f"[L] live·{n_live}", C.color_pair(2) if n_live else C.A_DIM)] + if live_v and not self.detail: + keys.append((f"[h/l] section: {SECTIONS[self.live_section]}", + C.color_pair(5))) + keys += [("[s] sort", C.A_DIM), ("[/] filter", C.A_DIM), + ("[p] pick", C.A_DIM), ("[space] detail", C.A_DIM), + ("[r] reload", C.A_DIM), back, ("[Q] quit", C.A_DIM)] if self.editing: keys = [("type a filter · [enter] apply · [esc] cancel", C.A_BOLD)] self.render_footer_items(max_y, keys) @@ -242,7 +259,17 @@ def render(self, max_y, max_x): # results-side idea (arm/scenario cells), and silently hiding a # running job because of it would be the worst possible # behaviour for a monitor. - if self.detail and self.live: + if self.detail and self.live_section == 1 and self.rows: + rows = self.graded_rows() + self.graded_cursor = max(0, min(self.graded_cursor, + len(rows) - 1)) + self.view_result_detail(rows[self.graded_cursor], + max_y, max_x) + elif self.detail and self.live_section == 2 and self.cells: + cs = sd.load_cells(paths=self.files) + self.sum_cursor = max(0, min(self.sum_cursor, len(cs) - 1)) + self.view_detail(cs[self.sum_cursor], max_y, max_x) + elif self.detail and self.live: self.live_cursor = max(0, min(self.live_cursor, len(self.live) - 1)) self.view_live_detail(self.live[self.live_cursor], @@ -465,6 +492,11 @@ def wrapped(label, text, limit=6): y += 1 info = r["info"] + if self.act_open: + # The expanded event gets the whole pane. Keeping the run block + # on screen left about eight lines for the thing being read. + self.view_event(r, max_y, max_x) + return line("scenario", r["scenario"], C.A_BOLD) line("arm / trial", f"{r['arm']} / " f"{r['trial'] if r['trial'] >= 0 else '?'}" @@ -555,38 +587,6 @@ def wrapped(label, text, limit=6): self._put(y + 1, 3, "nothing recorded yet", C.A_DIM) return - sel = ev[self.act_cursor] - if self.act_open: - # Expanded: the selected event takes the whole remaining pane. - head = (f"#{sel['n']} {sel['name']} {sel['target']}" - if sel["kind"] == "tool" else f"#{sel['n']} message") - self._put(y, 1, head[:max_x - 2], - C.color_pair(4) if sel["failed"] else C.A_BOLD) - hint = f"{sel['who']} {sel['status']} [space] closes" - self._put(y, max(0, max_x - len(hint) - 3), hint, C.A_DIM) - y += 1 - body_lines = [] - width = max_x - 6 - for para in sel["text"].split("\n"): - cur = "" - for word in para.split(): - if len(cur) + len(word) + 1 > width: - body_lines.append(cur) - cur = word - else: - cur = f"{cur} {word}".strip() - body_lines.append(cur) - rows = max_y - y - 2 - self.act_scroll = max(0, min(self.act_scroll, - max(0, len(body_lines) - rows))) - window = body_lines[self.act_scroll:self.act_scroll + rows] - for i, ln in enumerate(window): - self._put(y + i, 3, ln[:width], - C.color_pair(4) if sel["failed"] else 0) - self.scrollbar(y, rows, max_x - 2, len(body_lines), - self.act_scroll) - return - self._put(y, 1, f"activity — newest first, {len(ev)} events", C.A_BOLD) hint = "[j/k] move [space] open [q] back" @@ -611,10 +611,123 @@ def wrapped(label, text, limit=6): self._put(y + i, 11, f"{mark}{label}"[:max_x - 15], C.color_pair(4) if e["failed"] else base) else: - self._put(y + i, 11, f" say {e['text'][:max_x - 20]}", + self._put(y + i, 11, + f" say {lv.preview(e, max_x - 20)}", C.A_DIM if idx != self.act_cursor else base) self.scrollbar(y, rows, max_x - 2, len(ev), self.act_scroll) + def graded_rows(self): + """Results newest first, the order the graded table shows.""" + return sorted(self.rows, key=lambda r: r.get("_seq", 0))[::-1] + + def view_result_detail(self, r, max_y, max_x): + """One graded trial: every check with its evidence. + + The graded table can only fit check *names*; the evidence is where + a fail is actually explained -- which test command ran, what it + printed, which files the agent touched against the real diff.""" + C = self.curses + m = r.get("metrics") or {} + self._put(3, 1, f"{r['scenario']} arm {r.get('arm', '-')} " + f"trial {r['trial']}", C.A_BOLD) + ung = any(c.get("name") == "adapter" and c.get("status") != "pass" + for c in r["checks"]) + verdict = ("ungradeable — harness fault, excluded from pass rates" + if ung else "pass" if r["all_pass"] else "fail") + self._put(4, 1, verdict, C.color_pair(3) if ung + else C.color_pair(1) if r["all_pass"] else C.color_pair(4)) + facts = [ + ("duration", sd.fmt_duration(r.get("duration_s", 0))), + ("calls", f"{m.get('calls', 0)} " + f"({m.get('subagent_calls', 0)} in subagents)"), + ("tok_in billed", f"{m.get('tok_in_billed', 0):,}"), + ("tok_in marginal", f"{m.get('tok_in_marginal', 0):,}"), + ("first call input", f"{m.get('first_call_input', 0):,}"), + ("probes to 1st edit", f"{m.get('probes_to_first_edit', 0)}"), + ("first edit", str(m.get("first_edit") or "—")[:max_x - 32]), + ("purpose", r.get("purpose", "(unlabelled)")), + ("schema errors", ", ".join(r.get("schema_errors") or []) or "none"), + ] + y = 6 + for k, v in facts: + self._put(y, 3, f"{k:<22}", C.A_DIM) + self._put(y, 26, v) + y += 1 + y += 1 + self._put(y, 1, "checks", C.A_BOLD) + y += 1 + for c in r["checks"]: + if y >= max_y - 2: + break + col = (C.color_pair(1) if c["status"] == "pass" else + C.color_pair(4) if c["status"] == "fail" else C.A_DIM) + self._put(y, 3, f"{c['status']:<12}", col) + self._put(y, 16, c["name"]) + y += 1 + ev = " ".join(str(c.get("evidence", "")).split()) + width = max_x - 22 + while ev and y < max_y - 2: + self._put(y, 20, ev[:width], C.A_DIM) + ev = ev[width:] + y += 1 + + def view_event(self, r, max_y, max_x): + """One activity event, full pane, structure intact. + + Wraps long lines but keeps the author's own line breaks and their + leading indentation: a continuation is indented past the original + so a wrapped line is never mistaken for a new one. JSON arrives + pre-indented from live._pretty.""" + C = self.curses + try: + ev = lv.activity(Path(r["out_dir"]))[::-1] + except Exception: + ev = [] + if not ev: + self._put(3, 3, "event no longer available", C.A_DIM) + return + self.act_cursor = max(0, min(self.act_cursor, len(ev) - 1)) + e = ev[self.act_cursor] + + head = (f"#{e['n']} {e['name']} {e['target']}" + if e["kind"] == "tool" else f"#{e['n']} message") + self._put(3, 1, head[:max_x - 2], + C.color_pair(4) if e["failed"] else C.A_BOLD) + meta = (f"{r['scenario']} {r['arm']}/{r['trial']} {e['who']}" + f" {e['status']} [j/k] scroll [space] back") + self._put(4, 1, meta[:max_x - 2], C.A_DIM) + + width = max_x - 6 + lines = [] + for raw in e["text"].splitlines(): + indent = len(raw) - len(raw.lstrip()) + pad = " " * min(indent, 12) + body = raw.strip() + if not body: + lines.append("") + continue + cur = pad + for word in body.split(): + if len(cur) + len(word) + 1 > width and cur.strip(): + lines.append(cur) + cur = pad + " " + word # continuation, indented + else: + cur = f"{cur} {word}" if cur.strip() else pad + word + if cur.strip(): + lines.append(cur) + + y0 = 6 + rows = max_y - y0 - 2 + self.act_scroll = max(0, min(self.act_scroll, + max(0, len(lines) - rows))) + for i, ln in enumerate(lines[self.act_scroll:self.act_scroll + rows]): + self._put(y0 + i, 3, ln[:width], + C.color_pair(4) if e["failed"] else 0) + self.scrollbar(y0, rows, max_x - 2, len(lines), self.act_scroll) + pos = f"{self.act_scroll + 1}-{min(self.act_scroll + rows, len(lines))}" \ + f"/{len(lines)} lines" + self._put(max_y - 2, max(0, max_x - len(pos) - 3), pos, C.A_DIM) + def view_cells(self, cs, body, max_x): C = self.curses self._put(3, 1, f"{'arm/scenario':<20}{'trials':>7}{'pass@1':>8}" @@ -936,7 +1049,13 @@ def handle_key(self, key) -> bool: return True return False - if key in (ord("q"), ord("Q"), 27): + # One rule everywhere: [q]/[esc] back out one level, [Q] quits from + # any depth. `q` used to mean both, so from inside a nested view + # there was no way to leave without pressing it repeatedly and no + # way to know whether the next press would exit the program. + if key == ord("Q"): + return True + if key in (ord("q"), 27): if self.detail: self.detail = False return False @@ -944,9 +1063,38 @@ def handle_key(self, key) -> bool: # The live view nests: run list -> run detail with an activity # list -> one expanded event. Each level consumes its own keys so # [q] backs out one step instead of quitting from three levels deep. + if VIEWS[self.view] == "live" and not self.detail: + if key in (ord("l"), C.KEY_RIGHT): + self.live_section = (self.live_section + 1) % 3 + return False + if key in (ord("h"), C.KEY_LEFT): + self.live_section = (self.live_section - 1) % 3 + return False + if key in (ord("j"), C.KEY_DOWN, ord("k"), C.KEY_UP): + step = 1 if key in (ord("j"), C.KEY_DOWN) else -1 + if self.live_section == 0: + self.live_cursor = max(0, self.live_cursor + step) + self._anchor_live() + elif self.live_section == 1: + self.graded_cursor = max(0, self.graded_cursor + step) + else: + self.sum_cursor = max(0, self.sum_cursor + step) + return False + if key in (ord(" "), 10, 13): + # Each table opens its own kind of detail: a live run, a + # graded result, or the cell's distribution. + if self.live_section == 0 and self.live: + self.detail = True + self.act_cursor = self.act_scroll = 0 + self.act_open = False + elif self.live_section == 1 and self.rows or self.live_section == 2 and self.cells: + self.detail = True + return False if VIEWS[self.view] == "live" and self.detail: if self.act_open: - if key in (ord(" "), 10, 13, ord("q"), ord("Q"), 27): + if key == ord("Q"): + return True # Q quits from any depth + if key in (ord(" "), 10, 13, ord("q"), 27): self.act_open = False self.act_scroll = 0 elif key in (ord("j"), C.KEY_DOWN): @@ -973,7 +1121,9 @@ def handle_key(self, key) -> bool: if key in (ord(" "), 10, 13): self.act_open, self.act_scroll = True, 0 return False - if key in (ord("q"), ord("Q"), 27): + if key == ord("Q"): + return True + if key in (ord("q"), 27): self.detail = False self.act_cursor = self.act_scroll = 0 return False diff --git a/src/adherence/runner.py b/src/adherence/runner.py index 8cc5488..9b966af 100755 --- a/src/adherence/runner.py +++ b/src/adherence/runner.py @@ -340,18 +340,35 @@ def wait_or_kill(proc, out_dir: Path, hard_s: int, idle_s: int): adapter's trap a window to convert whatever the stream captured into a transcript, then SIGKILL for anything that ignored it.""" stream = out_dir / "stdout.txt" + # A subagent runs in its OWN opencode session, and the root stream + # carries none of its events -- so a trial that dispatches one and + # waits looks completely idle on stdout.txt for as long as the child + # works. Observed live: parent 0 calls, subagent 5 calls and 206,689 + # tokens, forty tool calls deep, with the stream silent for 3m27s. + # Watching only the stream would kill that run as hung, and it would do + # it *more* to the arms that route to subagents -- which are the arms + # under test. Progress is either file moving. + store = out_dir / "xdg" / "data" / "opencode" / "opencode.db" t0 = time.time() last_size, last_change = -1, t0 + + def _activity_size(): + import contextlib + total = 0 + for f in (stream, store): + # A file that is not there yet contributes nothing; the sum + # only has to move, not be meaningful on its own. + with contextlib.suppress(OSError): + total += f.stat().st_size + return total + while True: try: return proc.communicate(timeout=2.0)[1], None except subprocess.TimeoutExpired: pass now = time.time() - try: - size = stream.stat().st_size if stream.exists() else 0 - except OSError: - size = last_size + size = _activity_size() if size != last_size: last_size, last_change = size, now @@ -359,9 +376,9 @@ def wait_or_kill(proc, out_dir: Path, hard_s: int, idle_s: int): elapsed = now - t0 why = None if idle_s and idle > idle_s and last_size >= 0: - why = (f"adapter idle {int(idle)}s (no stream activity; limit " - f"{idle_s}s) after {int(elapsed)}s and {last_size:,} " - f"bytes of events") + why = (f"adapter idle {int(idle)}s (no event-stream and no " + f"session-store activity; limit {idle_s}s) after " + f"{int(elapsed)}s and {last_size:,} bytes") elif hard_s and elapsed > hard_s: why = (f"adapter hit the hard ceiling of {hard_s}s while still " f"active ({last_size:,} bytes of events, last advanced " From 3cf01c63d1e3188843945714176c3331d4343ff2 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:30:35 -0700 Subject: [PATCH 08/41] activity cursor follows the event, not the row Spacebar into the newest event and read it, and new events arriving at the top pushed the selection backwards one row each -- so the thing being read was replaced mid-sentence by whatever had since become event N. Same class as the run-list bug fixed earlier, in the second live table. Events now carry the store's own primary key and the cursor anchors to it. act_follow keeps the useful default: before you move, the cursor tracks the newest event, which is what 'what is it doing' means for a run in flight. The first [j]/[k] pins it, and expanding pins unconditionally -- reading one event while the list follows the newest is exactly how the thing you opened disappears. A selection that rolls out of the window re-anchors rather than dangling. Covered by a selftest over the anchoring logic directly, since scraping curses redraws out of a pty proved unreliable: two new events arrive, the index slides 2 -> 4, the selected event stays put. 23/23. --- src/adherence/live.py | 10 +++++-- src/adherence/matrix_tui.py | 59 +++++++++++++++++++++++++++++-------- src/adherence/selftest.py | 48 ++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 16 deletions(-) diff --git a/src/adherence/live.py b/src/adherence/live.py index 5b2ac8c..914ff6c 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -300,14 +300,14 @@ def activity(out_dir: Path, limit: int = 400) -> list[dict]: kids = {s for (s,) in con.execute( "SELECT id FROM session WHERE parent_id IS NOT NULL")} rows = list(con.execute( - "SELECT session_id, data, time_created FROM part " + "SELECT id, session_id, data, time_created FROM part " "ORDER BY time_created DESC LIMIT ?", (limit * 6,))) con.close() except Exception: return [] out = [] - for sid, data, ts in rows: + for pid, sid, data, ts in rows: try: d = json.loads(data) except (json.JSONDecodeError, TypeError): @@ -319,6 +319,10 @@ def activity(out_dir: Path, limit: int = 400) -> list[dict]: inp = st.get("input") or {} body = st.get("error") or st.get("output") or "" out.append({ + # The store's own primary key. A viewer anchored to a list + # POSITION follows "whatever is newest", so a new event + # arriving while you read one swaps it out from under you. + "id": pid, "ts": ts, "who": who, "kind": "tool", "name": d.get("tool") or "?", "target": _target(inp), @@ -333,7 +337,7 @@ def activity(out_dir: Path, limit: int = 400) -> list[dict]: elif kind == "text": body = (d.get("text") or "").strip() if body: - out.append({"ts": ts, "who": who, "kind": "text", + out.append({"id": pid, "ts": ts, "who": who, "kind": "text", "name": "", "target": "", "status": "", "text": _pretty(d.get("text") or ""), "input": "", "failed": False}) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 250aba4..3762a63 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -69,7 +69,9 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, self.live_cursor = 0 self.live_sel = "" # out_dir the cursor is anchored to self.act_cursor = 0 # selected activity event, newest-first index + self.act_sel = "" # its stable id -- see _anchor_act self.act_scroll = 0 + self.act_follow = True # stay pinned to newest until you move self.act_open = False # Which of the live view's three tables has the cursor. [space] # opens the selected row of whichever one is focused. @@ -580,7 +582,7 @@ def wrapped(label, text, limit=6): except Exception: ev = [] ev = ev[::-1] # newest first - self.act_cursor = max(0, min(self.act_cursor, max(0, len(ev) - 1))) + self._anchor_act(ev) if not ev: self._put(y, 1, "activity", C.A_BOLD) @@ -616,6 +618,32 @@ def wrapped(label, text, limit=6): C.A_DIM if idx != self.act_cursor else base) self.scrollbar(y, rows, max_x - 2, len(ev), self.act_scroll) + def _anchor_act(self, ev): + """Resolve the activity cursor against a list that grows at the top. + + The cursor is a position, and new events arrive at position 0, so + without this the selection walks backwards one row per event and an + expanded view silently swaps to a different tool call while you are + reading it. The id is the store's primary key, so it survives. + + `act_follow` keeps the default behaviour useful: before you move, + the cursor tracks the newest event, which is what "what is it doing" + means. The first [j]/[k] pins it.""" + if not ev: + self.act_cursor, self.act_sel = 0, "" + return + if self.act_follow: + self.act_cursor, self.act_sel = 0, ev[0]["id"] + return + idx = next((i for i, e in enumerate(ev) + if e["id"] == self.act_sel), None) + if idx is not None: + self.act_cursor = idx + else: + # The selected event rolled out of the window entirely. + self.act_cursor = max(0, min(self.act_cursor, len(ev) - 1)) + self.act_sel = ev[self.act_cursor]["id"] + def graded_rows(self): """Results newest first, the order the graded table shows.""" return sorted(self.rows, key=lambda r: r.get("_seq", 0))[::-1] @@ -686,7 +714,7 @@ def view_event(self, r, max_y, max_x): if not ev: self._put(3, 3, "event no longer available", C.A_DIM) return - self.act_cursor = max(0, min(self.act_cursor, len(ev) - 1)) + self._anchor_act(ev) e = ev[self.act_cursor] head = (f"#{e['n']} {e['name']} {e['target']}" @@ -1086,6 +1114,7 @@ def handle_key(self, key) -> bool: if self.live_section == 0 and self.live: self.detail = True self.act_cursor = self.act_scroll = 0 + self.act_sel, self.act_follow = "", True self.act_open = False elif self.live_section == 1 and self.rows or self.live_section == 2 and self.cells: self.detail = True @@ -1106,20 +1135,23 @@ def handle_key(self, key) -> bool: elif key == C.KEY_PPAGE: self.act_scroll = max(0, self.act_scroll - 15) return False - if key in (ord("j"), C.KEY_DOWN): - self.act_cursor += 1 - return False - if key in (ord("k"), C.KEY_UP): - self.act_cursor = max(0, self.act_cursor - 1) - return False - if key == C.KEY_NPAGE: - self.act_cursor += 15 - return False - if key == C.KEY_PPAGE: - self.act_cursor = max(0, self.act_cursor - 15) + if key in (ord("j"), C.KEY_DOWN, ord("k"), C.KEY_UP, + C.KEY_NPAGE, C.KEY_PPAGE): + step = {ord("j"): 1, C.KEY_DOWN: 1, ord("k"): -1, + C.KEY_UP: -1, C.KEY_NPAGE: 15, + C.KEY_PPAGE: -15}[key] + # Any deliberate move pins the selection; until then it + # follows the newest event. + self.act_follow = False + self.act_cursor = max(0, self.act_cursor + step) + self.act_sel = "" # resolved from the index next draw return False if key in (ord(" "), 10, 13): + # Expanding pins the selection unconditionally. Reading one + # event while the list follows the newest is how the thing + # you opened disappears mid-sentence. self.act_open, self.act_scroll = True, 0 + self.act_follow = False return False if key == ord("Q"): return True @@ -1152,6 +1184,7 @@ def handle_key(self, key) -> bool: # Open on the newest event; that is what "what is it doing" # means for a run still in flight. self.act_cursor = self.act_scroll = 0 + self.act_sel, self.act_follow = "", True self.act_open = False elif key in (ord("j"), C.KEY_DOWN): if VIEWS[self.view] == "live": diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index 11ba854..93d633f 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -823,6 +823,53 @@ def fire(run_id, n): return problems +def check_cursor_anchoring() -> list[str]: + """A cursor over a live list must follow the item, not the row. + + Both live tables grow at the top: runs start and finish, and activity + events arrive newest-first. A positional cursor therefore walks + backwards one row per arrival -- and an expanded view silently swaps to + a different tool call while it is being read. Observed twice, once per + table, before either was anchored to an id.""" + from adherence.matrix_tui import SuiteTui + problems = [] + + class Fake(SuiteTui): + def __init__(self): # no curses + self.act_cursor = 0 + self.act_sel = "" + self.act_follow = True + + def ev(ids): + return [{"id": i} for i in ids] + + t = Fake() + t._anchor_act(ev(["c", "b", "a"])) + if t.act_sel != "c": + problems.append("a fresh cursor must follow the newest event") + t._anchor_act(ev(["d", "c", "b", "a"])) + if t.act_sel != "d": + problems.append("while following, a new event must take the cursor") + + t.act_follow, t.act_cursor, t.act_sel = False, 2, "" + t._anchor_act(ev(["d", "c", "b", "a"])) + if t.act_sel != "b": + problems.append(f"pinning resolved to {t.act_sel!r}, expected 'b'") + t._anchor_act(ev(["f", "e", "d", "c", "b", "a"])) + if t.act_sel != "b" or t.act_cursor != 4: + problems.append( + f"after two new events the selection moved to {t.act_sel!r} at " + f"index {t.act_cursor}; it must stay on 'b' and slide to 4") + + t._anchor_act(ev(["z", "y", "x"])) + if t.act_sel not in {"z", "y", "x"}: + problems.append("a selection that rolled out of the window must " + "re-anchor, not leave the cursor dangling") + if t._anchor_act([]) is None and t.act_sel != "": + problems.append("an empty list must clear the selection") + return problems + + def check_analysis() -> list[str]: """The pre-specified analysis (docs/EVAL.md) must detect a planted effect, stay silent when there is none, and REFUSE when a precondition @@ -935,6 +982,7 @@ def dataset(ratio, floor=9500, passed=True, arms=("a1", "a2", "a3")): ("harness fault is not a model failure", check_harness_exclusion), ("live run reader", check_live), ("process hygiene", check_process_hygiene), + ("live cursor anchoring", check_cursor_anchoring), ("proxy attribution under concurrency", check_proxy_attribution), ("pre-specified analysis", check_analysis), ("stdlib test runner", check_test_runner), From f0427fbeb30adc57a10b830ebae10f293efe5a06 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:35:45 -0700 Subject: [PATCH 09/41] detect tasks that are unpassable by construction; depth-accurate legend POST-MORTEM. The failures are neither model failures nor grader bugs. The PR's own tests are applied to the agent's independent implementation, and for a FEATURE PR those tests reference symbols the PR introduces -- 'undefined: findCopilotBinaryFunc', 'unknown field IssueType in struct literal of type CreateOptions'. The test does not compile, so passing requires the agent to independently choose the maintainers' exact identifier. That measures name-guessing, not the work. Measured on the validation grid, and the separation is perfect: all four compile-class scenarios scored 0%, 5%, 0%, 0% -- none in the [0.25, 0.80] band -- while every in-band and every ceiling scenario was behaviour-class. It is the dominant cause of the floor problem the registration names as its biggest schedule risk, and on cli-cli-13057 the agent had already PASSED diff_coverage with 13/13 pre-edit probes landing in the right directories. It did the work and failed on a name. This is why SWE-bench-style grading works for bug fixes and not for feature PRs: a bug fix's tests call API that already exists. mkpr's fail-before check proved a task goes red at the parent but never asked why. It now classifies: tests that fail to compile because they name something the fix introduces are rejected with the identifiers listed. Free, mechanical, and it runs before any GPU time is spent. Static scan of the existing 34: 19 clean, 9 whose missing surface is <=8 symbols, 6 whose surface is 12-130 symbols and cannot be stated without handing over the design. Also: the TUI legend is now depth-accurate -- each level advertises only the keys it responds to, because a legend listing keys that do nothing is checked once and then trusted. [Q] quits from any depth, [q] backs out one level, [esc] returns to the root list regardless of nesting. --- src/adherence/matrix_tui.py | 64 ++++++++++++++++++++++++++----------- src/adherence/mkpr.py | 54 +++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 18 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 3762a63..d2cb85b 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -32,9 +32,10 @@ VIEWS = ("live", "cells", "arms", "cost", "calib") VIEW_HELP = { - "live": "[h/l] section · [j/k] row · [space] detail — running, graded, " - "per arm×scenario", - "cells": "every (arm, scenario) cell — [space] opens detail", + "live": "running · graded · per arm×scenario [h/l] section " + "[j/k] row [space] detail", + "cells": "every (arm, scenario) cell [j/k] row [space] detail " + "(median/mean/p90)", "arms": "per-arm rollup; ratios are paired on scenario, geometric", "cost": "pass rate vs tokens — ★ is the Pareto frontier (§5)", "calib": "adapter vs proxy per run; >2% fails the H4 gate (§3.2)", @@ -221,21 +222,34 @@ def footer(self, max_y, max_x, total, avail): C = self.curses n_live = sum(1 for r in self.live if r["state"] == "running") live_v = VIEWS[self.view] == "live" - # Depth decides what q does, so the footer says which one it is. + # Depth-accurate: advertise only what the current level responds + # to. A legend listing keys that do nothing here is worse than no + # legend, because it is checked once and then trusted. if self.act_open: - back = ("[q] back to activity", C.A_BOLD) + keys = [("[j/k] scroll", C.A_DIM), ("[space] back to activity", + C.A_BOLD), + ("[esc] root", C.A_DIM), ("[Q] quit", C.A_DIM)] + elif self.detail and live_v and self.live_section == 0: + keys = [("[j/k] event", C.A_DIM), ("[space] expand", C.A_DIM), + ("[q] back to list", C.A_BOLD), ("[esc] root", C.A_DIM), + ("[Q] quit", C.A_DIM)] elif self.detail: - back = ("[q] back to list", C.A_BOLD) + keys = [("[q] back", C.A_BOLD), ("[esc] root", C.A_DIM), + ("[Q] quit", C.A_DIM)] + elif live_v: + keys = [("[tab] view", C.A_DIM), + (f"[h/l] section: {SECTIONS[self.live_section]}", + C.color_pair(5)), + ("[j/k] row", C.A_DIM), ("[space] detail", C.A_DIM), + ("[r] reload", C.A_DIM), ("[q] quit", C.A_DIM)] else: - back = ("[q] quit", C.A_DIM) - keys = [("[tab] view", C.A_DIM), - (f"[L] live·{n_live}", C.color_pair(2) if n_live else C.A_DIM)] - if live_v and not self.detail: - keys.append((f"[h/l] section: {SECTIONS[self.live_section]}", - C.color_pair(5))) - keys += [("[s] sort", C.A_DIM), ("[/] filter", C.A_DIM), - ("[p] pick", C.A_DIM), ("[space] detail", C.A_DIM), - ("[r] reload", C.A_DIM), back, ("[Q] quit", C.A_DIM)] + keys = [("[tab] view", C.A_DIM), + (f"[L] live·{n_live}", + C.color_pair(2) if n_live else C.A_DIM), + ("[s] sort", C.A_DIM), ("[/] filter", C.A_DIM), + ("[F] clear", C.A_DIM), ("[p] pick", C.A_DIM), + ("[space] detail", C.A_DIM), ("[r] reload", C.A_DIM), + ("[q] quit", C.A_DIM)] if self.editing: keys = [("type a filter · [enter] apply · [esc] cancel", C.A_BOLD)] self.render_footer_items(max_y, keys) @@ -1081,9 +1095,19 @@ def handle_key(self, key) -> bool: # any depth. `q` used to mean both, so from inside a nested view # there was no way to leave without pressing it repeatedly and no # way to know whether the next press would exit the program. + # [Q] quit from anywhere · [q] back one level · [esc] back to the + # root list regardless of depth. q alone used to mean both "back" + # and "quit", so from a nested view there was no way to leave + # without pressing it repeatedly and no way to know which press + # would exit the program. if key == ord("Q"): return True - if key in (ord("q"), 27): + if key == 27: + if self.detail or self.act_open: + self.detail = self.act_open = False + return False + return True + if key == ord("q"): if self.detail: self.detail = False return False @@ -1123,7 +1147,11 @@ def handle_key(self, key) -> bool: if self.act_open: if key == ord("Q"): return True # Q quits from any depth - if key in (ord(" "), 10, 13, ord("q"), 27): + if key == 27: # esc: all the way out + self.act_open = self.detail = False + self.act_scroll = 0 + return False + if key in (ord(" "), 10, 13, ord("q")): self.act_open = False self.act_scroll = 0 elif key in (ord("j"), C.KEY_DOWN): @@ -1155,7 +1183,7 @@ def handle_key(self, key) -> bool: return False if key == ord("Q"): return True - if key in (ord("q"), 27): + if key in (ord("q"), 27): # one level == root from here self.detail = False self.act_cursor = self.act_scroll = 0 return False diff --git a/src/adherence/mkpr.py b/src/adherence/mkpr.py index 569c3ad..7f4c407 100644 --- a/src/adherence/mkpr.py +++ b/src/adherence/mkpr.py @@ -172,6 +172,51 @@ def warm_at(d: str, env: dict, eco: dict | None = None) -> None: capture_output=True, text=True, timeout=1800) +# A compiler complaining that the test names something that does not exist. +# Go's wording; the shape generalizes and each ecosystem can add its own. +_MISSING_SYMBOL = ( + re.compile(r"undefined:\s*([A-Za-z_][\w.]*)"), + re.compile(r"unknown field (\w+) in struct literal"), + re.compile(r"has no field or method (\w+)"), + re.compile(r"undeclared name:\s*(\w+)"), +) + + +def names_the_test_requires(output: str) -> list[str]: + """Identifiers the PR's own tests reference that do not exist yet. + + The fail-before check proves a task goes red at the parent commit. It + does not ask *why*, and there are two very different reasons: + + behaviour the tests compile and assert the wrong answer. An agent + that implements the behaviour passes, whatever it names + its internals. This is a real task. + compile the tests do not build, because they reference a symbol + the fix introduces -- `undefined: findCopilotBinaryFunc`, + `unknown field IssueType in struct literal`. Passing + requires independently choosing the maintainers' exact + identifier. That measures name-guessing, not the work, + and no arm can do it reliably. + + Measured on the validation grid: all four compile-class scenarios + scored 0%, 5%, 0%, 0% -- none within the [0.25, 0.80] calibration band + -- while every in-band and every ceiling scenario was behaviour-class. + A perfect separation, and the dominant cause of the floor problem the + registration names as its biggest schedule risk. + + This is why SWE-bench-style grading works for bug fixes and not for + feature PRs: a bug fix's tests call API that already exists, while a + feature PR's tests call API the PR is adding.""" + found, seen = [], set() + for pat in _MISSING_SYMBOL: + for m in pat.finditer(output or ""): + name = m.group(1) + if name not in seen: + seen.add(name) + found.append(name) + return found + + def verify(mirror: Path, parent: str, merge: str, test_files: list[str], pkgs: list[str], env: dict, eco: dict) -> tuple[bool, str]: """Fail-before / pass-after, without a model. @@ -194,6 +239,15 @@ def verify(mirror: Path, parent: str, merge: str, test_files: list[str], capture_output=True, text=True, timeout=900) if red.returncode == 0: return False, "tests already pass at the parent commit" + invented = names_the_test_requires(red.stdout + red.stderr) + if invented: + return False, ( + f"unpassable by construction: the PR's tests do not " + f"compile at the parent because they name " + f"{', '.join(invented[:4])}, which the fix introduces. " + f"An agent can only pass by inventing that exact " + f"identifier, so this measures name-guessing, not the " + f"work") # The full post-fix state. Checking out `merge -- .` instead # would restore files the merge has but NOT remove files it # deleted, so a PR that deletes or renames a source file leaves From 7dd74e9adaa76d9a90177004291ee2e2600ce361 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:43:16 -0700 Subject: [PATCH 10/41] grade feature PRs at the CLI boundary instead of pre-loading the shape The question was whether the grader can adapt to the agent's naming without handing over the solution. It can, and the answer is to stop grading at the Go boundary. Declaring the API surface in the prompt was the obvious repair and it is worse than the disease: a symbol list IS routing information (CreateOptions.IssueType names its subsystem), so it hands every arm a piece of exactly what the treatment is supposed to supply. It biases the primary outcome toward the null in the treatment's own channel, which makes a null result uninterpretable -- 'the pattern did not help' and 'we gave the control the answer' become the same measurement. Grade what the PR publicly promises instead. is a user-facing contract: it is in the PR body the agent already receives, and it is identical whatever the agent names its internals. The oracle is the merge commit's OWN binary, so the expectations stay the maintainers' and not the experimenter's: reference = build(merge commit) candidate = build(the agent's tree) compare flag-for-flag at the command line Nothing is added to the prompt. The grader simply stops asking a question it never gave the agent the means to answer. Verified against a real agent tree from the live probe -- one that scored pr.task_pass=fail purely for naming a struct field differently: [pass] cli.builds [pass] cli.surface: advertises all 17 flag(s) the PR's own binary does [pass] cli.extra_surface Offline and deterministic; --help and argument validation need no network, which is what makes it runnable in the sandbox. mkpr now MARKS such tasks rather than rejecting them, records which grader judged each one and which identifiers forced the choice, and the command path is derived from the PR's own file paths so the battery is mechanical rather than authored. Recovers the 15 compile-class tasks: 34 usable, not 19. Also: left/right arrows navigate the nested views -- right descends, left backs out one level. At the root they stay bound to section switching, since binding right to both would make sections unreachable. --- src/adherence/cligrade.py | 167 +++++++++++++++++++++++++++++++++++ src/adherence/matrix_tui.py | 15 +++- src/adherence/mkpr.py | 29 ++++-- src/adherence/mkscenarios.py | 8 ++ src/adherence/prgrade.py | 26 ++++++ 5 files changed, 235 insertions(+), 10 deletions(-) create mode 100644 src/adherence/cligrade.py diff --git a/src/adherence/cligrade.py b/src/adherence/cligrade.py new file mode 100644 index 0000000..45032c1 --- /dev/null +++ b/src/adherence/cligrade.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +"""Grade a feature PR at the command-line boundary, not the Go boundary. + +The problem this exists for: applying a PR's own unit tests to an agent's +independent implementation requires the agent to have chosen the +maintainers' exact internal identifiers. Measured on the validation grid, +every task whose tests referenced new symbols scored 0-5% -- while the +agent had already passed `diff_coverage` with 13/13 pre-edit probes in the +right directories. It did the work and failed on a name. + +The obvious repair -- tell the agent the required API surface -- is worse +than the disease. A symbol list *is* routing information (`CreateOptions. +IssueType` names the subsystem), so it would hand every arm a piece of +exactly what the treatment is supposed to supply, and bias the primary +outcome toward the null in the treatment's own channel. A null result +would then be uninterpretable. + +So grade what the PR *publicly promises* instead. `gh issue create --type` +is a user-facing contract: it appears in the PR body the agent already +receives, and it is identical whatever the agent names its internals. +Nothing here is added to the prompt; the grader simply stops asking a +question it never gave the agent the information to answer. + +The oracle is the merge commit's own binary, so the expectations are still +the maintainers' and not the experimenter's: + + reference = build(merge commit) what the PR actually shipped + candidate = build(agent's tree) what the agent produced + compare observable CLI behaviour + +Offline and deterministic -- `--help` and argument validation need no +network, which is what makes this runnable inside the sandbox. + +Stdlib only. +""" +from __future__ import annotations + +import re +import subprocess +from pathlib import Path + +from adherence.gradelib import Check, bad, ok, skip + +BUILD_TIMEOUT = 600 +RUN_TIMEOUT = 60 + +# A flag line in Go/cobra help output: two spaces, optional -x, then --name. +_FLAG = re.compile(r"^\s+(?:-\w,\s+)?--([a-z0-9][\w-]*)") + + +def command_path(code_files: list[str]) -> list[str]: + """The CLI subcommand a PR touches, from its file paths. + + `pkg/cmd/issue/create/create.go` -> ["issue", "create"]. Mechanical, so + the battery is derived rather than authored -- an experimenter choosing + which commands to test is an experimenter choosing the result.""" + best: list[str] = [] + for f in code_files or []: + parts = Path(f).parts + if len(parts) < 3 or parts[0] != "pkg" or parts[1] != "cmd": + continue + words = [p for p in parts[2:-1] if p and not p.endswith(".go")] + if len(words) > len(best): + best = words + return best + + +def build(tree: Path, out: Path, env=None) -> tuple[bool, str]: + try: + r = subprocess.run(["go", "build", "-o", str(out), "./cmd/gh"], + cwd=tree, capture_output=True, text=True, + timeout=BUILD_TIMEOUT, env=env) + except (OSError, subprocess.SubprocessError) as e: + return False, str(e)[-400:] + return r.returncode == 0, (r.stderr or r.stdout)[-800:] + + +def flags(binary: Path, argv: list[str], env=None) -> set[str]: + """Flag names a command advertises. Empty on any failure -- the caller + distinguishes 'no flags' from 'could not ask'.""" + try: + r = subprocess.run([str(binary), *argv, "--help"], + capture_output=True, text=True, + timeout=RUN_TIMEOUT, env=env) + except (OSError, subprocess.SubprocessError): + return set() + return {m.group(1) for line in (r.stdout + r.stderr).splitlines() + if (m := _FLAG.match(line))} + + +def grade_cli(sandbox: Path, mirror: Path, merge: str, + code_files: list[str], env=None) -> list[Check]: + """Differential CLI grading against the PR's own merge commit. + + Returns `ungradeable` rather than `fail` for anything that is the + harness's problem -- a toolchain that will not build the reference, a + PR that touches no command -- because a grader that cannot run must + never be scored as a model that got it wrong.""" + checks: list[Check] = [] + argv = command_path(code_files) + if not argv: + return [skip("cli.surface", + "PR touches no pkg/cmd/... command, so it has no " + "command-line surface to compare")] + + # --- the candidate: whatever the agent produced -------------------- + cand = sandbox / ".adh-gh-candidate" + built, err = build(sandbox, cand, env) + if not built: + # This IS a model result: the agent left the tree not compiling. + return [bad("cli.builds", + f"the agent's tree does not build: {err[-300:]}")] + checks.append(ok("cli.builds", "the agent's tree compiles")) + + # --- the oracle: the merge commit, built the same way --------------- + import tempfile + with tempfile.TemporaryDirectory(prefix="adh-ref-") as d: + ref_tree = Path(d) + try: + subprocess.run(["git", "clone", "--local", "--shared", "--quiet", + "--no-checkout", str(mirror), str(ref_tree)], + check=True, capture_output=True, timeout=300) + subprocess.run(["git", "checkout", "--detach", "--quiet", merge], + cwd=ref_tree, check=True, capture_output=True, + timeout=300) + except (OSError, subprocess.SubprocessError) as e: + checks.append(skip("cli.surface", + f"could not materialize the reference: {e}")) + return checks + ref = ref_tree / "gh-reference" + ok_ref, ref_err = build(ref_tree, ref, env) + if not ok_ref: + checks.append(skip("cli.surface", + f"the reference commit does not build here, " + f"so there is nothing to compare against: " + f"{ref_err[-200:]}")) + return checks + + want = flags(ref, argv, env) + got = flags(cand, argv, env) + if not want: + checks.append(skip("cli.surface", + f"reference `gh {' '.join(argv)} --help` " + f"advertised no flags; nothing to compare")) + return checks + + missing = sorted(want - got) + checks.append( + ok("cli.surface", + f"`gh {' '.join(argv)}` advertises all {len(want)} flag(s) " + f"the PR's own binary does") + if not missing else + bad("cli.surface", + f"missing {len(missing)} flag(s) the PR shipped: " + f"{missing[:8]}. Compared against the merge commit's own " + f"binary, so these are the maintainers' names, not the " + f"experimenter's")) + + # Flags the agent added beyond the PR: reported, never failed. A + # different valid implementation may expose more. + extra = sorted(got - want) + checks.append(skip("cli.extra_surface", + f"also advertises {len(extra)} flag(s) the PR " + f"does not: {extra[:8]}") + if extra else + ok("cli.extra_surface", "no flags beyond the PR's")) + return checks diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index d2cb85b..6d0d67a 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -1134,7 +1134,10 @@ def handle_key(self, key) -> bool: return False if key in (ord(" "), 10, 13): # Each table opens its own kind of detail: a live run, a - # graded result, or the cell's distribution. + # graded result, or the cell's distribution. Left/right at + # this level move between sections, so descending is + # [space]/[enter] only -- binding right to both would make + # section-switching unreachable. if self.live_section == 0 and self.live: self.detail = True self.act_cursor = self.act_scroll = 0 @@ -1151,6 +1154,10 @@ def handle_key(self, key) -> bool: self.act_open = self.detail = False self.act_scroll = 0 return False + if key == C.KEY_LEFT: # left: up one level + self.act_open = False + self.act_scroll = 0 + return False if key in (ord(" "), 10, 13, ord("q")): self.act_open = False self.act_scroll = 0 @@ -1174,13 +1181,17 @@ def handle_key(self, key) -> bool: self.act_cursor = max(0, self.act_cursor + step) self.act_sel = "" # resolved from the index next draw return False - if key in (ord(" "), 10, 13): + if key in (ord(" "), 10, 13, C.KEY_RIGHT): # Expanding pins the selection unconditionally. Reading one # event while the list follows the newest is how the thing # you opened disappears mid-sentence. self.act_open, self.act_scroll = True, 0 self.act_follow = False return False + if key == C.KEY_LEFT: # left: back to the run list + self.detail = False + self.act_cursor = self.act_scroll = 0 + return False if key == ord("Q"): return True if key in (ord("q"), 27): # one level == root from here diff --git a/src/adherence/mkpr.py b/src/adherence/mkpr.py index 7f4c407..c0b1278 100644 --- a/src/adherence/mkpr.py +++ b/src/adherence/mkpr.py @@ -241,13 +241,17 @@ def verify(mirror: Path, parent: str, merge: str, test_files: list[str], return False, "tests already pass at the parent commit" invented = names_the_test_requires(red.stdout + red.stderr) if invented: - return False, ( - f"unpassable by construction: the PR's tests do not " - f"compile at the parent because they name " - f"{', '.join(invented[:4])}, which the fix introduces. " - f"An agent can only pass by inventing that exact " - f"identifier, so this measures name-guessing, not the " - f"work") + # Not a broken task -- a task the UNIT grader cannot judge + # fairly. It is handed to the CLI grader instead, which + # compares against the merge commit's own binary at the + # command line, where the contract is the one the PR body + # already gave the agent. Recorded so the choice is on the + # record rather than in a heuristic nobody can see. + return True, ("cli-graded: the PR's tests name " + + ", ".join(invented[:4]) + + ", which the fix introduces, so they cannot " + "compile against any implementation that " + "chose different identifiers") # The full post-fix state. Checking out `merge -- .` instead # would restore files the merge has but NOT remove files it # deleted, so a PR that deletes or renames a source file leaves @@ -382,14 +386,23 @@ def drop(n, why): drop(n, why) continue + # Which grader can judge this task fairly. `verify` says so: a + # task whose tests do not compile at the parent because they name + # what the fix introduces cannot be judged by those tests against + # an agent that chose different identifiers. + cli_graded = why.startswith("cli-graded:") keep({ "pr": n, "ecosystem": kind, "title": pr["title"], "base_commit": pr["base"]["sha"], "merge_commit": pr["merge_commit_sha"], "prompt": prompt, "test_files": tests, "test_cmd": eco["test_cmd"](pkgs), "code_files": code, "additions": pr.get("additions", 0), "verified": why, + "grader": "cli" if cli_graded else "unit", + "invented_symbols": (names_the_test_requires(why) + if cli_graded else []), }) - print(f" kept #{n} (+{pr.get('additions',0)}) {pr['title'][:56]}", + print(f" kept #{n} (+{pr.get('additions',0)}) " + f"[{'cli' if cli_graded else 'unit'}] {pr['title'][:52]}", file=sys.stderr) gt_f.close() diff --git a/src/adherence/mkscenarios.py b/src/adherence/mkscenarios.py index ec958de..b57590d 100644 --- a/src/adherence/mkscenarios.py +++ b/src/adherence/mkscenarios.py @@ -88,6 +88,14 @@ def main(): "pr": t["pr"], "merge_commit": t["merge_commit"], "test_files": t["test_files"], "test_cmd": t["test_cmd"], "code_files": t["code_files"], + # The mirror, so a CLI-graded task can build the PR's own + # binary as its oracle. + "repo": args.mirror, + # "unit" when the PR's tests compile against any correct + # implementation; "cli" when they name symbols the PR + # introduces, which no agent can be expected to guess. + "grader": t.get("grader", "unit"), + "invented_symbols": t.get("invented_symbols", []), }, indent=2) + "\n") ids.append(sid) diff --git a/src/adherence/prgrade.py b/src/adherence/prgrade.py index 18a61fd..99ef668 100644 --- a/src/adherence/prgrade.py +++ b/src/adherence/prgrade.py @@ -97,6 +97,32 @@ def grade(sandbox, transcript, final) -> list[Check]: "no probes recorded before the first edit; the " "adapter may not emit probe events")) + # --- CLI-boundary grading, when the unit tests cannot be fair ------ + # A feature PR's tests reference symbols the PR introduces, so they do + # not compile against an agent that named its internals differently -- + # measured: 0-5% on every such task, on runs that had already passed + # diff_coverage. mkpr marks those tasks, and they are graded against + # what the PR publicly promises instead: the merge commit's own binary + # is the oracle, and the comparison is flag-for-flag at the command + # line. Nothing is added to the prompt; the grader stops asking a + # question the agent was never given the means to answer. + if task.get("grader") == "cli": + from adherence.cligrade import grade_cli + repo = task.get("repo") or "" + merge = task.get("merge_commit", "") + if not repo or not merge: + checks.append(skip("cli.surface", + "task marked cli-graded but carries no repo " + "mirror or merge commit")) + return checks + mirror = Path(repo) + if not mirror.is_absolute(): + from adherence import REPO_ROOT + mirror = REPO_ROOT / mirror + checks += grade_cli(sandbox, mirror, merge, + task.get("code_files") or []) + return checks + # --- the maintainers' own tests decide it ------------------------- test_files = task.get("test_files") or [] merge = task.get("merge_commit", "") From 1d0f1dd581018b34e9a3cce8350cf2e2afdf9850 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 11:48:06 -0700 Subject: [PATCH 11/41] fix a flaky selftest and the invisible cursor in two live tables CI was red on three commits, always Validate (3.10), always 'BAD proxy attribution under concurrency', never on 3.14. The message said the trials had cross-attributed, which would have been a real defect in the measurement path -- the proxy is authoritative for H4. It had not. Stressed at 8 concurrent trials x 20 calls: 160 requests, 160 records, zero drops, zero mismatches. The failure was 'got 5 of 6': one request raised inside a sender thread, which silently ended that thread's loop, and the test compared against a hardcoded count. A transient client-side error on 3.10's http.client was being reported as a cross-attribution bug. The test now counts what actually got through and asserts the invariant it means: every call the proxy handled is attributed to the trial that made it. A networking hiccup reduces the sample instead of inventing a defect. Separately: the graded and per-arm tables could be focused with [h/l] and their cursors moved, but nothing rendered -- no highlight, no indication of which section had focus, so both looked inert. Each section header now carries a focus marker and each table highlights its own selected row only when it holds focus. --- src/adherence/matrix_tui.py | 34 +++++++++++++++++++++++++-------- src/adherence/selftest.py | 38 ++++++++++++++++++++++++++++--------- 2 files changed, 55 insertions(+), 17 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 6d0d67a..78c0ba4 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -339,6 +339,10 @@ def view_live(self, body, max_x): # ---- running --------------------------------------------------- if runs: + self._put(y, 1, "running" + (" ◀" if self.live_section == 0 + else ""), + C.color_pair(5) if self.live_section == 0 else C.A_DIM) + y += 1 self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'state':>9}" f"{'calls':>7}{'tools':>6}{'sub':>5}{'tok_in':>12}" f"{'elapsed':>9}{'budget':>8} doing", C.A_DIM) @@ -346,7 +350,9 @@ def view_live(self, body, max_x): self.live_cursor = max(0, min(self.live_cursor, len(runs) - 1)) shown = runs[:max(1, min(len(runs), body - 12))] for i, r in enumerate(shown): - base = C.color_pair(5) if i == self.live_cursor else 0 + base = (C.color_pair(5) + if i == self.live_cursor and self.live_section == 0 + else 0) self._put(y, 1, f"{r['scenario'][:19]:<20}", base) self._put(y, 21, f"{r['arm']:>4}", C.A_DIM if r["unlabelled"] else 0) @@ -384,15 +390,22 @@ def view_live(self, body, max_x): # not by what landed an hour ago. recent = sorted(self.rows, key=lambda r: r.get("_seq", 0))[-6:][::-1] if recent: - self._put(y, 1, "graded — most recent first", C.A_BOLD) + self._put(y, 1, "graded — most recent first" + + (" ◀" if self.live_section == 1 else ""), + C.color_pair(5) if self.live_section == 1 else C.A_BOLD) y += 1 self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'verdict':>9}" f"{'calls':>7}{'tok_in':>12}{'dur':>9} failing", C.A_DIM) y += 1 - for r in recent: + self.graded_cursor = max(0, min(self.graded_cursor, + len(recent) - 1)) + for gi, r in enumerate(recent): if y >= 3 + body - 6: break + hl = (C.color_pair(5) + if gi == self.graded_cursor and self.live_section == 1 + else 0) m = r.get("metrics") or {} ung = [c for c in r["checks"] if c.get("name") == "adapter" @@ -403,7 +416,7 @@ def view_live(self, body, max_x): C.color_pair(1) if r["all_pass"] else C.color_pair(4)) fails = ", ".join(c["name"] for c in r["checks"] if c["status"] == "fail") or "—" - self._put(y, 1, f"{r['scenario'][:19]:<20}") + self._put(y, 1, f"{r['scenario'][:19]:<20}", hl) self._put(y, 21, f"{r.get('arm', '-'):>4}", C.A_DIM) self._put(y, 25, f"{r['trial']:>3}", C.A_DIM) self._put(y, 28, f"{verdict:>9}", col) @@ -418,8 +431,9 @@ def view_live(self, body, max_x): # ---- per (arm, scenario) rollup -------------------------------- cells = sd.load_cells(paths=self.files) if cells: - self._put(y, 1, "per arm × scenario — pace and cost so far", - C.A_BOLD) + self._put(y, 1, "per arm × scenario — pace and cost so far" + + (" ◀" if self.live_section == 2 else ""), + C.color_pair(5) if self.live_section == 2 else C.A_BOLD) y += 1 self._put(y, 1, f"{'arm/scenario':<24}{'done':>6}{'ung':>5}" f"{'pass':>6}{'med tok':>11}{'p90 tok':>11}" @@ -431,12 +445,16 @@ def view_live(self, body, max_x): per_cell = 0 if self.expect and cells: per_cell = max(1, round(self.expect / max(1, len(cells)))) - for c in cells: + self.sum_cursor = max(0, min(self.sum_cursor, len(cells) - 1)) + for ci, c in enumerate(cells): if y >= 3 + body - 1: break + hl = (C.color_pair(5) + if ci == self.sum_cursor and self.live_section == 2 + else 0) left = max(0, per_cell - c["trials"]) if per_cell else 0 eta = left * c["dur_s"] - self._put(y, 1, f"{c['tag'][:23]:<24}") + self._put(y, 1, f"{c['tag'][:23]:<24}", hl) self._put(y, 25, f"{c['trials']:>6}", C.A_DIM) self._put(y, 31, f"{c['ungradeable']:>5}", C.color_pair(3) if c["ungradeable"] else C.A_DIM) diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index 93d633f..b1d81d8 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -10,6 +10,7 @@ """ from __future__ import annotations +import collections import random import shutil import subprocess @@ -779,6 +780,14 @@ def do_POST(self): _th.Thread(target=px.serve_forever, daemon=True).start() port = px.server_address[1] + # Count what actually got through. The invariant under test is "every + # call the proxy handled is attributed to the trial that made it", not + # "exactly N requests succeeded" -- and a transient client-side error + # (seen on 3.10's http.client under keep-alive) would otherwise be + # reported as cross-attribution, which is a wrong diagnosis for a + # networking hiccup. + sent = collections.Counter() + def fire(run_id, n): for _ in range(n): req = _ur.Request( @@ -788,7 +797,11 @@ def fire(run_id, n): # class these as title-generation overhead "tools": [{"type": "function"}]}).encode(), headers={"Content-Type": "application/json"}, method="POST") - _ur.urlopen(req, timeout=30).read() + try: + _ur.urlopen(req, timeout=30).read() + except Exception: + continue # counted by omission, not fatal + sent[run_id] += 1 try: a, b = "s01|a1|0|aaa", "s02|a3|2|bbb" @@ -801,17 +814,24 @@ def fire(run_id, n): rows = [_json.loads(x) for x in log.read_text().splitlines() if x.strip()] groups = _M.split_by_mark(rows) - for key, want in (("s01|a1|0", 4), ("s02|a3|2", 6)): + if sum(sent.values()) < 6: + problems.append(f"only {sum(sent.values())} of 10 requests " + f"completed; the proxy is not serving") + for rid, want in sent.items(): + key = _M.trial_key(rid) got = len(groups.get(key, [])) if got != want: problems.append( - f"{key} got {got} of {want} calls; concurrent trials " - f"cross-attributed, which is what the single global " - f"mark did and the whole point of the run id") - tot = _M.proxy_totals(groups.get("s01|a1|0", [])) - if tot["tok_in_billed"] != 400: - problems.append(f"tok_in_billed {tot['tok_in_billed']}, expected " - f"400 -- usage is not surviving attribution") + f"{key}: {want} call(s) succeeded but {got} were " + f"attributed to it. Concurrent trials cross-attributed, " + f"which is what the single global mark did and the " + f"whole point of the run id") + first = _M.trial_key("s01|a1|0|aaa") + tot = _M.proxy_totals(groups.get(first, [])) + if tot["tok_in_billed"] != 100 * sent.get("s01|a1|0|aaa", 0): + problems.append(f"tok_in_billed {tot['tok_in_billed']} does not " + f"match {sent.get('s01|a1|0|aaa', 0)} calls x 100 " + f"-- usage is not surviving attribution") if seen_paths != {"/v1/chat/completions"}: problems.append(f"upstream saw {seen_paths}; the routing prefix " f"must be stripped, or the proxy is altering " From 2d5e04fda0b3ed1a95642e0dc4bf7927a540cf3e Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:02:35 -0700 Subject: [PATCH 12/41] Amendment 2: CLI-boundary grading, wired end to end GRADER. All 34 tasks classified by compiler, not heuristic: adherence.classify checks each PR's tests out onto its parent tree and builds them. A build error naming an undefined identifier means the test cannot compile against any implementation that chose different names. Result: 16 unit-graded, 18 cli-graded. The declaration-scan heuristic I tried first was rejected for false negatives -- it missed 13675 (field on an existing struct) and 13624 -- and the compiler catches both. Calibrated against the validation grid: it flags exactly the scenarios that scored 0% (13393, 13675, 13967) and leaves 13624 (5%) and 13403 (71%) on the unit grader, which are demonstrably achievable. prgrade now dispatches on the task record. For a cli-graded task diff_coverage becomes advisory rather than failing: cli.surface already proves the shipped behaviour flag-for-flag against the PR's own binary, and demanding the same file set would smuggle back the match-the- maintainers'-structure requirement this amendment exists to remove. Verified end to end -- three CLI passes give all_pass=True, which is what the table, the TUI and the report show. Locked in by a selftest. AMENDMENT 2 in docs/EVAL.md: what the grid measured, the repair that was rejected and why (a symbol list is routing information and would bias the primary outcome toward the null inside the treatment's own channel), what is registered instead, and the reporting rule -- unit-graded tasks are the primary evidence, cli-graded a separate tier, never pooled. TUI, from watching it run: - graded and summary were silently truncated (6 rows of 25, no scroll, no indication). Both scroll now with their own cursor and print the range. - allocation is terminal-size aware and proportional to what each section holds: 24 lines shows 5 graded rows, 34 shows 14, 50 shows all 25. - the results cursor was unbounded, so holding [j] walked it off the end of the list, the highlight vanished, and [space] opened a detail pane for a row never on screen. - [space] in a graded or summary detail opened a phantom activity level with nothing in it that took two backs to leave. - sections reordered running -> summary -> graded, [s] sorts the focused one, [S] flips direction, both shown in the header. - j/k crosses section boundaries; h/l still jumps whole sections. Also widened the process-hygiene timing: it failed twice under CPU contention from a concurrent run, reporting a defect that was really load. --- docs/EVAL.md | 90 +++++++ scenarios-pr/cli-cli/ground-truth.jsonl | 68 +++--- src/adherence/classify.py | 122 ++++++++++ src/adherence/matrix_tui.py | 307 ++++++++++++++++++------ src/adherence/prgrade.py | 30 ++- src/adherence/selftest.py | 61 ++++- 6 files changed, 558 insertions(+), 120 deletions(-) create mode 100644 src/adherence/classify.py diff --git a/docs/EVAL.md b/docs/EVAL.md index b9de238..dadb80b 100644 --- a/docs/EVAL.md +++ b/docs/EVAL.md @@ -546,6 +546,96 @@ dropped with the reason logged. This was underspecified in v1. Pinning it now, before data, is the point of saying so here rather than deciding it when the first results look wrong. +## Amendment 2 — grading a feature PR without handing over its shape + +Recorded 2026-08-04, against the frozen v1 tag, **after the validation grid +and before any experiment data**. It changes how a subset of tasks is graded. +No registered claim, threshold, arm, or analysis procedure changes. + +### What the validation grid found + +Amendment 1 registered SWE-bench-style grading: the agent works from the PR's +parent, never sees the tests, and afterwards the harness applies the PR's own +`_test.go` files and runs the affected packages. + +That protocol is sound for a **bug fix**, whose tests call API that already +exists. It is not sound for a **feature PR**, whose tests call API the PR is +adding. Measured on the 210-run validation grid: + +| failure mode | scenarios | pass rates | in the [0.25, 0.80] band | +|---|---|---|---| +| tests name a symbol the fix introduces | 4 | 0%, 5%, 0%, 0% | **0 / 4** | +| tests compile; assertions disagree | 6 | 5%, 19%, 71%, 76%, 90%, 95% | 2 / 6 | + +A perfect separation, and the dominant cause of the floor risk this document +names as its biggest schedule risk. On `cli-cli-13057` the failure was +`unknown field IssueType in struct literal of type CreateOptions` — a +**compile error in the test file** — on a trial that had already passed +`diff_coverage` with 13/13 pre-edit probes inside the real diff's +directories. The agent located the work, implemented it, and failed because +it did not independently choose the maintainers' internal field name. + +That is not model capability and it is not a grader bug. It is a protocol +that asks a question the agent was never given the means to answer. + +### The repair that was rejected, and why + +The obvious fix is to state the required API surface in the prompt. **It was +rejected**, and the reason is recorded here because it is the more tempting +option: + +A symbol list *is* routing information. `CreateOptions.IssueType` names its +subsystem; `skillSearchFunc` names its module. Supplying it hands every arm a +piece of exactly what the treatment under test is supposed to supply — inside +the treatment's own channel. It would bias the primary outcome toward the +null and make a null result uninterpretable, because "the pattern did not +help" and "the control was given the answer" would be the same measurement. + +Grading at the public interface was preferred but has **no supply here**: of +34 tasks, 30 are unit-test-only and none are acceptance-test-only. + +### What is registered instead + +Tasks whose tests cannot compile against a differently-named implementation +are graded at the **command-line boundary**, against the PR's own binary: + + reference = build(merge commit) what the PR actually shipped + candidate = build(the agent's tree) what the agent produced + compare flag-for-flag at the CLI + +`gh issue create --type` is a user-facing contract. It already appears in the +PR body the agent receives, so **nothing is added to the prompt** — the +grader stops demanding an identifier it never disclosed. The oracle is the +merge commit's own compiled binary, so the expectations remain the +maintainers' and not the experimenter's, and the command path is derived +mechanically from the PR's file paths rather than chosen. + +**Assignment is by compiler, not by judgement.** `adherence.classify` checks +the PR's tests out onto the parent tree and builds them. A build error naming +an undefined identifier routes the task to the CLI grader; anything else +stays with the unit grader. The choice and the identifiers that forced it are +written into each task record. A declaration-scan heuristic was tried first +and rejected for false negatives: it missed `13675` +(`field.onSearchDone.Store undefined` — a field on an existing struct) and +`13624`, neither of which adds a top-level declaration. + +### Limits, and how results are reported + +`cli.surface` verifies that the flags the PR shipped are present and +accepted. It does **not** verify they behave correctly, so it is a weaker +signal than a passing unit test. + +Therefore: **unit-graded tasks are the primary evidence and CLI-graded tasks +are reported as a separate tier.** The two are never pooled into one pass +rate. A cost comparison conditioned on success uses the unit-graded set +unless a result is stated explicitly as spanning both. + +Verified before registration on a real trial from the validation run — one +that scored `pr.task_pass = fail` purely for naming a struct field +differently: `cli.builds` pass, `cli.surface` pass (all 17 flags the PR's own +binary advertises), `cli.extra_surface` pass. + + ## Known gaps - **E5 is not testable locally.** vLLM returns `prompt_tokens_details: null`, so diff --git a/scenarios-pr/cli-cli/ground-truth.jsonl b/scenarios-pr/cli-cli/ground-truth.jsonl index 20afd52..ef38290 100644 --- a/scenarios-pr/cli-cli/ground-truth.jsonl +++ b/scenarios-pr/cli-cli/ground-truth.jsonl @@ -1,34 +1,34 @@ -{"pr": 13988, "title": "Fix `RESTWithNext` error type, repairing `gh status` and attestation retries", "base_commit": "55dbb4dc6b7edb10b48e3d7fc5bccd32318d1b55", "merge_commit": "e83adbc0642994fae7c39a9a012eb34b8c81f4f1", "prompt": "Fix `RESTWithNext` error type, repairing `gh status` and attestation retries\n\n## Description\r\n\r\nThe `api.Client.RESTWithNext` method did not handle errors in the same way as `api.Client.REST`. The latter wrapped the `go-gh` error into a new `api` error and the former simply returned it. From an error message point of view, there was no visible difference but programmatic checks for `errors.As(err, &api.HTTPError{})` would be true for `REST` and false for `RESTWithNext`.\r\n\r\nI cannot find any reason for this to have been intentional. I suspect what happened was that `RESTWithNext` previously used to handle this case via the following removed code:\r\n\r\n```go\r\n\tsuccess := resp.StatusCode >= 200 && resp.StatusCode < 300\r\n\tif !success {\r\n\t\treturn \"\", HandleHTTPError(resp)\r\n\t}\r\n```\r\n\r\nBut at some point `go-gh` was created, and the `go-gh` api client `Request`/`RequestWithContext` methods began returning errors for non success http status codes.\r\n\r\nThis broke two behaviours:\r\n * `gh status` is supposed to gracefully degrade if notifications or events are inaccessible.\r\n * `gh attestation` commands is supposed to retry attestation fetching for 500 status codes.\r\n\r\n## Notes\r\n\r\nThis is a prerequisite for consolidating GitHub API URL derivation onto `api.Client` (part of the groundwork for per-host API routing, #13717 / #13760), but it is a user-facing bugfix in its own right and is worth reviewing as such.", "test_files": ["api/client_test.go", "pkg/cmd/attestation/api/client_test.go", "pkg/cmd/status/status_test.go"], "test_cmd": "go test ./api/... ./pkg/cmd/attestation/api/... ./pkg/cmd/status/...", "code_files": ["api/client.go"], "additions": 156, "verified": "fails at parent, passes with the fix"} -{"pr": 13987, "title": "Replace Windsurf with Devin in skill agents", "base_commit": "b1a9f7b183c12ae111ea63048d49aad2a53e9101", "merge_commit": "89f3699581659f514c4276bef0820d8caadbb67d", "prompt": "Replace Windsurf with Devin in skill agents\n\nFixes #13986\n\n- Replace the `windsurf` agent entry with `devin`\n- Install Devin skills in `.devin/skills` at project and user scope\n- Update install help text and registry tests\n\n## Testing\n\n- `go test ./internal/skills/... ./pkg/cmd/skills/...`", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go", "pkg/cmd/skills/install/install.go"], "additions": 25, "verified": "fails at parent, passes with the fix"} -{"pr": 13967, "title": "Fix skill picker label wrapping", "base_commit": "01b79dd983af0859e4e3d7454961ad3f08cf88b4", "merge_commit": "c2ad3b0eb7ead66eec3a8a61239e10a765332ec7", "prompt": "Fix skill picker label wrapping\n\nTruncates skill picker labels to the available terminal width so descriptions do not wrap onto a separate line.\r\n\r\nAdds coverage for multiple terminal widths.\r\n\r\n**Before**\r\n\"Screenshot\r\n\r\n**After (Examples with varying terminal width)**\r\n\"Screenshot\r\n\"Screenshot\r\n\"Screenshot", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 50, "verified": "fails at parent, passes with the fix"} -{"pr": 13864, "title": "Add Grok skill host support", "base_commit": "2b970995a3c63b7a7600f242d55d15185a82ed8b", "merge_commit": "9d95dd7344abe6388b59e25b8db54a3c7371cd6a", "prompt": "Add Grok skill host support\n\n## Summary\n- add Grok as a supported `gh skill` agent host\n- install project and user skills in `.grok/skills`\n\nFixes #13846", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go", "pkg/cmd/skills/install/install.go", "pkg/cmd/skills/update/update.go"], "additions": 26, "verified": "fails at parent, passes with the fix"} -{"pr": 13823, "title": "Add named field columns to gh project item-list", "base_commit": "bba0816a3808c7f7ea0a7e75be9d365b3410c524", "merge_commit": "efe3f165dd297c85fff11473dbf586f2d39fbf86", "prompt": "Add named field columns to gh project item-list\n\nProposal: cli/cli#13816\nTracking issue: github/planning-tracking#3431\n\n## What this does\n\nAdds named field columns to `gh project item-list`:\n\n```\ngh project item-list --owner --field \"Status\"\n```\n\n- `--field ` (repeatable) resolves the field by name and adds a column showing each item's value for it, with no separate field-ID preflight lookup.\n- `--field-id ` does the same by node ID. The two are mutually exclusive, and an unknown `--field-id` lists candidate fields as `name (id)` for symmetry with the name-based errors.\n- Name matching is case-insensitive, mirroring the Projects v2 platform API.\n\n## Relationship to cli/cli#13807\n\nThis builds on the same shared name-resolution layer as the `item-edit` PR cli/cli#13807. To keep the two PRs independently mergeable, each one adds its own copy of the small, self-contained field-resolver file `` (~90 lines: `ResolveFieldByName`, `ResolveFieldByID`, and their error types), with identical contents in both. Because the copies match exactly, Git merges them into a single file automatically, so the two PRs can land in either order without conflicts or duplicate-definition build errors. The item-list-only `FieldValueNodes.DisplayValue` helper lives in its own ``, so this PR leaves `` untouched.", "test_files": ["pkg/cmd/project/item-list/item_list_test.go", "pkg/cmd/project/shared/queries/queries_test.go", "pkg/cmd/project/shared/queries/resolve_fields_test.go"], "test_cmd": "go test ./pkg/cmd/project/item-list/... ./pkg/cmd/project/shared/queries/...", "code_files": ["pkg/cmd/project/item-list/item_list.go", "pkg/cmd/project/shared/queries/queries.go", "pkg/cmd/project/shared/queries/resolve_fields.go"], "additions": 813, "verified": "fails at parent, passes with the fix"} -{"pr": 13807, "title": "Add name-based resolution to gh project item-edit", "base_commit": "9d95dd7344abe6388b59e25b8db54a3c7371cd6a", "merge_commit": "d1897f89b294fc172e5b2993325ad1a0184f711d", "prompt": "Add name-based resolution to gh project item-edit\n\nProposal: #13816\nTracking issue: github/planning-tracking#3431\n\n> **Companion PR:** The `item-list` read path ships as a separate, independently-mergeable PR \u2014 #13823. Both PRs add their own copy of the small `` file, with identical contents. Because the two copies match exactly, Git merges them into one automatically, so the PRs can land in either order without conflicts.\n\n## What this does\n\nLets `gh project item-edit` address ProjectV2 fields, single-select options, and items by **name** instead of node IDs. Existing ID-based flags are fully backward compatible; the name flags are additive and optional.\n\n### `item-edit` (new name-based mode)\nMirrors `item-add` addressing:\n\n```\ngh project item-edit --owner --url --field \"Status\" --value \"In Progress\"\n```\n\n- `[]` positional + `--owner` resolve the project.\n- `--url` resolves the item within that project.\n- `--field ` resolves the field; `--value ` is dispatched by the field's data type (text/number/date, and for single-select the value is resolved as an option **name**).\n\nhttps://github.com/user-attachments/assets/4e7dceb1-0e4f-4706-9d95-37570a56cdcd\n\n### Mutual exclusivity (enforced in code)\nEvery name/ID pair fails clearly when both are set, never silently merged: `--field` xor `--field-id`, `--url` xor `--id`, and `--value` xor the typed value flags (`--text`/`--number`/`--date`/`--single-select-option-id`/`--iteration-id`). Name-based flags also require the project number argument. Invalid combos are rejected before any GraphQL request fires.\n\n### Errors are self-correctable\nName resolution happens before the ID-typed GraphQL mutation, so a bad name fails loudly with candidate names rather than `400 []`. Six failure modes mirror the sibling MCP PR (github/github-mcp-server#2760): field-not-found, field-ambiguous, option-not-found, option-ambiguous, wrong-field-type, item-not-in-project \u2014 surfaced as human-readable stderr messages listing candidates (CLI convention; not JSON).\n\n### Name matching is case-insensitive\nField and option names are matched with `strings.EqualFold` to mirror the Projects v2 platform API, which normalizes field names via a `name_slug` and downcases single-select option names before matching. Field names are case-insensitively unique on the platform; option names are not, so a case-only option collision still surfaces the `option_ambiguous` error.\n\n## Backwards compatibility\nThe command previously marked `--id` as a required cobra flag; this PR removes that requirement so an item can also be addressed by `--url`, but `--id` remains required in effect via a runtime guard (one of `--id` or `--url` must be set). Existing `--id`-based invocations are unchanged.\n\n## Out of scope / follow-ups\n- **`item-list` named columns** \u2014 ships as a separate, independently-mergeable PR (#13823).\n- MultiSelect and issue-field-value node types: the shared resolver dispatches option resolution by field data type so adding these later is additive, not a rewrite.\n- Bounding/paginating large read payloads (github/planning-tracking#3332).\n\n## Coordination with the sibling MCP PR (github/github-mcp-server#2760)\n- **Case-insensitive matching:** this PR matches names case-insensitively (see above). MCP #2760's resolver currently does case-sensitive matching and should be aligned so both surfaces behave identically.\n- **Read-path mutual exclusivity:** the companion `item-list` PR (#13823) enforces reject-both for its name/ID field selector. MCP #2760's read path currently silently merges `fields`+`field_names`; that should be aligned to the same reject-both behavior.", "test_files": ["pkg/cmd/project/item-edit/item_edit_test.go", "pkg/cmd/project/shared/queries/resolve_fields_test.go", "pkg/cmd/project/shared/queries/resolve_test.go"], "test_cmd": "go test ./pkg/cmd/project/item-edit/... ./pkg/cmd/project/shared/queries/...", "code_files": ["pkg/cmd/project/item-edit/item_edit.go", "pkg/cmd/project/shared/queries/queries.go", "pkg/cmd/project/shared/queries/resolve.go", "pkg/cmd/project/shared/queries/resolve_fields.go"], "additions": 1432, "verified": "fails at parent, passes with the fix"} -{"pr": 13784, "title": "Support antigravity-cli and antigravity2.0 in gh skill", "base_commit": "397876d3dc2828f1c932c651b31ab78e72506da4", "merge_commit": "326faaac8b5c3b736ddc6bfa573cc97dc6452a24", "prompt": "Support antigravity-cli and antigravity2.0 in gh skill\n\n### Description\n\n`gh skill` recognized only one Antigravity surface. This registers `antigravity-cli` and `antigravity2.0` as skill agent hosts across every `gh skill` subcommand, at both project and user scope.\n\nFixes #13767\n\n### Key Points\n\nAntigravity ships several surfaces that share one project skills dir but read user-scope skills from different dirs. The two new [registry entries](https://github.com/cli/cli/blob/8c6bac8c9/internal/skills/registry/registry.go#L91-L104) map each surface to its documented path:\n\n```go\n// Both share the .agents/skills project dir; user dirs differ per surface.\nUserDir: \".gemini/antigravity-cli/skills\" // antigravity-cli\nUserDir: \".gemini/config/skills\" // antigravity2.0\n```\n\nBecause both reuse `.agents/skills` for the project dir, selecting them next to other `.agents/skills` agents still writes each skill once. Nothing else needs wiring: `--agent`, `--scope`, `InstallDir`, help text, and enum suggestions all derive from the registry slice.\n\n### Notes for reviewers\n\nStart in the [`registry` package](https://github.com/cli/cli/blob/8c6bac8c9/internal/skills/registry/registry.go), where the `AgentHost` entries live. The [registry tests](https://github.com/cli/cli/blob/8c6bac8c9/internal/skills/registry/registry_test.go) extend the existing `TestFindByID` and `TestInstallDir` tables with project- and user-scope cases for both agents.\n\nThe user-scope paths come from Antigravity's own docs, confirmed by hands-on testing (see Additional Context). `.gemini/config/skills` is the one global dir every surface reads, so `antigravity2.0` uses it; the CLI reads its own `.gemini/antigravity-cli/skills`.\n\n### Additional Context\n\n- [Antigravity skills docs](https://antigravity.google/docs/skills) give the official per-surface skill directories.\n- [Where does Antigravity look for Agent Skills?](https://atamel.dev/posts/2026/07-01_where_agy_agent_skills/) verifies by experiment which dir each surface actually reads.\n- [Choosing your surface](https://cloud.google.com/blog/topics/developers-practitioners/choosing-your-surface-antigravity-20-antigravity-cli-antigravity-ide-or-antigravity-sdk) explains the 2.0 / CLI / IDE split.", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go"], "additions": 53, "verified": "fails at parent, passes with the fix"} -{"pr": 13766, "title": "fix(skills): honor --dir without agent prompt", "base_commit": "ff4e4a255006ca98e3036bd0f8d98374a405835f", "merge_commit": "f1d112104821b055bb0c5656f2989f9213db71f6", "prompt": "fix(skills): honor --dir without agent prompt\n\n## Summary\n- skip the target-agent prompt when `gh skill install` is given `--dir`\n- keep using the default agent host internally only for shared post-install messaging / telemetry\n- add regression coverage for the interactive `--dir` path\n\nFixes #13763.\n\n## Testing\n- not run locally (avoided local Go test/build in this environment)", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 34, "verified": "fails at parent, passes with the fix"} -{"pr": 13723, "title": "Allow downloading release assets without authentication", "base_commit": "954ffc37e5931a9621868a50f05c8fb17e288f19", "merge_commit": "71fb4f5f4358c44c9328637752f0c15a47d84139", "prompt": "Allow downloading release assets without authentication\n\nFixes https://github.com/cli/cli/issues/2680\n\n### Description\n\n`gh release download` now works without authentication against public repositories, matching `gh extension install`. A token is still used when one is present.\n\n### Key Points\n\nThis change has three parts, from simplest to subtlest:\n\n- **Why drop the auth gate** - the login requirement is unnecessary for public downloads.\n- **Fixing the by-tag race to be success oriented** - an anonymous draft-lookup 403 no longer masks a release the REST lookup found.\n- **Honoring the gate under repo override** - the cobra plumbing fix that makes the dropped gate apply to `download`.\n\n#### Why drop the auth gate\n\nRelease endpoints for public repositories are readable anonymously over REST, so the login gate is unnecessary. Removing it is the same one-line `cmdutil.DisableAuthCheck` change that #13176 made for `gh extension install`.\n\nThe same logic here applies as with `gh extension install`:\n\n> What this says is that extension installation is going to happen unauthenticated whether we make it easier or not. We might as well make it easier and keep people installing through our core commands.\n\nIn `gh release download` - people are going to just `curl` the endpoint directly, and that degrades their experience since we provide a lot of abstractions over the API that make `gh` much more than a `curl`/`gh api` call.\n\nBut I'll broaden the conversation - we got feedback that folks are using `gh release download` more in CI and they want to secure their CI by not providing `gh` a token unless it's necessary. If you're downloading a public asset, that's not necessary and we force you to use a larger than necessary token scope.\n\n#### Fixing the by-tag race to be success oriented\n\nThe by-tag path creates problems that make this deviate a bit from `gh ext install` - that's one reason why this diff is a bit bigger. [`FetchRelease`](https://github.com/cli/cli/blob/f0a128ad1c33a41b7d1bdc93b5d507c842713d8a/pkg/cmd/release/shared/fetch.go) races a published-release REST lookup against a draft-release GraphQL lookup. GraphQL rejects anonymous requests, so the draft lookup returns a 403. The old selector returned the first result unless it was exactly `ErrReleaseNotFound`, so that 403 could win the race and mask a release the REST lookup found.\n\nThe selector now prefers a found release and only errors when both lookups fail. We used to return whichever result arrived first, treating only a not-found error as a reason to wait for the second:\n\n```go\n// Before - a non-not-found error from either lookup wins\nres := <-results\nif errors.Is(res.error, ErrReleaseNotFound) {\n res = <-results\n cancel()\n} else {\n cancel()\n <-results // drain the channel\n}\nreturn res.release, res.error\n```\n\nNow we take a success from either lookup, and only surface an error when both fail:\n\n```go\n// Now - a found release wins; an error needs both lookups to fail\nfirst := <-results\nif first.error == nil {\n cancel()\n <-results // drain the channel\n return first.release, nil\n}\n\nsecond := <-results\ncancel()\nif second.error == nil {\n return second.release, nil\n}\nif errors.Is(second.error, ErrReleaseNotFound) {\n return nil, second.error\n}\nreturn nil, first.error\n```\n\nThis also stops a transient draft-lookup failure from masking a real release for authenticated users.\n\n#### Honoring the gate under repo override\n\nRemoving the gate did not take effect on its own. `release` enables the `-R/--repo` override, and that installs a `PersistentPreRunE` on the `release` command. cobra runs only the nearest such hook walking up from the command you invoked, so the override hook shadows the [root auth gate](https://github.com/cli/cli/blob/7b681a4e8b67d203ccdaab5ff54570bdf6ca3669/pkg/cmd/root/root.go). The override re-runs the nearest ancestor hook to make up for that, but it handed *the ancestor* to the hook as the command, so the auth gate judged `release` instead of `download` and never saw download's `DisableAuthCheck`.\n\nThe fix keeps the invoked command and passes that leaf up, the node cobra would have judged if the repo override didn't muck with it:\n\n```go\n// Before - climbs by reassigning cmd, so the gate is judged against the ancestor\nfor cmd.HasParent() {\n cmd = cmd.Parent()\n if cmd.PersistentPreRunE != nil {\n return cmd.PersistentPreRunE(cmd, args)\n }\n}\n\n// Now - keep the invoked leaf and pass it up\nfor p := overrideCmd.Parent(); p != nil; p = p.Parent() {\n if p.PersistentPreRunE != nil {\n return p.PersistentPreRunE(cmd, args)\n }\n}\n```\n\nThis mirrors [cobra's own `execute` loop](https://github.com/spf13/cobra/blob/v1.10.2/command.go#L984-L986), which walks the parents but always hands them the leaf command. cobra's `EnableTraverseRunHooks` global would run the whole chain for us and maybe is a better long term fix, but it is process-wide and would change pre-run behavior for every command, so I'm not touching it here.\n\nI guarded this with an integration test, since the bug only surfaces with the pieces wired together. [`Test_EnableRepoOverride_authCheckIntegration`](https://github.com/cli/cli/blob/7b681a4e8b67d203ccdaab5ff54570bdf6ca3669/pkg/cmdutil/repo_override_test.go) builds a root gate, a repo-override parent, and a leaf, then asserts the gate judged the leaf: opting out with `DisableAuthCheck` skips the check, otherwise the gate still runs. It lives in `cmdutil` beside the helper, since the coupling is the helper's, not any one command's.\n\n### Notes for reviewers\n\nThree atomic commits:\n\n- `fix(release): don't let a failed draft lookup mask a found release` changes the selector in [`FetchRelease`](https://github.com/cli/cli/blob/f0a128ad1c33a41b7d1bdc93b5d507c842713d8a/pkg/cmd/release/shared/fetch.go) and adds a regression case to the existing `Test_downloadRun` table.\n- `feat(release): allow download without authentication` removes the gate in the [download command](https://github.com/cli/cli/blob/f0a128ad1c33a41b7d1bdc93b5d507c842713d8a/pkg/cmd/release/download/download.go).\n- `fix(cmdutil): honor DisableAuthCheck under repo-override parents` fixes [the repo-override helper](https://github.com/cli/cli/blob/7b681a4e8b67d203ccdaab5ff54570bdf6ca3669/pkg/cmdutil/repo_override.go) so the gate removal actually takes effect, and adds an integration test that pins the coupling between repo override and the root auth gate.\n\n### Additional Context\n- #2680 is the standing request to allow unauthenticated public requests, and its motivating example is `gh release download` on a public repo.\n- #13176 removed the same gate for `gh extension install` and is the precedent this follows.", "test_files": ["pkg/cmd/release/download/download_test.go", "pkg/cmdutil/repo_override_test.go"], "test_cmd": "go test ./pkg/cmd/release/download/... ./pkg/cmdutil/...", "code_files": ["pkg/cmd/release/download/download.go", "pkg/cmd/release/shared/fetch.go", "pkg/cmdutil/repo_override.go"], "additions": 142, "verified": "fails at parent, passes with the fix"} -{"pr": 13722, "title": "Detect additional third-party coding agents", "base_commit": "dd26eb39b04db5bd282509787d2b8fbff11ba694", "merge_commit": "561d9f919cbdadc22f886a3eadb260ba0b4f49c5", "prompt": "Detect additional third-party coding agents\n\n### Description\n\nExtends agent detection so the User-Agent header can identify more third-party coding agents driving `gh`. Adds nine new agents and an extra environment-variable signal for one existing one.\n\n### Key Points\n\nNew agents detected: antigravity, augment-cli, replit, goose, cowork, cursor, cursor-cli, kiro, and pi. One existing agent gains an extra signal: claude-code also matches `CLAUDE_CODE`.\n\nDetection order encodes confidence. `AI_AGENT` still wins, followed by agent-specific variables. Two signals are deliberately low-confidence and ranked accordingly:\n\n- `REPL_ID` is present throughout any Replit environment, not only when a Replit agent drives the CLI, so it is annotated as broad in the code.\n- `GOOSE_PROVIDER` only means Goose is configured as a model provider, not that it is running, so Goose is checked absolutely last and any stronger signal wins.\n\nThe single-source block now matches precisely instead of loosely: `kiro` is an exact `TERM_PROGRAM` match, and `pi` is anchored to a path boundary (`/.pi/agent`, or the Windows `\\.pi\\agent`) so an incidental substring cannot trigger it.\n\nWe considered a Devin signal and dropped it. The only reliable marker is the existence of a `/opt/.devin` directory, and this detector is intentionally environment-only with no filesystem access. The environment-variable alternatives (for example an `EDITOR` substring) could produce false positives, and Devin's developer-terminal footprint is small, so a noisy signal was not worth the telemetry pollution.\n\n### Notes for reviewers\n\nTwo files change. Start in the [`agents` detector](https://github.com/cli/cli/blob/1d4ca33b34646ce1165067377fd89f01148cbaf3/internal/agents/detect.go): the constant block lists the new identifiers, and `detectWith` runs the ordered checks top to bottom, returning on first match. Read it straight down to see the precedence. Then the [detector tests](https://github.com/cli/cli/blob/1d4ca33b34646ce1165067377fd89f01148cbaf3/internal/agents/detect_test.go) add table cases for every new agent and signal, plus the precedence and negative cases (exact `kiro`, path-boundary `pi`, Goose losing to stronger signals).\n\nFirst-party documentation for each signal lives inline next to its check, or is marked `// No first-party docs` where none exists.", "test_files": ["internal/agents/detect_test.go"], "test_cmd": "go test ./internal/agents/...", "code_files": ["internal/agents/detect.go"], "additions": 190, "verified": "fails at parent, passes with the fix"} -{"pr": 13681, "title": "fix(skills): install universal agent to ~/.agents/skills", "base_commit": "70bb306bd25eb407f90eabefd98824aed62cf519", "merge_commit": "cd68c69dbd5ea0793cece6355f0911ca6a68ffc1", "prompt": "fix(skills): install universal agent to ~/.agents/skills\n\nThe Universal agent host installed user-scoped skills to ~/.config/agents/skills, which is not the location scanned by the majority of compliant clients (Copilot CLI, Pi, OpenCode).\n\nPer the agentskills.io cross-client convention (https://agentskills.io/client-implementation/adding-skills-support), user-level skills for compliant clients live under ~/.agents/skills.\n\nThis PR switches UserDir for the universal agent to the shared project skills directory constant, matching the convention already used by Warp and Cline. Adds regression tests covering both project and user scope.\n\nFixes #13494", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go"], "additions": 20, "verified": "fails at parent, passes with the fix"} -{"pr": 13679, "title": "fix: show checks summary when all checks were cancelled", "base_commit": "70bb306bd25eb407f90eabefd98824aed62cf519", "merge_commit": "23f83e6ae18998fcd6ac0497f57a1d9ebd95862a", "prompt": "fix: show checks summary when all checks were cancelled\n\n### Description\n\n`gh pr checks` prints a blank summary when a PR's only checks were **cancelled**.\n\n`printSummary` (``) gates the summary block on:\n\n```go\nif counts.Failed+counts.Passed+counts.Skipping+counts.Pending > 0 {\n```\n\n`counts.Canceled` is omitted, so a cancelled-only result sums to 0, the block is skipped, and the `else if counts.Canceled > 0 { \"Some checks were cancelled\" }` branch becomes unreachable in exactly the case it was written for. The existing \"some cancelled\" test masked this by pairing a cancelled check with passing ones.\n\n### Fix\n\nAdd `counts.Canceled` to the guard.\n\n### Testing\n\nAdded `TestPrintSummary` (``) with a cancelled-only case asserting the \"Some checks were cancelled\" summary renders. Fails before, passes after; `go test ./pkg/cmd/pr/checks/` green.\n\nReported in #13680.", "test_files": ["pkg/cmd/pr/checks/output_test.go"], "test_cmd": "go test ./pkg/cmd/pr/checks/...", "code_files": ["pkg/cmd/pr/checks/output.go"], "additions": 56, "verified": "fails at parent, passes with the fix"} -{"pr": 13675, "title": "Fix flaky TestHuhPrompterMultiSelectWithSearchPersistence on slow architectures", "base_commit": "015e6cf6ac39ad18138f868545f02359c3c8d3ef", "merge_commit": "954ffc37e5931a9621868a50f05c8fb17e288f19", "prompt": "Fix flaky TestHuhPrompterMultiSelectWithSearchPersistence on slow architectures\n\nFixes https://github.com/cli/cli/issues/13727\r\n\r\nThe test was using a fixed 50ms sleep (`waitForOptions()`) to wait for an async bubbletea search goroutine before sending the next keystroke. On slow architectures such as s390x under QEMU emulation, the goroutine scheduling and event loop round-trip can exceed 50ms, causing the `enter` key to arrive while `m.loading` is still `true`. In that state the field silently drops all keystrokes, the form never advances, and the 5s overall deadline fires with \"form.Run() did not complete in time\".\r\n\r\nThe fix replaces the blind sleep with proper channel-based synchronization. An `onSearchDone func()` hook is added to `multiSelectSearchField` (nil in production, set only in tests) and called at the end of `applySearchResult`. A new test helper `waitForSearch(field)` wires a one-shot `sync.Once`-guarded channel into that hook and blocks until it fires - guaranteeing the search is truly complete before the next step is sent, regardless of scheduler timing or machine speed.\r\n\r\n## Error log\r\n```\r\n[ 770s] --- FAIL: TestHuhPrompterMultiSelectWithSearchPersistence (5.42s)\r\n[ 770s] --- FAIL: TestHuhPrompterMultiSelectWithSearchPersistence/selections_persist_after_changing_search_query (5.31s) Context\r\n[ 770s] :478: form.Run() did not complete in time 54,494 tokens\r\n[ 770s] FAIL 5% used\r\n[ 770s] FAIL github.com/cli/cli/v2/internal/prompter 11.841s\r\n```", "test_files": ["internal/prompter/huh_prompter_test.go"], "test_cmd": "go test ./internal/prompter/...", "code_files": ["internal/prompter/multi_select_with_search.go"], "additions": 69, "verified": "fails at parent, passes with the fix"} -{"pr": 13624, "title": "Gracefully handle failed GitHub verifier initialization caused by missing trusted root", "base_commit": "bd81afda9ab653bd880298e6cfbf143541522a2f", "merge_commit": "d51b72243a01729cdc76a5b57a0866a2f1bfd2bc", "prompt": "Gracefully handle failed GitHub verifier initialization caused by missing trusted root\n\n\r\n\r\nGracefully handle the failure to initialize the GitHub verifier when the trusted root is missing.", "test_files": ["pkg/cmd/attestation/verification/sigstore_integration_test.go", "pkg/cmd/attestation/verification/sigstore_test.go"], "test_cmd": "go test ./pkg/cmd/attestation/verification/...", "code_files": ["pkg/cmd/attestation/verification/sigstore.go"], "additions": 39, "verified": "fails at parent, passes with the fix"} -{"pr": 13620, "title": "feat(discussion): add comment command", "base_commit": "4166ecf2cada209714af79387a5243b334af764b", "merge_commit": "42db02df0c55f8ae556b15ca353887ee4043cd88", "prompt": "feat(discussion): add comment command\n\n## Add `gh discussion comment` command\r\n\r\nThis PR adds a new `gh discussion comment` command for managing comments and replies on GitHub Discussions, along with UX improvements to the `view` command.\r\n\r\n### `gh discussion comment`\r\n\r\nThe command supports adding, editing, and deleting comments and replies. The positional argument determines the action context:\r\n\r\n**Adding a top-level comment:**\r\n```\r\ngh discussion comment 123 --body \"Thanks for raising this\"\r\ngh discussion comment 123 --body-file response.md\r\n```\r\n\r\n**Replying to a comment (positional arg is a comment ID or URL):**\r\n```\r\ngh discussion comment DC_abc123 --body \"Good point\"\r\ngh discussion comment \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\" --body \"I agree\"\r\n```\r\n\r\n**Editing a comment or reply:**\r\n```\r\ngh discussion comment DC_abc123 --edit --body \"Updated text\"\r\ngh discussion comment \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\" --edit --body-file updated.md\r\n```\r\n\r\n**Deleting a comment or reply:**\r\n```\r\ngh discussion comment DC_abc123 --delete --yes\r\ngh discussion comment \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\" --delete --yes\r\n```\r\n\r\nWhen no `--body` or `--body-file` is provided in an interactive terminal, an editor is opened for input. For edits, the editor is pre-populated with the existing comment body.\r\n\r\nComment URLs are resolved to node IDs via msgpack encoding of the repository database ID and comment database ID extracted from the URL fragment.\r\n\r\n### Changes to `gh discussion view`\r\n\r\nThe `--replies` flag now accepts both comment node IDs and comment URLs:\r\n\r\n```\r\ngh discussion view 123 --replies DC_abc123\r\ngh discussion view 123 --replies \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\"\r\n```\r\n\r\nWhen a URL is provided, the repository and discussion number from the URL override the positional argument.\r\n\r\n### Tests\r\n\r\n- Added acceptance tests for the `comment` command covering add, reply, edit (including from file), delete (with confirmation prompt check), and URL-based operations.\r\n- Updated existing acceptance tests (`discussion-view.txtar`, `discussion-list.txtar`) to use the new `comment` command instead of raw `gh api graphql` mutations.\r\n- Added a test case in `discussion-view.txtar` to verify `--replies` works with a comment URL.\r\n- Unit tests cover flag parsing, all run paths (add/reply/edit/delete), comment URL resolution, body-file/stdin input, editor pre-population, and error cases.", "test_files": ["pkg/cmd/discussion/client/client_impl_test.go", "pkg/cmd/discussion/comment/comment_test.go", "pkg/cmd/discussion/shared/lookup_test.go", "pkg/cmd/discussion/view/view_test.go"], "test_cmd": "go test ./pkg/cmd/discussion/client/... ./pkg/cmd/discussion/comment/... ./pkg/cmd/discussion/shared/... ./pkg/cmd/discussion/view/...", "code_files": ["pkg/cmd/discussion/client/client.go", "pkg/cmd/discussion/client/client_impl.go", "pkg/cmd/discussion/client/client_mock.go", "pkg/cmd/discussion/client/types.go", "pkg/cmd/discussion/comment/comment.go", "pkg/cmd/discussion/create/create.go", "pkg/cmd/discussion/discussion.go", "pkg/cmd/discussion/edit/edit.go", "pkg/cmd/discussion/shared/lookup.go", "pkg/cmd/discussion/view/view.go"], "additions": 2666, "verified": "fails at parent, passes with the fix"} -{"pr": 13581, "title": "Auto-install official extension stubs in CI", "base_commit": "46480afb125d852c3edd2b4850a97c09b65c64cf", "merge_commit": "7ef9c54bf87fb17516e93a7ddb932efb7c660a35", "prompt": "Auto-install official extension stubs in CI\n\n### Description\n\nSkip the install prompt when `CI` is detected so official extension stubs (like `gh aw`, `gh stack`) auto-install instead of blocking on `Y/n` in CI runners and agent sessions.\n\n### Key Points\n\n- The previous version of this diff mirrored [`runCopilot`](https://github.com/cli/cli/blob/trunk/pkg/cmd/copilot/copilot.go) exactly: TTY always wins, so a pseudo-TTY agent session with `CI=1` still hung on the prompt. This revision flips the order so `CI` wins over TTY.\n- Intentional divergence from `gh copilot`: a follow-up could apply the same change there for consistency, but extension stubs are the more pressing case (agents call `gh ` frequently).\n- `CI` is detected via [`ci.IsCI()`](https://github.com/cli/cli/blob/trunk/internal/ci/ci.go) (any of `CI`, `BUILD_NUMBER`, or `RUN_ID`).\n\n### Notes for reviewers\n\nTwo commits, reviewable in order:\n\n1. [`fix(extension): auto-install official extension stubs in CI`](https://github.com/cli/cli/pull/13581/commits/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be) is the behavior change. The [`official_extension_stub`](https://github.com/cli/cli/blob/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be/pkg/cmd/root/official_extension_stub.go) file holds the new branching; the [stub test](https://github.com/cli/cli/blob/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be/pkg/cmd/root/official_extension_stub_test.go) extends the existing run-function table test and clears CI env vars per subtest; the [acceptance test](https://github.com/cli/cli/blob/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be/acceptance/testdata/telemetry/telemetry-for-official-extension-stub.txtar) clears CI env vars and expects non-zero exit plus install instructions on stderr.\n2. [`docs(extension): explain CI bypass in stub install logic`](https://github.com/cli/cli/pull/13581/commits/61a752068e271b699b67bdb39b90a10549adf332) is a one-line comment addressing review feedback that the non-TTY+CI behavior wasn't obvious from the code.\n\n### Additional Context\n\nManually verified locally with `gh stack` uninstalled. The TTY+CI case is the one this revision actually fixes versus the previous version of the diff:\n\n```\n$ CI=1 ./bin/gh stack --help # TTY + CI\nSuccessfully installed github/gh-stack # exit 0\n\n$ CI=1 ./bin/gh stack --help < /dev/null # non-TTY + CI\nSuccessfully installed github/gh-stack # exit 0\n\n$ ./bin/gh stack --help < /dev/null # non-TTY, no CI\ngh stack is available as an official extension.\nTo install it, run:\n gh extension install github/gh-stack # exit 1\n```", "test_files": ["pkg/cmd/root/official_extension_stub_test.go"], "test_cmd": "go test ./pkg/cmd/root/...", "code_files": ["pkg/cmd/root/official_extension_stub.go"], "additions": 57, "verified": "fails at parent, passes with the fix"} -{"pr": 13580, "title": "feat: add `repo read-file` and `repo read-dir`", "base_commit": "d05c71a9da4bce4d57f622aacc6a8ee24e5e158e", "merge_commit": "733e35c04c4141468f8882d17b063414ffe36c57", "prompt": "feat: add `repo read-file` and `repo read-dir`\n\n## Summary\r\n\r\nThis PR adds two new (preview) commands for reading repository contents without cloning.\r\n\r\n### `gh repo read-file`\r\n\r\n```\r\ngh repo read-file [--ref ] [--output ] [--clobber] [--unsafe] [--json ] [--jq ] [--template ] [--repo ]\r\n```\r\n\r\nReads a single file from a repository and writes it to stdout (or to a file with `--output`).\r\n\r\n### `gh repo read-dir`\r\n\r\n```\r\ngh repo read-dir [] [--ref ] [--json ] [--jq ] [--template ] [--repo ]\r\n```\r\n\r\nLists the entries of a directory in a repository, showing each entry's type, name, and size.\r\n\r\nBoth commands are marked **preview**, default to the current repository's default branch (overridable with `--ref`), and support `--json`/`--jq`/`--template` for scripting.\r\n\r\n## Test plan\r\n\r\nYou can verify the command behaviour via acceptance tests and the following examples.\r\n\r\nThe commands below target public repositories so they can be run as-is.\r\n\r\n### `gh repo read-file`\r\n\r\n```sh\r\n# Read a file to stdout\r\ngh repo read-file README.md --repo cli/cli\r\n\r\n# Read from a specific tag/branch/commit\r\ngh repo read-file README.md --ref v2.0.0 --repo cli/cli\r\n\r\n# Write to a file, then confirm --clobber is required to overwrite\r\ngh repo read-file README.md --output --repo cli/cli\r\ngh repo read-file README.md --output --repo cli/cli # should error: already exists\r\ngh repo read-file README.md --output --clobber --repo cli/cli # should succeed\r\n\r\n# JSON output, with jq and template\r\ngh repo read-file README.md --json path,size,type --repo cli/cli\r\ngh repo read-file README.md --json path,size --jq '.size' --repo cli/cli\r\ngh repo read-file README.md --template '{{.path}} ({{.size}} bytes){{\"\\n\"}}' --repo cli/cli\r\n\r\n# Error: path does not exist\r\ngh repo read-file --repo cli/cli\r\n```\r\n\r\n### `gh repo read-dir`\r\n\r\n```sh\r\n# List the repository root\r\ngh repo read-dir --repo cli/cli\r\n\r\n# List a subdirectory (note executables render as `file*`)\r\ngh repo read-dir script --repo cli/cli\r\n\r\n# Mixed entry types in one listing: regular files, a symlink (RelNotes),\r\n# and a submodule (sha1collisiondetection)\r\ngh repo read-dir --repo git/git\r\n\r\n# List from a specific tag/branch/commit\r\ngh repo read-dir docs --ref v2.0.0 --repo cli/cli\r\n\r\n# Non-TTY / scriptable output (tab separated)\r\ngh repo read-dir script --repo cli/cli | cat\r\n\r\n# JSON output, with jq and template\r\ngh repo read-dir script --json name,type,mode,modeOctal --repo cli/cli\r\ngh repo read-dir script --json name,type --jq '.entries[] | select(.type==\"file\") | .name' --repo cli/cli\r\ngh repo read-dir --template '{{range .entries}}{{.type}}: {{.name}}{{\"\\n\"}}{{end}}' --repo cli/cli\r\n\r\n# Error: path points to a file, not a directory\r\ngh repo read-dir README.md --repo cli/cli\r\n\r\n# Error: path or ref does not exist\r\ngh repo read-dir nope/nope --repo cli/cli\r\n```", "test_files": ["internal/text/text_test.go", "pkg/cmd/repo/read-dir/read_dir_test.go", "pkg/cmd/repo/read-file/read_file_test.go"], "test_cmd": "go test ./internal/text/... ./pkg/cmd/repo/read-dir/... ./pkg/cmd/repo/read-file/...", "code_files": ["internal/text/text.go", "pkg/cmd/repo/read-dir/http.go", "pkg/cmd/repo/read-dir/read_dir.go", "pkg/cmd/repo/read-file/http.go", "pkg/cmd/repo/read-file/read_file.go", "pkg/cmd/repo/repo.go"], "additions": 2535, "verified": "fails at parent, passes with the fix"} -{"pr": 13548, "title": "feat(skills): list available skills when install runs non-interactively", "base_commit": "01bcd474447b5034da20686c838ae4b0cf2b23f5", "merge_commit": "70bb306bd25eb407f90eabefd98824aed62cf519", "prompt": "feat(skills): list available skills when install runs non-interactively\n\n### Summary\n\nRunning `gh skill install ` (or `--from-local `) without a skill name in a non-interactive context previously errored with `must specify a skill name when not running interactively`. That made discovery awkward when piping or scripting \u2014 users had to switch to an interactive shell just to see what skills a repo offered.\n\nThis PR changes that behavior so the discovered skills are printed instead, mirroring (approximately) what the interactive picker shows. The list is rendered through `tableprinter`, so it auto-switches between a friendly TTY table and tab-separated `SKILL\\tDESCRIPTION` rows when piped \u2014 making it easy to grep / fzf / awk.\n\n### Before\n\n```console\n$ gh skill install github/awesome-copilot | grep review\nmust specify a skill name when not running interactively\n```\n\n### After\n\n```console\n$ gh skill install github/awesome-copilot | grep review\ncode-review Reviews pull requests\n\u2026\n```\n\nRe-running with a specific skill name installs as before. Same behavior for `--from-local`.\n\n### Context\n\nCame out of a Slack thread where this was identified as a UX gap: interactive mode supports browsing-then-installing, and non-interactive mode should provide the same discoverability so it composes with standard Unix tooling.\n\n### Changes\n\n- `selectSkillsWithSelector` now prints discovered skills via a new `listAvailableSkills` helper instead of erroring when `!canPrompt`.\n- Sentinel `errSkillsListed` lets `installRun` / `runLocalInstall` bail cleanly without going into the install path.\n- Descriptions are pre-fetched (same `fetchDescriptions` callback the picker uses) so the listed output is useful, not bare.\n- Help text + an example for piping into `grep` updated.\n- Tests: replaced the old \"errors\" case with a remote listing assertion and added an equivalent local install case.\n\n### Verification\n\n- `go test ./pkg/cmd/skills/...` \u2705\n- `make lint` \u2705", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 105, "verified": "fails at parent, passes with the fix"} -{"pr": 13541, "title": "feat: add `discussion` command set", "base_commit": "5c9ec1c5f51d682dbf65b0c16f856d8b9303adff", "merge_commit": "52e8e7427702e023d743318f748fceda4c0dcf37", "prompt": "feat: add `discussion` command set\n\nThis PR adds the `gh discussion` command group (list, view, create, edit) as a preview feature.\r\n\r\nHuge thanks to @maxbeizer for doing the heavy lifting on this. :copilot: was also instrumental in implementation, review, and polish throughout.\r\n\r\nI rewrote the commit history (81 commits squashed into 6) for easier review and a cleaner git log. Note that the commits are structured to split the work logically; intermediate commits may not compile independently.\r\n\r\n## Commands\r\n\r\n### `discussion list`\r\n\r\n```shell\r\ngh discussion list [--category ] [--state ] [--author ] [--label ] [--search ] [--limit ] [--json ] [--web]\r\n```\r\n\r\nList discussions in a repository with optional filters. ([8b73951](https://github.com/cli/cli/commit/8b73951ca75c6495a776e36da9fb48cc93000866))\r\n\r\n### `discussion view`\r\n\r\n```\r\ngh discussion view { | } [--comments [--limit ]] [--replies [--limit ]] [--json ] [--web]\r\n```\r\n\r\nView a discussion's details, comments, or replies to a specific comment. ([57008e7](https://github.com/cli/cli/commit/57008e797097e9b275ba7d1849ac750e762743e1))\r\n\r\n### `discussion create`\r\n\r\n```\r\ngh discussion create --title --body --category [--label ,...] [--body-file ]\r\n```\r\n\r\nCreate a new discussion, interactively or via flags. ([7bd67a8](https://github.com/cli/cli/commit/7bd67a840456436a1edc0f80dc85687f29b277af))\r\n\r\n### `discussion edit`\r\n\r\n```\r\ngh discussion edit { | } [--title ] [--body ] [--body-file ] [--category ] [--add-label ,...] [--remove-label ,...]\r\n```\r\n\r\nEdit a discussion's title, body, category, or labels, interactively or via flags. ([797effe](https://github.com/cli/cli/commit/797effe0295914e03f4b40cb873276da1d3b7e93))\r\n\r\n## Reusable components\r\n\r\n- **``**: GraphQL client for Discussions covering list, search, get, create, update, and label mutations with full pagination support. ([51b7653](https://github.com/cli/cli/commit/51b765381870dbf62390e0f7a297cc57ea771db7))\r\n- **``**: Shared utilities including argument parsing, category matching, label resolution, and client factory helpers. ([d3a1538](https://github.com/cli/cli/commit/d3a153872b9774009d620d0f3e12f993a21765eb))\r\n\r\n## Screenshots\r\n\r\n### `gh discussion list`\r\n\r\n![Terminal output showing a table of discussions with columns for number, state, title, category, author, and date](https://github.com/user-attachments/assets/094587eb-93f8-4b55-8bf9-5ed0965cc67d)\r\n\r\n### `gh discussion view 9094`\r\n\r\n![Terminal output showing discussion details including title, metadata, labels, and body text](https://github.com/user-attachments/assets/55dcf8c0-c4e0-4bc0-b073-8025c5490107)\r\n\r\n### `gh discussion view 9094 --comments --limit 1`\r\n\r\n![Terminal output showing a discussion with its threaded comments displayed below the body](https://github.com/user-attachments/assets/64ea48f7-2cd6-404e-b261-14eaf9a26eb1)\r\n\r\n### `gh discussion view 9094 --replies DC_kwDODKw3uc4AkHLS --limit 1`\r\n\r\n![Terminal output showing paginated replies to a specific discussion comment](https://github.com/user-attachments/assets/87bad4fe-82f3-4124-91c4-c581d9e2a0ef)\r\n\r\n### `gh discussion create` (non-interactive)\r\n\r\n![Terminal showing discussion creation via flags with title, body, category, and label options](https://github.com/user-attachments/assets/bf65e362-7983-4b97-af48-2840fa74c3b9)\r\n\r\n### `gh discussion create` (interactive, category selection)\r\n\r\n![Terminal showing an interactive prompt listing available discussion categories to choose from](https://github.com/user-attachments/assets/7fdcf50f-b74d-4e5d-87a3-9a05aa9bbc78)\r\n\r\n### `gh discussion create` (interactive)\r\n\r\n![Terminal showing interactive prompts for title and body input during discussion creation](https://github.com/user-attachments/assets/764ea1e8-2225-4c6f-9803-77e438e1d1fa)\r\n\r\n### `gh discussion edit` (interactive)\r\n\r\n1. Select fields to update\r\n![Terminal showing a multi-select prompt asking which fields to edit: title, body, category](https://github.com/user-attachments/assets/be05bef6-4dce-44bf-a78e-9b907ef70d46)\r\n\r\n2. Populate new values\r\n![Terminal showing input prompts pre-filled with current values for the selected fields](https://github.com/user-attachments/assets/b2bb8fa8-b0e0-475a-a7ff-a7d6fcf29b0b)\r\n\r\n3. Submit\r\n![Terminal showing the discussion URL printed after a successful edit](https://github.com/user-attachments/assets/9d8e9c31-020f-4961-8ce7-d43bf685ca0d)\r\n\r\n### `gh discussion edit` (non-interactive)\r\n\r\n![Terminal showing discussion edit via flags updating title, body, and labels in one command](https://github.com/user-attachments/assets/5fc60e1b-227a-4ee1-b5b7-2b6281561c5f)", "test_files": ["acceptance/acceptance_test.go", "pkg/cmd/discussion/client/client_test.go", "pkg/cmd/discussion/comment/comment_test.go", "pkg/cmd/discussion/create/create_test.go", "pkg/cmd/discussion/edit/edit_test.go", "pkg/cmd/discussion/list/list_test.go", "pkg/cmd/discussion/shared/labels_test.go", "pkg/cmd/discussion/shared/lookup_test.go", "pkg/cmd/discussion/view/view_test.go"], "test_cmd": "go test ./acceptance/... ./pkg/cmd/discussion/client/... ./pkg/cmd/discussion/comment/... ./pkg/cmd/discussion/create/... ./pkg/cmd/discussion/edit/... ./pkg/cmd/discussion/list/... ./pkg/cmd/discussion/shared/... ./pkg/cmd/discussion/view/...", "code_files": ["pkg/cmd/discussion/client/client.go", "pkg/cmd/discussion/client/client_mock.go", "pkg/cmd/discussion/client/types.go", "pkg/cmd/discussion/comment/comment.go", "pkg/cmd/discussion/create/create.go", "pkg/cmd/discussion/discussion.go", "pkg/cmd/discussion/edit/edit.go", "pkg/cmd/discussion/list/list.go", "pkg/cmd/discussion/shared/categories.go", "pkg/cmd/discussion/shared/client.go", "pkg/cmd/discussion/shared/labels.go", "pkg/cmd/discussion/shared/lookup.go", "pkg/cmd/discussion/view/view.go", "pkg/cmd/root/root.go"], "additions": 13075, "verified": "fails at parent, passes with the fix"} -{"pr": 13523, "title": "Support custom CLAUDE_CONFIG_DIR in install", "base_commit": "9a593ce81b593dee752cc11737d1a3ef768e52b3", "merge_commit": "412c5fae63239705c0120e76ec9508307d2709a0", "prompt": "Support custom CLAUDE_CONFIG_DIR in install\n\n\r\n\r\nFixes https://github.com/cli/cli/issues/13262\r\n\r\n## Summary\r\n\r\nThis updates Claude Code user-scope skill directory resolution to honor `CLAUDE_CONFIG_DIR` when it is set. User-scope installs for Claude Code now write to `$CLAUDE_CONFIG_DIR/skills`, falling back to the existing `~/.claude/skills` location when the environment variable is not present.\r\n\r\nThe change lives in the shared agent registry path resolver so `gh skill install`, `gh skill list`, and `gh skill update` all use the same location for Claude Code user-scope skills.\r\n\r\n## Tests\r\n\r\n- Added registry coverage for Claude Code's default user-scope path and `CLAUDE_CONFIG_DIR` override.\r\n- Added an install regression test that verifies `gh skill install --agent claude-code --scope user` writes under `$CLAUDE_CONFIG_DIR/skills` and not `~/.claude/skills`.\r\n- Ran `go test ./internal/skills/registry ./pkg/cmd/skills/...`.", "test_files": ["internal/skills/registry/registry_test.go", "pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./internal/skills/registry/... ./pkg/cmd/skills/install/...", "code_files": ["internal/skills/registry/registry.go"], "additions": 69, "verified": "fails at parent, passes with the fix"} -{"pr": 13471, "title": "add --all flag to install all skills in a repo", "base_commit": "8bd56966ac5e2fe7d3162ad424dd11d877f4815e", "merge_commit": "e6fa2faf9e3203c2caaa54dcb1526c5f093fa998", "prompt": "add --all flag to install all skills in a repo\n\nFixes https://github.com/cli/cli/issues/13453\r\n\r\n## Summary\r\n- Add `--all` to `gh skill install` so users can install every discovered skill from a repository without providing an individual skill name.\r\n- Reuse the existing all-skills selection path, including collision detection, so skills that would overwrite each other still fail with guidance.\r\n- Update help text, examples, and tests for flag parsing, validation, and multi-skill remote installs.\r\n\r\n## Testing\r\n- `go test ./pkg/cmd/skills/install`", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 78, "verified": "fails at parent, passes with the fix"} -{"pr": 13469, "title": "Improve update --all command if some skills don't have metadata", "base_commit": "81ed6d4e355446dbb4c1a7b038534948f7c195b8", "merge_commit": "5cfb648ace667b394728332d492b3e1a017baafa", "prompt": "Improve update --all command if some skills don't have metadata\n\n\r\n\r\nFixes https://github.com/cli/cli/issues/13369\r\n\r\n## Summary\r\n\r\nFixes `gh skill update --all` so it no longer prompts for skills that are missing GitHub metadata.\r\n\r\nWhen `--all` is used, skills without GitHub metadata are skipped with a notice, matching the flag's \"without prompting\" behavior.\r\n\r\n## Changes\r\n\r\n- Skip missing-metadata skills when `--all` is used instead of prompting interactively.\r\n- Keep the warning summary so users know which skills were skipped.\r\n- Update the warning text to explain that users can run `gh skill update ` interactively to add metadata, or reinstall the skill.\r\n- Add a regression test to verify `--all` does not prompt for missing metadata.\r\n\r\n## Testing\r\n\r\n- `go test ./pkg/cmd/skills/update/... -run TestUpdateRun -count=1`\r\n- `go test ./pkg/cmd/skills/... -count=1`", "test_files": ["pkg/cmd/skills/update/update_test.go"], "test_cmd": "go test ./pkg/cmd/skills/update/...", "code_files": ["pkg/cmd/skills/update/update.go"], "additions": 39, "verified": "fails at parent, passes with the fix"} -{"pr": 13459, "title": "fix discovery support in nested dirs", "base_commit": "8bd56966ac5e2fe7d3162ad424dd11d877f4815e", "merge_commit": "7f885723a9cb72cd4318eef3c831f8a7bb9d9093", "prompt": "fix discovery support in nested dirs\n\n\r\n\r\nFixes https://github.com/cli/cli/issues/13372\r\n\r\n## Summary\r\n\r\nFix `gh skill install` and `gh skill preview` handling for nested skill paths.\r\n\r\n## What changed\r\n\r\n- Allow `--allow-hidden-dirs` to discover hidden skill directories at any repository depth, not only at the root.\r\n- Treat deeply nested skill arguments as exact repo-relative paths in both `install` and `preview`.\r\n - Example: `packages/agent-skills/my-skill`\r\n- Preserve one-slash selectors like `owner/skill` as namespaced skill names, not paths.\r\n- Share path-detection logic between `install` and `preview`.\r\n- Add regression tests for nested hidden directories, arbitrary nested path installs, and arbitrary nested path previews.\r\n\r\n## Product note\r\n\r\nThis does not change the recommended Agent Skills publishing conventions or broaden search/publish behavior. Non-standard layouts are only supported when the user explicitly provides an exact path.\r\n\r\n## Testing\r\n\r\n- `go test ./internal/skills/discovery ./pkg/cmd/skills/install ./pkg/cmd/skills/preview -run 'TestIsSkillPath|Test_isSkillPath|TestPreviewRun|TestMatchHiddenDirConventions|TestDiscoverSkillsWithOptions|TestDiscoverLocalSkillsWithOptions|TestInstallRun' -count=1`\r\n- `go test ./internal/skills/discovery ./pkg/cmd/skills/... -count=1`\r\n- `git diff --check`", "test_files": ["internal/skills/discovery/discovery_test.go", "pkg/cmd/skills/install/install_test.go", "pkg/cmd/skills/preview/preview_test.go"], "test_cmd": "go test ./internal/skills/discovery/... ./pkg/cmd/skills/install/... ./pkg/cmd/skills/preview/...", "code_files": ["internal/skills/discovery/discovery.go", "pkg/cmd/skills/install/install.go", "pkg/cmd/skills/preview/preview.go"], "additions": 271, "verified": "fails at parent, passes with the fix"} -{"pr": 13449, "title": "fix(skills): stage updates in a temp dir and swap in-place", "base_commit": "a6012aca41ffa2d943ea9f12094a7398ce2e4b7e", "merge_commit": "01bcd474447b5034da20686c838ae4b0cf2b23f5", "prompt": "fix(skills): stage updates in a temp dir and swap in-place\n\nCloses #13370.\n\n## Problem\n\n`gh skill update` could relocate skills and delete the original install directory:\n\n- With `--dir`, namespaced layouts (`{dir}/{namespace}/{name}/SKILL.md`) had their install base computed by walking `filepath.Dir` twice, putting the new install one level too shallow. The post-install migration step then `RemoveAll`ed the original namespaced directory, taking the user's files with it.\n- Without `--dir`, the same migration cleanup quietly relocated namespaced skills found under an agent install directory to a flat layout, even though users expect updates to land where the skill currently lives.\n\nEither path breaks symlinks, mounts, and any external references that point at the skill directory.\n\n## Fix\n\nEach update is staged into a sibling directory of the existing skill dir (same filesystem, so renames are atomic). On success the contents are swapped in via per-entry rename:\n\n1. Move every existing entry from the skill dir into a sibling backup dir.\n2. Move every staged entry into the skill dir.\n3. Remove the backup.\n\nIf any step fails, the rollback path removes any freshly installed entries and moves the originals back from the backup.\n\nThis guarantees:\n\n- All updates happen in-place, regardless of layout (flat vs. namespaced) and regardless of whether the skill was found via an agent host or via `--dir`.\n- The skill directory's inode is preserved, so symlinks, mounts, and external references continue to resolve.\n- Stale files from the previous version are removed.\n- A failure at any point (install, read, rename) leaves the existing skill completely untouched.\n\n## Tests\n\n- New acceptance test `` plants a namespaced skill, runs `gh skill update --dir`, and asserts the skill remains at the original namespaced path with no flat-path duplicate.\n- New unit test `TestSwapDirectoryContents_PreservesDestInode` asserts the skill directory's identity is preserved across a successful swap (via `os.SameFile`).\n- New unit test `TestSwapDirectoryContents_RollsBackOnFailure` exercises the rollback path and asserts the original content (including nested subdirs) is fully restored.\n- The \"namespaced skill with `--dir`\" unit test is updated to assert in-place behavior and stale-file cleanup.\n- The existing `install_failure_during_update_reports_error_and_continues` unit test had a harness shortcut that silently skipped its `verify` block whenever `wantErr` was set. That shortcut is removed so the \"preserve original on install failure\" assertion is now actually enforced.", "test_files": ["pkg/cmd/skills/update/update_test.go"], "test_cmd": "go test ./pkg/cmd/skills/update/...", "code_files": ["pkg/cmd/skills/update/update.go"], "additions": 242, "verified": "fails at parent, passes with the fix"} -{"pr": 13430, "title": "Derive digest algorithm from ref length in release verify commands", "base_commit": "b99d73d7421ae182b8ab3f5b4469dff93c792da9", "merge_commit": "f1c10e032a636540a5e28705682e203b118a47fa", "prompt": "Derive digest algorithm from ref length in release verify commands\n\nFixes #13429\n\n### Summary\n\nThe `gh release verify` and `gh release verify-asset` commands hard-coded a `sha1:` prefix when constructing the digest identifier for a release tag's commit SHA. Once GitHub repositories using SHA-256 commit digests are supported, that ref will be a 64-character SHA-256 hash and labeling it as `sha1:` is both misleading in user-facing output and incorrect for the attestation lookup.\n\n### Changes\n\n- Added a small shared helper `DigestAlgForRef(digest string) string` in `` that returns `\"sha256\"` for 64-character digests and `\"sha1\"` otherwise (preserving existing behavior).\n- Replaced the hard-coded `\"sha1\"` argument in `` and `` with a call to the new helper.\n- Added unit tests for `DigestAlgForRef` covering SHA-1, SHA-256, empty, and unexpected lengths.\n- Added `*_SHA256` variants of the existing `FailedNoAttestations` tests in both commands that assert the error message includes `sha256:`.\n\n### Verification\n\n- `go test ./pkg/cmd/release/shared/... ./pkg/cmd/release/verify/... ./pkg/cmd/release/verify-asset/...` passes.\n- `go build ./...` passes.\n- Existing SHA-1 tests continue to pass (no regression).", "test_files": ["pkg/cmd/release/shared/fetch_test.go", "pkg/cmd/release/verify-asset/verify_asset_test.go", "pkg/cmd/release/verify/verify_test.go"], "test_cmd": "go test ./pkg/cmd/release/shared/... ./pkg/cmd/release/verify/... ./pkg/cmd/release/verify-asset/...", "code_files": ["pkg/cmd/release/shared/fetch.go", "pkg/cmd/release/verify-asset/verify_asset.go", "pkg/cmd/release/verify/verify.go"], "additions": 153, "verified": "fails at parent, passes with the fix"} -{"pr": 13421, "title": "Allow agents as application for secrets", "base_commit": "909cbd7d8834b5fb63d671a55a540c2cfa04d669", "merge_commit": "e60f00e30880079adefd258c388c642b1e97ddf6", "prompt": "Allow agents as application for secrets\n\nFixes https://github.com/cli/cli/issues/13419\r\n\r\nI built it locally and ran `bin/gh secret set TEST_SECRET -a agents -b 123 -o ` and it worked exactly as expected.\r\n\r\nWhat might be missing is another test? I looked through it and added a little bit but maybe a maintainer has a little more input regarding that.", "test_files": ["pkg/cmd/secret/delete/delete_test.go", "pkg/cmd/secret/list/list_test.go", "pkg/cmd/secret/set/set_test.go", "pkg/cmd/secret/shared/shared_test.go"], "test_cmd": "go test ./pkg/cmd/secret/delete/... ./pkg/cmd/secret/list/... ./pkg/cmd/secret/set/... ./pkg/cmd/secret/shared/...", "code_files": ["pkg/cmd/secret/delete/delete.go", "pkg/cmd/secret/list/list.go", "pkg/cmd/secret/secret.go", "pkg/cmd/secret/set/set.go", "pkg/cmd/secret/shared/shared.go"], "additions": 199, "verified": "fails at parent, passes with the fix"} -{"pr": 13418, "title": "New `gh skill list` to inventory installed agent skills", "base_commit": "e6fa2faf9e3203c2caaa54dcb1526c5f093fa998", "merge_commit": "674e02a56b020549b45f970808ce7c20e179824a", "prompt": "New `gh skill list` to inventory installed agent skills\n\nCloses #13245 \r\n\r\n## Summary\r\n\r\nAdds `gh skill list` to inventory installed agent skills across known agent host directories.\r\n\r\n- Scans project and user skill install paths for all registered agent hosts\r\n- Deduplicates shared install directories like `.agents/skills`\r\n- Supports filtering with `--agent`, `--scope`, and custom scanning with `--dir`\r\n- Renders a concise table with `NAME`, `AGENT`, `SCOPE`, and `SOURCE`\r\n- Supports parseable output via `--json`, `--jq`, and `--template` with fields for `skillName`, `hosts`, `scope`, `sourceURL`, `version`, `pinned`, and `path`\r\n- Records privacy-safe `skill_list` telemetry with filters, output format, and result count\r\n\r\n\r\n## Testing\r\n\r\n- `go test ./pkg/cmd/skills/list/...`\r\n- `go test ./pkg/cmd/skills/...`", "test_files": ["pkg/cmd/skills/list/list_test.go"], "test_cmd": "go test ./pkg/cmd/skills/list/...", "code_files": ["pkg/cmd/skills/list/list.go", "pkg/cmd/skills/skills.go"], "additions": 1123, "verified": "fails at parent, passes with the fix"} -{"pr": 13413, "title": "Overwrite existing parent on `gh issue edit --add-sub-issue`", "base_commit": "6106bd30764b17caac56fa57876ff9f5536093d4", "merge_commit": "b08503368202901bbc1b6fc7936dff650eb32012", "prompt": "Overwrite existing parent on `gh issue edit --add-sub-issue`\n\nFix the `Sub issue may only have one parent` 422 that surfaces when `--add-sub-issue` is handed a candidate that already belongs to another parent. Pass `replaceParent: true` so the take-over is silent.\r\n\r\nStacked on top of #13412 (which is on top of #13411).", "test_files": ["acceptance/acceptance_test.go", "pkg/cmd/issue/edit/edit_test.go"], "test_cmd": "go test ./acceptance/... ./pkg/cmd/issue/edit/...", "code_files": ["api/queries_issue.go"], "additions": 221, "verified": "fails at parent, passes with the fix"} -{"pr": 13412, "title": "Rename Editable.Allowed to Selectable", "base_commit": "72859237e26439cfc23be9fb2a8144dc441a0826", "merge_commit": "2503dcfd79e372bfade8f41d05a2fbae57da1e26", "prompt": "Rename Editable.Allowed to Selectable\n\nAddresses [thread r3196020651](https://github.com/cli/cli/pull/13057#discussion_r3196020651) on #13057.\r\n\r\nStacked on top of #13411 (`-feedback`) since the field name is leveraged in the parent Issues 2.0 PR.", "test_files": ["acceptance/acceptance_test.go", "pkg/cmd/issue/edit/edit_test.go", "pkg/cmd/pr/shared/survey_test.go"], "test_cmd": "go test ./acceptance/... ./pkg/cmd/issue/edit/... ./pkg/cmd/pr/shared/...", "code_files": ["api/queries_issue.go", "pkg/cmd/issue/edit/edit.go", "pkg/cmd/pr/edit/edit.go", "pkg/cmd/pr/shared/editable.go"], "additions": 241, "verified": "fails at parent, passes with the fix"} -{"pr": 13403, "title": "Use int64 for GitHub database IDs", "base_commit": "1e6bb88c6d8503189bca408f7be162018b1acf84", "merge_commit": "0274077b56a5ef8e575358721149cd02888b2a5f", "prompt": "Use int64 for GitHub database IDs\n\n## Use `int64` for GitHub database IDs\r\n\r\nCloses #9247\r\n\r\n### Problem\r\n\r\nSeveral structs in the CLI use Go's `int` type for GitHub database ID fields. Go's `int` is platform-dependent and could be 32-bit on some architectures, while GitHub internally uses 64-bit integers for database IDs. The [REST API OpenAPI spec](https://github.com/github/rest-api-description) explicitly declares many resource IDs as `integer` with `format: int64` (e.g. repositories, GPG keys, SSH keys), and the [GraphQL API has migrated some `databaseId` fields from `Int` to `BigInt`](https://docs.github.com/en/graphql/overview/breaking-changes).\r\n\r\n### Changes\r\n\r\nUpdated all struct fields representing GitHub database IDs from `int` to `int64`, along with their downstream usage:\r\n\r\n- **Codespaces**: `Repository.ID`, `CreateCodespaceParams.RepositoryID`, `startCreateRequest.RepositoryID`, plus interface/mock/test cascading\r\n- **Rulesets**: `RulesetGraphQL.DatabaseId`, `RulesetREST.Id`, `BypassActors.ActorId`, `RulesetRule.RulesetId`, and the skills `rulesetsResponse.ID`\r\n- **Keys**: `deployKey.ID`, `gpgKey.ID`, `sshKey.ID`\r\n- **Cache**: `Cache.Id`, plus `parseCacheID` and `deleteCacheByID` (which still used `int`/`strconv.Atoi`)\r\n- **Autolinks**: `Autolink.ID`\r\n- **Agent tasks**: `JobActor.ID`, `JobPullRequest.ID`\r\n\r\nAll `strconv.Itoa()` calls on these fields were updated to `strconv.FormatInt(x, 10)`.\r\n\r\nGraphQL response structs were also audited - only `RulesetGraphQL.DatabaseId` needed updating. Others were already correct (`GitHubUser.DatabaseID` is `int64`, `FullDatabaseID` is `string` for GraphQL `BigInt`).\r\n\r\n### Future: Custom linter to prevent regressions\r\n\r\nA custom `go/analysis` linter that flags struct fields with ID-like names or JSON tags still using `int` has been prototyped on a separate branch: [`9247-idtype-linter`](https://github.com/cli/cli/compare/trunk...9247-idtype-linter). It's split out to keep this PR focused on the type changes. The linter correctly identifies all the violations fixed here.\r\n\r\n
\r\nLinter output BEFORE this PR (27 violations)\r\n\r\n```\r\n:38:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:43:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:20:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:25:2: struct field Id looks like a GitHub database ID but uses int; use int64 instead\r\n:153:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:807:2: struct field RepositoryID looks like a GitHub database ID but uses int; use int64 instead\r\n:858:2: struct field RepositoryID looks like a GitHub database ID but uses int; use int64 instead\r\n:203:4: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:216:4: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:260:4: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:591:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:614:2: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:621:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:639:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:660:2: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:666:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:858:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:879:2: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:885:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:14:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:6:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:16:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:13:2: struct field DatabaseId looks like a GitHub database ID but uses int; use int64 instead\r\n:27:2: struct field Id looks like a GitHub database ID but uses int; use int64 instead\r\n:33:3: struct field ActorId looks like a GitHub database ID but uses int; use int64 instead\r\n:53:2: struct field RulesetId looks like a GitHub database ID but uses int; use int64 instead\r\n:67:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n```\r\n\r\n
\r\n\r\n
\r\nLinter output AFTER this PR (0 violations)\r\n\r\n```\r\n(clean - no output)\r\n```\r\n\r\n
\r\n\r\n### Reviewer Notes\r\n\r\nWe should run A/C tests on this before merging.", "test_files": ["pkg/cmd/codespace/create_test.go"], "test_cmd": "go test ./pkg/cmd/codespace/...", "code_files": ["internal/codespaces/api/api.go", "pkg/cmd/agent-task/capi/job.go", "pkg/cmd/cache/delete/delete.go", "pkg/cmd/cache/shared/shared.go", "pkg/cmd/codespace/common.go", "pkg/cmd/codespace/create.go", "pkg/cmd/codespace/mock_api.go", "pkg/cmd/gpg-key/delete/delete.go", "pkg/cmd/gpg-key/delete/http.go", "pkg/cmd/repo/autolink/shared/autolink.go", "pkg/cmd/repo/deploy-key/list/http.go", "pkg/cmd/repo/deploy-key/list/list.go", "pkg/cmd/ruleset/list/list.go", "pkg/cmd/ruleset/shared/shared.go", "pkg/cmd/ruleset/view/view.go", "pkg/cmd/skills/publish/publish.go", "pkg/cmd/ssh-key/list/list.go", "pkg/cmd/ssh-key/shared/user_keys.go"], "additions": 61, "verified": "fails at parent, passes with the fix"} -{"pr": 13393, "title": "fix(copilot): hint to run copilot directly when exec fails", "base_commit": "9b505c3fb8c3e52100575adbad2da7c4714684d8", "merge_commit": "fe996d33ac852eafdb2769fcba063860be1b4e6a", "prompt": "fix(copilot): hint to run copilot directly when exec fails\n\n## Summary\n\nWhen `gh copilot` finds the `copilot` binary but fails to execute it (e.g., due to unusual characters like parentheses in the file path on Windows), the error message now includes a hint:\n\n```\nFailed to run '', try running `copilot` directly without `gh`.\n```\n\n## Details\n\nOn Windows, `cmd.exe` shims (e.g., those planted by VS Code or npm) can fail when the path contains special characters like `(`. Since `gh copilot` invokes the binary via `os/exec`, these failures surface as opaque errors. This change adds a practical workaround hint so users can still use Copilot CLI directly.\n\nRelated to #13106", "test_files": ["pkg/cmd/copilot/copilot_test.go"], "test_cmd": "go test ./pkg/cmd/copilot/...", "code_files": ["pkg/cmd/copilot/copilot.go"], "additions": 45, "verified": "fails at parent, passes with the fix"} -{"pr": 13362, "title": "Bump `gh copilot` telemetry sampling to 100%", "base_commit": "3c162a78efc4cf48f6582f261223166af2558a64", "merge_commit": "6176c3eee4b70d0ccf3c6a1503035d049ca4e81b", "prompt": "Bump `gh copilot` telemetry sampling to 100%\n\n## Description\r\n\r\nFixes https://github.com/github/cli/issues/1163\r\n\r\nBumps the telemetry sampling rate for the `gh copilot` command from 1% to 100%, to allow for better analysis of usage.", "test_files": ["pkg/cmd/copilot/copilot_test.go"], "test_cmd": "go test ./pkg/cmd/copilot/...", "code_files": ["pkg/cmd/copilot/copilot.go", "pkg/cmd/root/root.go"], "additions": 24, "verified": "fails at parent, passes with the fix"} -{"pr": 13068, "title": "Print `gh auth refresh` for 401 returns", "base_commit": "49d4747a81425418dd2e7bee7e33541b7c644ca9", "merge_commit": "7c439196c1fc4d645d091e83029370cef845587c", "prompt": "Print `gh auth refresh` for 401 returns\n\n`gh auth refresh` exists to make it simpler for users to refresh their tokens on expiration/scope mismatch, but help messages only suggest using it in limited scenarios, and not in a common case of a token expiring and the user receiving a 401 error. Now, the auth flow will detect this case, and for refreshable tokens (namely, tokens created by logging in with `gh auth login` in the first place), it will suggest using `gh auth refresh` for these cases.\r\n\r\nFixes https://github.com/cli/cli/issues/13066.", "test_files": ["internal/ghcmd/cmd_test.go", "pkg/cmd/auth/status/status_test.go"], "test_cmd": "go test ./internal/ghcmd/... ./pkg/cmd/auth/status/...", "code_files": ["internal/ghcmd/cmd.go", "pkg/cmd/auth/shared/writeable.go", "pkg/cmd/auth/status/status.go"], "additions": 108, "verified": "fails at parent, passes with the fix"} -{"pr": 13057, "title": "Add Issues 2.0 support: issue types, sub-issues, and relationships", "base_commit": "3c162a78efc4cf48f6582f261223166af2558a64", "merge_commit": "20147bf81fed534faf1b5c9be12638983b8e5e82", "prompt": "Add Issues 2.0 support: issue types, sub-issues, and relationships\n\n# Add Issues 2.0 support: issue types, sub-issues, and relationships\n\nCloses #10298\nCloses #9696\nCloses #11757\nCloses #12477\nCloses #12152\n\nAdds support for GitHub's Issues 2.0 features across `gh issue create`, `edit`, `view`, and `list`.\n\n## New flags\n\n### `gh issue create`\n\n| Flag | Description |\n|------|-------------|\n| `--type Bug` | Set the issue type |\n| `--parent 100` | Add as a sub-issue of the specified parent (number or URL) |\n| `--blocked-by 200,201` | Mark as blocked by these issues |\n| `--blocking 300` | Mark as blocking these issues |\n\nInteractive mode prompts for issue type when the repo has types configured.\n\n### `gh issue edit`\n\n| Flag | Description |\n|------|-------------|\n| `--type Bug` | Set the issue type |\n| `--set-parent 100` | Set or replace the parent issue |\n| `--remove-parent` | Remove the parent issue |\n| `--add-sub-issue 123,124` | Add sub-issues |\n| `--remove-sub-issue 123` | Remove a sub-issue |\n| `--add-blocked-by 200` | Add blocked-by relationship |\n| `--remove-blocked-by 201` | Remove blocked-by relationship |\n| `--add-blocking 300,301` | Add blocking relationships |\n| `--remove-blocking 300` | Remove blocking relationship |\n\nInteractive mode adds Type and Parent to the field picker. Batch editing\nsupported for `--type` across multiple issues.\n\n### `gh issue view`\n\nTTY output now displays:\n- Issue type on the state line (e.g., `Bug \u00b7 Open`)\n- Type, Parent, Blocked by, Blocking metadata rows\n- Sub-issues section with completion progress (e.g., `Sub-issues \u00b7 3/5 (60%)`)\n\nJSON output supports new fields: `issueType`, `parent`, `subIssues`,\n`subIssuesSummary`, `blockedBy`, `blocking`. The `subIssues`, `blockedBy`,\nand `blocking` fields are objects of the shape `{ \"nodes\": [...], \"totalCount\": N }`\n(rather than flat arrays) so consumers can detect when the truncation\nlimit is reached. Each node and the `parent` object include the canonical\n`id`.\n\n### `gh issue list`\n\n| Flag | Description |\n|------|-------------|\n| `--type Bug` | Filter issues by type |\n\n## GHES compatibility\n\n- **Issue types and sub-issues**: GA on all supported GHES versions (3.17+). No feature detection needed.\n- **Relationships** (blocked-by/blocking): Requires GHES 3.19+. Feature detection via `__type` schema introspection for the `blockedBy` field on the Issue type. Unsupported GHES versions receive a clear error message. Gated with `// TODO IssueRelationshipsCleanup` for cleanup when GHES 3.18 support ends.\n\n## Implementation details\n\n- Post-creation mutations for type, parent, and relationships (same pattern as projectV2 and assignee mutations)\n- `--blocking` and `--add-blocking` swap API arguments: calls `addBlockedBy(issueId=OTHER, blockingIssueId=THIS)`\n- Cross-repo references supported via URL for `--parent`, `--blocked-by`, `--blocking`, and sub-issue flags\n- Shared helpers extracted to `` (`ResolveIssueRef`, `ResolveIssueTypeName`)\n- Issue-only fields (Type, Parent) gated behind `Allowed` in the Editable pattern to prevent leaking into `gh pr edit`\n- Issue type names with spaces are quoted in search queries (`type:\"Bug Report\"`)\n\n## Testing\n\n- **34 new flag parsing tests** across create, edit, and list\n- **18 new HTTP mock behavior tests** covering mutations, error cases, and GHES unsupported paths\n- **5 new view tests** (TTY rendering, JSON export)\n- **2 regression tests** (issue-only fields don't leak into PR edit, no-new-fields view unchanged)\n\n## Changes\n\n17 files changed, 2105 insertions(+), 18 deletions(-)\n\n| File | Change |\n|------|--------|\n| `` | New types, Issue struct fields, mutation functions, helpers |\n| `` | GraphQL fragment cases, `issueOnlyFields` |\n| `` | ExportData cases for new fields |\n| `` | `IssueRelationshipsSupported` detection |\n| `` | New flags, post-creation mutations, interactive type picker |\n| `` | New flags, mutations, interactive Type/Parent picker |\n| `` | TTY rendering, conditional relationship fields |\n| `` | `--type` filter via search path |\n| `` | Shared `ResolveIssueRef`, `ResolveIssueTypeName` |\n| `` | `IssueType`/`Parent` fields, `Allowed` gating |\n| `` | `IssueType` in `FilterOptions` and search query |\n\n## Key notes for reviewers\n\n- **`--blocking` arg swap**: The GitHub API only has `addBlockedBy(issueId, blockingIssueId)`. To support `--blocking`, we swap the arguments \u2014 the OTHER issue becomes `issueId` and THIS issue becomes `blockingIssueId`. Same for `--remove-blocking`.\n- **Editable `Allowed` gating**: `IssueType` and `Parent` are added to the shared `Editable` struct but gated behind `Allowed = true`, which only the issue edit command sets. This prevents these issue-only fields from leaking into `gh pr edit`'s interactive picker. Regression test in ``.\n- **View relationship fields are GHES-gated**: `blockedBy` and `blocking` are only added to the GraphQL query when `IssueRelationshipsSupported` is true. Without this, `gh issue view` would break on GHES 3.17\u20133.18 where these fields don't exist.\n- **Batch edit type resolution**: When editing multiple issues with `--type`, the type name is resolved to an ID once before the loop rather than per-issue, avoiding N-1 redundant `RepoIssueTypes` API calls.\n\n## Manual test results\n\nAll scenarios tested against on github.com.\n\n24/24 scenarios passing (click to expand)\n\n### Issue types\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 1 | `create-with-type` | `gh issue create --title \"...\" --type Bug` | \u2705 [#1](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/1) created, type=Bug verified |\n| 2 | `create-error-invalid-type` | `gh issue create --title \"Oops\" --type Bugz` | \u2705 Error: `type \"Bugz\" not found; available types: Task, Bug, Feature` |\n| 3 | `edit-change-type` | `gh issue edit 1 --type Feature` | \u2705 Type changed to Feature verified |\n| 4 | `create-interactive-type` | `gh issue create` (interactive) | \u2705 [#21](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/21) Type picker shown, Bug selected and set |\n\n### Sub-issues\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 5 | `create-with-parent` | `gh issue create --title \"...\" --parent 3` | \u2705 [#4](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/4) created as sub-issue of #3 |\n| 6 | `edit-set-parent` | `gh issue edit 5 --set-parent 3` | \u2705 Parent set, verified via `--json parent` |\n| 7 | `edit-remove-parent` | `gh issue edit 5 --remove-parent` | \u2705 Parent removed, verified null |\n| 8 | `edit-add-sub-issues` | `gh issue edit 3 --add-sub-issue 6,7` | \u2705 Sub-issues added, verified via `--json subIssues` |\n| 9 | `edit-remove-sub-issue` | `gh issue edit 3 --remove-sub-issue 6` | \u2705 Sub-issue removed |\n| 10 | `edit-error-mutual-parent` | `gh issue edit 5 --set-parent 1 --remove-parent` | \u2705 Error: `specify only one of --set-parent or --remove-parent` |\n\n### Relationships\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 11 | `create-with-relationships` | `gh issue create --blocked-by 8 --blocking 9` | \u2705 [#11](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/11) blockedBy=#8, blocking=#9 verified |\n| 12 | `edit-add-remove-blocked-by` | `gh issue edit 14 --add-blocked-by 12 --remove-blocked-by 13` | \u2705 Relationships updated |\n| 13 | `edit-add-blocking` | `gh issue edit 14 --add-blocking 15,16` | \u2705 Blocking relationships added (swapped args verified) |\n\n### View\n\n| # | Scenario | Verification | Result |\n|---|----------|-------------|--------|\n| 14 | `view-with-type` | TTY shows `Bug \u00b7 Open` on state line, `Type: Bug` row | \u2705 |\n| 15 | `view-parent-sub-issues` | TTY shows Parent row, Sub-issues section with progress | \u2705 |\n| 16 | `view-child-parent` | TTY shows parent reference for child issue | \u2705 |\n| 17 | `view-relationships` | TTY shows Blocked by and Blocking rows | \u2705 |\n| 18 | `view-json-issueType` | `--json issueType` returns id, name, description, color | \u2705 |\n| 19 | `view-json-parent-subIssues` | `--json parent,subIssues,subIssuesSummary` returns structured data | \u2705 |\n| 20 | `view-json-relationships` | `--json blockedBy,blocking` returns `{ nodes: [...], totalCount: N }` with id, number, title, url, state | \u2705 |\n\n### List\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 21 | `list-filter-by-type` | `gh issue list --type Bug` | \u2705 Filtered results returned |\n\n### Combined\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 22 | `create-all-flags` | `gh issue create --type Task --parent 3 --blocked-by 8 --blocking 9` | \u2705 [#17](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/17) all fields set |\n| 23 | `edit-batch-type` | `gh issue edit 18 19 20 --type Bug` | \u2705 All 3 issues updated to Bug |\n| 24 | `edit-interactive` | `gh issue edit 21` (interactive) | \u2705 Picker shows Type and Parent fields |\n\n**TODO**: GHES-specific scenarios (`create-error-ghes-relationships`), but GHES feature detection does have unit test coverage with mock introspection responses.", "test_files": ["acceptance/acceptance_test.go", "api/export_pr_test.go", "internal/featuredetection/feature_detection_test.go", "pkg/cmd/issue/create/create_test.go", "pkg/cmd/issue/edit/edit_test.go", "pkg/cmd/issue/list/list_test.go", "pkg/cmd/issue/view/view_test.go", "pkg/cmd/pr/shared/params_test.go", "pkg/cmd/pr/shared/survey_test.go", "pkg/search/query_test.go"], "test_cmd": "go test ./acceptance/... ./api/... ./internal/featuredetection/... ./pkg/cmd/issue/create/... ./pkg/cmd/issue/edit/... ./pkg/cmd/issue/list/... ./pkg/cmd/issue/view/... ./pkg/cmd/pr/shared/... ./pkg/search/...", "code_files": ["api/export_pr.go", "api/queries_issue.go", "api/query_builder.go", "internal/featuredetection/feature_detection.go", "pkg/cmd/issue/create/create.go", "pkg/cmd/issue/edit/edit.go", "pkg/cmd/issue/list/list.go", "pkg/cmd/issue/shared/lookup.go", "pkg/cmd/issue/view/view.go", "pkg/cmd/pr/edit/edit.go", "pkg/cmd/pr/shared/editable.go", "pkg/cmd/pr/shared/params.go", "pkg/search/query.go"], "additions": 2925, "verified": "fails at parent, passes with the fix"} +{"pr": 13988, "title": "Fix `RESTWithNext` error type, repairing `gh status` and attestation retries", "base_commit": "55dbb4dc6b7edb10b48e3d7fc5bccd32318d1b55", "merge_commit": "e83adbc0642994fae7c39a9a012eb34b8c81f4f1", "prompt": "Fix `RESTWithNext` error type, repairing `gh status` and attestation retries\n\n## Description\r\n\r\nThe `api.Client.RESTWithNext` method did not handle errors in the same way as `api.Client.REST`. The latter wrapped the `go-gh` error into a new `api` error and the former simply returned it. From an error message point of view, there was no visible difference but programmatic checks for `errors.As(err, &api.HTTPError{})` would be true for `REST` and false for `RESTWithNext`.\r\n\r\nI cannot find any reason for this to have been intentional. I suspect what happened was that `RESTWithNext` previously used to handle this case via the following removed code:\r\n\r\n```go\r\n\tsuccess := resp.StatusCode >= 200 && resp.StatusCode < 300\r\n\tif !success {\r\n\t\treturn \"\", HandleHTTPError(resp)\r\n\t}\r\n```\r\n\r\nBut at some point `go-gh` was created, and the `go-gh` api client `Request`/`RequestWithContext` methods began returning errors for non success http status codes.\r\n\r\nThis broke two behaviours:\r\n * `gh status` is supposed to gracefully degrade if notifications or events are inaccessible.\r\n * `gh attestation` commands is supposed to retry attestation fetching for 500 status codes.\r\n\r\n## Notes\r\n\r\nThis is a prerequisite for consolidating GitHub API URL derivation onto `api.Client` (part of the groundwork for per-host API routing, #13717 / #13760), but it is a user-facing bugfix in its own right and is worth reviewing as such.", "test_files": ["api/client_test.go", "pkg/cmd/attestation/api/client_test.go", "pkg/cmd/status/status_test.go"], "test_cmd": "go test ./api/... ./pkg/cmd/attestation/api/... ./pkg/cmd/status/...", "code_files": ["api/client.go"], "additions": 156, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13987, "title": "Replace Windsurf with Devin in skill agents", "base_commit": "b1a9f7b183c12ae111ea63048d49aad2a53e9101", "merge_commit": "89f3699581659f514c4276bef0820d8caadbb67d", "prompt": "Replace Windsurf with Devin in skill agents\n\nFixes #13986\n\n- Replace the `windsurf` agent entry with `devin`\n- Install Devin skills in `.devin/skills` at project and user scope\n- Update install help text and registry tests\n\n## Testing\n\n- `go test ./internal/skills/... ./pkg/cmd/skills/...`", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go", "pkg/cmd/skills/install/install.go"], "additions": 25, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13967, "title": "Fix skill picker label wrapping", "base_commit": "01b79dd983af0859e4e3d7454961ad3f08cf88b4", "merge_commit": "c2ad3b0eb7ead66eec3a8a61239e10a765332ec7", "prompt": "Fix skill picker label wrapping\n\nTruncates skill picker labels to the available terminal width so descriptions do not wrap onto a separate line.\r\n\r\nAdds coverage for multiple terminal widths.\r\n\r\n**Before**\r\n\"Screenshot\r\n\r\n**After (Examples with varying terminal width)**\r\n\"Screenshot\r\n\"Screenshot\r\n\"Screenshot", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 50, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["multiSelectLabelMargin"]} +{"pr": 13864, "title": "Add Grok skill host support", "base_commit": "2b970995a3c63b7a7600f242d55d15185a82ed8b", "merge_commit": "9d95dd7344abe6388b59e25b8db54a3c7371cd6a", "prompt": "Add Grok skill host support\n\n## Summary\n- add Grok as a supported `gh skill` agent host\n- install project and user skills in `.grok/skills`\n\nFixes #13846", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go", "pkg/cmd/skills/install/install.go", "pkg/cmd/skills/update/update.go"], "additions": 26, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13823, "title": "Add named field columns to gh project item-list", "base_commit": "bba0816a3808c7f7ea0a7e75be9d365b3410c524", "merge_commit": "efe3f165dd297c85fff11473dbf586f2d39fbf86", "prompt": "Add named field columns to gh project item-list\n\nProposal: cli/cli#13816\nTracking issue: github/planning-tracking#3431\n\n## What this does\n\nAdds named field columns to `gh project item-list`:\n\n```\ngh project item-list --owner --field \"Status\"\n```\n\n- `--field ` (repeatable) resolves the field by name and adds a column showing each item's value for it, with no separate field-ID preflight lookup.\n- `--field-id ` does the same by node ID. The two are mutually exclusive, and an unknown `--field-id` lists candidate fields as `name (id)` for symmetry with the name-based errors.\n- Name matching is case-insensitive, mirroring the Projects v2 platform API.\n\n## Relationship to cli/cli#13807\n\nThis builds on the same shared name-resolution layer as the `item-edit` PR cli/cli#13807. To keep the two PRs independently mergeable, each one adds its own copy of the small, self-contained field-resolver file `` (~90 lines: `ResolveFieldByName`, `ResolveFieldByID`, and their error types), with identical contents in both. Because the copies match exactly, Git merges them into a single file automatically, so the two PRs can land in either order without conflicts or duplicate-definition build errors. The item-list-only `FieldValueNodes.DisplayValue` helper lives in its own ``, so this PR leaves `` untouched.", "test_files": ["pkg/cmd/project/item-list/item_list_test.go", "pkg/cmd/project/shared/queries/queries_test.go", "pkg/cmd/project/shared/queries/resolve_fields_test.go"], "test_cmd": "go test ./pkg/cmd/project/item-list/... ./pkg/cmd/project/shared/queries/...", "code_files": ["pkg/cmd/project/item-list/item_list.go", "pkg/cmd/project/shared/queries/queries.go", "pkg/cmd/project/shared/queries/resolve_fields.go"], "additions": 813, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["fields", "DisplayValue"]} +{"pr": 13807, "title": "Add name-based resolution to gh project item-edit", "base_commit": "9d95dd7344abe6388b59e25b8db54a3c7371cd6a", "merge_commit": "d1897f89b294fc172e5b2993325ad1a0184f711d", "prompt": "Add name-based resolution to gh project item-edit\n\nProposal: #13816\nTracking issue: github/planning-tracking#3431\n\n> **Companion PR:** The `item-list` read path ships as a separate, independently-mergeable PR \u2014 #13823. Both PRs add their own copy of the small `` file, with identical contents. Because the two copies match exactly, Git merges them into one automatically, so the PRs can land in either order without conflicts.\n\n## What this does\n\nLets `gh project item-edit` address ProjectV2 fields, single-select options, and items by **name** instead of node IDs. Existing ID-based flags are fully backward compatible; the name flags are additive and optional.\n\n### `item-edit` (new name-based mode)\nMirrors `item-add` addressing:\n\n```\ngh project item-edit --owner --url --field \"Status\" --value \"In Progress\"\n```\n\n- `[]` positional + `--owner` resolve the project.\n- `--url` resolves the item within that project.\n- `--field ` resolves the field; `--value ` is dispatched by the field's data type (text/number/date, and for single-select the value is resolved as an option **name**).\n\nhttps://github.com/user-attachments/assets/4e7dceb1-0e4f-4706-9d95-37570a56cdcd\n\n### Mutual exclusivity (enforced in code)\nEvery name/ID pair fails clearly when both are set, never silently merged: `--field` xor `--field-id`, `--url` xor `--id`, and `--value` xor the typed value flags (`--text`/`--number`/`--date`/`--single-select-option-id`/`--iteration-id`). Name-based flags also require the project number argument. Invalid combos are rejected before any GraphQL request fires.\n\n### Errors are self-correctable\nName resolution happens before the ID-typed GraphQL mutation, so a bad name fails loudly with candidate names rather than `400 []`. Six failure modes mirror the sibling MCP PR (github/github-mcp-server#2760): field-not-found, field-ambiguous, option-not-found, option-ambiguous, wrong-field-type, item-not-in-project \u2014 surfaced as human-readable stderr messages listing candidates (CLI convention; not JSON).\n\n### Name matching is case-insensitive\nField and option names are matched with `strings.EqualFold` to mirror the Projects v2 platform API, which normalizes field names via a `name_slug` and downcases single-select option names before matching. Field names are case-insensitively unique on the platform; option names are not, so a case-only option collision still surfaces the `option_ambiguous` error.\n\n## Backwards compatibility\nThe command previously marked `--id` as a required cobra flag; this PR removes that requirement so an item can also be addressed by `--url`, but `--id` remains required in effect via a runtime guard (one of `--id` or `--url` must be set). Existing `--id`-based invocations are unchanged.\n\n## Out of scope / follow-ups\n- **`item-list` named columns** \u2014 ships as a separate, independently-mergeable PR (#13823).\n- MultiSelect and issue-field-value node types: the shared resolver dispatches option resolution by field data type so adding these later is additive, not a rewrite.\n- Bounding/paginating large read payloads (github/planning-tracking#3332).\n\n## Coordination with the sibling MCP PR (github/github-mcp-server#2760)\n- **Case-insensitive matching:** this PR matches names case-insensitively (see above). MCP #2760's resolver currently does case-sensitive matching and should be aligned so both surfaces behave identically.\n- **Read-path mutual exclusivity:** the companion `item-list` PR (#13823) enforces reject-both for its name/ID field selector. MCP #2760's read path currently silently merges `fields`+`field_names`; that should be aligned to the same reject-both behavior.", "test_files": ["pkg/cmd/project/item-edit/item_edit_test.go", "pkg/cmd/project/shared/queries/resolve_fields_test.go", "pkg/cmd/project/shared/queries/resolve_test.go"], "test_cmd": "go test ./pkg/cmd/project/item-edit/... ./pkg/cmd/project/shared/queries/...", "code_files": ["pkg/cmd/project/item-edit/item_edit.go", "pkg/cmd/project/shared/queries/queries.go", "pkg/cmd/project/shared/queries/resolve.go", "pkg/cmd/project/shared/queries/resolve_fields.go"], "additions": 1432, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["ResolveFieldByName", "number32"]} +{"pr": 13784, "title": "Support antigravity-cli and antigravity2.0 in gh skill", "base_commit": "397876d3dc2828f1c932c651b31ab78e72506da4", "merge_commit": "326faaac8b5c3b736ddc6bfa573cc97dc6452a24", "prompt": "Support antigravity-cli and antigravity2.0 in gh skill\n\n### Description\n\n`gh skill` recognized only one Antigravity surface. This registers `antigravity-cli` and `antigravity2.0` as skill agent hosts across every `gh skill` subcommand, at both project and user scope.\n\nFixes #13767\n\n### Key Points\n\nAntigravity ships several surfaces that share one project skills dir but read user-scope skills from different dirs. The two new [registry entries](https://github.com/cli/cli/blob/8c6bac8c9/internal/skills/registry/registry.go#L91-L104) map each surface to its documented path:\n\n```go\n// Both share the .agents/skills project dir; user dirs differ per surface.\nUserDir: \".gemini/antigravity-cli/skills\" // antigravity-cli\nUserDir: \".gemini/config/skills\" // antigravity2.0\n```\n\nBecause both reuse `.agents/skills` for the project dir, selecting them next to other `.agents/skills` agents still writes each skill once. Nothing else needs wiring: `--agent`, `--scope`, `InstallDir`, help text, and enum suggestions all derive from the registry slice.\n\n### Notes for reviewers\n\nStart in the [`registry` package](https://github.com/cli/cli/blob/8c6bac8c9/internal/skills/registry/registry.go), where the `AgentHost` entries live. The [registry tests](https://github.com/cli/cli/blob/8c6bac8c9/internal/skills/registry/registry_test.go) extend the existing `TestFindByID` and `TestInstallDir` tables with project- and user-scope cases for both agents.\n\nThe user-scope paths come from Antigravity's own docs, confirmed by hands-on testing (see Additional Context). `.gemini/config/skills` is the one global dir every surface reads, so `antigravity2.0` uses it; the CLI reads its own `.gemini/antigravity-cli/skills`.\n\n### Additional Context\n\n- [Antigravity skills docs](https://antigravity.google/docs/skills) give the official per-surface skill directories.\n- [Where does Antigravity look for Agent Skills?](https://atamel.dev/posts/2026/07-01_where_agy_agent_skills/) verifies by experiment which dir each surface actually reads.\n- [Choosing your surface](https://cloud.google.com/blog/topics/developers-practitioners/choosing-your-surface-antigravity-20-antigravity-cli-antigravity-ide-or-antigravity-sdk) explains the 2.0 / CLI / IDE split.", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go"], "additions": 53, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13766, "title": "fix(skills): honor --dir without agent prompt", "base_commit": "ff4e4a255006ca98e3036bd0f8d98374a405835f", "merge_commit": "f1d112104821b055bb0c5656f2989f9213db71f6", "prompt": "fix(skills): honor --dir without agent prompt\n\n## Summary\n- skip the target-agent prompt when `gh skill install` is given `--dir`\n- keep using the default agent host internally only for shared post-install messaging / telemetry\n- add regression coverage for the interactive `--dir` path\n\nFixes #13763.\n\n## Testing\n- not run locally (avoided local Go test/build in this environment)", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 34, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13723, "title": "Allow downloading release assets without authentication", "base_commit": "954ffc37e5931a9621868a50f05c8fb17e288f19", "merge_commit": "71fb4f5f4358c44c9328637752f0c15a47d84139", "prompt": "Allow downloading release assets without authentication\n\nFixes https://github.com/cli/cli/issues/2680\n\n### Description\n\n`gh release download` now works without authentication against public repositories, matching `gh extension install`. A token is still used when one is present.\n\n### Key Points\n\nThis change has three parts, from simplest to subtlest:\n\n- **Why drop the auth gate** - the login requirement is unnecessary for public downloads.\n- **Fixing the by-tag race to be success oriented** - an anonymous draft-lookup 403 no longer masks a release the REST lookup found.\n- **Honoring the gate under repo override** - the cobra plumbing fix that makes the dropped gate apply to `download`.\n\n#### Why drop the auth gate\n\nRelease endpoints for public repositories are readable anonymously over REST, so the login gate is unnecessary. Removing it is the same one-line `cmdutil.DisableAuthCheck` change that #13176 made for `gh extension install`.\n\nThe same logic here applies as with `gh extension install`:\n\n> What this says is that extension installation is going to happen unauthenticated whether we make it easier or not. We might as well make it easier and keep people installing through our core commands.\n\nIn `gh release download` - people are going to just `curl` the endpoint directly, and that degrades their experience since we provide a lot of abstractions over the API that make `gh` much more than a `curl`/`gh api` call.\n\nBut I'll broaden the conversation - we got feedback that folks are using `gh release download` more in CI and they want to secure their CI by not providing `gh` a token unless it's necessary. If you're downloading a public asset, that's not necessary and we force you to use a larger than necessary token scope.\n\n#### Fixing the by-tag race to be success oriented\n\nThe by-tag path creates problems that make this deviate a bit from `gh ext install` - that's one reason why this diff is a bit bigger. [`FetchRelease`](https://github.com/cli/cli/blob/f0a128ad1c33a41b7d1bdc93b5d507c842713d8a/pkg/cmd/release/shared/fetch.go) races a published-release REST lookup against a draft-release GraphQL lookup. GraphQL rejects anonymous requests, so the draft lookup returns a 403. The old selector returned the first result unless it was exactly `ErrReleaseNotFound`, so that 403 could win the race and mask a release the REST lookup found.\n\nThe selector now prefers a found release and only errors when both lookups fail. We used to return whichever result arrived first, treating only a not-found error as a reason to wait for the second:\n\n```go\n// Before - a non-not-found error from either lookup wins\nres := <-results\nif errors.Is(res.error, ErrReleaseNotFound) {\n res = <-results\n cancel()\n} else {\n cancel()\n <-results // drain the channel\n}\nreturn res.release, res.error\n```\n\nNow we take a success from either lookup, and only surface an error when both fail:\n\n```go\n// Now - a found release wins; an error needs both lookups to fail\nfirst := <-results\nif first.error == nil {\n cancel()\n <-results // drain the channel\n return first.release, nil\n}\n\nsecond := <-results\ncancel()\nif second.error == nil {\n return second.release, nil\n}\nif errors.Is(second.error, ErrReleaseNotFound) {\n return nil, second.error\n}\nreturn nil, first.error\n```\n\nThis also stops a transient draft-lookup failure from masking a real release for authenticated users.\n\n#### Honoring the gate under repo override\n\nRemoving the gate did not take effect on its own. `release` enables the `-R/--repo` override, and that installs a `PersistentPreRunE` on the `release` command. cobra runs only the nearest such hook walking up from the command you invoked, so the override hook shadows the [root auth gate](https://github.com/cli/cli/blob/7b681a4e8b67d203ccdaab5ff54570bdf6ca3669/pkg/cmd/root/root.go). The override re-runs the nearest ancestor hook to make up for that, but it handed *the ancestor* to the hook as the command, so the auth gate judged `release` instead of `download` and never saw download's `DisableAuthCheck`.\n\nThe fix keeps the invoked command and passes that leaf up, the node cobra would have judged if the repo override didn't muck with it:\n\n```go\n// Before - climbs by reassigning cmd, so the gate is judged against the ancestor\nfor cmd.HasParent() {\n cmd = cmd.Parent()\n if cmd.PersistentPreRunE != nil {\n return cmd.PersistentPreRunE(cmd, args)\n }\n}\n\n// Now - keep the invoked leaf and pass it up\nfor p := overrideCmd.Parent(); p != nil; p = p.Parent() {\n if p.PersistentPreRunE != nil {\n return p.PersistentPreRunE(cmd, args)\n }\n}\n```\n\nThis mirrors [cobra's own `execute` loop](https://github.com/spf13/cobra/blob/v1.10.2/command.go#L984-L986), which walks the parents but always hands them the leaf command. cobra's `EnableTraverseRunHooks` global would run the whole chain for us and maybe is a better long term fix, but it is process-wide and would change pre-run behavior for every command, so I'm not touching it here.\n\nI guarded this with an integration test, since the bug only surfaces with the pieces wired together. [`Test_EnableRepoOverride_authCheckIntegration`](https://github.com/cli/cli/blob/7b681a4e8b67d203ccdaab5ff54570bdf6ca3669/pkg/cmdutil/repo_override_test.go) builds a root gate, a repo-override parent, and a leaf, then asserts the gate judged the leaf: opting out with `DisableAuthCheck` skips the check, otherwise the gate still runs. It lives in `cmdutil` beside the helper, since the coupling is the helper's, not any one command's.\n\n### Notes for reviewers\n\nThree atomic commits:\n\n- `fix(release): don't let a failed draft lookup mask a found release` changes the selector in [`FetchRelease`](https://github.com/cli/cli/blob/f0a128ad1c33a41b7d1bdc93b5d507c842713d8a/pkg/cmd/release/shared/fetch.go) and adds a regression case to the existing `Test_downloadRun` table.\n- `feat(release): allow download without authentication` removes the gate in the [download command](https://github.com/cli/cli/blob/f0a128ad1c33a41b7d1bdc93b5d507c842713d8a/pkg/cmd/release/download/download.go).\n- `fix(cmdutil): honor DisableAuthCheck under repo-override parents` fixes [the repo-override helper](https://github.com/cli/cli/blob/7b681a4e8b67d203ccdaab5ff54570bdf6ca3669/pkg/cmdutil/repo_override.go) so the gate removal actually takes effect, and adds an integration test that pins the coupling between repo override and the root auth gate.\n\n### Additional Context\n- #2680 is the standing request to allow unauthenticated public requests, and its motivating example is `gh release download` on a public repo.\n- #13176 removed the same gate for `gh extension install` and is the precedent this follows.", "test_files": ["pkg/cmd/release/download/download_test.go", "pkg/cmdutil/repo_override_test.go"], "test_cmd": "go test ./pkg/cmd/release/download/... ./pkg/cmdutil/...", "code_files": ["pkg/cmd/release/download/download.go", "pkg/cmd/release/shared/fetch.go", "pkg/cmdutil/repo_override.go"], "additions": 142, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13722, "title": "Detect additional third-party coding agents", "base_commit": "dd26eb39b04db5bd282509787d2b8fbff11ba694", "merge_commit": "561d9f919cbdadc22f886a3eadb260ba0b4f49c5", "prompt": "Detect additional third-party coding agents\n\n### Description\n\nExtends agent detection so the User-Agent header can identify more third-party coding agents driving `gh`. Adds nine new agents and an extra environment-variable signal for one existing one.\n\n### Key Points\n\nNew agents detected: antigravity, augment-cli, replit, goose, cowork, cursor, cursor-cli, kiro, and pi. One existing agent gains an extra signal: claude-code also matches `CLAUDE_CODE`.\n\nDetection order encodes confidence. `AI_AGENT` still wins, followed by agent-specific variables. Two signals are deliberately low-confidence and ranked accordingly:\n\n- `REPL_ID` is present throughout any Replit environment, not only when a Replit agent drives the CLI, so it is annotated as broad in the code.\n- `GOOSE_PROVIDER` only means Goose is configured as a model provider, not that it is running, so Goose is checked absolutely last and any stronger signal wins.\n\nThe single-source block now matches precisely instead of loosely: `kiro` is an exact `TERM_PROGRAM` match, and `pi` is anchored to a path boundary (`/.pi/agent`, or the Windows `\\.pi\\agent`) so an incidental substring cannot trigger it.\n\nWe considered a Devin signal and dropped it. The only reliable marker is the existence of a `/opt/.devin` directory, and this detector is intentionally environment-only with no filesystem access. The environment-variable alternatives (for example an `EDITOR` substring) could produce false positives, and Devin's developer-terminal footprint is small, so a noisy signal was not worth the telemetry pollution.\n\n### Notes for reviewers\n\nTwo files change. Start in the [`agents` detector](https://github.com/cli/cli/blob/1d4ca33b34646ce1165067377fd89f01148cbaf3/internal/agents/detect.go): the constant block lists the new identifiers, and `detectWith` runs the ordered checks top to bottom, returning on first match. Read it straight down to see the precedence. Then the [detector tests](https://github.com/cli/cli/blob/1d4ca33b34646ce1165067377fd89f01148cbaf3/internal/agents/detect_test.go) add table cases for every new agent and signal, plus the precedence and negative cases (exact `kiro`, path-boundary `pi`, Goose losing to stronger signals).\n\nFirst-party documentation for each signal lives inline next to its check, or is marked `// No first-party docs` where none exists.", "test_files": ["internal/agents/detect_test.go"], "test_cmd": "go test ./internal/agents/...", "code_files": ["internal/agents/detect.go"], "additions": 190, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13681, "title": "fix(skills): install universal agent to ~/.agents/skills", "base_commit": "70bb306bd25eb407f90eabefd98824aed62cf519", "merge_commit": "cd68c69dbd5ea0793cece6355f0911ca6a68ffc1", "prompt": "fix(skills): install universal agent to ~/.agents/skills\n\nThe Universal agent host installed user-scoped skills to ~/.config/agents/skills, which is not the location scanned by the majority of compliant clients (Copilot CLI, Pi, OpenCode).\n\nPer the agentskills.io cross-client convention (https://agentskills.io/client-implementation/adding-skills-support), user-level skills for compliant clients live under ~/.agents/skills.\n\nThis PR switches UserDir for the universal agent to the shared project skills directory constant, matching the convention already used by Warp and Cline. Adds regression tests covering both project and user scope.\n\nFixes #13494", "test_files": ["internal/skills/registry/registry_test.go"], "test_cmd": "go test ./internal/skills/registry/...", "code_files": ["internal/skills/registry/registry.go"], "additions": 20, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13679, "title": "fix: show checks summary when all checks were cancelled", "base_commit": "70bb306bd25eb407f90eabefd98824aed62cf519", "merge_commit": "23f83e6ae18998fcd6ac0497f57a1d9ebd95862a", "prompt": "fix: show checks summary when all checks were cancelled\n\n### Description\n\n`gh pr checks` prints a blank summary when a PR's only checks were **cancelled**.\n\n`printSummary` (``) gates the summary block on:\n\n```go\nif counts.Failed+counts.Passed+counts.Skipping+counts.Pending > 0 {\n```\n\n`counts.Canceled` is omitted, so a cancelled-only result sums to 0, the block is skipped, and the `else if counts.Canceled > 0 { \"Some checks were cancelled\" }` branch becomes unreachable in exactly the case it was written for. The existing \"some cancelled\" test masked this by pairing a cancelled check with passing ones.\n\n### Fix\n\nAdd `counts.Canceled` to the guard.\n\n### Testing\n\nAdded `TestPrintSummary` (``) with a cancelled-only case asserting the \"Some checks were cancelled\" summary renders. Fails before, passes after; `go test ./pkg/cmd/pr/checks/` green.\n\nReported in #13680.", "test_files": ["pkg/cmd/pr/checks/output_test.go"], "test_cmd": "go test ./pkg/cmd/pr/checks/...", "code_files": ["pkg/cmd/pr/checks/output.go"], "additions": 56, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13675, "title": "Fix flaky TestHuhPrompterMultiSelectWithSearchPersistence on slow architectures", "base_commit": "015e6cf6ac39ad18138f868545f02359c3c8d3ef", "merge_commit": "954ffc37e5931a9621868a50f05c8fb17e288f19", "prompt": "Fix flaky TestHuhPrompterMultiSelectWithSearchPersistence on slow architectures\n\nFixes https://github.com/cli/cli/issues/13727\r\n\r\nThe test was using a fixed 50ms sleep (`waitForOptions()`) to wait for an async bubbletea search goroutine before sending the next keystroke. On slow architectures such as s390x under QEMU emulation, the goroutine scheduling and event loop round-trip can exceed 50ms, causing the `enter` key to arrive while `m.loading` is still `true`. In that state the field silently drops all keystrokes, the form never advances, and the 5s overall deadline fires with \"form.Run() did not complete in time\".\r\n\r\nThe fix replaces the blind sleep with proper channel-based synchronization. An `onSearchDone func()` hook is added to `multiSelectSearchField` (nil in production, set only in tests) and called at the end of `applySearchResult`. A new test helper `waitForSearch(field)` wires a one-shot `sync.Once`-guarded channel into that hook and blocks until it fires - guaranteeing the search is truly complete before the next step is sent, regardless of scheduler timing or machine speed.\r\n\r\n## Error log\r\n```\r\n[ 770s] --- FAIL: TestHuhPrompterMultiSelectWithSearchPersistence (5.42s)\r\n[ 770s] --- FAIL: TestHuhPrompterMultiSelectWithSearchPersistence/selections_persist_after_changing_search_query (5.31s) Context\r\n[ 770s] :478: form.Run() did not complete in time 54,494 tokens\r\n[ 770s] FAIL 5% used\r\n[ 770s] FAIL github.com/cli/cli/v2/internal/prompter 11.841s\r\n```", "test_files": ["internal/prompter/huh_prompter_test.go"], "test_cmd": "go test ./internal/prompter/...", "code_files": ["internal/prompter/multi_select_with_search.go"], "additions": 69, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["onSearchDone"]} +{"pr": 13624, "title": "Gracefully handle failed GitHub verifier initialization caused by missing trusted root", "base_commit": "bd81afda9ab653bd880298e6cfbf143541522a2f", "merge_commit": "d51b72243a01729cdc76a5b57a0866a2f1bfd2bc", "prompt": "Gracefully handle failed GitHub verifier initialization caused by missing trusted root\n\n\r\n\r\nGracefully handle the failure to initialize the GitHub verifier when the trusted root is missing.", "test_files": ["pkg/cmd/attestation/verification/sigstore_integration_test.go", "pkg/cmd/attestation/verification/sigstore_test.go"], "test_cmd": "go test ./pkg/cmd/attestation/verification/...", "code_files": ["pkg/cmd/attestation/verification/sigstore.go"], "additions": 39, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13620, "title": "feat(discussion): add comment command", "base_commit": "4166ecf2cada209714af79387a5243b334af764b", "merge_commit": "42db02df0c55f8ae556b15ca353887ee4043cd88", "prompt": "feat(discussion): add comment command\n\n## Add `gh discussion comment` command\r\n\r\nThis PR adds a new `gh discussion comment` command for managing comments and replies on GitHub Discussions, along with UX improvements to the `view` command.\r\n\r\n### `gh discussion comment`\r\n\r\nThe command supports adding, editing, and deleting comments and replies. The positional argument determines the action context:\r\n\r\n**Adding a top-level comment:**\r\n```\r\ngh discussion comment 123 --body \"Thanks for raising this\"\r\ngh discussion comment 123 --body-file response.md\r\n```\r\n\r\n**Replying to a comment (positional arg is a comment ID or URL):**\r\n```\r\ngh discussion comment DC_abc123 --body \"Good point\"\r\ngh discussion comment \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\" --body \"I agree\"\r\n```\r\n\r\n**Editing a comment or reply:**\r\n```\r\ngh discussion comment DC_abc123 --edit --body \"Updated text\"\r\ngh discussion comment \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\" --edit --body-file updated.md\r\n```\r\n\r\n**Deleting a comment or reply:**\r\n```\r\ngh discussion comment DC_abc123 --delete --yes\r\ngh discussion comment \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\" --delete --yes\r\n```\r\n\r\nWhen no `--body` or `--body-file` is provided in an interactive terminal, an editor is opened for input. For edits, the editor is pre-populated with the existing comment body.\r\n\r\nComment URLs are resolved to node IDs via msgpack encoding of the repository database ID and comment database ID extracted from the URL fragment.\r\n\r\n### Changes to `gh discussion view`\r\n\r\nThe `--replies` flag now accepts both comment node IDs and comment URLs:\r\n\r\n```\r\ngh discussion view 123 --replies DC_abc123\r\ngh discussion view 123 --replies \"https://github.com/OWNER/REPO/discussions/123#discussioncomment-456\"\r\n```\r\n\r\nWhen a URL is provided, the repository and discussion number from the URL override the positional argument.\r\n\r\n### Tests\r\n\r\n- Added acceptance tests for the `comment` command covering add, reply, edit (including from file), delete (with confirmation prompt check), and URL-based operations.\r\n- Updated existing acceptance tests (`discussion-view.txtar`, `discussion-list.txtar`) to use the new `comment` command instead of raw `gh api graphql` mutations.\r\n- Added a test case in `discussion-view.txtar` to verify `--replies` works with a comment URL.\r\n- Unit tests cover flag parsing, all run paths (add/reply/edit/delete), comment URL resolution, body-file/stdin input, editor pre-population, and error cases.", "test_files": ["pkg/cmd/discussion/client/client_impl_test.go", "pkg/cmd/discussion/comment/comment_test.go", "pkg/cmd/discussion/shared/lookup_test.go", "pkg/cmd/discussion/view/view_test.go"], "test_cmd": "go test ./pkg/cmd/discussion/client/... ./pkg/cmd/discussion/comment/... ./pkg/cmd/discussion/shared/... ./pkg/cmd/discussion/view/...", "code_files": ["pkg/cmd/discussion/client/client.go", "pkg/cmd/discussion/client/client_impl.go", "pkg/cmd/discussion/client/client_mock.go", "pkg/cmd/discussion/client/types.go", "pkg/cmd/discussion/comment/comment.go", "pkg/cmd/discussion/create/create.go", "pkg/cmd/discussion/discussion.go", "pkg/cmd/discussion/edit/edit.go", "pkg/cmd/discussion/shared/lookup.go", "pkg/cmd/discussion/view/view.go"], "additions": 2666, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["ParseDiscussionOrCommentArg", "CommentOptions", "CommentDatabaseID"]} +{"pr": 13581, "title": "Auto-install official extension stubs in CI", "base_commit": "46480afb125d852c3edd2b4850a97c09b65c64cf", "merge_commit": "7ef9c54bf87fb17516e93a7ddb932efb7c660a35", "prompt": "Auto-install official extension stubs in CI\n\n### Description\n\nSkip the install prompt when `CI` is detected so official extension stubs (like `gh aw`, `gh stack`) auto-install instead of blocking on `Y/n` in CI runners and agent sessions.\n\n### Key Points\n\n- The previous version of this diff mirrored [`runCopilot`](https://github.com/cli/cli/blob/trunk/pkg/cmd/copilot/copilot.go) exactly: TTY always wins, so a pseudo-TTY agent session with `CI=1` still hung on the prompt. This revision flips the order so `CI` wins over TTY.\n- Intentional divergence from `gh copilot`: a follow-up could apply the same change there for consistency, but extension stubs are the more pressing case (agents call `gh ` frequently).\n- `CI` is detected via [`ci.IsCI()`](https://github.com/cli/cli/blob/trunk/internal/ci/ci.go) (any of `CI`, `BUILD_NUMBER`, or `RUN_ID`).\n\n### Notes for reviewers\n\nTwo commits, reviewable in order:\n\n1. [`fix(extension): auto-install official extension stubs in CI`](https://github.com/cli/cli/pull/13581/commits/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be) is the behavior change. The [`official_extension_stub`](https://github.com/cli/cli/blob/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be/pkg/cmd/root/official_extension_stub.go) file holds the new branching; the [stub test](https://github.com/cli/cli/blob/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be/pkg/cmd/root/official_extension_stub_test.go) extends the existing run-function table test and clears CI env vars per subtest; the [acceptance test](https://github.com/cli/cli/blob/ef8c7d8ab5c5539a5279f0c05d2d83d6a39f22be/acceptance/testdata/telemetry/telemetry-for-official-extension-stub.txtar) clears CI env vars and expects non-zero exit plus install instructions on stderr.\n2. [`docs(extension): explain CI bypass in stub install logic`](https://github.com/cli/cli/pull/13581/commits/61a752068e271b699b67bdb39b90a10549adf332) is a one-line comment addressing review feedback that the non-TTY+CI behavior wasn't obvious from the code.\n\n### Additional Context\n\nManually verified locally with `gh stack` uninstalled. The TTY+CI case is the one this revision actually fixes versus the previous version of the diff:\n\n```\n$ CI=1 ./bin/gh stack --help # TTY + CI\nSuccessfully installed github/gh-stack # exit 0\n\n$ CI=1 ./bin/gh stack --help < /dev/null # non-TTY + CI\nSuccessfully installed github/gh-stack # exit 0\n\n$ ./bin/gh stack --help < /dev/null # non-TTY, no CI\ngh stack is available as an official extension.\nTo install it, run:\n gh extension install github/gh-stack # exit 1\n```", "test_files": ["pkg/cmd/root/official_extension_stub_test.go"], "test_cmd": "go test ./pkg/cmd/root/...", "code_files": ["pkg/cmd/root/official_extension_stub.go"], "additions": 57, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13580, "title": "feat: add `repo read-file` and `repo read-dir`", "base_commit": "d05c71a9da4bce4d57f622aacc6a8ee24e5e158e", "merge_commit": "733e35c04c4141468f8882d17b063414ffe36c57", "prompt": "feat: add `repo read-file` and `repo read-dir`\n\n## Summary\r\n\r\nThis PR adds two new (preview) commands for reading repository contents without cloning.\r\n\r\n### `gh repo read-file`\r\n\r\n```\r\ngh repo read-file [--ref ] [--output ] [--clobber] [--unsafe] [--json ] [--jq ] [--template ] [--repo ]\r\n```\r\n\r\nReads a single file from a repository and writes it to stdout (or to a file with `--output`).\r\n\r\n### `gh repo read-dir`\r\n\r\n```\r\ngh repo read-dir [] [--ref ] [--json ] [--jq ] [--template ] [--repo ]\r\n```\r\n\r\nLists the entries of a directory in a repository, showing each entry's type, name, and size.\r\n\r\nBoth commands are marked **preview**, default to the current repository's default branch (overridable with `--ref`), and support `--json`/`--jq`/`--template` for scripting.\r\n\r\n## Test plan\r\n\r\nYou can verify the command behaviour via acceptance tests and the following examples.\r\n\r\nThe commands below target public repositories so they can be run as-is.\r\n\r\n### `gh repo read-file`\r\n\r\n```sh\r\n# Read a file to stdout\r\ngh repo read-file README.md --repo cli/cli\r\n\r\n# Read from a specific tag/branch/commit\r\ngh repo read-file README.md --ref v2.0.0 --repo cli/cli\r\n\r\n# Write to a file, then confirm --clobber is required to overwrite\r\ngh repo read-file README.md --output --repo cli/cli\r\ngh repo read-file README.md --output --repo cli/cli # should error: already exists\r\ngh repo read-file README.md --output --clobber --repo cli/cli # should succeed\r\n\r\n# JSON output, with jq and template\r\ngh repo read-file README.md --json path,size,type --repo cli/cli\r\ngh repo read-file README.md --json path,size --jq '.size' --repo cli/cli\r\ngh repo read-file README.md --template '{{.path}} ({{.size}} bytes){{\"\\n\"}}' --repo cli/cli\r\n\r\n# Error: path does not exist\r\ngh repo read-file --repo cli/cli\r\n```\r\n\r\n### `gh repo read-dir`\r\n\r\n```sh\r\n# List the repository root\r\ngh repo read-dir --repo cli/cli\r\n\r\n# List a subdirectory (note executables render as `file*`)\r\ngh repo read-dir script --repo cli/cli\r\n\r\n# Mixed entry types in one listing: regular files, a symlink (RelNotes),\r\n# and a submodule (sha1collisiondetection)\r\ngh repo read-dir --repo git/git\r\n\r\n# List from a specific tag/branch/commit\r\ngh repo read-dir docs --ref v2.0.0 --repo cli/cli\r\n\r\n# Non-TTY / scriptable output (tab separated)\r\ngh repo read-dir script --repo cli/cli | cat\r\n\r\n# JSON output, with jq and template\r\ngh repo read-dir script --json name,type,mode,modeOctal --repo cli/cli\r\ngh repo read-dir script --json name,type --jq '.entries[] | select(.type==\"file\") | .name' --repo cli/cli\r\ngh repo read-dir --template '{{range .entries}}{{.type}}: {{.name}}{{\"\\n\"}}{{end}}' --repo cli/cli\r\n\r\n# Error: path points to a file, not a directory\r\ngh repo read-dir README.md --repo cli/cli\r\n\r\n# Error: path or ref does not exist\r\ngh repo read-dir nope/nope --repo cli/cli\r\n```", "test_files": ["internal/text/text_test.go", "pkg/cmd/repo/read-dir/read_dir_test.go", "pkg/cmd/repo/read-file/read_file_test.go"], "test_cmd": "go test ./internal/text/... ./pkg/cmd/repo/read-dir/... ./pkg/cmd/repo/read-file/...", "code_files": ["internal/text/text.go", "pkg/cmd/repo/read-dir/http.go", "pkg/cmd/repo/read-dir/read_dir.go", "pkg/cmd/repo/read-file/http.go", "pkg/cmd/repo/read-file/read_file.go", "pkg/cmd/repo/repo.go"], "additions": 2535, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["FormatSize", "NewCmdReadDir", "NewCmdReadFile"]} +{"pr": 13548, "title": "feat(skills): list available skills when install runs non-interactively", "base_commit": "01bcd474447b5034da20686c838ae4b0cf2b23f5", "merge_commit": "70bb306bd25eb407f90eabefd98824aed62cf519", "prompt": "feat(skills): list available skills when install runs non-interactively\n\n### Summary\n\nRunning `gh skill install ` (or `--from-local `) without a skill name in a non-interactive context previously errored with `must specify a skill name when not running interactively`. That made discovery awkward when piping or scripting \u2014 users had to switch to an interactive shell just to see what skills a repo offered.\n\nThis PR changes that behavior so the discovered skills are printed instead, mirroring (approximately) what the interactive picker shows. The list is rendered through `tableprinter`, so it auto-switches between a friendly TTY table and tab-separated `SKILL\\tDESCRIPTION` rows when piped \u2014 making it easy to grep / fzf / awk.\n\n### Before\n\n```console\n$ gh skill install github/awesome-copilot | grep review\nmust specify a skill name when not running interactively\n```\n\n### After\n\n```console\n$ gh skill install github/awesome-copilot | grep review\ncode-review Reviews pull requests\n\u2026\n```\n\nRe-running with a specific skill name installs as before. Same behavior for `--from-local`.\n\n### Context\n\nCame out of a Slack thread where this was identified as a UX gap: interactive mode supports browsing-then-installing, and non-interactive mode should provide the same discoverability so it composes with standard Unix tooling.\n\n### Changes\n\n- `selectSkillsWithSelector` now prints discovered skills via a new `listAvailableSkills` helper instead of erroring when `!canPrompt`.\n- Sentinel `errSkillsListed` lets `installRun` / `runLocalInstall` bail cleanly without going into the install path.\n- Descriptions are pre-fetched (same `fetchDescriptions` callback the picker uses) so the listed output is useful, not bare.\n- Help text + an example for piping into `grep` updated.\n- Tests: replaced the old \"errors\" case with a remote listing assertion and added an equivalent local install case.\n\n### Verification\n\n- `go test ./pkg/cmd/skills/...` \u2705\n- `make lint` \u2705", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 105, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13541, "title": "feat: add `discussion` command set", "base_commit": "5c9ec1c5f51d682dbf65b0c16f856d8b9303adff", "merge_commit": "52e8e7427702e023d743318f748fceda4c0dcf37", "prompt": "feat: add `discussion` command set\n\nThis PR adds the `gh discussion` command group (list, view, create, edit) as a preview feature.\r\n\r\nHuge thanks to @maxbeizer for doing the heavy lifting on this. :copilot: was also instrumental in implementation, review, and polish throughout.\r\n\r\nI rewrote the commit history (81 commits squashed into 6) for easier review and a cleaner git log. Note that the commits are structured to split the work logically; intermediate commits may not compile independently.\r\n\r\n## Commands\r\n\r\n### `discussion list`\r\n\r\n```shell\r\ngh discussion list [--category ] [--state ] [--author ] [--label ] [--search ] [--limit ] [--json ] [--web]\r\n```\r\n\r\nList discussions in a repository with optional filters. ([8b73951](https://github.com/cli/cli/commit/8b73951ca75c6495a776e36da9fb48cc93000866))\r\n\r\n### `discussion view`\r\n\r\n```\r\ngh discussion view { | } [--comments [--limit ]] [--replies [--limit ]] [--json ] [--web]\r\n```\r\n\r\nView a discussion's details, comments, or replies to a specific comment. ([57008e7](https://github.com/cli/cli/commit/57008e797097e9b275ba7d1849ac750e762743e1))\r\n\r\n### `discussion create`\r\n\r\n```\r\ngh discussion create --title --body --category [--label ,...] [--body-file ]\r\n```\r\n\r\nCreate a new discussion, interactively or via flags. ([7bd67a8](https://github.com/cli/cli/commit/7bd67a840456436a1edc0f80dc85687f29b277af))\r\n\r\n### `discussion edit`\r\n\r\n```\r\ngh discussion edit { | } [--title ] [--body ] [--body-file ] [--category ] [--add-label ,...] [--remove-label ,...]\r\n```\r\n\r\nEdit a discussion's title, body, category, or labels, interactively or via flags. ([797effe](https://github.com/cli/cli/commit/797effe0295914e03f4b40cb873276da1d3b7e93))\r\n\r\n## Reusable components\r\n\r\n- **``**: GraphQL client for Discussions covering list, search, get, create, update, and label mutations with full pagination support. ([51b7653](https://github.com/cli/cli/commit/51b765381870dbf62390e0f7a297cc57ea771db7))\r\n- **``**: Shared utilities including argument parsing, category matching, label resolution, and client factory helpers. ([d3a1538](https://github.com/cli/cli/commit/d3a153872b9774009d620d0f3e12f993a21765eb))\r\n\r\n## Screenshots\r\n\r\n### `gh discussion list`\r\n\r\n![Terminal output showing a table of discussions with columns for number, state, title, category, author, and date](https://github.com/user-attachments/assets/094587eb-93f8-4b55-8bf9-5ed0965cc67d)\r\n\r\n### `gh discussion view 9094`\r\n\r\n![Terminal output showing discussion details including title, metadata, labels, and body text](https://github.com/user-attachments/assets/55dcf8c0-c4e0-4bc0-b073-8025c5490107)\r\n\r\n### `gh discussion view 9094 --comments --limit 1`\r\n\r\n![Terminal output showing a discussion with its threaded comments displayed below the body](https://github.com/user-attachments/assets/64ea48f7-2cd6-404e-b261-14eaf9a26eb1)\r\n\r\n### `gh discussion view 9094 --replies DC_kwDODKw3uc4AkHLS --limit 1`\r\n\r\n![Terminal output showing paginated replies to a specific discussion comment](https://github.com/user-attachments/assets/87bad4fe-82f3-4124-91c4-c581d9e2a0ef)\r\n\r\n### `gh discussion create` (non-interactive)\r\n\r\n![Terminal showing discussion creation via flags with title, body, category, and label options](https://github.com/user-attachments/assets/bf65e362-7983-4b97-af48-2840fa74c3b9)\r\n\r\n### `gh discussion create` (interactive, category selection)\r\n\r\n![Terminal showing an interactive prompt listing available discussion categories to choose from](https://github.com/user-attachments/assets/7fdcf50f-b74d-4e5d-87a3-9a05aa9bbc78)\r\n\r\n### `gh discussion create` (interactive)\r\n\r\n![Terminal showing interactive prompts for title and body input during discussion creation](https://github.com/user-attachments/assets/764ea1e8-2225-4c6f-9803-77e438e1d1fa)\r\n\r\n### `gh discussion edit` (interactive)\r\n\r\n1. Select fields to update\r\n![Terminal showing a multi-select prompt asking which fields to edit: title, body, category](https://github.com/user-attachments/assets/be05bef6-4dce-44bf-a78e-9b907ef70d46)\r\n\r\n2. Populate new values\r\n![Terminal showing input prompts pre-filled with current values for the selected fields](https://github.com/user-attachments/assets/b2bb8fa8-b0e0-475a-a7ff-a7d6fcf29b0b)\r\n\r\n3. Submit\r\n![Terminal showing the discussion URL printed after a successful edit](https://github.com/user-attachments/assets/9d8e9c31-020f-4961-8ce7-d43bf685ca0d)\r\n\r\n### `gh discussion edit` (non-interactive)\r\n\r\n![Terminal showing discussion edit via flags updating title, body, and labels in one command](https://github.com/user-attachments/assets/5fc60e1b-227a-4ee1-b5b7-2b6281561c5f)", "test_files": ["acceptance/acceptance_test.go", "pkg/cmd/discussion/client/client_test.go", "pkg/cmd/discussion/comment/comment_test.go", "pkg/cmd/discussion/create/create_test.go", "pkg/cmd/discussion/edit/edit_test.go", "pkg/cmd/discussion/list/list_test.go", "pkg/cmd/discussion/shared/labels_test.go", "pkg/cmd/discussion/shared/lookup_test.go", "pkg/cmd/discussion/view/view_test.go"], "test_cmd": "go test ./acceptance/... ./pkg/cmd/discussion/client/... ./pkg/cmd/discussion/comment/... ./pkg/cmd/discussion/create/... ./pkg/cmd/discussion/edit/... ./pkg/cmd/discussion/list/... ./pkg/cmd/discussion/shared/... ./pkg/cmd/discussion/view/...", "code_files": ["pkg/cmd/discussion/client/client.go", "pkg/cmd/discussion/client/client_mock.go", "pkg/cmd/discussion/client/types.go", "pkg/cmd/discussion/comment/comment.go", "pkg/cmd/discussion/create/create.go", "pkg/cmd/discussion/discussion.go", "pkg/cmd/discussion/edit/edit.go", "pkg/cmd/discussion/list/list.go", "pkg/cmd/discussion/shared/categories.go", "pkg/cmd/discussion/shared/client.go", "pkg/cmd/discussion/shared/labels.go", "pkg/cmd/discussion/shared/lookup.go", "pkg/cmd/discussion/view/view.go", "pkg/cmd/root/root.go"], "additions": 13075, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["DiscussionClient"]} +{"pr": 13523, "title": "Support custom CLAUDE_CONFIG_DIR in install", "base_commit": "9a593ce81b593dee752cc11737d1a3ef768e52b3", "merge_commit": "412c5fae63239705c0120e76ec9508307d2709a0", "prompt": "Support custom CLAUDE_CONFIG_DIR in install\n\n\r\n\r\nFixes https://github.com/cli/cli/issues/13262\r\n\r\n## Summary\r\n\r\nThis updates Claude Code user-scope skill directory resolution to honor `CLAUDE_CONFIG_DIR` when it is set. User-scope installs for Claude Code now write to `$CLAUDE_CONFIG_DIR/skills`, falling back to the existing `~/.claude/skills` location when the environment variable is not present.\r\n\r\nThe change lives in the shared agent registry path resolver so `gh skill install`, `gh skill list`, and `gh skill update` all use the same location for Claude Code user-scope skills.\r\n\r\n## Tests\r\n\r\n- Added registry coverage for Claude Code's default user-scope path and `CLAUDE_CONFIG_DIR` override.\r\n- Added an install regression test that verifies `gh skill install --agent claude-code --scope user` writes under `$CLAUDE_CONFIG_DIR/skills` and not `~/.claude/skills`.\r\n- Ran `go test ./internal/skills/registry ./pkg/cmd/skills/...`.", "test_files": ["internal/skills/registry/registry_test.go", "pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./internal/skills/registry/... ./pkg/cmd/skills/install/...", "code_files": ["internal/skills/registry/registry.go"], "additions": 69, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["claudeConfigDirEnv", "All"]} +{"pr": 13471, "title": "add --all flag to install all skills in a repo", "base_commit": "8bd56966ac5e2fe7d3162ad424dd11d877f4815e", "merge_commit": "e6fa2faf9e3203c2caaa54dcb1526c5f093fa998", "prompt": "add --all flag to install all skills in a repo\n\nFixes https://github.com/cli/cli/issues/13453\r\n\r\n## Summary\r\n- Add `--all` to `gh skill install` so users can install every discovered skill from a repository without providing an individual skill name.\r\n- Reuse the existing all-skills selection path, including collision detection, so skills that would overwrite each other still fail with guidance.\r\n- Update help text, examples, and tests for flag parsing, validation, and multi-skill remote installs.\r\n\r\n## Testing\r\n- `go test ./pkg/cmd/skills/install`", "test_files": ["pkg/cmd/skills/install/install_test.go"], "test_cmd": "go test ./pkg/cmd/skills/install/...", "code_files": ["pkg/cmd/skills/install/install.go"], "additions": 78, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["All"]} +{"pr": 13469, "title": "Improve update --all command if some skills don't have metadata", "base_commit": "81ed6d4e355446dbb4c1a7b038534948f7c195b8", "merge_commit": "5cfb648ace667b394728332d492b3e1a017baafa", "prompt": "Improve update --all command if some skills don't have metadata\n\n\r\n\r\nFixes https://github.com/cli/cli/issues/13369\r\n\r\n## Summary\r\n\r\nFixes `gh skill update --all` so it no longer prompts for skills that are missing GitHub metadata.\r\n\r\nWhen `--all` is used, skills without GitHub metadata are skipped with a notice, matching the flag's \"without prompting\" behavior.\r\n\r\n## Changes\r\n\r\n- Skip missing-metadata skills when `--all` is used instead of prompting interactively.\r\n- Keep the warning summary so users know which skills were skipped.\r\n- Update the warning text to explain that users can run `gh skill update ` interactively to add metadata, or reinstall the skill.\r\n- Add a regression test to verify `--all` does not prompt for missing metadata.\r\n\r\n## Testing\r\n\r\n- `go test ./pkg/cmd/skills/update/... -run TestUpdateRun -count=1`\r\n- `go test ./pkg/cmd/skills/... -count=1`", "test_files": ["pkg/cmd/skills/update/update_test.go"], "test_cmd": "go test ./pkg/cmd/skills/update/...", "code_files": ["pkg/cmd/skills/update/update.go"], "additions": 39, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13459, "title": "fix discovery support in nested dirs", "base_commit": "8bd56966ac5e2fe7d3162ad424dd11d877f4815e", "merge_commit": "7f885723a9cb72cd4318eef3c831f8a7bb9d9093", "prompt": "fix discovery support in nested dirs\n\n\r\n\r\nFixes https://github.com/cli/cli/issues/13372\r\n\r\n## Summary\r\n\r\nFix `gh skill install` and `gh skill preview` handling for nested skill paths.\r\n\r\n## What changed\r\n\r\n- Allow `--allow-hidden-dirs` to discover hidden skill directories at any repository depth, not only at the root.\r\n- Treat deeply nested skill arguments as exact repo-relative paths in both `install` and `preview`.\r\n - Example: `packages/agent-skills/my-skill`\r\n- Preserve one-slash selectors like `owner/skill` as namespaced skill names, not paths.\r\n- Share path-detection logic between `install` and `preview`.\r\n- Add regression tests for nested hidden directories, arbitrary nested path installs, and arbitrary nested path previews.\r\n\r\n## Product note\r\n\r\nThis does not change the recommended Agent Skills publishing conventions or broaden search/publish behavior. Non-standard layouts are only supported when the user explicitly provides an exact path.\r\n\r\n## Testing\r\n\r\n- `go test ./internal/skills/discovery ./pkg/cmd/skills/install ./pkg/cmd/skills/preview -run 'TestIsSkillPath|Test_isSkillPath|TestPreviewRun|TestMatchHiddenDirConventions|TestDiscoverSkillsWithOptions|TestDiscoverLocalSkillsWithOptions|TestInstallRun' -count=1`\r\n- `go test ./internal/skills/discovery ./pkg/cmd/skills/... -count=1`\r\n- `git diff --check`", "test_files": ["internal/skills/discovery/discovery_test.go", "pkg/cmd/skills/install/install_test.go", "pkg/cmd/skills/preview/preview_test.go"], "test_cmd": "go test ./internal/skills/discovery/... ./pkg/cmd/skills/install/... ./pkg/cmd/skills/preview/...", "code_files": ["internal/skills/discovery/discovery.go", "pkg/cmd/skills/install/install.go", "pkg/cmd/skills/preview/preview.go"], "additions": 271, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["DiscoverSkillByPathWithOptions", "All"]} +{"pr": 13449, "title": "fix(skills): stage updates in a temp dir and swap in-place", "base_commit": "a6012aca41ffa2d943ea9f12094a7398ce2e4b7e", "merge_commit": "01bcd474447b5034da20686c838ae4b0cf2b23f5", "prompt": "fix(skills): stage updates in a temp dir and swap in-place\n\nCloses #13370.\n\n## Problem\n\n`gh skill update` could relocate skills and delete the original install directory:\n\n- With `--dir`, namespaced layouts (`{dir}/{namespace}/{name}/SKILL.md`) had their install base computed by walking `filepath.Dir` twice, putting the new install one level too shallow. The post-install migration step then `RemoveAll`ed the original namespaced directory, taking the user's files with it.\n- Without `--dir`, the same migration cleanup quietly relocated namespaced skills found under an agent install directory to a flat layout, even though users expect updates to land where the skill currently lives.\n\nEither path breaks symlinks, mounts, and any external references that point at the skill directory.\n\n## Fix\n\nEach update is staged into a sibling directory of the existing skill dir (same filesystem, so renames are atomic). On success the contents are swapped in via per-entry rename:\n\n1. Move every existing entry from the skill dir into a sibling backup dir.\n2. Move every staged entry into the skill dir.\n3. Remove the backup.\n\nIf any step fails, the rollback path removes any freshly installed entries and moves the originals back from the backup.\n\nThis guarantees:\n\n- All updates happen in-place, regardless of layout (flat vs. namespaced) and regardless of whether the skill was found via an agent host or via `--dir`.\n- The skill directory's inode is preserved, so symlinks, mounts, and external references continue to resolve.\n- Stale files from the previous version are removed.\n- A failure at any point (install, read, rename) leaves the existing skill completely untouched.\n\n## Tests\n\n- New acceptance test `` plants a namespaced skill, runs `gh skill update --dir`, and asserts the skill remains at the original namespaced path with no flat-path duplicate.\n- New unit test `TestSwapDirectoryContents_PreservesDestInode` asserts the skill directory's identity is preserved across a successful swap (via `os.SameFile`).\n- New unit test `TestSwapDirectoryContents_RollsBackOnFailure` exercises the rollback path and asserts the original content (including nested subdirs) is fully restored.\n- The \"namespaced skill with `--dir`\" unit test is updated to assert in-place behavior and stale-file cleanup.\n- The existing `install_failure_during_update_reports_error_and_continues` unit test had a harness shortcut that silently skipped its `verify` block whenever `wantErr` was set. That shortcut is removed so the \"preserve original on install failure\" assertion is now actually enforced.", "test_files": ["pkg/cmd/skills/update/update_test.go"], "test_cmd": "go test ./pkg/cmd/skills/update/...", "code_files": ["pkg/cmd/skills/update/update.go"], "additions": 242, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["swapDirectoryContents"]} +{"pr": 13430, "title": "Derive digest algorithm from ref length in release verify commands", "base_commit": "b99d73d7421ae182b8ab3f5b4469dff93c792da9", "merge_commit": "f1c10e032a636540a5e28705682e203b118a47fa", "prompt": "Derive digest algorithm from ref length in release verify commands\n\nFixes #13429\n\n### Summary\n\nThe `gh release verify` and `gh release verify-asset` commands hard-coded a `sha1:` prefix when constructing the digest identifier for a release tag's commit SHA. Once GitHub repositories using SHA-256 commit digests are supported, that ref will be a 64-character SHA-256 hash and labeling it as `sha1:` is both misleading in user-facing output and incorrect for the attestation lookup.\n\n### Changes\n\n- Added a small shared helper `DigestAlgForRef(digest string) string` in `` that returns `\"sha256\"` for 64-character digests and `\"sha1\"` otherwise (preserving existing behavior).\n- Replaced the hard-coded `\"sha1\"` argument in `` and `` with a call to the new helper.\n- Added unit tests for `DigestAlgForRef` covering SHA-1, SHA-256, empty, and unexpected lengths.\n- Added `*_SHA256` variants of the existing `FailedNoAttestations` tests in both commands that assert the error message includes `sha256:`.\n\n### Verification\n\n- `go test ./pkg/cmd/release/shared/... ./pkg/cmd/release/verify/... ./pkg/cmd/release/verify-asset/...` passes.\n- `go build ./...` passes.\n- Existing SHA-1 tests continue to pass (no regression).", "test_files": ["pkg/cmd/release/shared/fetch_test.go", "pkg/cmd/release/verify-asset/verify_asset_test.go", "pkg/cmd/release/verify/verify_test.go"], "test_cmd": "go test ./pkg/cmd/release/shared/... ./pkg/cmd/release/verify/... ./pkg/cmd/release/verify-asset/...", "code_files": ["pkg/cmd/release/shared/fetch.go", "pkg/cmd/release/verify-asset/verify_asset.go", "pkg/cmd/release/verify/verify.go"], "additions": 153, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["DigestAlgForRef"]} +{"pr": 13421, "title": "Allow agents as application for secrets", "base_commit": "909cbd7d8834b5fb63d671a55a540c2cfa04d669", "merge_commit": "e60f00e30880079adefd258c388c642b1e97ddf6", "prompt": "Allow agents as application for secrets\n\nFixes https://github.com/cli/cli/issues/13419\r\n\r\nI built it locally and ran `bin/gh secret set TEST_SECRET -a agents -b 123 -o ` and it worked exactly as expected.\r\n\r\nWhat might be missing is another test? I looked through it and added a little bit but maybe a maintainer has a little more input regarding that.", "test_files": ["pkg/cmd/secret/delete/delete_test.go", "pkg/cmd/secret/list/list_test.go", "pkg/cmd/secret/set/set_test.go", "pkg/cmd/secret/shared/shared_test.go"], "test_cmd": "go test ./pkg/cmd/secret/delete/... ./pkg/cmd/secret/list/... ./pkg/cmd/secret/set/... ./pkg/cmd/secret/shared/...", "code_files": ["pkg/cmd/secret/delete/delete.go", "pkg/cmd/secret/list/list.go", "pkg/cmd/secret/secret.go", "pkg/cmd/secret/set/set.go", "pkg/cmd/secret/shared/shared.go"], "additions": 199, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["Agents", "shared.Agents"]} +{"pr": 13418, "title": "New `gh skill list` to inventory installed agent skills", "base_commit": "e6fa2faf9e3203c2caaa54dcb1526c5f093fa998", "merge_commit": "674e02a56b020549b45f970808ce7c20e179824a", "prompt": "New `gh skill list` to inventory installed agent skills\n\nCloses #13245 \r\n\r\n## Summary\r\n\r\nAdds `gh skill list` to inventory installed agent skills across known agent host directories.\r\n\r\n- Scans project and user skill install paths for all registered agent hosts\r\n- Deduplicates shared install directories like `.agents/skills`\r\n- Supports filtering with `--agent`, `--scope`, and custom scanning with `--dir`\r\n- Renders a concise table with `NAME`, `AGENT`, `SCOPE`, and `SOURCE`\r\n- Supports parseable output via `--json`, `--jq`, and `--template` with fields for `skillName`, `hosts`, `scope`, `sourceURL`, `version`, `pinned`, and `path`\r\n- Records privacy-safe `skill_list` telemetry with filters, output format, and result count\r\n\r\n\r\n## Testing\r\n\r\n- `go test ./pkg/cmd/skills/list/...`\r\n- `go test ./pkg/cmd/skills/...`", "test_files": ["pkg/cmd/skills/list/list_test.go"], "test_cmd": "go test ./pkg/cmd/skills/list/...", "code_files": ["pkg/cmd/skills/list/list.go", "pkg/cmd/skills/skills.go"], "additions": 1123, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["ListOptions"]} +{"pr": 13413, "title": "Overwrite existing parent on `gh issue edit --add-sub-issue`", "base_commit": "6106bd30764b17caac56fa57876ff9f5536093d4", "merge_commit": "b08503368202901bbc1b6fc7936dff650eb32012", "prompt": "Overwrite existing parent on `gh issue edit --add-sub-issue`\n\nFix the `Sub issue may only have one parent` 422 that surfaces when `--add-sub-issue` is handed a candidate that already belongs to another parent. Pass `replaceParent: true` so the take-over is silent.\r\n\r\nStacked on top of #13412 (which is on top of #13411).", "test_files": ["acceptance/acceptance_test.go", "pkg/cmd/issue/edit/edit_test.go"], "test_cmd": "go test ./acceptance/... ./pkg/cmd/issue/edit/...", "code_files": ["api/queries_issue.go"], "additions": 221, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13412, "title": "Rename Editable.Allowed to Selectable", "base_commit": "72859237e26439cfc23be9fb2a8144dc441a0826", "merge_commit": "2503dcfd79e372bfade8f41d05a2fbae57da1e26", "prompt": "Rename Editable.Allowed to Selectable\n\nAddresses [thread r3196020651](https://github.com/cli/cli/pull/13057#discussion_r3196020651) on #13057.\r\n\r\nStacked on top of #13411 (`-feedback`) since the field name is leveraged in the parent Issues 2.0 PR.", "test_files": ["acceptance/acceptance_test.go", "pkg/cmd/issue/edit/edit_test.go", "pkg/cmd/pr/shared/survey_test.go"], "test_cmd": "go test ./acceptance/... ./pkg/cmd/issue/edit/... ./pkg/cmd/pr/shared/...", "code_files": ["api/queries_issue.go", "pkg/cmd/issue/edit/edit.go", "pkg/cmd/pr/edit/edit.go", "pkg/cmd/pr/shared/editable.go"], "additions": 241, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["Selectable"]} +{"pr": 13403, "title": "Use int64 for GitHub database IDs", "base_commit": "1e6bb88c6d8503189bca408f7be162018b1acf84", "merge_commit": "0274077b56a5ef8e575358721149cd02888b2a5f", "prompt": "Use int64 for GitHub database IDs\n\n## Use `int64` for GitHub database IDs\r\n\r\nCloses #9247\r\n\r\n### Problem\r\n\r\nSeveral structs in the CLI use Go's `int` type for GitHub database ID fields. Go's `int` is platform-dependent and could be 32-bit on some architectures, while GitHub internally uses 64-bit integers for database IDs. The [REST API OpenAPI spec](https://github.com/github/rest-api-description) explicitly declares many resource IDs as `integer` with `format: int64` (e.g. repositories, GPG keys, SSH keys), and the [GraphQL API has migrated some `databaseId` fields from `Int` to `BigInt`](https://docs.github.com/en/graphql/overview/breaking-changes).\r\n\r\n### Changes\r\n\r\nUpdated all struct fields representing GitHub database IDs from `int` to `int64`, along with their downstream usage:\r\n\r\n- **Codespaces**: `Repository.ID`, `CreateCodespaceParams.RepositoryID`, `startCreateRequest.RepositoryID`, plus interface/mock/test cascading\r\n- **Rulesets**: `RulesetGraphQL.DatabaseId`, `RulesetREST.Id`, `BypassActors.ActorId`, `RulesetRule.RulesetId`, and the skills `rulesetsResponse.ID`\r\n- **Keys**: `deployKey.ID`, `gpgKey.ID`, `sshKey.ID`\r\n- **Cache**: `Cache.Id`, plus `parseCacheID` and `deleteCacheByID` (which still used `int`/`strconv.Atoi`)\r\n- **Autolinks**: `Autolink.ID`\r\n- **Agent tasks**: `JobActor.ID`, `JobPullRequest.ID`\r\n\r\nAll `strconv.Itoa()` calls on these fields were updated to `strconv.FormatInt(x, 10)`.\r\n\r\nGraphQL response structs were also audited - only `RulesetGraphQL.DatabaseId` needed updating. Others were already correct (`GitHubUser.DatabaseID` is `int64`, `FullDatabaseID` is `string` for GraphQL `BigInt`).\r\n\r\n### Future: Custom linter to prevent regressions\r\n\r\nA custom `go/analysis` linter that flags struct fields with ID-like names or JSON tags still using `int` has been prototyped on a separate branch: [`9247-idtype-linter`](https://github.com/cli/cli/compare/trunk...9247-idtype-linter). It's split out to keep this PR focused on the type changes. The linter correctly identifies all the violations fixed here.\r\n\r\n
\r\nLinter output BEFORE this PR (27 violations)\r\n\r\n```\r\n:38:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:43:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:20:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:25:2: struct field Id looks like a GitHub database ID but uses int; use int64 instead\r\n:153:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:807:2: struct field RepositoryID looks like a GitHub database ID but uses int; use int64 instead\r\n:858:2: struct field RepositoryID looks like a GitHub database ID but uses int; use int64 instead\r\n:203:4: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:216:4: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:260:4: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:591:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:614:2: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:621:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:639:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:660:2: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:666:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:858:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:879:2: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:885:3: struct field RepoID looks like a GitHub database ID but uses int; use int64 instead\r\n:14:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:6:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:16:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n:13:2: struct field DatabaseId looks like a GitHub database ID but uses int; use int64 instead\r\n:27:2: struct field Id looks like a GitHub database ID but uses int; use int64 instead\r\n:33:3: struct field ActorId looks like a GitHub database ID but uses int; use int64 instead\r\n:53:2: struct field RulesetId looks like a GitHub database ID but uses int; use int64 instead\r\n:67:2: struct field ID looks like a GitHub database ID but uses int; use int64 instead\r\n```\r\n\r\n
\r\n\r\n
\r\nLinter output AFTER this PR (0 violations)\r\n\r\n```\r\n(clean - no output)\r\n```\r\n\r\n
\r\n\r\n### Reviewer Notes\r\n\r\nWe should run A/C tests on this before merging.", "test_files": ["pkg/cmd/codespace/create_test.go"], "test_cmd": "go test ./pkg/cmd/codespace/...", "code_files": ["internal/codespaces/api/api.go", "pkg/cmd/agent-task/capi/job.go", "pkg/cmd/cache/delete/delete.go", "pkg/cmd/cache/shared/shared.go", "pkg/cmd/codespace/common.go", "pkg/cmd/codespace/create.go", "pkg/cmd/codespace/mock_api.go", "pkg/cmd/gpg-key/delete/delete.go", "pkg/cmd/gpg-key/delete/http.go", "pkg/cmd/repo/autolink/shared/autolink.go", "pkg/cmd/repo/deploy-key/list/http.go", "pkg/cmd/repo/deploy-key/list/list.go", "pkg/cmd/ruleset/list/list.go", "pkg/cmd/ruleset/shared/shared.go", "pkg/cmd/ruleset/view/view.go", "pkg/cmd/skills/publish/publish.go", "pkg/cmd/ssh-key/list/list.go", "pkg/cmd/ssh-key/shared/user_keys.go"], "additions": 61, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13393, "title": "fix(copilot): hint to run copilot directly when exec fails", "base_commit": "9b505c3fb8c3e52100575adbad2da7c4714684d8", "merge_commit": "fe996d33ac852eafdb2769fcba063860be1b4e6a", "prompt": "fix(copilot): hint to run copilot directly when exec fails\n\n## Summary\n\nWhen `gh copilot` finds the `copilot` binary but fails to execute it (e.g., due to unusual characters like parentheses in the file path on Windows), the error message now includes a hint:\n\n```\nFailed to run '', try running `copilot` directly without `gh`.\n```\n\n## Details\n\nOn Windows, `cmd.exe` shims (e.g., those planted by VS Code or npm) can fail when the path contains special characters like `(`. Since `gh copilot` invokes the binary via `os/exec`, these failures surface as opaque errors. This change adds a practical workaround hint so users can still use Copilot CLI directly.\n\nRelated to #13106", "test_files": ["pkg/cmd/copilot/copilot_test.go"], "test_cmd": "go test ./pkg/cmd/copilot/...", "code_files": ["pkg/cmd/copilot/copilot.go"], "additions": 45, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["findCopilotBinaryFunc"]} +{"pr": 13362, "title": "Bump `gh copilot` telemetry sampling to 100%", "base_commit": "3c162a78efc4cf48f6582f261223166af2558a64", "merge_commit": "6176c3eee4b70d0ccf3c6a1503035d049ca4e81b", "prompt": "Bump `gh copilot` telemetry sampling to 100%\n\n## Description\r\n\r\nFixes https://github.com/github/cli/issues/1163\r\n\r\nBumps the telemetry sampling rate for the `gh copilot` command from 1% to 100%, to allow for better analysis of usage.", "test_files": ["pkg/cmd/copilot/copilot_test.go"], "test_cmd": "go test ./pkg/cmd/copilot/...", "code_files": ["pkg/cmd/copilot/copilot.go", "pkg/cmd/root/root.go"], "additions": 24, "verified": "fails at parent, passes with the fix", "grader": "unit", "invented_symbols": []} +{"pr": 13068, "title": "Print `gh auth refresh` for 401 returns", "base_commit": "49d4747a81425418dd2e7bee7e33541b7c644ca9", "merge_commit": "7c439196c1fc4d645d091e83029370cef845587c", "prompt": "Print `gh auth refresh` for 401 returns\n\n`gh auth refresh` exists to make it simpler for users to refresh their tokens on expiration/scope mismatch, but help messages only suggest using it in limited scenarios, and not in a common case of a token expiring and the user receiving a 401 error. Now, the auth flow will detect this case, and for refreshable tokens (namely, tokens created by logging in with `gh auth login` in the first place), it will suggest using `gh auth refresh` for these cases.\r\n\r\nFixes https://github.com/cli/cli/issues/13066.", "test_files": ["internal/ghcmd/cmd_test.go", "pkg/cmd/auth/status/status_test.go"], "test_cmd": "go test ./internal/ghcmd/... ./pkg/cmd/auth/status/...", "code_files": ["internal/ghcmd/cmd.go", "pkg/cmd/auth/shared/writeable.go", "pkg/cmd/auth/status/status.go"], "additions": 108, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["authRecoveryCommand"]} +{"pr": 13057, "title": "Add Issues 2.0 support: issue types, sub-issues, and relationships", "base_commit": "3c162a78efc4cf48f6582f261223166af2558a64", "merge_commit": "20147bf81fed534faf1b5c9be12638983b8e5e82", "prompt": "Add Issues 2.0 support: issue types, sub-issues, and relationships\n\n# Add Issues 2.0 support: issue types, sub-issues, and relationships\n\nCloses #10298\nCloses #9696\nCloses #11757\nCloses #12477\nCloses #12152\n\nAdds support for GitHub's Issues 2.0 features across `gh issue create`, `edit`, `view`, and `list`.\n\n## New flags\n\n### `gh issue create`\n\n| Flag | Description |\n|------|-------------|\n| `--type Bug` | Set the issue type |\n| `--parent 100` | Add as a sub-issue of the specified parent (number or URL) |\n| `--blocked-by 200,201` | Mark as blocked by these issues |\n| `--blocking 300` | Mark as blocking these issues |\n\nInteractive mode prompts for issue type when the repo has types configured.\n\n### `gh issue edit`\n\n| Flag | Description |\n|------|-------------|\n| `--type Bug` | Set the issue type |\n| `--set-parent 100` | Set or replace the parent issue |\n| `--remove-parent` | Remove the parent issue |\n| `--add-sub-issue 123,124` | Add sub-issues |\n| `--remove-sub-issue 123` | Remove a sub-issue |\n| `--add-blocked-by 200` | Add blocked-by relationship |\n| `--remove-blocked-by 201` | Remove blocked-by relationship |\n| `--add-blocking 300,301` | Add blocking relationships |\n| `--remove-blocking 300` | Remove blocking relationship |\n\nInteractive mode adds Type and Parent to the field picker. Batch editing\nsupported for `--type` across multiple issues.\n\n### `gh issue view`\n\nTTY output now displays:\n- Issue type on the state line (e.g., `Bug \u00b7 Open`)\n- Type, Parent, Blocked by, Blocking metadata rows\n- Sub-issues section with completion progress (e.g., `Sub-issues \u00b7 3/5 (60%)`)\n\nJSON output supports new fields: `issueType`, `parent`, `subIssues`,\n`subIssuesSummary`, `blockedBy`, `blocking`. The `subIssues`, `blockedBy`,\nand `blocking` fields are objects of the shape `{ \"nodes\": [...], \"totalCount\": N }`\n(rather than flat arrays) so consumers can detect when the truncation\nlimit is reached. Each node and the `parent` object include the canonical\n`id`.\n\n### `gh issue list`\n\n| Flag | Description |\n|------|-------------|\n| `--type Bug` | Filter issues by type |\n\n## GHES compatibility\n\n- **Issue types and sub-issues**: GA on all supported GHES versions (3.17+). No feature detection needed.\n- **Relationships** (blocked-by/blocking): Requires GHES 3.19+. Feature detection via `__type` schema introspection for the `blockedBy` field on the Issue type. Unsupported GHES versions receive a clear error message. Gated with `// TODO IssueRelationshipsCleanup` for cleanup when GHES 3.18 support ends.\n\n## Implementation details\n\n- Post-creation mutations for type, parent, and relationships (same pattern as projectV2 and assignee mutations)\n- `--blocking` and `--add-blocking` swap API arguments: calls `addBlockedBy(issueId=OTHER, blockingIssueId=THIS)`\n- Cross-repo references supported via URL for `--parent`, `--blocked-by`, `--blocking`, and sub-issue flags\n- Shared helpers extracted to `` (`ResolveIssueRef`, `ResolveIssueTypeName`)\n- Issue-only fields (Type, Parent) gated behind `Allowed` in the Editable pattern to prevent leaking into `gh pr edit`\n- Issue type names with spaces are quoted in search queries (`type:\"Bug Report\"`)\n\n## Testing\n\n- **34 new flag parsing tests** across create, edit, and list\n- **18 new HTTP mock behavior tests** covering mutations, error cases, and GHES unsupported paths\n- **5 new view tests** (TTY rendering, JSON export)\n- **2 regression tests** (issue-only fields don't leak into PR edit, no-new-fields view unchanged)\n\n## Changes\n\n17 files changed, 2105 insertions(+), 18 deletions(-)\n\n| File | Change |\n|------|--------|\n| `` | New types, Issue struct fields, mutation functions, helpers |\n| `` | GraphQL fragment cases, `issueOnlyFields` |\n| `` | ExportData cases for new fields |\n| `` | `IssueRelationshipsSupported` detection |\n| `` | New flags, post-creation mutations, interactive type picker |\n| `` | New flags, mutations, interactive Type/Parent picker |\n| `` | TTY rendering, conditional relationship fields |\n| `` | `--type` filter via search path |\n| `` | Shared `ResolveIssueRef`, `ResolveIssueTypeName` |\n| `` | `IssueType`/`Parent` fields, `Allowed` gating |\n| `` | `IssueType` in `FilterOptions` and search query |\n\n## Key notes for reviewers\n\n- **`--blocking` arg swap**: The GitHub API only has `addBlockedBy(issueId, blockingIssueId)`. To support `--blocking`, we swap the arguments \u2014 the OTHER issue becomes `issueId` and THIS issue becomes `blockingIssueId`. Same for `--remove-blocking`.\n- **Editable `Allowed` gating**: `IssueType` and `Parent` are added to the shared `Editable` struct but gated behind `Allowed = true`, which only the issue edit command sets. This prevents these issue-only fields from leaking into `gh pr edit`'s interactive picker. Regression test in ``.\n- **View relationship fields are GHES-gated**: `blockedBy` and `blocking` are only added to the GraphQL query when `IssueRelationshipsSupported` is true. Without this, `gh issue view` would break on GHES 3.17\u20133.18 where these fields don't exist.\n- **Batch edit type resolution**: When editing multiple issues with `--type`, the type name is resolved to an ID once before the loop rather than per-issue, avoiding N-1 redundant `RepoIssueTypes` API calls.\n\n## Manual test results\n\nAll scenarios tested against on github.com.\n\n24/24 scenarios passing (click to expand)\n\n### Issue types\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 1 | `create-with-type` | `gh issue create --title \"...\" --type Bug` | \u2705 [#1](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/1) created, type=Bug verified |\n| 2 | `create-error-invalid-type` | `gh issue create --title \"Oops\" --type Bugz` | \u2705 Error: `type \"Bugz\" not found; available types: Task, Bug, Feature` |\n| 3 | `edit-change-type` | `gh issue edit 1 --type Feature` | \u2705 Type changed to Feature verified |\n| 4 | `create-interactive-type` | `gh issue create` (interactive) | \u2705 [#21](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/21) Type picker shown, Bug selected and set |\n\n### Sub-issues\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 5 | `create-with-parent` | `gh issue create --title \"...\" --parent 3` | \u2705 [#4](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/4) created as sub-issue of #3 |\n| 6 | `edit-set-parent` | `gh issue edit 5 --set-parent 3` | \u2705 Parent set, verified via `--json parent` |\n| 7 | `edit-remove-parent` | `gh issue edit 5 --remove-parent` | \u2705 Parent removed, verified null |\n| 8 | `edit-add-sub-issues` | `gh issue edit 3 --add-sub-issue 6,7` | \u2705 Sub-issues added, verified via `--json subIssues` |\n| 9 | `edit-remove-sub-issue` | `gh issue edit 3 --remove-sub-issue 6` | \u2705 Sub-issue removed |\n| 10 | `edit-error-mutual-parent` | `gh issue edit 5 --set-parent 1 --remove-parent` | \u2705 Error: `specify only one of --set-parent or --remove-parent` |\n\n### Relationships\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 11 | `create-with-relationships` | `gh issue create --blocked-by 8 --blocking 9` | \u2705 [#11](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/11) blockedBy=#8, blocking=#9 verified |\n| 12 | `edit-add-remove-blocked-by` | `gh issue edit 14 --add-blocked-by 12 --remove-blocked-by 13` | \u2705 Relationships updated |\n| 13 | `edit-add-blocking` | `gh issue edit 14 --add-blocking 15,16` | \u2705 Blocking relationships added (swapped args verified) |\n\n### View\n\n| # | Scenario | Verification | Result |\n|---|----------|-------------|--------|\n| 14 | `view-with-type` | TTY shows `Bug \u00b7 Open` on state line, `Type: Bug` row | \u2705 |\n| 15 | `view-parent-sub-issues` | TTY shows Parent row, Sub-issues section with progress | \u2705 |\n| 16 | `view-child-parent` | TTY shows parent reference for child issue | \u2705 |\n| 17 | `view-relationships` | TTY shows Blocked by and Blocking rows | \u2705 |\n| 18 | `view-json-issueType` | `--json issueType` returns id, name, description, color | \u2705 |\n| 19 | `view-json-parent-subIssues` | `--json parent,subIssues,subIssuesSummary` returns structured data | \u2705 |\n| 20 | `view-json-relationships` | `--json blockedBy,blocking` returns `{ nodes: [...], totalCount: N }` with id, number, title, url, state | \u2705 |\n\n### List\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 21 | `list-filter-by-type` | `gh issue list --type Bug` | \u2705 Filtered results returned |\n\n### Combined\n\n| # | Scenario | Command | Result |\n|---|----------|---------|--------|\n| 22 | `create-all-flags` | `gh issue create --type Task --parent 3 --blocked-by 8 --blocking 9` | \u2705 [#17](https://github.com/bagtoad-enterprise-cloud-testing/garbage/issues/17) all fields set |\n| 23 | `edit-batch-type` | `gh issue edit 18 19 20 --type Bug` | \u2705 All 3 issues updated to Bug |\n| 24 | `edit-interactive` | `gh issue edit 21` (interactive) | \u2705 Picker shows Type and Parent fields |\n\n**TODO**: GHES-specific scenarios (`create-error-ghes-relationships`), but GHES feature detection does have unit test coverage with mock introspection responses.", "test_files": ["acceptance/acceptance_test.go", "api/export_pr_test.go", "internal/featuredetection/feature_detection_test.go", "pkg/cmd/issue/create/create_test.go", "pkg/cmd/issue/edit/edit_test.go", "pkg/cmd/issue/list/list_test.go", "pkg/cmd/issue/view/view_test.go", "pkg/cmd/pr/shared/params_test.go", "pkg/cmd/pr/shared/survey_test.go", "pkg/search/query_test.go"], "test_cmd": "go test ./acceptance/... ./api/... ./internal/featuredetection/... ./pkg/cmd/issue/create/... ./pkg/cmd/issue/edit/... ./pkg/cmd/issue/list/... ./pkg/cmd/issue/view/... ./pkg/cmd/pr/shared/... ./pkg/search/...", "code_files": ["api/export_pr.go", "api/queries_issue.go", "api/query_builder.go", "internal/featuredetection/feature_detection.go", "pkg/cmd/issue/create/create.go", "pkg/cmd/issue/edit/edit.go", "pkg/cmd/issue/list/list.go", "pkg/cmd/issue/shared/lookup.go", "pkg/cmd/issue/view/view.go", "pkg/cmd/pr/edit/edit.go", "pkg/cmd/pr/shared/editable.go", "pkg/cmd/pr/shared/params.go", "pkg/search/query.go"], "additions": 2925, "verified": "fails at parent, passes with the fix", "grader": "cli", "invented_symbols": ["IssueRelationshipsSupported", "IssueType"]} diff --git a/src/adherence/classify.py b/src/adherence/classify.py new file mode 100644 index 0000000..d88bd04 --- /dev/null +++ b/src/adherence/classify.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python3 +"""Decide which grader can judge each existing task, by compiling. + + python3 -m adherence.classify --tasks scenarios-pr/cli-cli \\ + --mirror fixtures/cli-cli.git + +`mkpr` makes this decision for new tasks. Task sets extracted before the +distinction existed carry no `grader` field, and this backfills it in +place. + +The decision cannot be made by reading diffs. A static scan for +identifiers the PR's code adds and its tests reference finds the obvious +cases and **misses the rest**: measured against the validation grid, it +flagged 13393 and 13967 correctly but missed 13624 (`cannot use +verifier.noVerifierSet()` -- a signature change on an existing type) and +13675 (`field.onSearchDone.Store undefined` -- a field added to an +existing struct). Neither adds a top-level declaration, so neither shows +up in a declaration scan, and both are just as unpassable. + +The compiler is the only authority on whether a test compiles. So this +does what the runtime does: check the PR's tests out onto the parent tree +and build them. A build error naming something undefined means the test +cannot compile against ANY implementation that chose different names, and +the task goes to the CLI grader. Anything else -- tests that build and +fail on assertions -- stays with the unit grader. + +Costs one build per task and no GPU. +""" +from __future__ import annotations + +import argparse +import json +import subprocess +import sys +import tempfile +from pathlib import Path + +from adherence.mkpr import ECOSYSTEMS, names_the_test_requires, packages_for, warm_at + + +def classify_one(mirror: Path, task: dict, env: dict, eco: dict) -> tuple[str, list[str], str]: + """(grader, invented_symbols, note) for one task.""" + tests = task.get("test_files") or [] + if not tests: + return "unit", [], "no test files" + pkgs = packages_for(tests, eco) + with tempfile.TemporaryDirectory(prefix="adh-classify-") as d: + try: + subprocess.run(["git", "clone", "--local", "--shared", "--quiet", + "--no-checkout", str(mirror), d], + check=True, capture_output=True, timeout=600) + subprocess.run(["git", "checkout", "--detach", "--quiet", + task["base_commit"]], cwd=d, check=True, + capture_output=True, timeout=600) + warm_at(d, env, eco) + subprocess.run(["git", "checkout", task["merge_commit"], "--"] + + tests, cwd=d, check=True, capture_output=True, + timeout=600) + except (OSError, subprocess.SubprocessError) as e: + return "unit", [], f"could not materialize: {str(e)[-120:]}" + + # `go vet` builds the test binary without running it, which is the + # cheapest way to ask the compiler the only question that matters. + cmd = "go vet " + " ".join(pkgs) if pkgs else "go build ./..." + try: + r = subprocess.run(cmd, shell=True, cwd=d, env=env, + capture_output=True, text=True, timeout=900) + except subprocess.SubprocessError: + return "unit", [], "vet timed out" + if r.returncode == 0: + return "unit", [], "tests compile at the parent" + invented = names_the_test_requires(r.stdout + r.stderr) + if invented: + return "cli", invented, "tests name what the fix introduces" + return "unit", [], "compile failure, but not a missing identifier" + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--tasks", required=True) + ap.add_argument("--mirror", required=True) + ap.add_argument("--only", default="") + args = ap.parse_args() + + gt = Path(args.tasks) / "ground-truth.jsonl" + if not gt.is_file(): + sys.exit(f"no ground-truth.jsonl in {args.tasks}") + tasks = [json.loads(x) for x in gt.read_text().splitlines() if x.strip()] + if args.only: + want = {int(x) for x in args.only.split(",")} + tasks = [t for t in tasks if t["pr"] in want] + + mirror = Path(args.mirror).resolve() + eco = ECOSYSTEMS["go"] + import os + env = dict(os.environ) + env["GOFLAGS"] = "-mod=mod" + + counts = {"unit": 0, "cli": 0} + for t in tasks: + grader, syms, note = classify_one(mirror, t, env, eco) + t["grader"] = grader + t["invented_symbols"] = syms + counts[grader] += 1 + detail = f" [{', '.join(syms[:3])}]" if syms else "" + print(f" #{t['pr']:<7}{grader:<5}{note}{detail}", file=sys.stderr, + flush=True) + + all_tasks = [json.loads(x) for x in gt.read_text().splitlines() if x.strip()] + by_pr = {t["pr"]: t for t in tasks} + with open(gt, "w") as f: + for t in all_tasks: + f.write(json.dumps(by_pr.get(t["pr"], t)) + "\n") + print(f"\n{counts['unit']} unit-graded, {counts['cli']} cli-graded " + f"-> {gt}", file=sys.stderr) + print("re-run `make mkscenarios` so the scenarios carry the choice", + file=sys.stderr) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 78c0ba4..873ba45 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -41,7 +41,10 @@ "calib": "adapter vs proxy per run; >2% fails the H4 gate (§3.2)", } SORTS = ("tag", "pass", "tok") -SECTIONS = ("running", "graded", "summary") +SECTIONS = ("running", "summary", "graded") +# Per-section sorts, cycled with [s] on whichever section has focus. +GRADED_SORTS = ("recent", "verdict", "tok", "dur") +SUM_SORTS = ("tag", "pass", "tok", "dur", "left") GATE = 0.02 # H4 tolerance @@ -79,6 +82,19 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, self.live_section = 0 # 0 running, 1 graded, 2 summary self.graded_cursor = 0 self.sum_cursor = 0 + # Each section scrolls independently. They used to be truncated to + # whatever fit, with no scroll and no indication -- so 25 graded + # rows showed 6 and the cursor could sit on one of the 19 nobody + # could see. + self.graded_scroll = 0 + self.sum_scroll = 0 + self.graded_sort = 0 + self.sum_sort = 0 + # Direction is separate from key, so [S] flips without losing the + # column you picked. Defaults are the useful end: newest graded + # first, cheapest cell first. + self.graded_desc = True + self.sum_desc = False self.proxy_rows = [] self.stamp = 0.0 self.seen_mtime = 0.0 @@ -154,6 +170,58 @@ def scrollbar(self, y0, rows, x, total, offset): self._put(y0 + i, x, "█" if inside else "│", 0 if inside else C.A_DIM) + def section_lengths(self): + """Rows in each live section, in display order.""" + return [len(self.live), len(self.sum_cells()), + len(self.graded_rows())] + + def _move_live(self, step): + """Move one row, crossing into the next section at the edges. + + The three tables read as one column on screen, so [j] at the last + row of `running` should land on the first row of `graded` rather + than stop dead and wait for an [h]/[l] nobody thinks to press. + [h]/[l] still jump whole sections.""" + lens = self.section_lengths() + cursors = [self.live_cursor, self.sum_cursor, self.graded_cursor] + sec = self.live_section + cur = cursors[sec] + step + if cur < 0: + # off the top: previous non-empty section, at its last row + prev = next((i for i in range(sec - 1, -1, -1) if lens[i]), None) + if prev is None: + cur = 0 + else: + sec, cur = prev, lens[prev] - 1 + elif cur >= lens[sec]: + nxt = next((i for i in range(sec + 1, 3) if lens[i]), None) + if nxt is None: + cur = max(0, lens[sec] - 1) + else: + sec, cur = nxt, 0 + self.live_section = sec + cursors[sec] = max(0, cur) + self.live_cursor, self.sum_cursor, self.graded_cursor = cursors + if sec == 0: + self._anchor_live() + + def _move_rows(self, step): + """Move the results cursor, clamped to the rows that exist. + + It was unbounded, and `view_cells` clamps `scroll` but not + `cursor` -- so holding [j] walked the selection off the end of the + list, the highlight vanished, and [space] then opened a detail + pane for a row that was never on screen.""" + n = len(self.visible()) + if not n: + self.cursor = self.scroll = 0 + return + self.cursor = max(0, min(self.cursor + step, n - 1)) + # Keep the cursor in view without yanking the window around. + if self.cursor < self.scroll: + self.scroll = self.cursor + self.scroll = max(0, min(self.scroll, max(0, n - 1))) + def _anchor_live(self): """Pin the selection to a run, not to a row number.""" if self.live: @@ -240,8 +308,10 @@ def footer(self, max_y, max_x, total, avail): keys = [("[tab] view", C.A_DIM), (f"[h/l] section: {SECTIONS[self.live_section]}", C.color_pair(5)), - ("[j/k] row", C.A_DIM), ("[space] detail", C.A_DIM), - ("[r] reload", C.A_DIM), ("[q] quit", C.A_DIM)] + ("[j/k] row", C.A_DIM), ("[s] sort [S] asc/desc", + C.A_DIM), + ("[space] detail", C.A_DIM), ("[r] reload", C.A_DIM), + ("[q] quit", C.A_DIM)] else: keys = [("[tab] view", C.A_DIM), (f"[L] live·{n_live}", @@ -275,14 +345,14 @@ def render(self, max_y, max_x): # results-side idea (arm/scenario cells), and silently hiding a # running job because of it would be the worst possible # behaviour for a monitor. - if self.detail and self.live_section == 1 and self.rows: + if self.detail and self.live_section == 2 and self.rows: rows = self.graded_rows() self.graded_cursor = max(0, min(self.graded_cursor, len(rows) - 1)) self.view_result_detail(rows[self.graded_cursor], max_y, max_x) - elif self.detail and self.live_section == 2 and self.cells: - cs = sd.load_cells(paths=self.files) + elif self.detail and self.live_section == 1 and self.cells: + cs = self.sum_cells() self.sum_cursor = max(0, min(self.sum_cursor, len(cs) - 1)) self.view_detail(cs[self.sum_cursor], max_y, max_x) elif self.detail and self.live: @@ -291,7 +361,7 @@ def render(self, max_y, max_x): self.view_live_detail(self.live[self.live_cursor], max_y, max_x) else: - total, avail = self.view_live(body, max_x) + total, avail = self.view_live(body, max_x, max_y) self.footer(max_y, max_x, total, avail) return if not cs and v != "calib": @@ -320,14 +390,29 @@ def render(self, max_y, max_x): STATE_COLOR = {"running": 2, "grading": 5, "stalled": 4, "dead": 4} - def view_live(self, body, max_x): + def view_live(self, body, max_x, max_y=0): """Three stacked sections: what is running, what has just been graded, and the per-(arm, scenario) rollup that says whether the grid is on pace. A single flat table cannot answer 'is it working' and 'how long will this take' at the same time.""" C = self.curses + max_y = max_y or (body + 3) runs = self.live y = 3 + # Allocate by what each section actually holds, not a fixed split. + # Every section costs a title + a column header + a blank, and the + # summary line at the top costs two; a section with three rows + # should not reserve half the screen while another is cut off. + HEAD = 3 + n_run, n_grad = len(runs), len(self.rows) + n_sum = len(self.cells) + overhead = 2 + HEAD * (bool(n_run) + bool(n_grad) + bool(n_sum)) + spare = max(3, body - overhead - min(n_run, 8)) + # Graded and summary share the remainder in proportion to how many + # rows each has, so neither starves the other on a short terminal. + want = max(1, n_grad) + max(1, n_sum) + self.sec_budget = max(2, min(n_grad or 1, + int(spare * max(1, n_grad) / want))) s = lv.summarize(runs) done = len(self.rows) self._put(y, 1, f"{s['running']} running · {s['grading']} grading · " @@ -385,55 +470,14 @@ def view_live(self, body, max_x): y += 1 y += 1 - # ---- graded ---------------------------------------------------- - # Newest first: a run in progress is judged by what just landed, - # not by what landed an hour ago. - recent = sorted(self.rows, key=lambda r: r.get("_seq", 0))[-6:][::-1] - if recent: - self._put(y, 1, "graded — most recent first" - + (" ◀" if self.live_section == 1 else ""), - C.color_pair(5) if self.live_section == 1 else C.A_BOLD) - y += 1 - self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'verdict':>9}" - f"{'calls':>7}{'tok_in':>12}{'dur':>9} failing", - C.A_DIM) - y += 1 - self.graded_cursor = max(0, min(self.graded_cursor, - len(recent) - 1)) - for gi, r in enumerate(recent): - if y >= 3 + body - 6: - break - hl = (C.color_pair(5) - if gi == self.graded_cursor and self.live_section == 1 - else 0) - m = r.get("metrics") or {} - ung = [c for c in r["checks"] - if c.get("name") == "adapter" - and c.get("status") != "pass"] - verdict = ("ungradeable" if ung else - "pass" if r["all_pass"] else "fail") - col = (C.color_pair(3) if ung else - C.color_pair(1) if r["all_pass"] else C.color_pair(4)) - fails = ", ".join(c["name"] for c in r["checks"] - if c["status"] == "fail") or "—" - self._put(y, 1, f"{r['scenario'][:19]:<20}", hl) - self._put(y, 21, f"{r.get('arm', '-'):>4}", C.A_DIM) - self._put(y, 25, f"{r['trial']:>3}", C.A_DIM) - self._put(y, 28, f"{verdict:>9}", col) - self._put(y, 37, f"{m.get('calls', 0):>7}", C.A_DIM) - self._put(y, 44, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) - self._put(y, 56, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", - C.A_DIM) - self._put(y, 67, fails[:max(0, max_x - 69)], C.A_DIM) - y += 1 - y += 1 - + cells = self.sum_cells() # ---- per (arm, scenario) rollup -------------------------------- - cells = sd.load_cells(paths=self.files) if cells: - self._put(y, 1, "per arm × scenario — pace and cost so far" - + (" ◀" if self.live_section == 2 else ""), - C.color_pair(5) if self.live_section == 2 else C.A_BOLD) + self._put(y, 1, f"summary — per arm x scenario, sorted by " + f"{SUM_SORTS[self.sum_sort]} " + f"{'v' if self.sum_desc else '^'}" + + (" ◀" if self.live_section == 1 else ""), + C.color_pair(5) if self.live_section == 1 else C.A_BOLD) y += 1 self._put(y, 1, f"{'arm/scenario':<24}{'done':>6}{'ung':>5}" f"{'pass':>6}{'med tok':>11}{'p90 tok':>11}" @@ -446,11 +490,18 @@ def view_live(self, body, max_x): if self.expect and cells: per_cell = max(1, round(self.expect / max(1, len(cells)))) self.sum_cursor = max(0, min(self.sum_cursor, len(cells) - 1)) - for ci, c in enumerate(cells): - if y >= 3 + body - 1: - break + rows_s = max(1, min(len(cells), max_y - y - 2)) + if self.sum_cursor < self.sum_scroll: + self.sum_scroll = self.sum_cursor + elif self.sum_cursor >= self.sum_scroll + rows_s: + self.sum_scroll = self.sum_cursor - rows_s + 1 + self.sum_scroll = max(0, min(self.sum_scroll, + max(0, len(cells) - rows_s))) + for ci_off, c in enumerate(cells[self.sum_scroll: + self.sum_scroll + rows_s]): + ci = self.sum_scroll + ci_off hl = (C.color_pair(5) - if ci == self.sum_cursor and self.live_section == 2 + if ci == self.sum_cursor and self.live_section == 1 else 0) left = max(0, per_cell - c["trials"]) if per_cell else 0 eta = left * c["dur_s"] @@ -477,6 +528,64 @@ def view_live(self, body, max_x): self._put(y, 106, f"{lv.fmt_age(eta):>8}" if eta else f"{'—':>8}", C.A_DIM) y += 1 + # ---- graded ---------------------------------------------------- + # Newest first: a run in progress is judged by what just landed, + # not by what landed an hour ago. + recent = self.graded_rows() + if recent: + self._put(y, 1, f"graded — sorted by " + f"{GRADED_SORTS[self.graded_sort]} " + f"{'v' if self.graded_desc else '^'}" + + (" ◀" if self.live_section == 2 else ""), + C.color_pair(5) if self.live_section == 2 else C.A_BOLD) + y += 1 + self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'verdict':>9}" + f"{'calls':>7}{'tok_in':>12}{'dur':>9} failing", + C.A_DIM) + y += 1 + self.graded_cursor = max(0, min(self.graded_cursor, + len(recent) - 1)) + rows_g = max(1, min(len(recent), self.sec_budget)) + if self.graded_cursor < self.graded_scroll: + self.graded_scroll = self.graded_cursor + elif self.graded_cursor >= self.graded_scroll + rows_g: + self.graded_scroll = self.graded_cursor - rows_g + 1 + self.graded_scroll = max(0, min(self.graded_scroll, + max(0, len(recent) - rows_g))) + window_g = recent[self.graded_scroll:self.graded_scroll + rows_g] + for gi_off, r in enumerate(window_g): + gi = self.graded_scroll + gi_off + hl = (C.color_pair(5) + if gi == self.graded_cursor and self.live_section == 2 + else 0) + m = r.get("metrics") or {} + ung = [c for c in r["checks"] + if c.get("name") == "adapter" + and c.get("status") != "pass"] + verdict = ("ungradeable" if ung else + "pass" if r["all_pass"] else "fail") + col = (C.color_pair(3) if ung else + C.color_pair(1) if r["all_pass"] else C.color_pair(4)) + fails = ", ".join(c["name"] for c in r["checks"] + if c["status"] == "fail") or "—" + self._put(y, 1, f"{r['scenario'][:19]:<20}", hl) + self._put(y, 21, f"{r.get('arm', '-'):>4}", C.A_DIM) + self._put(y, 25, f"{r['trial']:>3}", C.A_DIM) + self._put(y, 28, f"{verdict:>9}", col) + self._put(y, 37, f"{m.get('calls', 0):>7}", C.A_DIM) + self._put(y, 44, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) + self._put(y, 56, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", + C.A_DIM) + self._put(y, 67, fails[:max(0, max_x - 69)], C.A_DIM) + y += 1 + if len(recent) > rows_g: + self._put(y, 1, + f" {self.graded_scroll + 1}-" + f"{self.graded_scroll + rows_g} of {len(recent)}" + f" [j/k] scrolls", C.A_DIM) + y += 1 + y += 1 + return 0, 0 def view_live_detail(self, r, max_y, max_x): @@ -677,8 +786,33 @@ def _anchor_act(self, ev): self.act_sel = ev[self.act_cursor]["id"] def graded_rows(self): - """Results newest first, the order the graded table shows.""" - return sorted(self.rows, key=lambda r: r.get("_seq", 0))[::-1] + """Graded results in the order the table shows them.""" + def verdict_rank(r): + ung = any(c.get("name") == "adapter" and c.get("status") != "pass" + for c in r["checks"]) + return (0 if ung else 1 if r["all_pass"] else 2) + + mode = GRADED_SORTS[self.graded_sort] + keys = { + "recent": lambda r: r.get("_seq", 0), + "verdict": lambda r: (verdict_rank(r), r.get("_seq", 0)), + "tok": lambda r: (r.get("metrics") or {}).get("tok_in_billed", 0), + "dur": lambda r: r.get("duration_s", 0), + } + return sorted(self.rows, key=keys[mode], reverse=self.graded_desc) + + def sum_cells(self): + """Per-(arm, scenario) cells in the order the table shows them.""" + cs = sd.load_cells(paths=self.files) + mode = SUM_SORTS[self.sum_sort] + keys = { + "tag": lambda c: c["tag"], + "pass": lambda c: (c["pass_rate"], c["tag"]), + "tok": lambda c: c["tok"], + "dur": lambda c: c["dur_s"], + "left": lambda c: c["dur_s"] * c["trials"], + } + return sorted(cs, key=keys[mode], reverse=self.sum_desc) def view_result_detail(self, r, max_y, max_x): """One graded trial: every check with its evidence. @@ -795,7 +929,12 @@ def view_cells(self, cs, body, max_x): f"{'probes':>8}{'redun':>7}{'abnd':>6} failing", C.A_DIM) avail = max(1, body - 2) + self.cursor = max(0, min(self.cursor, max(0, len(cs) - 1))) self.scroll = max(0, min(self.scroll, max(0, len(cs) - avail))) + if self.cursor < self.scroll: + self.scroll = self.cursor + elif self.cursor >= self.scroll + avail: + self.scroll = self.cursor - avail + 1 for i, c in enumerate(cs[self.scroll:self.scroll + avail]): y = 4 + i idx = self.scroll + i @@ -1142,13 +1281,7 @@ def handle_key(self, key) -> bool: return False if key in (ord("j"), C.KEY_DOWN, ord("k"), C.KEY_UP): step = 1 if key in (ord("j"), C.KEY_DOWN) else -1 - if self.live_section == 0: - self.live_cursor = max(0, self.live_cursor + step) - self._anchor_live() - elif self.live_section == 1: - self.graded_cursor = max(0, self.graded_cursor + step) - else: - self.sum_cursor = max(0, self.sum_cursor + step) + self._move_live(step) return False if key in (ord(" "), 10, 13): # Each table opens its own kind of detail: a live run, a @@ -1161,9 +1294,21 @@ def handle_key(self, key) -> bool: self.act_cursor = self.act_scroll = 0 self.act_sel, self.act_follow = "", True self.act_open = False - elif self.live_section == 1 and self.rows or self.live_section == 2 and self.cells: + elif self.live_section == 1 and self.cells or self.live_section == 2 and self.rows: self.detail = True return False + # Only the running section has an activity list under it. Letting + # this block run for the graded and summary details created a level + # with nothing in it: [space] appeared to do nothing and then took + # two backs to leave. + if (VIEWS[self.view] == "live" and self.detail + and self.live_section != 0): + if key == ord("Q"): + return True + if key in (ord(" "), 10, 13, ord("q"), 27, C.KEY_LEFT): + self.detail = False + return False + return False if VIEWS[self.view] == "live" and self.detail: if self.act_open: if key == ord("Q"): @@ -1219,8 +1364,20 @@ def handle_key(self, key) -> bool: if key == 9: # tab self.view = (self.view + 1) % len(VIEWS) self.scroll = 0 + elif key == ord("S"): + if VIEWS[self.view] == "live" and self.live_section == 2: + self.graded_desc = not self.graded_desc + elif VIEWS[self.view] == "live" and self.live_section == 1: + self.sum_desc = not self.sum_desc elif key == ord("s"): - self.sort = (self.sort + 1) % len(SORTS) + if VIEWS[self.view] == "live" and self.live_section == 2: + self.graded_sort = (self.graded_sort + 1) % len(GRADED_SORTS) + self.graded_scroll = 0 + elif VIEWS[self.view] == "live" and self.live_section == 1: + self.sum_sort = (self.sum_sort + 1) % len(SUM_SORTS) + self.sum_scroll = 0 + else: + self.sort = (self.sort + 1) % len(SORTS) elif key == ord("/"): self.editing, self.buf = True, self.pattern elif key == ord("F"): @@ -1248,19 +1405,17 @@ def handle_key(self, key) -> bool: self.live_cursor += 1 self._anchor_live() else: - self.cursor += 1 - self.scroll += 1 + self._move_rows(1) elif key in (ord("k"), C.KEY_UP): if VIEWS[self.view] == "live": self.live_cursor = max(0, self.live_cursor - 1) self._anchor_live() else: - self.cursor = max(0, self.cursor - 1) - self.scroll = max(0, self.scroll - 1) + self._move_rows(-1) elif key == C.KEY_NPAGE: - self.scroll += 10 + self._move_rows(10) elif key == C.KEY_PPAGE: - self.scroll = max(0, self.scroll - 10) + self._move_rows(-10) return False diff --git a/src/adherence/prgrade.py b/src/adherence/prgrade.py index 99ef668..1d84ed1 100644 --- a/src/adherence/prgrade.py +++ b/src/adherence/prgrade.py @@ -55,17 +55,33 @@ def grade(sandbox, transcript, final) -> list[Check]: changed = set(git_changed_files(sandbox)) real = set(task.get("code_files", [])) + cli_graded = task.get("grader") == "cli" # --- did it do the job the PR did --------------------------------- + # Under the unit grader this is a real failure: the PR's own tests are + # the verdict, and an agent that touched none of the PR's files did not + # do the work. Under the CLI grader it is REPORTED, not failed -- + # `cli.surface` already proves the shipped behaviour flag-for-flag + # against the PR's own binary, and insisting on the same file set + # would smuggle back the "match the maintainers' structure" demand + # that Amendment 2 exists to remove. hit = sorted(changed & real) coverage = len(hit) / len(real) if real else 0.0 - checks.append(ok("pr.diff_coverage", - f"touched {len(hit)}/{len(real)} of the real diff's " - f"files ({coverage:.0%}): {hit[:6]}") - if hit else - bad("pr.diff_coverage", - f"touched none of the {len(real)} files the real PR " - f"changed; agent touched {sorted(changed)[:6]}")) + if hit: + checks.append(ok("pr.diff_coverage", + f"touched {len(hit)}/{len(real)} of the real diff's " + f"files ({coverage:.0%}): {hit[:6]}")) + elif cli_graded: + checks.append(skip("pr.diff_coverage", + f"touched none of the {len(real)} files the real " + f"PR changed. Reported, not failed: this task is " + f"graded at the command line, where a different " + f"file layout with the same behaviour is a valid " + f"implementation")) + else: + checks.append(bad("pr.diff_coverage", + f"touched none of the {len(real)} files the real " + f"PR changed; agent touched {sorted(changed)[:6]}")) extra = sorted(changed - real) checks.append(skip("pr.scope", diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index b1d81d8..2cc42c4 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -690,9 +690,12 @@ def check_process_hygiene() -> list[str]: grandchild = int((proc.stdout.readline() or "0").strip()) except ValueError: grandchild = 0 - time.sleep(0.3) - leaked = kill_process_group(proc, grace=2.0) - time.sleep(0.3) + # Generous: this runs alongside whatever else the machine is + # doing, and a check that fails under load reports a defect that + # is really CPU contention. + time.sleep(0.5) + leaked = kill_process_group(proc, grace=5.0) + time.sleep(0.5) if leaked: problems.append(f"{leaked} process(es) survived the group kill") if grandchild: @@ -890,6 +893,57 @@ def ev(ids): return problems +def check_cli_grader() -> list[str]: + """Three CLI checks passing must read as success everywhere. + + A CLI-graded task's verdict is `cli.surface` against the PR's own + binary. Anything that quietly keeps a structural demand alive -- a + failing diff_coverage, say -- would drag all_pass to False and put the + task back where Amendment 2 found it: unpassable for reasons the agent + was never told.""" + from adherence.cligrade import command_path + problems = [] + + def all_pass(cs): + return (all(c["status"] == "pass" for c in cs + if c["status"] != "ungradeable") + and any(c["status"] == "pass" for c in cs)) + + def P(n): + return {"name": n, "status": "pass", "evidence": ""} + + def S(n): + return {"name": n, "status": "ungradeable", "evidence": ""} + + def F(n): + return {"name": n, "status": "fail", "evidence": ""} + + cases = [ + ("three CLI passes", [P("cli.builds"), P("cli.surface"), + P("cli.extra_surface")], True), + ("plus advisory checks", [S("pr.diff_coverage"), S("pr.scope"), + S("pr.route"), P("cli.builds"), + P("cli.surface"), P("cli.extra_surface")], + True), + ("a missing flag fails", [P("cli.builds"), F("cli.surface"), + P("cli.extra_surface")], False), + ("a broken build fails", [F("cli.builds")], False), + ] + for label, cs, want in cases: + if all_pass(cs) is not want: + problems.append(f"{label}: all_pass={all_pass(cs)}, expected " + f"{want}") + + # The command battery must be derived, never authored. + if command_path(["pkg/cmd/issue/create/create.go"]) != ["issue", "create"]: + problems.append("command path is not derived from the PR's own file " + "paths; an experimenter choosing which commands to " + "test is an experimenter choosing the result") + if command_path(["api/queries_issue.go"]): + problems.append("a PR touching no command must yield no CLI battery") + return problems + + def check_analysis() -> list[str]: """The pre-specified analysis (docs/EVAL.md) must detect a planted effect, stay silent when there is none, and REFUSE when a precondition @@ -1003,6 +1057,7 @@ def dataset(ratio, floor=9500, passed=True, arms=("a1", "a2", "a3")): ("live run reader", check_live), ("process hygiene", check_process_hygiene), ("live cursor anchoring", check_cursor_anchoring), + ("cli grader verdicts", check_cli_grader), ("proxy attribution under concurrency", check_proxy_attribution), ("pre-specified analysis", check_analysis), ("stdlib test runner", check_test_runner), From 1b4cc94d2b085ab6259ef5e1ff2d3b88a04a6c81 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:03:09 -0700 Subject: [PATCH 13/41] live view: restore the blank line between summary and graded The block swap that reordered the sections dropped the trailing spacer, so the two tables ran together with no gap. Also adds the range indicator the summary section was missing -- graded had one, summary did not, so a truncated summary looked complete. --- src/adherence/matrix_tui.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 873ba45..70fbdf3 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -528,6 +528,13 @@ def view_live(self, body, max_x, max_y=0): self._put(y, 106, f"{lv.fmt_age(eta):>8}" if eta else f"{'—':>8}", C.A_DIM) y += 1 + if len(cells) > rows_s: + self._put(y, 1, + f" {self.sum_scroll + 1}-" + f"{self.sum_scroll + rows_s} of {len(cells)}" + f" [j/k] scrolls", C.A_DIM) + y += 1 + y += 1 # separator; the block swap dropped it # ---- graded ---------------------------------------------------- # Newest first: a run in progress is judged by what just landed, # not by what landed an hour ago. From 8f1a450ffdd9cb03c8759a5103f912264b8b61cb Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:04:56 -0700 Subject: [PATCH 14/41] shift-tab cycles views backward [tab] moved forward through live/cells/arms/cost/calib and there was no way back except cycling all the way around. KEY_BTAB and the literal 353 some terminals send when terminfo carries no kcbt entry are both accepted, so the key is not dead on a terminal that reports it raw -- verified against the real \e[Z sequence through a pty. Switching views also resets the row cursor, which otherwise carried a position from a list of a different length. --- src/adherence/matrix_tui.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 70fbdf3..3bf016d 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -305,7 +305,7 @@ def footer(self, max_y, max_x, total, avail): keys = [("[q] back", C.A_BOLD), ("[esc] root", C.A_DIM), ("[Q] quit", C.A_DIM)] elif live_v: - keys = [("[tab] view", C.A_DIM), + keys = [("[tab/shift-tab] view", C.A_DIM), (f"[h/l] section: {SECTIONS[self.live_section]}", C.color_pair(5)), ("[j/k] row", C.A_DIM), ("[s] sort [S] asc/desc", @@ -313,7 +313,7 @@ def footer(self, max_y, max_x, total, avail): ("[space] detail", C.A_DIM), ("[r] reload", C.A_DIM), ("[q] quit", C.A_DIM)] else: - keys = [("[tab] view", C.A_DIM), + keys = [("[tab/shift-tab] view", C.A_DIM), (f"[L] live·{n_live}", C.color_pair(2) if n_live else C.A_DIM), ("[s] sort", C.A_DIM), ("[/] filter", C.A_DIM), @@ -1368,9 +1368,15 @@ def handle_key(self, key) -> bool: self.detail = False self.act_cursor = self.act_scroll = 0 return False - if key == 9: # tab + if key == 9: # tab: next view self.view = (self.view + 1) % len(VIEWS) - self.scroll = 0 + self.scroll = self.cursor = 0 + elif key in (C.KEY_BTAB, 353): # shift-tab: previous + # 353 is the literal code some terminals send when terminfo + # carries no kcbt entry, so both are accepted rather than + # leaving the key dead on a terminal that reports it raw. + self.view = (self.view - 1) % len(VIEWS) + self.scroll = self.cursor = 0 elif key == ord("S"): if VIEWS[self.view] == "live" and self.live_section == 2: self.graded_desc = not self.graded_desc From 0d86f230eac2f51039ee7a6ba6cb38c7d86425d7 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:09:19 -0700 Subject: [PATCH 15/41] orientation tabs: what the tasks ask for, what the arms are Two new read-only views, and neither touches run data. TASKS. An operator watching a grid sees scenario ids and pass rates with no way to tell what cli-cli-13418 wants, where the answer lives, or why one task is judged by unit tests and the next at the command line. That gap is exactly where a harness artifact gets read as a model failure -- the thing Amendment 2 exists to stop. Lists every scenario with its PR, its grader, the files and directories the real diff touched, and what it asks for; [space] opens the full prompt with the grader explained in the terms a verdict needs, plus the identifiers that forced a cli grading. DESIGN. Same for the arms, measured off disk rather than described, so it cannot drift from what a trial is actually handed: always-loaded bytes, delta against a1, on-demand bytes, and a hash of the surface. a0 0 B, a1 6,518, a2 18,060, a3 3,474 + 13,850 on demand, a5 417. Carries the run's ground rules -- primary outcome, why a cost number without a pass rate is not reportable, the calibration band, harness faults never scoring as model failures, purpose stamping, the two grading tiers, the proxy being authoritative, and disclosed-not-forbidden deviation. Both detail panes are height-aware and scroll: they used to render until they ran out of screen and stop, so on a short terminal a 179-line prompt was cut with nothing saying so and no way to reach the rest. Verified at 26 lines. Also and for the same content outside the TUI. --- Makefile | 11 +- src/adherence/design.py | 147 +++++++++++++++++++++++ src/adherence/matrix_tui.py | 233 +++++++++++++++++++++++++++++++++++- src/adherence/tasks.py | 110 +++++++++++++++++ 4 files changed, 498 insertions(+), 3 deletions(-) create mode 100644 src/adherence/design.py create mode 100644 src/adherence/tasks.py diff --git a/Makefile b/Makefile index d669c96..8730d96 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ RUNNER = $(PYTHON) -m adherence.runner --adapter $(ADAPTER) --model $(MODEL) \ --trials $(TRIALS) $(ARMFLAGS) --out $(OUT) .PHONY: help check ci-local compile selftest schema lint table matrix report \ - analyze floors live clean-runs calibrate screen mkpr mkscenarios trees probe run all clean + analyze floors live tasks design clean-runs calibrate screen mkpr mkscenarios trees probe run all clean help: @printf '%s\n' \ @@ -28,6 +28,9 @@ help: ' make ci-local [JOB=lint] run CI'"'"'s own steps locally, from the workflow file' \ '' \ 'viewing — read-only, never spends a GPU-second:' \ + ' make tasks what each scenario asks for and how' \ + ' it is judged (no run data)' \ + ' make design what each arm is + the ground rules' \ ' make live what is running right now, one-shot' \ ' make clean-runs delete sandboxes/out-dirs from dead runs' \ ' make table [FILTER=a3/*] one-shot snapshot (NOCOLOR=1 to strip ANSI)' \ @@ -85,6 +88,12 @@ lint: # --- viewing --- +tasks: + @$(PY) -m adherence.tasks + +design: + @$(PY) -m adherence.design + live: @$(PY) -m adherence.live diff --git a/src/adherence/design.py b/src/adherence/design.py new file mode 100644 index 0000000..d169f45 --- /dev/null +++ b/src/adherence/design.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +"""What each arm is, how they differ, and the rules the run is bound by. + + python3 -m adherence.design # one-shot text listing + +Orientation, like adherence.tasks, and for the same reason: an operator +reading "a3 0.82x vs a2" has to know what a2 and a3 actually are before +the number means anything, and the answer currently lives in a 600-line +registration document. The arm surfaces are read off disk rather than +described, so this cannot drift from what a trial is actually handed. + +Static: reads the arms directory and the registered constants. Never a run. +Stdlib only. +""" +from __future__ import annotations + +import hashlib +from pathlib import Path + +from adherence import REPO_ROOT +from adherence.suitedata import ARMS + +# Files an agent is handed without asking. Anything under .subagents/ is +# loaded on demand by routing, which is the claim under test. +ALWAYS_LOADED = ("AGENTS.md", "CLAUDE.md") + +# Why each arm exists, in the terms a reader of a result needs. The +# registry in suitedata carries the one-line role; this is what the arm is +# FOR and what its number means when compared. +ARM_PURPOSE = { + "a0": "The floor. No instruction surface at all, so it answers what any " + "instruction costs and buys before asking which one is better. A " + "treatment that cannot beat this is not worth its own bytes.", + "a1": "The practical control: the repository's own AGENTS.md, recovered " + "verbatim from the pinned commit and never authored here. This is " + "what a real team already has, so it is the comparison anyone " + "deciding whether to adopt the pattern actually cares about.", + "a2": "The scientific control: the same content as the treatment, " + "delivered as one file instead of a router plus modules. It " + "isolates DELIVERY from CONTENT -- without it, a win could just " + "mean the treatment's text is better written.", + "a3": "The pattern as shipped: a small always-loaded router that points " + "at bounded contexts loaded on demand. The primary outcome is its " + "marginal input tokens against a2.", + "a4": "The same context set delivered by spawning a context-scoped " + "subagent rather than inline. Answers E3, the claim that subagent " + "handoff is free, on parent+child totals rather than the parent's.", + "a5": "The minimal alternative raised in the original discussion: a " + "short AGENTS.md plus tools, no routing. Guards against the " + "pattern being credited for what a few good sentences would do.", +} + +# The rules the run is bound by, each with the failure it exists to +# prevent. Wording is deliberately close to docs/EVAL.md so the two cannot +# drift into saying different things. +GROUND_RULES = [ + ("Primary outcome", + "Marginal input tokens in the directed arm against the content-matched " + "monolith (a2), paired on scenario, geometric mean, 95% CI from a " + "cluster bootstrap over scenarios."), + ("Cost is meaningless alone", + "No cost number is reportable without the pass rate beside it. Cheaper " + "and worse is a trade, not a win, and the honest output is the (cost, " + "success) plane."), + ("Calibration band", + "A scenario counts only if its pooled pass rate lands in [0.25, 0.80]. " + "Outside that it cannot discriminate between arms. Dropped scenarios " + "are logged and never re-authored to make them discriminate."), + ("Harness faults are not model failures", + "An adapter that did not complete, or a transcript that failed schema " + "validation, is `ungradeable` and excluded -- never scored as a model " + "that got it wrong."), + ("Validation never becomes evidence", + "Every record carries `purpose`. The registered analysis reads only " + "rows marked `experiment`; anything unlabelled is treated as " + "validation, because the safe reading of no label is not 'this is real " + "data'."), + ("Two grading tiers, never pooled", + "Unit-graded tasks are the primary evidence. Tasks graded at the " + "command line (Amendment 2) are reported as a separate tier, because " + "a flag comparison is a weaker signal than a passing unit test."), + ("The proxy is authoritative", + "On any disagreement about tokens or round trips, the recording proxy " + "wins over the adapter. It counts calls by construction: a round trip " + "is a request it handled."), + ("Deviations are disclosed, not forbidden", + "Any departure from the registration is stated in the results with " + "what changed and why. Undisclosed deviation is the only thing " + "actually prohibited."), +] + + +def _files(d: Path): + return sorted(p for p in d.rglob("*") if p.is_file()) if d.is_dir() else [] + + +def load(arms_dir: Path | None = None) -> list[dict]: + """One record per materialized arm, measured off disk.""" + arms_dir = arms_dir or (REPO_ROOT / "fixtures" / "cli-cli.arms") + out = [] + for key, (name, role) in ARMS.items(): + if key == "-": + continue + d = arms_dir / key + files = _files(d) + always = [f for f in files if f.name in ALWAYS_LOADED] + ondemand = [f for f in files + if ".subagents" in f.as_posix() and f.suffix == ".md"] + blob = b"".join(f.read_bytes() for f in always) + out.append({ + "arm": key, "name": name, "role": role, + "purpose": ARM_PURPOSE.get(key, ""), + "present": bool(files), + "always_bytes": sum(f.stat().st_size for f in always), + "always_files": [f.name for f in always], + "ondemand_files": [f.name for f in ondemand], + "ondemand_bytes": sum(f.stat().st_size for f in ondemand), + "sha8": hashlib.sha256(blob).hexdigest()[:8] if blob else "", + }) + return out + + +def deltas(rows, ref="a1") -> dict: + """Always-loaded bytes relative to the reference arm.""" + base = next((r["always_bytes"] for r in rows if r["arm"] == ref), 0) + return {r["arm"]: r["always_bytes"] - base for r in rows} + + +def main(): + rows = load() + d = deltas(rows) + print(f"{'arm':<5}{'name':<22}{'always':>9}{'vs a1':>9}{'on demand':>11}" + f" role") + for r in rows: + if not r["present"]: + print(f"{r['arm']:<5}{r['name']:<22}{'not built':>9}") + continue + print(f"{r['arm']:<5}{r['name']:<22}{r['always_bytes']:>9,}" + f"{d[r['arm']]:>+9,}{r['ondemand_bytes']:>11,} {r['role']}") + print("\nground rules") + for k, v in GROUND_RULES: + print(f" {k}\n {v}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 3bf016d..a0adb99 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -26,14 +26,20 @@ import time from pathlib import Path +from adherence import design as dz from adherence import live as lv from adherence import suitedata as sd +from adherence import tasks as tk from adherence.tui.framework import TuiApp, curses_main -VIEWS = ("live", "cells", "arms", "cost", "calib") +VIEWS = ("live", "tasks", "design", "cells", "arms", "cost", "calib") VIEW_HELP = { "live": "running · graded · per arm×scenario [h/l] section " "[j/k] row [space] detail", + "tasks": "what each scenario asks for and how it is judged — no run " + "data [j/k] row [space] detail", + "design": "what each arm is, how they differ, and the run's ground " + "rules [j/k] row [space] detail", "cells": "every (arm, scenario) cell [j/k] row [space] detail " "(median/mean/p90)", "arms": "per-arm rollup; ratios are paired on scenario, geometric", @@ -90,6 +96,9 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, self.sum_scroll = 0 self.graded_sort = 0 self.sum_sort = 0 + self._tasks = None # static; loaded once, never per tick + self._design = None + self.pane_scroll = 0 # shared by the scrollable detail panes # Direction is separate from key, so [S] flips without losing the # column you picked. Defaults are the useful end: newest graded # first, cheapest cell first. @@ -212,7 +221,8 @@ def _move_rows(self, step): `cursor` -- so holding [j] walked the selection off the end of the list, the highlight vanished, and [space] then opened a detail pane for a row that was never on screen.""" - n = len(self.visible()) + n = (len(self.task_rows()) if VIEWS[self.view] == "tasks" + else len(self.visible())) if not n: self.cursor = self.scroll = 0 return @@ -340,6 +350,24 @@ def render(self, max_y, max_x): cs = self.visible() total = avail = 0 v = VIEWS[self.view] + if v == "tasks": + rows = self.task_rows() + if self.detail and rows: + self.cursor = max(0, min(self.cursor, len(rows) - 1)) + self.view_task_detail(rows[self.cursor], max_y, max_x) + else: + total, avail = self.view_tasks(rows, body, max_x) + self.footer(max_y, max_x, total, avail) + return + if v == "design": + rows = self.design_rows() + if self.detail and rows: + self.cursor = max(0, min(self.cursor, len(rows) - 1)) + self.view_design_detail(rows[self.cursor], max_y, max_x) + else: + total, avail = self.view_design(rows, body, max_x) + self.footer(max_y, max_x, total, avail) + return if v == "live": # Deliberately not filtered by `pattern`: that filter is a # results-side idea (arm/scenario cells), and silently hiding a @@ -929,6 +957,202 @@ def view_event(self, r, max_y, max_x): f"/{len(lines)} lines" self._put(max_y - 2, max(0, max_x - len(pos) - 3), pos, C.A_DIM) + def task_rows(self): + """Scenario descriptions, filtered by the same grammar as cells.""" + if self._tasks is None: + try: + self._tasks = tk.load() + except Exception: + self._tasks = [] + return [t for t in self._tasks + if sd.matches(t["id"], self.pattern)] + + def view_tasks(self, rows, body, max_x): + C = self.curses + if not rows: + self._put(3, 3, "no scenarios found", C.A_DIM) + return 0, 0 + s = tk.summarize(rows) + self._put(3, 1, f"{s['n']} scenarios — {s['unit']} judged by the " + f"PR's unit tests, {s['cli']} at the command line, " + f"{s['synthetic']} synthetic", C.A_BOLD) + self._put(4, 1, f"{'scenario':<20}{'PR':>7}{'grader':>8}{'files':>7}" + f"{'dirs':>6} what it asks for", C.A_DIM) + avail = max(1, body - 3) + self.cursor = max(0, min(self.cursor, len(rows) - 1)) + if self.cursor < self.scroll: + self.scroll = self.cursor + elif self.cursor >= self.scroll + avail: + self.scroll = self.cursor - avail + 1 + self.scroll = max(0, min(self.scroll, max(0, len(rows) - avail))) + for i, t in enumerate(rows[self.scroll:self.scroll + avail]): + y, idx = 5 + i, self.scroll + i + base = C.color_pair(5) if idx == self.cursor else 0 + self._put(y, 1, f"{t['id'][:19]:<20}", base) + self._put(y, 21, f"{str(t['pr'] or '—'):>7}", C.A_DIM) + # cli-graded is the exception and worth spotting at a glance. + self._put(y, 28, f"{t['grader'] or '—':>8}", + C.color_pair(3) if t["grader"] == "cli" else C.A_DIM) + self._put(y, 36, f"{len(t['code_files']):>7}", C.A_DIM) + self._put(y, 43, f"{len(t['dirs']):>6}", C.A_DIM) + self._put(y, 51, t["title"][:max(0, max_x - 53)], base) + self.scrollbar(5, avail, max_x - 2, len(rows), self.scroll) + return len(rows), avail + + def view_task_detail(self, t, max_y, max_x): + """One scenario: what it asks, where the answer lives, how it is + judged, and what a verdict from that grader does and does not + mean.""" + C = self.curses + w = max_x - 4 + self._put(3, 1, f"{t['id']}" + + (f" PR #{t['pr']}" if t["pr"] else "") + + f" base {t['base_commit']}", C.A_BOLD) + self._put(4, 1, t["title"][:w], 0) + + y = 6 + label, meaning = tk.GRADER_MEANING.get( + t["grader"], ("(no PR grader)", "Synthetic scenario: its own " + "grade.py decides.")) + self._put(y, 1, "judged by", C.A_DIM) + self._put(y, 16, label, + C.color_pair(3) if t["grader"] == "cli" else 0) + y += 1 + for ln in self._wrap(meaning, w - 16): + if y >= max_y - 4: + break + self._put(y, 16, ln, C.A_DIM) + y += 1 + if t["invented"]: + self._put(y, 16, "forced by: " + ", ".join(t["invented"][:6]), + C.A_DIM) + y += 1 + y += 1 + + for label, value in ( + ("answer lives in", ", ".join(t["dirs"][:6]) or "—"), + ("files the PR hit", f"{len(t['code_files'])}: " + + ", ".join(t["code_files"][:4])), + ("checked with", t["test_cmd"] or "CLI flag comparison"), + ("timeout", f"{t['timeout']}s"), + ): + self._put(y, 1, f"{label:<15}", C.A_DIM) + self._put(y, 16, str(value)[:w - 16]) + y += 1 + y += 1 + + self._put(y, 1, f"prompt ({t['prompt_lines']} lines) — this is all " + f"the agent is given", C.A_BOLD) + y += 1 + # Keep the author's line breaks; a PR body is headings and tables. + lines = [] + for raw in t["prompt"].splitlines(): + lines += self._wrap(raw, w - 4) or [""] + self._pane(lines, y, max_y, max_x) + + def _pane(self, lines, y0, max_y, max_x, x=3): + """Draw a list of lines in the space that is left, with a scrollbar. + + Detail panes used to render until they ran out of screen and then + simply stop -- on a short terminal the prompt was cut with nothing + saying so and no way to see the rest.""" + rows = max(1, max_y - y0 - 2) + self.pane_scroll = max(0, min(self.pane_scroll, + max(0, len(lines) - rows))) + for i, ln in enumerate(lines[self.pane_scroll: + self.pane_scroll + rows]): + self._put(y0 + i, x, ln[:max_x - x - 3], ln.attr + if hasattr(ln, "attr") else 0) + if len(lines) > rows: + self.scrollbar(y0, rows, max_x - 2, len(lines), self.pane_scroll) + pos = (f"{self.pane_scroll + 1}-" + f"{min(self.pane_scroll + rows, len(lines))}" + f"/{len(lines)} [j/k] scrolls") + self._put(max_y - 2, max(0, max_x - len(pos) - 3), pos, + self.curses.A_DIM) + + def design_rows(self): + if self._design is None: + try: + self._design = dz.load() + except Exception: + self._design = [] + return self._design + + def view_design(self, rows, body, max_x): + C = self.curses + if not rows: + self._put(3, 3, "no arms materialized — run `make trees` or " + "point ARMSDIR at a built arms directory", + C.A_DIM) + return 0, 0 + d = dz.deltas(rows) + self._put(3, 1, "arms — instruction surface measured off disk, not " + "described", C.A_BOLD) + self._put(4, 1, f"{'arm':<5}{'name':<22}{'always':>9}{'vs a1':>9}" + f"{'on demand':>11}{'sha':>10} role", C.A_DIM) + avail = max(1, body - 3) + self.cursor = max(0, min(self.cursor, len(rows) - 1)) + for i, r in enumerate(rows[:avail]): + y = 5 + i + base = C.color_pair(5) if i == self.cursor else 0 + self._put(y, 1, f"{r['arm']:<5}", base) + self._put(y, 6, f"{r['name']:<22}", base) + if not r["present"]: + self._put(y, 28, f"{'not built':>9}", C.A_DIM) + continue + self._put(y, 28, f"{r['always_bytes']:>9,}", C.color_pair(2)) + self._put(y, 37, f"{d[r['arm']]:>+9,}", C.A_DIM) + self._put(y, 46, f"{r['ondemand_bytes']:>11,}", + C.color_pair(3) if r["ondemand_bytes"] else C.A_DIM) + self._put(y, 57, f"{r['sha8']:>10}", C.A_DIM) + self._put(y, 69, r["role"][:max(0, max_x - 71)], C.A_DIM) + y = 5 + min(len(rows), avail) + 1 + self._put(y, 1, "ground rules — [space] on an arm for its purpose " + "and files", C.A_BOLD) + y += 1 + for k, v in dz.GROUND_RULES: + if y >= body + 2: + break + self._put(y, 3, f"{k}", 0) + for ln in self._wrap(v, max_x - 30)[:1]: + self._put(y, 30, ln, C.A_DIM) + y += 1 + return 0, 0 + + def view_design_detail(self, r, max_y, max_x): + C = self.curses + self._put(3, 1, f"{r['arm']} — {r['name']}", C.A_BOLD) + self._put(4, 1, r["role"], C.A_DIM) + lines = [] + lines += self._wrap(r["purpose"], max_x - 8) + [""] + lines.append(f"always loaded {r['always_bytes']:,} B " + f"{', '.join(r['always_files']) or '(none)'}") + lines.append(f"on demand {r['ondemand_bytes']:,} B " + f"{len(r['ondemand_files'])} file(s)") + if r["ondemand_files"]: + lines += [" " + f for f in r["ondemand_files"][:12]] + lines.append(f"surface sha {r['sha8'] or '—'}") + lines += ["", "ground rules this run is bound by", ""] + for k, v in dz.GROUND_RULES: + lines.append(k) + lines += [" " + x for x in self._wrap(v, max_x - 12)] + lines.append("") + self._pane(lines, 6, max_y, max_x) + + @staticmethod + def _wrap(text, width): + out, cur = [], "" + for word in str(text).split(): + if len(cur) + len(word) + 1 > width and cur: + out.append(cur) + cur = word + else: + cur = f"{cur} {word}".strip() + if cur: + out.append(cur) + return out + def view_cells(self, cs, body, max_x): C = self.curses self._put(3, 1, f"{'arm/scenario':<20}{'trials':>7}{'pass@1':>8}" @@ -1407,6 +1631,7 @@ def handle_key(self, key) -> bool: self.scroll = 0 elif key == ord(" "): self.detail = not self.detail + self.pane_scroll = 0 if self.detail: # Open on the newest event; that is what "what is it doing" # means for a run still in flight. @@ -1417,12 +1642,16 @@ def handle_key(self, key) -> bool: if VIEWS[self.view] == "live": self.live_cursor += 1 self._anchor_live() + elif self.detail and VIEWS[self.view] in ("tasks", "design"): + self.pane_scroll += 1 else: self._move_rows(1) elif key in (ord("k"), C.KEY_UP): if VIEWS[self.view] == "live": self.live_cursor = max(0, self.live_cursor - 1) self._anchor_live() + elif self.detail and VIEWS[self.view] in ("tasks", "design"): + self.pane_scroll = max(0, self.pane_scroll - 1) else: self._move_rows(-1) elif key == C.KEY_NPAGE: diff --git a/src/adherence/tasks.py b/src/adherence/tasks.py new file mode 100644 index 0000000..c090cbd --- /dev/null +++ b/src/adherence/tasks.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +"""What each scenario asks for, and how it will be judged. + + python3 -m adherence.tasks # one-shot text listing + +Orientation, not results. An operator watching a grid sees scenario ids +and pass rates and has no way to tell what `cli-cli-13418` actually wants, +which files the answer lives in, or why one task is judged by unit tests +and the next at the command line. That gap is where a harness artifact +gets mistaken for a model failure -- the whole reason Amendment 2 exists. + +Everything here is static: it reads the scenario directory, never a run. +Stdlib only. +""" +from __future__ import annotations + +import json +from pathlib import Path + +from adherence import REPO_ROOT +from adherence.runner import load_yamlish + +# What each grader actually decides, in the terms an operator needs when +# reading a verdict rather than in the terms the code is written in. +GRADER_MEANING = { + "unit": ("the PR's own unit tests", + "The agent's tree is built and the PR's `_test.go` files are " + "applied on top, then the affected packages run. The tests " + "compile against any correct implementation, so internal " + "naming does not matter."), + "cli": ("the PR's own binary, flag-for-flag", + "These tests name symbols the PR introduces, so they cannot " + "compile against an implementation that chose different " + "identifiers -- passing them would require guessing the " + "maintainers' names. The merge commit is built as an oracle " + "and the agent's binary is compared to it at the command " + "line, where the contract is the one the PR body already " + "gave the agent (Amendment 2)."), +} + + +def load(root: Path | None = None) -> list[dict]: + """One record per scenario, sorted by id.""" + root = root or REPO_ROOT + out = [] + for d in sorted((root / "scenarios").glob("*")): + y = d / "scenario.yaml" + if not y.is_file(): + continue + try: + meta = load_yamlish(y) + except (OSError, ValueError): + continue + task = {} + t = d / "task.json" + if t.is_file(): + try: + task = json.loads(t.read_text()) + except (OSError, json.JSONDecodeError): + task = {} + prompt = str(meta.get("prompt", "")) + title = next((ln.strip() for ln in prompt.splitlines() if ln.strip()), + "(no title)") + out.append({ + "id": d.name, + "category": str(meta.get("category", "")), + "fixture": str(meta.get("fixture", "")), + "base_commit": str(meta.get("base_commit", ""))[:12], + "timeout": int(meta.get("timeout", 0) or 0), + "title": title, + "prompt": prompt, + "prompt_lines": len(prompt.splitlines()), + "pr": task.get("pr", ""), + "grader": task.get("grader", "unit" if task else ""), + "invented": task.get("invented_symbols") or [], + "code_files": task.get("code_files") or [], + "test_files": task.get("test_files") or [], + "test_cmd": task.get("test_cmd", ""), + "dirs": sorted({str(Path(p).parent) + for p in (task.get("code_files") or [])}), + }) + return out + + +def summarize(rows) -> dict: + return { + "n": len(rows), + "unit": sum(1 for r in rows if r["grader"] == "unit"), + "cli": sum(1 for r in rows if r["grader"] == "cli"), + "synthetic": sum(1 for r in rows if not r["pr"]), + } + + +def main(): + rows = load() + if not rows: + print("no scenarios found") + return 0 + s = summarize(rows) + print(f"{s['n']} scenarios — {s['unit']} unit-graded, {s['cli']} " + f"cli-graded, {s['synthetic']} synthetic\n") + print(f"{'scenario':<20}{'PR':>7}{'grader':>8}{'files':>7}{'dirs':>6} what it asks for") + for r in rows: + print(f"{r['id']:<20}{str(r['pr'] or '—'):>7}{r['grader'] or '—':>8}" + f"{len(r['code_files']):>7}{len(r['dirs']):>6} {r['title'][:70]}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From fb5e7828d494c5b74d86b09f62a3ef3a0bed8d14 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:13:58 -0700 Subject: [PATCH 16/41] make stop: reclaim a run, and deliberately never delete results Restarting cleanly is a five-step ritual with three ways to get it wrong, and all three have already happened here: pkill orphans the opencode grandchildren, the paired proxy log gets forgotten so the next run calibrates against the last one's calls, and the temp sandboxes stay behind so the live view keeps rendering a torn-down run. So the awkward part is one command: SIGTERM the whole process group, escalate to SIGKILL for anything that ignores it, report what is still unowned, sweep the sandboxes. It does NOT delete results, and that is the design rather than an omission. Bundling 'kill the processes' with 'remove the data' into one verb is how a habit formed for the safe purpose ends up performing the destructive one, and a --force flag exists to be used. Clearing a results file stays a manual rm -- the command prints the exact one, including the paired proxy log, and says so when the file holds rows marked purpose=experiment. Plan-only unless YES=1, so a mistyped invocation costs nothing. --- Makefile | 9 +- src/adherence/stoprun.py | 202 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 src/adherence/stoprun.py diff --git a/Makefile b/Makefile index 8730d96..162ce98 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ RUNNER = $(PYTHON) -m adherence.runner --adapter $(ADAPTER) --model $(MODEL) \ --trials $(TRIALS) $(ARMFLAGS) --out $(OUT) .PHONY: help check ci-local compile selftest schema lint table matrix report \ - analyze floors live tasks design clean-runs calibrate screen mkpr mkscenarios trees probe run all clean + analyze floors live tasks design stop clean-runs calibrate screen mkpr mkscenarios trees probe run all clean help: @printf '%s\n' \ @@ -32,6 +32,9 @@ help: ' it is judged (no run data)' \ ' make design what each arm is + the ground rules' \ ' make live what is running right now, one-shot' \ + ' make stop [YES=1] stop a run, kill orphans, sweep temp' \ + ' (prints a plan unless YES=1; never' \ + ' deletes results -- rm those yourself)' \ ' make clean-runs delete sandboxes/out-dirs from dead runs' \ ' make table [FILTER=a3/*] one-shot snapshot (NOCOLOR=1 to strip ANSI)' \ ' make matrix [FILTER=a3/*] interactive results matrix' \ @@ -88,6 +91,10 @@ lint: # --- viewing --- +## Stop a run and reclaim what it left. Never deletes results. +stop: + @$(PY) -m adherence.stoprun --out $(or $(OUT),runs/probe.jsonl) $(if $(YES),--yes,) + tasks: @$(PY) -m adherence.tasks diff --git a/src/adherence/stoprun.py b/src/adherence/stoprun.py new file mode 100644 index 0000000..f062136 --- /dev/null +++ b/src/adherence/stoprun.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 +"""Stop a run and reclaim everything it left behind. Deletes no results. + + python3 -m adherence.stoprun # plan only + python3 -m adherence.stoprun --yes # do it + +Restarting a run cleanly is a five-step ritual with three ways to get it +wrong, and every one of them has already happened here: + + * `pkill -f adherence.runner` kills the runner and ORPHANS its opencode + grandchildren, which keep holding the GPU. Two of those left running + turned a --jobs 3 probe into a five-way contention for three slots, + visible only as unexplained slowness. + * the paired proxy log gets forgotten, so the next run's calibration + reads against the last run's calls. + * the temp sandboxes stay behind, and the live view keeps rendering a + torn-down run as though it were still going. + +So the awkward part is one command. + +**What this deliberately does NOT do is delete results.** Bundling "kill +the processes" with "remove the data" into a single verb is how a habit +formed for the safe purpose ends up performing the destructive one, and a +`--force` flag exists to be used. Clearing a results file stays a manual +`rm`: explicit, visible, and already a thing you know how to undo by not +typing it. This command is safe to run whenever, which is the point -- +a reclaim step nobody hesitates over is a reclaim step that actually gets +run. +""" +from __future__ import annotations + +import argparse +import json +import os +import subprocess +import sys +import time +from pathlib import Path + +from adherence import REPO_ROOT +from adherence.live import sweep +from adherence.runner import strays + +RUNNER_MATCH = "adherence.runner" + + +def runner_groups() -> list[tuple[int, int, str]]: + """(pid, pgid, argv) for every live runner.""" + try: + out = subprocess.run(["ps", "-eo", "pid,pgid,args"], + capture_output=True, text=True, timeout=10).stdout + except (OSError, subprocess.SubprocessError): + return [] + found = [] + for line in out.splitlines()[1:]: + parts = line.split(None, 2) + if len(parts) < 3: + continue + pid, pgid, args = parts + if RUNNER_MATCH not in args or " -eo " in args: + continue + if "python" not in args.split()[0] and "/python" not in args: + continue + try: + found.append((int(pid), int(pgid), args[:110])) + except ValueError: + continue + return found + + +def purpose_counts(path: Path) -> dict: + counts: dict[str, int] = {} + if not path.is_file(): + return counts + try: + for line in path.read_text().splitlines(): + if not line.strip(): + continue + try: + r = json.loads(line) + except json.JSONDecodeError: + continue + if "all_pass" in r: + counts[r.get("purpose", "(unlabelled)")] = counts.get( + r.get("purpose", "(unlabelled)"), 0) + 1 + except OSError: + pass + return counts + + +def stop(groups, grace: float = 15.0) -> list[str]: + """SIGTERM the whole group, then SIGKILL what ignored it.""" + notes = [] + if os.name != "posix": + import contextlib + for pid, _pgid, _a in groups: + with contextlib.suppress(OSError): + os.kill(pid, 9) + return ["no process groups on this platform; killed the runner only"] + import signal + pgids = sorted({g[1] for g in groups}) + for sig in (signal.SIGTERM, signal.SIGKILL): + alive = [] + for pgid in pgids: + try: + os.killpg(pgid, sig) + alive.append(pgid) + except ProcessLookupError: + continue + except OSError as e: + notes.append(f"pgid {pgid}: {e}") + if not alive: + break + deadline = time.time() + (grace if sig == signal.SIGTERM else 5.0) + while time.time() < deadline: + still = [] + for pgid in alive: + try: + os.killpg(pgid, 0) + still.append(pgid) + except ProcessLookupError: + pass + if not still: + return notes + time.sleep(0.3) + pgids = alive + notes.append(f"escalating to SIGKILL for {pgids}") + return notes + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--yes", action="store_true", + help="actually do it; without this only the plan prints") + ap.add_argument("--keep-tmp", action="store_true", + help="leave sandboxes and out-dirs in place") + ap.add_argument("--out", default="", + help="results file to REPORT on (never deleted)") + args = ap.parse_args() + + out = Path(args.out) if args.out else None + if out is not None and not out.is_absolute(): + out = REPO_ROOT / out + + groups = runner_groups() + left = strays() + + print("plan" if not args.yes else "stopping") + print(f" stop {len(groups)} runner(s)" + + (f", process group(s) {sorted({g[1] for g in groups})}" + if groups else "")) + for _pid, _pgid, a in groups[:4]: + print(f" {a}") + print(f" reclaim {len(left)} unowned harness process(es)") + if not args.keep_tmp: + print(" sweep sandboxes and out-dirs from finished/killed runs") + print(" delete nothing. results are never touched by this command") + + if out is not None: + counts = purpose_counts(out) + if counts: + print(f"\n{out} holds {sum(counts.values())} row(s): {counts}") + print(" clear it yourself when you mean to:") + print(f" rm {out}" + + (f" {str(out)[:-len('.jsonl')]}.proxy.jsonl" + if out.name.endswith(".jsonl") else "")) + if counts.get("experiment"): + print(" NOTE: some of those rows are marked " + "purpose=experiment — registered data, not " + "regenerable.") + + if not args.yes: + print("\nnothing done. re-run with --yes") + return 0 + + if groups: + for note in stop(groups): + print(f" ! {note}") + # Give the group a moment to die before deciding what is a stray. + time.sleep(1.0) + remaining = strays() + if remaining: + print(f" ! {len(remaining)} process(es) still running and unowned:") + for pid, d in remaining[:6]: + print(f" {pid} {d}") + print(" kill them before starting a new run, or its timings will " + "reflect contention it did not cause") + + if not args.keep_tmp: + try: + n, freed = sweep() + print(f" swept {n} director{'y' if n == 1 else 'ies'}, " + f"{freed / 1e6:.0f} MB") + except RuntimeError as e: + print(f" ! sweep skipped: {e}") + + print("\nstopped and reclaimed. results untouched.") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 0268002ad20fea44a7e90bffe943e89d91ee46f5 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:20:05 -0700 Subject: [PATCH 17/41] sorts belong to the tab you are on [s] cycled the cells sort from every view, so the tasks tab showed 'sort:tok' above a list that [s] did not touch. Each tab now sorts by what it actually holds -- tasks by id, grader, files, dirs or PR; arms by id, always-loaded bytes or on-demand bytes -- with [S] flipping direction, and the header shows the sort that [s] would change HERE. Also from watching it: - the design tab ignored [j]/[k] entirely. _move_rows counted rows for every view except that one, so the cursor had nothing to move through. - with nothing graded yet, the live view's summary and graded sections rendered no header at all, so [h/l] moved focus onto an invisible table and the operator had no way to tell whether the section was empty or broken. Both now draw their header and say what they are waiting for. - ground-rule labels were clipped at a fixed 26 columns, mid-word: 'Harness faults are not mode'. Width now comes from the longest label. --- src/adherence/matrix_tui.py | 84 ++++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 10 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index a0adb99..c9767fc 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -51,6 +51,8 @@ # Per-section sorts, cycled with [s] on whichever section has focus. GRADED_SORTS = ("recent", "verdict", "tok", "dur") SUM_SORTS = ("tag", "pass", "tok", "dur", "left") +TASK_SORTS = ("id", "grader", "files", "dirs", "pr") +DESIGN_SORTS = ("arm", "always", "ondemand") GATE = 0.02 # H4 tolerance @@ -98,6 +100,10 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, self.sum_sort = 0 self._tasks = None # static; loaded once, never per tick self._design = None + self.task_sort = 0 + self.task_desc = False + self.design_sort = 0 + self.design_desc = False self.pane_scroll = 0 # shared by the scrollable detail panes # Direction is separate from key, so [S] flips without losing the # column you picked. Defaults are the useful end: newest graded @@ -221,7 +227,9 @@ def _move_rows(self, step): `cursor` -- so holding [j] walked the selection off the end of the list, the highlight vanished, and [space] then opened a detail pane for a row that was never on screen.""" - n = (len(self.task_rows()) if VIEWS[self.view] == "tasks" + v = VIEWS[self.view] + n = (len(self.task_rows()) if v == "tasks" + else len(self.design_rows()) if v == "design" else len(self.visible())) if not n: self.cursor = self.scroll = 0 @@ -269,7 +277,20 @@ def header(self, max_x): self._put(0, x, f" {name} ", attr) x += len(name) + 3 filt = self.buf if self.editing else (self.pattern or "all") - tail = f"filter:{filt} sort:{SORTS[self.sort]} ref:{self.ref}" + # The sort shown must be the one [s] would change here. It used to + # be the cells sort on every tab, so `sort:tok` sat above a task + # list that [s] did not touch. + if v == "tasks": + sort = f"{TASK_SORTS[self.task_sort]} " \ + f"{'v' if self.task_desc else '^'}" + elif v == "design": + sort = f"{DESIGN_SORTS[self.design_sort]} " \ + f"{'v' if self.design_desc else '^'}" + elif v == "live": + sort = SECTIONS[self.live_section] + else: + sort = SORTS[self.sort] + tail = f"filter:{filt} sort:{sort} ref:{self.ref}" self._put(0, max(x + 2, max_x - len(tail) - 2), tail, C.A_BOLD if self.editing else C.A_DIM) self._put(1, 1, VIEW_HELP[v], C.A_DIM) @@ -326,7 +347,8 @@ def footer(self, max_y, max_x, total, avail): keys = [("[tab/shift-tab] view", C.A_DIM), (f"[L] live·{n_live}", C.color_pair(2) if n_live else C.A_DIM), - ("[s] sort", C.A_DIM), ("[/] filter", C.A_DIM), + ("[s] sort [S] asc/desc", C.A_DIM), + ("[/] filter", C.A_DIM), ("[F] clear", C.A_DIM), ("[p] pick", C.A_DIM), ("[space] detail", C.A_DIM), ("[r] reload", C.A_DIM), ("[q] quit", C.A_DIM)] @@ -500,6 +522,13 @@ def view_live(self, body, max_x, max_y=0): cells = self.sum_cells() # ---- per (arm, scenario) rollup -------------------------------- + if not cells: + self._put(y, 1, "summary — per arm x scenario" + + (" ◀" if self.live_section == 1 else ""), + C.color_pair(5) if self.live_section == 1 else C.A_BOLD) + self._put(y + 1, 3, "nothing graded yet — a cell appears once a " + "trial finishes", C.A_DIM) + y += 3 if cells: self._put(y, 1, f"summary — per arm x scenario, sorted by " f"{SUM_SORTS[self.sum_sort]} " @@ -567,6 +596,13 @@ def view_live(self, body, max_x, max_y=0): # Newest first: a run in progress is judged by what just landed, # not by what landed an hour ago. recent = self.graded_rows() + if not recent: + self._put(y, 1, "graded" + + (" ◀" if self.live_section == 2 else ""), + C.color_pair(5) if self.live_section == 2 else C.A_BOLD) + self._put(y + 1, 3, "no results yet — the first row lands when a " + "trial finishes and is graded", C.A_DIM) + y += 3 if recent: self._put(y, 1, f"graded — sorted by " f"{GRADED_SORTS[self.graded_sort]} " @@ -964,8 +1000,19 @@ def task_rows(self): self._tasks = tk.load() except Exception: self._tasks = [] - return [t for t in self._tasks + rows = [t for t in self._tasks if sd.matches(t["id"], self.pattern)] + mode = TASK_SORTS[self.task_sort] + keys = { + "id": lambda t: t["id"], + # cli-graded first when descending: it is the exception and the + # thing worth finding. + "grader": lambda t: (t["grader"], t["id"]), + "files": lambda t: (len(t["code_files"]), t["id"]), + "dirs": lambda t: (len(t["dirs"]), t["id"]), + "pr": lambda t: (str(t["pr"]), t["id"]), + } + return sorted(rows, key=keys[mode], reverse=self.task_desc) def view_tasks(self, rows, body, max_x): C = self.curses @@ -1077,7 +1124,13 @@ def design_rows(self): self._design = dz.load() except Exception: self._design = [] - return self._design + mode = DESIGN_SORTS[self.design_sort] + keys = { + "arm": lambda r: r["arm"], + "always": lambda r: r["always_bytes"], + "ondemand": lambda r: r["ondemand_bytes"], + } + return sorted(self._design, key=keys[mode], reverse=self.design_desc) def view_design(self, rows, body, max_x): C = self.curses @@ -1111,12 +1164,13 @@ def view_design(self, rows, body, max_x): self._put(y, 1, "ground rules — [space] on an arm for its purpose " "and files", C.A_BOLD) y += 1 + width = max(len(k) for k, _ in dz.GROUND_RULES) + 2 for k, v in dz.GROUND_RULES: if y >= body + 2: break - self._put(y, 3, f"{k}", 0) - for ln in self._wrap(v, max_x - 30)[:1]: - self._put(y, 30, ln, C.A_DIM) + self._put(y, 3, k[:width - 1], 0) + for ln in self._wrap(v, max_x - width - 6)[:1]: + self._put(y, 3 + width, ln, C.A_DIM) y += 1 return 0, 0 @@ -1602,12 +1656,22 @@ def handle_key(self, key) -> bool: self.view = (self.view - 1) % len(VIEWS) self.scroll = self.cursor = 0 elif key == ord("S"): - if VIEWS[self.view] == "live" and self.live_section == 2: + if VIEWS[self.view] == "tasks": + self.task_desc = not self.task_desc + elif VIEWS[self.view] == "design": + self.design_desc = not self.design_desc + elif VIEWS[self.view] == "live" and self.live_section == 2: self.graded_desc = not self.graded_desc elif VIEWS[self.view] == "live" and self.live_section == 1: self.sum_desc = not self.sum_desc elif key == ord("s"): - if VIEWS[self.view] == "live" and self.live_section == 2: + if VIEWS[self.view] == "tasks": + self.task_sort = (self.task_sort + 1) % len(TASK_SORTS) + self.cursor = self.scroll = 0 + elif VIEWS[self.view] == "design": + self.design_sort = (self.design_sort + 1) % len(DESIGN_SORTS) + self.cursor = self.scroll = 0 + elif VIEWS[self.view] == "live" and self.live_section == 2: self.graded_sort = (self.graded_sort + 1) % len(GRADED_SORTS) self.graded_scroll = 0 elif VIEWS[self.view] == "live" and self.live_section == 1: From ddbc8d9055d6200b5bfcf89008606c3cabfb1b51 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:23:22 -0700 Subject: [PATCH 18/41] write each trial's result when it finishes, not in submission order ThreadPoolExecutor.map yields in SUBMISSION order, so a single slow trial buffers every later result inside the executor. Caught live on the probe: trial 2 of cli-cli-13057 completed, its out-dir was cleaned up, and its row sat unwritten behind two trials still 6+ minutes from finishing. That is three problems at once. The result is invisible to the live view, because the out-dir it reads is already gone. The progress count and the graded table understate what has actually been done. And -- the one that matters -- the result is LOST if the runner is killed, which is a completed trial's worth of GPU time discarded with no record that it ever ran. as_completed writes each row the moment its trial finishes. A trial that raises is reported and skipped rather than killing the remaining work. --- src/adherence/runner.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/adherence/runner.py b/src/adherence/runner.py index 9b966af..c4b8a10 100755 --- a/src/adherence/runner.py +++ b/src/adherence/runner.py @@ -934,10 +934,23 @@ def emit(out, item, r, errs): # Threads, not processes: every trial is dominated by waiting # on a subprocess and on the endpoint, so the GIL is not the # constraint and the shared output file needs no IPC. - from concurrent.futures import ThreadPoolExecutor + from concurrent.futures import ThreadPoolExecutor, as_completed lock = threading.Lock() with ThreadPoolExecutor(max_workers=args.jobs) as pool: - for item, r, errs in pool.map(one, work): + futures = [pool.submit(one, it) for it in work] + # as_completed, NOT map: map yields in SUBMISSION order, so + # one slow trial buffers every later result inside the + # executor. Observed on the probe -- a trial finished, its + # out-dir was cleaned up, and its row stayed unwritten + # behind two 20-minute runs: invisible to the live view, + # missing from the progress count, and lost outright if the + # runner were killed. A finished trial is written now. + for fut in as_completed(futures): + try: + item, r, errs = fut.result() + except Exception as e: # noqa: BLE001 + print(f" trial raised: {e}", file=sys.stderr) + continue with lock: emit(out, item, r, errs) else: From e53c8e52642723718bc34fae2ab7d6c584a29fc7 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:24:30 -0700 Subject: [PATCH 19/41] tab bar: run data, then a divider, then the reference pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tasks and design sat between live and cells, so two static ground-truth pages were interleaved with the views that move while a grid runs. They answer a different question -- everything left of the divider changes as the run proceeds, everything right of it does not -- and mixing them invites reading a frozen table as a live one. live cells arms cost calib │ tasks design tab and shift-tab still cycle the whole row; the divider is only in the header. --- src/adherence/matrix_tui.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index c9767fc..f8038b7 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -32,7 +32,13 @@ from adherence import tasks as tk from adherence.tui.framework import TuiApp, curses_main -VIEWS = ("live", "tasks", "design", "cells", "arms", "cost", "calib") +# Run data first, then the reference pages. They are separated in the tab +# bar because they answer different questions: everything left of the +# divider changes as the grid runs, everything right of it is ground truth +# that does not move, and mixing them invites reading a static table as a +# live one. +VIEWS = ("live", "cells", "arms", "cost", "calib", "tasks", "design") +REFERENCE_FROM = VIEWS.index("tasks") VIEW_HELP = { "live": "running · graded · per arm×scenario [h/l] section " "[j/k] row [space] detail", @@ -273,6 +279,9 @@ def header(self, max_x): self._put(0, 1, "adherence-suite", C.A_BOLD) x = 17 for i, name in enumerate(VIEWS): + if i == REFERENCE_FROM: + self._put(0, x, " │ ", C.A_DIM) + x += 3 attr = C.color_pair(5) if i == self.view else C.A_DIM self._put(0, x, f" {name} ", attr) x += len(name) + 3 From b082bfe70594a46acf821f0f2f19ab437210eee6 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:26:21 -0700 Subject: [PATCH 20/41] proxy: a client hanging up is traffic, not a fault opencode opens keep-alive connections and drops them when a session ends. http.server's default response is to dump a full traceback per connection, so a live probe's own output vanished under hundreds of ConnectionResetErrors and the proxy looked like it was failing while it was working correctly. handle_error now ignores the benign disconnects (reset, broken pipe, aborted, timeout) and handle_one_request treats them as the end of the conversation instead of letting them propagate out of the handler. The second half also explains the selftest that flaked only on 3.10: the reset ended the sender thread mid-loop, the test compared against a hardcoded count, and a networking hiccup got reported as proxy cross-attribution -- a wrong diagnosis aimed at the most safety-critical component in the suite. Hammered with 20 clients that connect, send a partial request and yank the socket: zero tracebacks, zero records written for the aborted attempts, and a well-behaved request afterwards still attributed correctly. --- src/adherence/proxy.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/adherence/proxy.py b/src/adherence/proxy.py index d2ce310..ac97232 100644 --- a/src/adherence/proxy.py +++ b/src/adherence/proxy.py @@ -129,6 +129,27 @@ def _fingerprint(body: dict) -> dict: } +# Disconnects are normal traffic, not faults. opencode opens keep-alive +# connections and drops them when a session ends, and http.server's default +# response is to dump a full traceback per connection -- which buried a +# live run's own output under hundreds of ConnectionResetErrors and made +# the proxy look like it was failing while it was working correctly. +_BENIGN = (ConnectionResetError, BrokenPipeError, ConnectionAbortedError, + TimeoutError) + + +class QuietServer(ThreadingHTTPServer): + daemon_threads = True + # Long generations hold a connection open; the default would give up. + timeout = None + + def handle_error(self, request, client_address): + exc = sys.exc_info()[1] + if isinstance(exc, _BENIGN): + return # the client hung up; nothing to say + super().handle_error(request, client_address) + + class Handler(BaseHTTPRequestHandler): protocol_version = "HTTP/1.1" recorder: Recorder = None # set on the server class @@ -138,6 +159,18 @@ class Handler(BaseHTTPRequestHandler): def log_message(self, fmt, *a): # quiet; the JSONL is the log pass + def handle_one_request(self): + """Treat a hung-up client as the end of the conversation. + + Without this the reset propagates out of the handler and + socketserver logs it as an unhandled error. It also ends the + thread mid-request, which is what made a selftest sender die + silently on 3.10 and get reported as cross-attribution.""" + try: + super().handle_one_request() + except _BENIGN: + self.close_connection = True + # ---- control plane ------------------------------------------------- def _split_run(self) -> str: @@ -351,7 +384,7 @@ def main(): Handler.upstream = args.upstream.rstrip("/") Handler.inject_usage = not args.no_inject_usage - srv = ThreadingHTTPServer((args.host, args.port), Handler) + srv = QuietServer((args.host, args.port), Handler) srv.daemon_threads = True print(f"proxy: {args.host}:{args.port} -> {Handler.upstream} " f"log={args.log}", flush=True) From 4d42bc99e2c5cf439229d45f0c20bd260908bd27 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:31:42 -0700 Subject: [PATCH 21/41] an arm that gives up looks cheaper; say so on every surface A trial where the agent quits without editing spends a fraction of a real attempt, so it drags the median token count down. Measured on the validation grid, and the rate is strongly arm-dependent: a1 8/69 abandoned = 12% median understated by 23% a2 1/70 = 1% 1% a3 3/67 = 4% 7% No abandoned trial has ever passed. So giving up is a mechanism by which the instruction surface drives the pass rate -- a1 makes this model quit twelve times more often than a2 -- and that is a result, not noise to filter. The hazard is the cost column. a1 is the arm the treatment is measured against, and its unconditioned median reads 23% cheaper than the work it actually did. The registered analysis conditions on success so F1 is safe, but every surface that prints a raw median has to be able to say so or it will be read as a cost win. Cells now carry tok_worked (abandons excluded). The live summary gains an column in red, marks a median with when abandons are skewing it by more than 5%, and the cells detail shows the conditioned figure beside the raw one. Diagnosis for the record: the trial that prompted this was not cut off by the harness. Six proxy calls, all HTTP 200, no timeout, no truncation -- calls 0-3 finished and call 4 finished . The model chose to end after four tool rounds and 21,901 input tokens, having probed six times and edited nothing. --- src/adherence/matrix_tui.py | 28 ++++++++++++++++++++-------- src/adherence/suitedata.py | 10 ++++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index f8038b7..1427e71 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -547,9 +547,8 @@ def view_live(self, body, max_x, max_y=0): y += 1 self._put(y, 1, f"{'arm/scenario':<24}{'done':>6}{'ung':>5}" f"{'pass':>6}{'med tok':>11}{'p90 tok':>11}" - f"{'calls':>7}{'tools':>7}{'sub':>5}" - f"{'med dur':>9}{'p90 dur':>9}{'left':>5}" - f"{'eta':>8}", C.A_DIM) + f"{'calls':>7}{'tools':>7}{'sub':>5}{'abnd':>6}" + f"{'med dur':>9}{'left':>5}{'eta':>8}", C.A_DIM) y += 1 # Trials per cell, from the batch size when it is known. per_cell = 0 @@ -577,7 +576,11 @@ def view_live(self, body, max_x, max_y=0): C.color_pair(3) if c["ungradeable"] else C.A_DIM) self._put(y, 36, f"{c['pass_rate']:>5.0f}%", self.pass_attr(c["pass_rate"])) - self._put(y, 42, f"{c['tok']:>11,.0f}", C.color_pair(2)) + skewed = (c["abandoned"] and c["tok_worked"] + and c["tok_worked"] > c["tok"] * 1.05) + self._put(y, 42, f"{c['tok']:>11,.0f}" + + ("*" if skewed else " "), + C.color_pair(4) if skewed else C.color_pair(2)) # p90 in red when the tail is far past the middle: a median # that halves while the tail doubles is not a saving. tail = (c["p90_tok"] / c["tok"]) if c["tok"] else 0 @@ -587,11 +590,15 @@ def view_live(self, body, max_x, max_y=0): self._put(y, 71, f"{c['avg_tools']:>7.1f}", C.A_DIM) self._put(y, 78, f"{c['n_subagents']:>5.0f}", C.color_pair(3) if c["n_subagents"] else C.A_DIM) - self._put(y, 83, f"{lv.fmt_age(c['dur_s']):>9}", C.A_DIM) - self._put(y, 92, f"{lv.fmt_age(c['p90_dur']):>9}", C.A_DIM) - self._put(y, 101, f"{left:>5}" if per_cell else f"{'—':>5}", + # Abandons in red: they never pass, and they drag the + # median token count down, so a cheap-looking cell with + # abandons is not cheap. + self._put(y, 83, f"{c['abandoned']:>6}", + C.color_pair(4) if c["abandoned"] else C.A_DIM) + self._put(y, 89, f"{lv.fmt_age(c['dur_s']):>9}", C.A_DIM) + self._put(y, 98, f"{left:>5}" if per_cell else f"{'—':>5}", C.A_DIM) - self._put(y, 106, f"{lv.fmt_age(eta):>8}" if eta + self._put(y, 103, f"{lv.fmt_age(eta):>8}" if eta else f"{'—':>8}", C.A_DIM) y += 1 if len(cells) > rows_s: @@ -1450,6 +1457,11 @@ def view_detail(self, c, max_y, max_x): ("trials", f"{c['trials']}"), ("pass@1", f"{c['pass_rate']:.0f}% (± {c['spread']:.0f})"), ("median tok_in | passed", f"{c['tok_won']:,.0f}"), + ("median tok_in | worked", f"{c['tok_worked']:,.0f}" + + (" (abandoned trials excluded — " + "they never pass and spend a " + "fraction of a real attempt)" + if c["abandoned"] else "")), ("ungradeable (harness)", f"{c['ungradeable']}/{c['trials']}"), ("redundant reads", f"{c['redundant']:.0f}"), ("subagents dispatched", f"{c['n_subagents']:.0f} " diff --git a/src/adherence/suitedata.py b/src/adherence/suitedata.py index 1b26c91..9425ddc 100644 --- a/src/adherence/suitedata.py +++ b/src/adherence/suitedata.py @@ -179,6 +179,16 @@ def load_cells(paths=None, pattern=None): # the median is telling the whole story. "avg_tok": _avg(toks), "p90_tok": _p90(toks), + # Cost with the give-ups removed. An abandoned trial spends a + # fraction of a real attempt, so an arm that quits more often + # looks CHEAPER on the unconditioned median -- measured at 23% + # understatement for a1 on the validation grid, against the + # very arm the treatment is compared to. The registered + # analysis conditions on success; every surface that shows a + # raw median has to be able to say so too. + "tok_worked": _med([(r["metrics"] or {}).get("tok_in_billed", 0) + for r in rs + if not (r["metrics"] or {}).get("abandoned")]), "avg_calls": _avg(calls), "p90_calls": _p90(calls), "avg_dur": _avg([r.get("duration_s", 0) for r in rs]), From ae555434941e84ee5fcde4f02995460df554e50b Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:39:10 -0700 Subject: [PATCH 22/41] the prompt never asked for anything Root cause of the abandoned trials, and it is neither the model nor the arm. mkpr uses the PR body as the prompt, and a PR body is not reliably a task. Bodies that describe the SOLUTION read as changelog entries: 13403 'Use int64 for GitHub database IDs' / '## Use int64 for ...' 13766 'fix(skills): honor --dir' / '## Summary - skip the prompt when' The model replied, verbatim: 'I see you have shared a PR description about migrating GitHub database IDs ... What would you like me to do with this?' One inference call, zero tool calls, six seconds. That is 8 of the 14 abandoned trials in the validation grid. Bodies that describe a PROBLEM ('gh pr checks prints a blank summary when ...') were attempted normally. It was arm-dependent -- a1 12%, a2 1% -- so the instruction surface was being credited for whether the agent guessed the prompt was a task at all. A confound sitting directly on the primary outcome, and one that flatters the quitting arm twice over: a refusal costs a single call, so a1's median token count read 23% below the work it actually did, and 467x below on a1/13403 where four of seven trials refused. Every PR prompt now carries the same imperative. It names no file, package, symbol or API -- it says only that the description is work to be done -- and every arm receives it identically. Verified by reproducing the failure and then fixing it, same scenario, same arm, same model: before 1 call, 0 tools, 12,553 tok, 6s, asks what to do after 21 calls, 45 tools, 1,180,052 tok, editing files --- src/adherence/mkscenarios.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/adherence/mkscenarios.py b/src/adherence/mkscenarios.py index b57590d..b819961 100644 --- a/src/adherence/mkscenarios.py +++ b/src/adherence/mkscenarios.py @@ -20,6 +20,31 @@ import sys from pathlib import Path +# Every PR-derived prompt gets the same imperative, because a PR body is +# not reliably a task. Measured on the validation grid: prompts whose body +# describes the SOLUTION ("Use int64 for GitHub database IDs", "## Summary +# - skip the target-agent prompt when ...") drew the reply "I see you've +# shared a PR description ... What would you like me to do with this?" -- +# one inference call, no tool calls, six seconds, 8 of 14 abandoned trials. +# Prompts whose body describes a PROBLEM ("gh pr checks prints a blank +# summary when ...") were attempted normally. +# +# Worse than noise: the rate was arm-dependent (a1 12%, a2 1%), so the +# instruction surface was being credited for whether the agent guessed the +# prompt was a task at all -- a confound sitting directly on the primary +# outcome, and one that makes the quitting arm look CHEAPER because a +# refusal costs one call. +# +# The imperative names no file, package, symbol or API. It says only that +# the description is work to be done, which every arm receives identically. +TASK_PREAMBLE = ( + "Implement the change described below in this repository.\n" + "Write the code required to make it work. Do not write or modify " + "tests; they already exist and will be run against your work.\n" + "Work from the description alone -- locating the relevant code is " + "part of the task.\n\n" +) + GRADE_SHIM = '''"""Generated by adherence.mkscenarios — do not edit. Every PR-derived task shares one grader so the registered protocol has a @@ -71,6 +96,7 @@ def main(): (d / "grade.py").write_text(GRADE_SHIM) (d / "scenario.yaml").write_text( "# Generated by adherence.mkscenarios from a merged PR.\n" + "# A fixed imperative precedes the PR body; see mkscenarios.\n" "# The prompt has had file paths stripped: locating the work is\n" "# the thing under measurement. The agent never sees the tests.\n" f"category: pr\n" @@ -79,7 +105,7 @@ def main(): f"base_commit: {t['base_commit']}\n" f"timeout: {args.timeout}\n" f"expects_edit: 1\n" - f'prompt: "{yaml_escape(t["prompt"])}"\n') + f'prompt: "{yaml_escape(TASK_PREAMBLE + t["prompt"])}"\n') # The grader needs the test files and command, and the agent must # not: it lands as a dotfile the runner commits into the baseline # so it never appears as an agent edit, and it names no source path From c9fd9ce80d7dd21e3318291ae807d3ca3169b099 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:40:01 -0700 Subject: [PATCH 23/41] a finished trial is not 'grading', and its deadline no longer applies Two display bugs, surfaced by leaving reproduction debris on disk beside a live run. A kept out-dir (--keep-sandbox, or one not yet swept) has a transcript and no live process. That read as 'grading' forever, because the state check only asked whether a transcript existed and never whether anything was still working on it. It is now 'done'. And the budget clock kept running against it -- 80%, then 101%, then 104% of a deadline that had already stopped applying. The adapter timeout governs a trial that is still generating; grading is unbounded and a finished trial is not racing anything. Budget is now reported only while running or stalled, and is capped at 100%: a percentage over the whole is never information, it is a clock nobody turned off. --- src/adherence/live.py | 15 +++++++++++++-- src/adherence/matrix_tui.py | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/adherence/live.py b/src/adherence/live.py index 914ff6c..fe2e7ef 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -450,8 +450,14 @@ def snapshot(tmp: str | None = None, root: Path | None = None, kids = _subagents(p, st.get("root_session", "")) timeout = int(m.get("timeout") or 0) - if graded: + if graded and alive: state = "grading" + elif graded: + # A transcript with no live process is a FINISHED trial whose + # directory was kept (--keep-sandbox) or not yet swept. It used + # to read "grading" forever, with a deadline clock still + # ticking past 100% against a deadline that no longer applies. + state = "done" elif not alive: state = "dead" elif age > STALE_S: @@ -475,7 +481,12 @@ def snapshot(tmp: str | None = None, root: Path | None = None, # --timeout overrides scenario.yaml, so substituting the # scenario's value would overstate the remaining budget on # exactly the runs closest to being killed. - "budget": (elapsed / timeout) if timeout else None, + # The adapter deadline only governs a trial that is still + # generating. Grading is unbounded and a finished trial is not + # racing anything, so a percentage there is meaningless -- it + # read 104% on a run that had already stopped. + "budget": ((min(elapsed / timeout, 1.0) if timeout else None) + if state in ("running", "stalled") else None), "idle_s": age, "state": state, "unlabelled": bool(m.get("unlabelled")), diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 1427e71..3088661 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -447,7 +447,8 @@ def render(self, max_y, max_x): total, avail = self.view_calib(body, max_x) self.footer(max_y, max_x, total, avail) - STATE_COLOR = {"running": 2, "grading": 5, "stalled": 4, "dead": 4} + STATE_COLOR = {"running": 2, "grading": 5, "done": 1, + "stalled": 4, "dead": 4} def view_live(self, body, max_x, max_y=0): """Three stacked sections: what is running, what has just been From f428c79c2c013564ab858eacd1028b59777e57ba Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:41:14 -0700 Subject: [PATCH 24/41] selftest: assert the new budget contract, both directions The previous check asserted 'budget computed when a timeout is known', which the state fix correctly invalidated -- and the selftest caught the change rather than letting it through, which is the point of it. Now it asserts what is actually true: no budget for a trial that is not running, because a finished one is not racing anything, and a real fraction within [0,1] while it is. The running case is exercised by holding the out-dir busy, so both directions are covered instead of only the one that happened to pass. --- src/adherence/selftest.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index 2cc42c4..15469ad 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -651,8 +651,27 @@ def ev(**kw): runs = lv.snapshot(tmp=tmp) if not runs or runs[0]["arm"] != "a3" or runs[0]["trial"] != 2: problems.append("a marked run did not report its own arm/trial") - elif runs[0]["budget"] is None: - problems.append("budget not computed despite a known timeout") + elif runs[0]["budget"] is not None: + problems.append( + f"budget {runs[0]['budget']} reported for a run in state " + f"{runs[0]['state']!r}. The adapter deadline governs a trial " + f"that is still generating; a finished one is not racing " + f"anything and its clock read 104% before this was fixed") + + # ...and while a trial IS running, the budget is a real fraction and + # never exceeds the whole. + real_busy = lv.busy_out_dirs + lv.busy_out_dirs = lambda: {str(d)} + try: + runs = lv.snapshot(tmp=tmp) + finally: + lv.busy_out_dirs = real_busy + if not runs or runs[0]["state"] != "running": + problems.append("a run whose out-dir is held by a live process " + "must read as running") + elif runs[0]["budget"] is None or not 0 <= runs[0]["budget"] <= 1: + problems.append(f"budget {runs[0]['budget']} outside [0,1] for a " + f"running trial") return problems From 44cf963498b16a5d25e9f250846c4739428722d6 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:50:24 -0700 Subject: [PATCH 25/41] watch the WAL: the store's mtime lies between checkpoints opencode's session store runs SQLite in WAL mode, so live writes land in opencode.db-wal and the main .db neither grows nor restamps until a checkpoint. Measured on a delegating trial: .db 234s stale while -wal was 33s fresh. Both the live view's staleness clock and the runner's idle deadline watched the .db alone, so a trial whose root is blocked on subagents -- its stream silent by construction -- looked idle for a whole checkpoint interval. It flickered to 'stalled' in the TUI, which is how it was caught, and the same blind spot sits in wait_or_kill where the consequence is not a wrong label but a killed run. This is the delegation false-stall from two days ago, half-fixed: adding the store was right, naming the wrong file made it a coin flip. And it fails toward the arms that route to subagents, which are the arms under test. _activity_size now sums mtime as well as size, because a WAL being overwritten in place can hold steady in size while still taking writes. --- src/adherence/live.py | 9 +++++++-- src/adherence/runner.py | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/adherence/live.py b/src/adherence/live.py index fe2e7ef..0f18f46 100644 --- a/src/adherence/live.py +++ b/src/adherence/live.py @@ -416,10 +416,15 @@ def snapshot(tmp: str | None = None, root: Path | None = None, # Same reason as runner.wait_or_kill: the root stream goes silent # for the whole time a subagent is working, so a delegating trial # reads as stalled when it is the busiest thing on the machine. + # opencode's store runs in SQLite WAL mode, so live writes land in + # `-wal` and the main .db mtime only moves on checkpoint -- measured + # 234s stale while `-wal` was 33s fresh. Watching the .db alone made + # a delegating trial look idle for a whole checkpoint interval. store = p / "xdg" / "data" / "opencode" / "opencode.db" + watched = [stdout, store, Path(str(store) + "-wal"), p] try: - touched = max(os.path.getmtime(x) for x in - (stdout, store, p) if os.path.exists(x)) + touched = max(os.path.getmtime(x) for x in watched + if os.path.exists(x)) except (OSError, ValueError): touched = 0.0 age = now - touched if touched else 1e9 diff --git a/src/adherence/runner.py b/src/adherence/runner.py index c4b8a10..39ae8d4 100755 --- a/src/adherence/runner.py +++ b/src/adherence/runner.py @@ -349,17 +349,23 @@ def wait_or_kill(proc, out_dir: Path, hard_s: int, idle_s: int): # it *more* to the arms that route to subagents -- which are the arms # under test. Progress is either file moving. store = out_dir / "xdg" / "data" / "opencode" / "opencode.db" + # WAL mode: the main .db neither grows nor restamps between + # checkpoints, so summing it alone made a busy subagent look idle. + wal = Path(str(store) + "-wal") t0 = time.time() last_size, last_change = -1, t0 def _activity_size(): import contextlib total = 0 - for f in (stream, store): + for f in (stream, store, wal): # A file that is not there yet contributes nothing; the sum # only has to move, not be meaningful on its own. with contextlib.suppress(OSError): - total += f.stat().st_size + st = f.stat() + # size AND mtime: a WAL that is being overwritten in place + # can stay the same size while still carrying new writes. + total += st.st_size + int(st.st_mtime) return total while True: From 1c573d75d83b15770413622c362fbc3179d18d83 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 12:58:25 -0700 Subject: [PATCH 26/41] =?UTF-8?q?docs:=20session=20log=20=E2=80=94=20how?= =?UTF-8?q?=20this=20harness=20was=20built=20and=20what=20it=20got=20wrong?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A first-hand narrative of the work: purpose, the question that prompted it, the design and the rules it refuses to break, the fixture and its two supply collapses, the validation runs, the TUI, and a defect catalogue grouped by what each would have done to a published result. Written while it was happening rather than reconstructed, because the value is in the specifics -- which file the WAL check was watching, what the model actually replied when the prompt did not ask for anything, the 467x median distortion on a1/13403. The thesis, stated where it can be checked: a benchmark's hardest problem is not measuring the thing, it is noticing when you are measuring something else. Almost every defect here was silent and several were directional -- they would have produced a clean, publishable, wrong answer rather than an obvious failure. --- docs/SESSION-LOG.md | 483 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 483 insertions(+) create mode 100644 docs/SESSION-LOG.md diff --git a/docs/SESSION-LOG.md b/docs/SESSION-LOG.md new file mode 100644 index 0000000..a49fee7 --- /dev/null +++ b/docs/SESSION-LOG.md @@ -0,0 +1,483 @@ +# Building adherence-suite: a session log + +A narrative record of how this harness was built, what it is for, and — mostly +— what it got wrong along the way and how each error surfaced. Written while +the work was happening, so the defect accounts are first-hand rather than +reconstructed. + +The short version: **a benchmark's hardest problem is not measuring the thing. +It is noticing when you are measuring something else.** Almost every defect +below was silent, and several were directional — they would have produced a +clean, publishable, wrong answer rather than an obvious failure. + +--- + +## 1. What this is and why it exists + +`adherence-suite` is a deterministic harness for measuring agent behaviour +against a repository. No LLM sits anywhere in the scoring path; every verdict +comes from a grader that a person can read and re-run. + +It was built to answer one question, which arrived from an internal +platform-engineering discussion about +[directed-contexts](https://github.com/TGPSKI/directed-contexts) — a pattern +where a small always-loaded `AGENTS.md` "router" points an agent at bounded +context modules loaded on demand. + +The question put to the tool's author was blunt: **"do you have evals?"** + +Correctness was already enforced in Go (`contextctl`). Comparative evidence on +token spend and adherence did not exist. A second participant asked how the +pattern compares to a minimal `AGENTS.md` plus LSPs and MCPs — that question +became arm A5. + +So the primary question became: + +> Does routing an agent to bounded contexts cost less than injecting a +> monolith — in tokens, in round trips, and in subagent overhead — **at equal +> work delivered**? + +The last clause is the whole difficulty. Cost without an adjacent success rate +is not a result; it is a way of being cheap by doing less. + +--- + +## 2. The design, and what it refuses to do + +### Arms + +Six instruction surfaces, materialized from one source so they cannot drift: + +| arm | always-loaded | vs a1 | on demand | what it is for | +|---|---|---|---|---| +| a0 | 0 B | −6,518 | 0 | the floor: what does *any* instruction cost or buy | +| a1 | 6,518 B | — | 0 | the practical control — the repo's own `AGENTS.md`, recovered verbatim | +| a2 | 18,060 B | +11,542 | 0 | the scientific control — same content as a3, one file | +| a3 | 3,474 B | −3,044 | 13,850 | the pattern as shipped | +| a4 | 3,289 B | −3,229 | 13,850 | the same set delivered by spawning a subagent (E3) | +| a5 | 417 B | −6,101 | 0 | minimal `AGENTS.md` + tools | + +A2 exists because without it, a win for A3 could just mean "the generated text +is better written." A2 is content-matched to A3 by construction and the +equality is asserted byte-for-byte. + +### The rules that make the numbers mean something + +- **Falsifiers F1–F6 fixed before data**, with thresholds, and each one carries + what its death would name next. +- **`ungradeable` is not `fail`.** A harness capability gap must never be + scored as a model failure. +- **`purpose` on every record.** The registered analysis reads only rows marked + `experiment`; anything unlabelled is treated as validation, because the safe + reading of no label is not "this is real data." +- **The proxy is authoritative.** On disagreement about tokens or round trips, + the recording proxy wins over the adapter. It counts calls by construction: a + round trip is a request it handled. +- **Cost is meaningless unconditional.** No cost number is reportable without + the pass rate beside it. +- **Deviations are disclosed, not forbidden.** Undisclosed deviation is the only + thing actually prohibited. + +Registered at tag `prereg-directed-contexts-v1` on a repository whose ruleset +makes `prereg-*` tags immutable and signature-required. The first attempt at +that tag was **not** actually immutable — the ruleset pattern did not match a +nested tag path, and a tamper test overwrote the registration message. Flattened +and re-verified: both delete and force-move are now refused. + +--- + +## 3. The fixture, and the supply problem + +`cli/cli` (the GitHub CLI), pinned at `e83adbc0`. Chosen against criteria fixed +before screening: MIT, post-cutoff PR supply, multiple subsystems, ships its own +`AGENTS.md` (so A1 is *recovered*, not authored) and a `CODEOWNERS`. + +Three things about the fixture were stated up front as reasons the eval could +come out uninformative: it is one fixture so E4 is out of reach; it is a +heavily-starred Go repo so the codebase is familiar to the model even where a +specific PR is not; and the floor risk is real. + +**The supply collapsed twice under inspection.** + +The E1 screen counted 174 post-cutoff merges. Classifying them by what they +actually change: + +| bucket | n | share | +|---|---|---| +| CI / agent-config (`.github/`, workflows, skill files) | 83 | 47.7% | +| dependency bumps | 42 | 24.1% | +| **Go change with its own tests** | **32** | **18.4%** | +| Go change, no tests | 13 | 7.5% | +| docs / other | 4 | 2.3% | + +Nearly half of this repository's recent history is agentic-workflow +configuration, which is a fact about `cli/cli` in 2026 rather than a defect. + +Then extraction reported **3 usable tasks**. The cause was a harness bug, not +the fixture: the Go module cache was warmed at `HEAD` while tasks run at their +PR's parent commit, and 125 lines of `go.mod`/`go.sum` drift meant almost every +task failed to build offline. Warming per-commit took it to **34**. + +That number was one command away from being published as the fixture's supply. + +--- + +## 4. Validation: the runs that were never meant to be results + +### The n=7 single-task run + +42 runs across all six arms on one scenario. Useful mainly for shaking out +plumbing, and for one exchange worth recording: a token ratio was narrated as a +verdict without the pass rate beside it — violating the suite's own rule — and +the pass figure quoted alongside it was wrong as well. The correction is why +`tok_won` and the Pareto plane exist on every surface now. + +### The 210-run validation grid + +10 tasks × 3 arms × 7 trials. Explicitly **not** experimental data — the framing +was stated at the time: + +> *"these aren't experimental runs, this is validating the method, the process, +> the code, and the results, before we actually run the experiment."* + +That sentence produced the `purpose` field. Nothing on disk distinguished a +shakedown from real data — same shape, same directory, separated only by +someone's memory of which file was which. + +**What the grid actually found:** + +Only **2 of 10 scenarios** landed in the registered calibration band +[0.25, 0.80]. Six floored, two hit the ceiling. `MIN_PAIRED=4` was not met, so +the registered analysis correctly refused to produce verdicts. + +The diagnosis mattered more than the count: **agents located the right files +95–100% of the time and then failed the maintainers' tests.** Routing was not +the bottleneck. That has a direct implication for the eval's premise — with this +model on this fixture, `task_pass` is dominated by fix quality, so a routing +treatment has little room to move correctness and the differences must appear in +cost. + +--- + +## 5. The defect catalogue + +Grouped by what they would have done to a published result. This is the part of +the log worth reading. + +### 5.1 Defects that would have produced a wrong answer, quietly + +**Orphaned processes → a compounding, invisible slowdown.** +`subprocess.run(timeout=)` kills the process it started. The adapter is a shell +script, so the thing holding the GPU is a *grandchild*, and it survived every +timeout — reparented to systemd, running to completion, output read by nobody. +Measured live: two orphans still going twenty minutes later against three live +trials. Five processes contending for three slots. Not a leak but a spiral — +each timeout permanently shrinks the pool, so more trials time out. Fixed with +process-group kills, `ADH_RUN_ID` attribution via `/proc//environ`, atexit +and signal reapers, and a startup refusal when unowned harness processes exist. + +**A wall-clock deadline that could not tell a hung run from a working one.** +Trials were being killed at 900s while 110 calls deep and still advancing, and +recorded as `calls=0` because the transcript is written at the end. The results +file said those runs did nothing; they had done more than any run that finished. +Split into `--idle-timeout` (no stream activity: stuck) and `--timeout` (a +generous ceiling). + +**A delegating trial read as a stalled one — twice.** +A subagent runs in its own opencode session and the root stream carries none of +its events, so a trial that dispatches one and waits is silent by construction. +Observed: parent 0 calls, subagent 5 calls and 206,689 tokens, forty tool calls +deep, stream untouched for 3m27s — reported "stalled", and `--idle-timeout 300` +would have killed it. **It would have done that more to the arms that route to +subagents, which are the arms under test.** + +The first fix added opencode's session store to the activity check. That was the +right idea and the wrong file: the store runs SQLite in **WAL mode**, so live +writes land in `opencode.db-wal` and the main `.db` mtime only moves on +checkpoint. Measured 282s stale on the main file while `-wal` was 29s fresh. The +half-fix made it a coin flip against checkpoint timing — and it was caught only +because the TUI flickered. + +**Subagent cost read as zero.** +The live view counted distinct session ids in the root stream, which is always +1. A trial that had dispatched two `explore` agents showed `sub=0`. Reading +totals from the root session under-reports by 3.1×, measured on s13 — and **E3 +is the claim that subagent handoff is "0-cost"**, so a root-only total would +have confirmed it by construction. Child sessions and their tokens are now read +live from the store; totals are parent + children, and the split is displayed +because E3 is a claim about the child half specifically. + +**Results buffered and lost.** +`ThreadPoolExecutor.map` yields in *submission* order, so a single slow trial +buffered every later result inside the executor. Caught live: a trial completed, +its out-dir was cleaned up, and its row sat unwritten behind two trials still 6+ +minutes from finishing — invisible to the live view, missing from the count, and +**lost outright if the runner were killed.** + +**A liveness check that killed the process it checked.** +`os.kill(pid, 0)` is the standard existence probe on POSIX. On Windows +`signal.CTRL_C_EVENT == 0`, so the call delivers a real Ctrl-C. The selftest +wrote a marker carrying its own pid, checked it, and raised `KeyboardInterrupt` +inside an unrelated subprocess several tests later — sixteen seconds into the +job, with a traceback pointing at code that had nothing to do with it. CI was +red on exactly one platform. + +### 5.2 Verdicts from tests that never ran + +**F3 and F6 reported TRIPPED off a `nan` CI** with k=1. A verdict from a test +that never ran reads as evidence, which is worse than no result. + +**F3 reported `TRIPPED, k=4` while silently discarding 6 of 10 scenarios** — +every one dropped because neither arm ever succeeded on it, so the survivors +were exactly the tasks the model could already do. `paired_log_ratios`' own +docstring says callers must surface `dropped`; F1 did, F2/F3/F6 bound the +variable and never read it. Six of ten is also past F1's own refusal threshold. + +**Exclusion criteria 1 and 2 were registered and unimplemented.** An adapter +fault was graded `fail` — indistinguishable downstream from a model that failed +the task — and schema errors went to stderr and never reached the record, so +criterion 2 could not read its own evidence. Writing an exclusion rule down is +not the same as having one. + +### 5.3 Metrics that overclaimed + +**`redundant_reads` counted re-read-after-edit.** The naive version scored as +waste the single most correct thing an agent does: re-reading a file it just +changed. + +**`probes_to_first_edit` was gameable** and counted steps rather than bytes. +Replaced with a family — `probes_total`, `probes_after_first_edit`, +`probe_bytes`, `probe_trail` — and route correctness became measurable rather +than asserted. + +**Per-arm floors were never measured.** `tok_in_marginal = tok_in_billed − +floor × calls`, and exclusion criterion 4 refuses the whole comparison when the +floor is wrong — but nothing computed one. The number was going to be typed in +by hand. `make floors` derives it from `first_call_input`, where the task prompt +is byte-identical across arms so the call-1 difference is the instruction +surface and nothing else. The cross-check is the point: a measured floor must +track the on-disk surface at one constant bytes-per-token rate. A2 and A3 +independently imply 3.72 and 3.73 B/tok — agreement to 0.4%. + +### 5.4 Arms and fixtures that were not what they claimed + +**A1 was the router I generated, not the maintainers' file.** Generation +overwrites `AGENTS.md`, so the "practical control" had silently become the +treatment's own text. Fixed with `--a1-ref` recovery and a refusal that inspects +for generated markers. + +**A4 was byte-identical to A3.** The spawn arm — the one E3 depends on — was a +copy of the inline arm, so E3's question would have been answered by an arm that +never spawns. + +**`.adh-task.json` was reported as an agent edit.** The runner writes it, then +rewrites it after the agent stops to hand metrics to the grader — which turned +it into a modified tracked file. Observed as *"agent touched +['.adh-task.json']"* on a run that touched nothing. + +### 5.5 The two findings that changed the experiment + +**Feature PRs are unpassable by construction.** + +SWE-bench-style grading applies the PR's own tests to the agent's independent +implementation. That is sound for a bug fix, whose tests call API that already +exists. It is not sound for a feature PR, whose tests call API the PR is adding: + +``` +create_test.go:695:5: unknown field IssueType in struct literal of type CreateOptions +``` + +A **compile error in the test file** — on a trial that had already passed +`diff_coverage` with 13/13 pre-edit probes inside the real diff's directories. +The agent located the work, implemented it, and failed because it did not +independently choose the maintainers' internal field name. + +The separation on the validation grid was perfect: + +| class | scenarios | pass rates | in band | +|---|---|---|---| +| tests name a symbol the fix introduces | 4 | 0%, 5%, 0%, 0% | **0/4** | +| tests compile; assertions disagree | 6 | 5%, 19%, 71%, 76%, 90%, 95% | 2/6 | + +The tempting repair — state the required API surface in the prompt — **was +rejected**, and the reasoning is the most important paragraph in this log: a +symbol list *is* routing information. `CreateOptions.IssueType` names its +subsystem. Supplying it hands every arm a piece of exactly what the treatment is +supposed to supply, biasing the primary outcome toward the null *inside the +treatment's own channel*, and making a null result uninterpretable. + +Grading at the public interface was preferred but has no supply here: of 34 +tasks, 30 are unit-test-only and none acceptance-only. + +**Amendment 2** registers CLI-boundary grading instead. The oracle is the PR's +own binary: + +``` +reference = build(merge commit) what the PR actually shipped +candidate = build(the agent's tree) what the agent produced +compare flag-for-flag at the CLI +``` + +`gh issue create --type` is a user-facing contract already present in the PR +body the agent receives, so **nothing is added to the prompt** — the grader +stops demanding an identifier it never disclosed. Assignment is by compiler: +`adherence.classify` checks each PR's tests onto its parent tree and builds +them. Result across 34 tasks: **16 unit-graded, 18 cli-graded.** + +A declaration-scan heuristic was tried first and rejected for false negatives — +it missed `13675` (a field on an existing struct) and `13624`, neither of which +adds a top-level declaration. + +**The prompt never asked for anything.** + +The deepest defect, found last. `mkpr` uses the PR body as the prompt, and a PR +body is not reliably a task. Bodies describing the *solution* read as changelog +entries. The model replied, verbatim: + +> *"I see you've shared a PR description about migrating GitHub database IDs +> from `int` to `int64`. **What would you like me to do with this?**"* + +One inference call, zero tool calls, six seconds. That accounted for **8 of the +14 abandoned trials** in the validation grid. Bodies describing a *problem* +("`gh pr checks` prints a blank summary when…") were attempted normally. + +It was arm-dependent — **a1 12%, a2 1%** — so the instruction surface was being +credited for whether the agent guessed the prompt was a task at all. A confound +sitting directly on the primary outcome, flattering the quitting arm twice over: +a refusal costs one call, so a1's median token count read **23% below** the work +it actually did, and **467× below** on `a1/cli-cli-13403`, where four of seven +trials refused: + +``` + 12,547 ABANDONED + 12,554 ABANDONED + 12,554 ABANDONED + 12,556 ABANDONED +2,725,240 worked +5,869,686 worked +6,393,551 worked +``` + +The fix is a fixed imperative on every prompt, naming no file, package, symbol +or API, identical for every arm. Verified by reproducing the failure and then +removing it — same scenario, same arm, same model: + +| | calls | tools | tokens | behaviour | +|---|---|---|---|---| +| before | 1 | 0 | 12,553 | asks what to do | +| after | 21 | 45 | 1,180,052 | editing files | + +--- + +## 6. The TUI, and why it was the best debugging tool built + +A results matrix was adapted from `leather`'s sig-triage eval. It grew into a +live dashboard, and the pattern that emerged is the single most useful lesson of +the session: + +> **Every display feature requested surfaced a real defect in the measurement +> path.** Not coincidence — putting a number on screen forces the question "is +> that true?", and each time the answer was no. + +| what was asked for | what it exposed | +|---|---| +| see runs in progress | orphaned processes compounding into a death spiral | +| show subagent counts | root-only totals that would have confirmed E3 by construction | +| why does this say stalled | an idle timeout that would preferentially kill the treatment | +| why is this task 0/3 | grading that demanded identifiers never given to the agent | +| why is this already graded | completed results buffered, invisible, and lost on kill | +| where do these numbers come from | a WAL-mode staleness check watching the wrong file | + +Three of those are *directional* — they would have biased toward a specific +conclusion rather than adding noise. Noise you notice. + +The dashboard now carries: a live section (per-trial state, calls, tools, +subagent sessions, tokens, elapsed, budget-against-deadline, current tool), a +graded section with full check evidence, a per-(arm, scenario) rollup with +median/p90 and abandonment, an activity feed reading tool *output* from the +session store, and two reference tabs — `tasks` (what each scenario asks and how +it is judged) and `design` (what each arm is, measured off disk, plus the ground +rules) — separated by a divider from the run-data views. + +Its own crop of bugs, all found by use: a cursor that walked off the end of the +list and opened a detail pane for a row never on screen; a positional cursor +that let new events replace the one being read; a phantom nested level that took +two backs to leave; sections silently truncated to what fit; `q` meaning both +"back" and "quit"; sorts that belonged to a different tab; a progress bar that +rendered as an ellipsis; JSON collapsed into one unreadable line. + +--- + +## 7. Current status + +**Branch** `harden/live-tui`, 26 commits, PR #1 open and deliberately unlabelled +so the cross-platform matrix stays out until the stack is stable. + +| | | +|---|---| +| selftest | **24/24**, several checks encoding specific past failures | +| lint / `ci-local` | green | +| proxy-vs-adapter agreement | **0.000%**, live, under `--jobs 3` | +| per-trial proxy attribution in parallel | working — previously declared impossible | +| task supply | 34 verified, 16 unit-graded / 18 cli-graded | +| per-arm floors | measured, arms agree on 3.73 B/tok to 0.4% | +| registration | `prereg-directed-contexts-v1`, immutable, + Amendments 1 and 2 | +| validation run | 120 trials in flight — the first end-to-end test of the whole stack | + +### Known gaps, unfixed and disclosed + +- **A0, A4 and A5 have never run on a PR task.** A4 is the arm E3 depends on and + has never been observed spawning anything. +- **`cli.surface` verifies flags exist and are accepted, not that they work.** + Weaker than a passing unit test, which is why Amendment 2 reports CLI-graded + tasks as a separate tier, never pooled. +- **E5 / F2 (prompt caching) is dead locally.** vLLM returns + `prompt_tokens_details: null`, so `tok_effective` degenerates. Needs a metered + API or the claim leaves the set. +- **Cost profile may not be affordable.** `cli-cli-13057` burned 18M tokens and + 23 minutes per trial. The registered grid at 34 tasks × 6 arms × 7 trials + needs computing from real numbers before it is committed to. +- **A2 section ordering** is fixed across trials; the registration wants + per-trial re-seeding. +- **Compaction events** are parsed but never observed. + +--- + +## 8. Meta-highlights + +**The suite tests itself more rigorously than it tests anything else.** 24 +selftest checks, several written to encode a specific past failure so it cannot +return: the harness-fault-is-not-a-model-failure check, the live cursor +anchoring check, the proxy attribution-under-concurrency check, the +process-hygiene check that kills a grandchild and verifies it died. + +**It caught its author twice.** Changing the budget semantics broke a selftest +assertion that had been correct against the old contract — the suite noticed +before CI did. And a stray-process guard now refuses to start a run when unowned +harness processes are alive, which is a rule written after watching those +orphans distort a run. + +**Refusing beats guessing, everywhere.** `analyze` reports NOT TESTABLE rather +than "not tripped". `floors` exits non-zero rather than print a number it cannot +defend. The live view shows arm `?` rather than infer one. `make probe` refuses +when the arm cannot be applied. `mkscenarios` refuses unverified tasks. The +registered analysis refuses rows not marked `experiment`. Every one of those +refusals exists because the alternative once produced a confident wrong answer. + +**The most dangerous defects were all silent and most were directional.** A +harness that kills the treatment for delegating, a metric that credits it for +not spawning, a grader that fails it for naming things differently, a prompt +that makes the control quit and look cheap — none of these announce themselves. +They produce a clean result with a plausible story. + +**Destructive convenience was deliberately declined.** A one-command +reset-and-clear was built and then split: `make stop` reclaims processes and +sweeps temp directories but never deletes results, and prints the `rm` for you +to type. Bundling "kill the processes" with "remove the data" is how a habit +formed for the safe purpose performs the destructive one, and a `--force` flag +exists to be used. + +**What the whole exercise is really about.** The eval has not run. What exists +is a harness that has been argued with, caught out, and corrected roughly thirty +times — and the argument is the artifact. A number produced by an instrument +nobody tried to break is not evidence. From 2d9bfd5c6770182b5093f50e34df6b7c59d9aa4a Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 13:32:24 -0700 Subject: [PATCH 27/41] salvage a killed trial's transcript; a cut-off run did not give up First result of the fresh probe: cli-cli-13057 a1/1, killed at the 2700s ceiling, recorded as calls=0 tok=0 abandoned=True. The evidence line said what was really lost -- 'hit the hard ceiling while still active (27,623,328 bytes of events, last advanced 18s ago)'. Forty-five minutes of work and 27 MB of stream, discarded because the adapter writes its transcript at the end and the kill took the adapter with it. For a cost experiment that is not a missing row, it is a measurement thrown away -- and it lands hardest on the arms and scenarios expensive enough to hit a ceiling, which are exactly the ones a cost claim is about. The adapter now has a salvage mode and the runner re-invokes it after any kill to convert whatever the stream captured. Verified by forcing a kill: before calls=0 tok_in=0 abandoned=True after calls=8 tok_in=357,131 abandoned=False The trial stays ungradeable either way; exclusion criterion 1 still drops it from every pass rate. What salvage buys is the ability to say what an arm was spending when the ceiling stopped it. And no longer fires on a trial the harness stopped. Giving up and being cut off look identical in a transcript that ends early, and conflating them put a give-up flag on the harness's own decision -- on a 45-minute run, which is the opposite of what happened. metrics.abandoned now takes and withholds the flag when it is false. Also: the idle check's change-detector summed mtime with size so a WAL overwritten in place would still register, but that sum was then printed as a byte count -- '1,785,879,733 bytes' for a 27 MB stream. Fingerprint and byte count are now separate values. --- adapters/opencode.sh | 10 +++++ src/adherence/metrics.py | 18 +++++++-- src/adherence/runner.py | 81 +++++++++++++++++++++++++++++++++------- 3 files changed, 92 insertions(+), 17 deletions(-) diff --git a/adapters/opencode.sh b/adapters/opencode.sh index 9427c59..13f9573 100755 --- a/adapters/opencode.sh +++ b/adapters/opencode.sh @@ -40,10 +40,20 @@ fi # step_finish per inference call, with per-call tokens and cache fields # (design §3.1). Verified on opencode 1.18.10. The human-readable format # carries none of that. +# Salvage mode. When a trial is killed at its deadline the harness loses +# the adapter, and with it the conversion step -- so a run that produced +# 27 MB of events and worked for 45 minutes was recorded as calls=0, +# tok=0. The runner re-invokes this script with ADH_SALVAGE=1 to convert +# whatever the stream captured, without generating anything new. +if [ "${ADH_SALVAGE:-0}" = "1" ]; then + RUN_EXIT=0 +else RUN_EXIT=0 opencode run --format json -m "$MODEL" "${AGENT_ARGS[@]}" "$(cat "$PROMPT_FILE")" \ > "$OUT/stdout.txt" 2> "$OUT/stderr.txt" || RUN_EXIT=$? +fi + if [ "$RUN_EXIT" -ne 0 ]; then echo "opencode-adapter: opencode run exited $RUN_EXIT" >&2 echo "--- stdout ---" >&2; tail -n 40 "$OUT/stdout.txt" >&2 || true diff --git a/src/adherence/metrics.py b/src/adherence/metrics.py index 58b5aec..33c8c33 100644 --- a/src/adherence/metrics.py +++ b/src/adherence/metrics.py @@ -183,7 +183,8 @@ def tool_calls(transcript) -> int: schema.TASK, schema.PROBE)) -def abandoned(transcript, expects_edit: bool = True) -> bool: +def abandoned(transcript, expects_edit: bool = True, + completed: bool = True) -> bool: """Design §5 control 3: flag trials that terminate with fewer than 2 tool calls, or with no edit where an edit was the job. An arm whose token advantage comes from giving up sooner has to be caught here, @@ -193,7 +194,16 @@ def abandoned(transcript, expects_edit: bool = True) -> bool: answered by a report and nothing else — s04's right answer is to STOP and edit nothing at all. Flagging those as abandoned would put a red column on compliant behaviour, and a flag that cries wolf is a flag - nobody reads by the time the PR-derived tasks arrive.""" + nobody reads by the time the PR-derived tasks arrive. + + `completed=False` means the harness stopped the trial -- a deadline, a + crashed adapter -- and the flag is withheld. Giving up and being cut + off look identical in a transcript that ends early, and conflating + them puts a give-up flag on the harness's own decision. Observed on a + 45-minute trial killed at its ceiling with 27 MB of events: recorded + as abandoned, which is the opposite of what happened.""" + if not completed: + return False if tool_calls(transcript) < 2: return True if not expects_edit: @@ -216,7 +226,7 @@ def turns_until_first_compaction(transcript) -> int | None: def compute(transcript, floor: int = 0, duration_s: float | None = None, - expects_edit: bool = True) -> dict: + expects_edit: bool = True, completed: bool = True) -> dict: """All per-run cost metrics. `floor` is the per-arm harness floor from E5's calibration: the input @@ -270,7 +280,7 @@ def compute(transcript, floor: int = 0, duration_s: float | None = None, "compactions": sum(1 for e in transcript if e.get("type") == schema.COMPACTION), "turns_until_first_compaction": turns_until_first_compaction(transcript), - "abandoned": abandoned(transcript, expects_edit), + "abandoned": abandoned(transcript, expects_edit, completed), # §7: total_tokens is the only figure quotable as a saving; # per-agent numbers are diagnostics. Both are reported, and the # total leads. diff --git a/src/adherence/runner.py b/src/adherence/runner.py index 39ae8d4..d2f6035 100755 --- a/src/adherence/runner.py +++ b/src/adherence/runner.py @@ -317,6 +317,45 @@ def per_trial_bench_config(out_dir: Path, run_id: str) -> Path | None: return dest +def salvage(adapter: Path, sandbox: Path, model: str, prompt_file: Path, + out_dir: Path, target_agent: str, env: dict) -> int: + """Convert a killed trial's event stream into a transcript. + + The adapter writes its transcript at the end, so killing it at a + deadline discards everything: a trial that ran 45 minutes and left + 27,623,328 bytes of events on disk was recorded as `calls=0, tok=0`. + For a cost experiment that is not a missing row, it is a measurement + thrown away. + + The trial stays `ungradeable` either way -- the harness did not let it + finish, so it is not a model result and exclusion criterion 1 still + drops it. What salvage buys is the ability to say what an arm was + spending when the ceiling stopped it, which is exactly the question a + ceiling makes urgent. + + Returns the number of transcript events recovered.""" + stream = out_dir / "stdout.txt" + if not stream.is_file() or stream.stat().st_size == 0: + return 0 + if (out_dir / "transcript.jsonl").is_file(): + return 0 # the adapter got there first + salvage_env = dict(env) + salvage_env["ADH_SALVAGE"] = "1" + try: + subprocess.run( + [str(adapter), str(sandbox), model, str(prompt_file), + str(out_dir), target_agent], + capture_output=True, text=True, timeout=300, env=salvage_env, + **({"start_new_session": True} if os.name == "posix" else {})) + except (OSError, subprocess.SubprocessError): + return 0 + try: + return sum(1 for line in (out_dir / "transcript.jsonl").read_text() + .splitlines() if line.strip()) + except OSError: + return 0 + + def wait_or_kill(proc, out_dir: Path, hard_s: int, idle_s: int): """Wait for the adapter, killing it only for a reason worth killing for. @@ -353,20 +392,24 @@ def wait_or_kill(proc, out_dir: Path, hard_s: int, idle_s: int): # checkpoints, so summing it alone made a busy subagent look idle. wal = Path(str(store) + "-wal") t0 = time.time() - last_size, last_change = -1, t0 + last_size, last_change, real_bytes = -1, t0, 0 - def _activity_size(): + def _activity(): + """(fingerprint, bytes). The fingerprint only has to CHANGE when + work happens; the byte count is what a human reads, so they are + kept apart -- printing the fingerprint as a byte count produced + '1,785,879,733 bytes' for a 27 MB stream.""" import contextlib - total = 0 + fp = 0 + size = 0 for f in (stream, store, wal): - # A file that is not there yet contributes nothing; the sum - # only has to move, not be meaningful on its own. with contextlib.suppress(OSError): st = f.stat() - # size AND mtime: a WAL that is being overwritten in place - # can stay the same size while still carrying new writes. - total += st.st_size + int(st.st_mtime) - return total + # size AND mtime: a WAL overwritten in place can hold its + # size while still taking writes. + fp += st.st_size + int(st.st_mtime) + size += st.st_size + return fp, size while True: try: @@ -374,7 +417,7 @@ def _activity_size(): except subprocess.TimeoutExpired: pass now = time.time() - size = _activity_size() + size, real_bytes = _activity() if size != last_size: last_size, last_change = size, now @@ -384,10 +427,10 @@ def _activity_size(): if idle_s and idle > idle_s and last_size >= 0: why = (f"adapter idle {int(idle)}s (no event-stream and no " f"session-store activity; limit {idle_s}s) after " - f"{int(elapsed)}s and {last_size:,} bytes") + f"{int(elapsed)}s and {real_bytes:,} bytes") elif hard_s and elapsed > hard_s: why = (f"adapter hit the hard ceiling of {hard_s}s while still " - f"active ({last_size:,} bytes of events, last advanced " + f"active ({real_bytes:,} bytes of events, last advanced " f"{int(idle)}s ago)") if not why: continue @@ -726,6 +769,15 @@ def run_one(scen_dir: Path, adapter: Path, model: str, keep: bool, _LIVE_PROCS.discard(proc) adapter_ok = why is None and proc.returncode == 0 adapter_err = why or (err or "")[-2000:] + if not adapter_ok: + # A killed trial still did its work; the harness just took away the + # step that writes it down. Re-invoke the adapter in salvage mode to + # convert whatever the stream captured. Best-effort and bounded -- + # the run is already over and nothing downstream may block on it. + saved = salvage(adapter, sandbox, model, prompt_file, out_dir, + target_agent, env) + if saved: + adapter_err += f"; salvaged {saved} transcript event(s)" duration = time.time() - t0 transcript = gradelib.load_transcript(out_dir / "transcript.jsonl") @@ -778,7 +830,10 @@ def run_one(scen_dir: Path, adapter: Path, model: str, keep: bool, metrics=metrics.compute(transcript, floor=floor, duration_s=round(duration, 1), expects_edit=bool(int( - meta.get("expects_edit", 1)))), + meta.get("expects_edit", 1))), + # A trial the harness stopped cannot be + # said to have given up. + completed=adapter_ok), provenance=provenance(scen_dir, meta, arm, arms_dir, adapter, harness), fixture=str(meta.get("fixture", "")), purpose=purpose, From f9d61305ab54d5460ecc510b2ff72335c6f5aa43 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 13:36:00 -0700 Subject: [PATCH 28/41] git decides whether an edit happened, not the transcript The abandon warning fired at 4/120 and none of the four had given up. Three were cli-cli-13057 killed at the 2700s ceiling while still active -- mislabelled by the pre-fix code, corrected going forward. The fourth was cli-cli-13068 a1/0 with 26 calls, 35 tool calls, 894,535 tokens and EVERY CHECK PASSING, flagged as having given up. EDIT events are emitted only for tools that name a file in their input, and that agent did its editing through the shell. git saw the changes -- diff_coverage passed on them -- and the transcript recorded none, so the trial had no first edit and the whole routing family degraded with it: first_edit empty, probe_trail empty, probes_to_first_edit counting everything, and pr.route reporting 'no probes recorded before the first edit'. The transcript is the wrong authority for the question. metrics.abandoned now takes observed_edits from git and outranks the transcript with it, falling back only when nobody looked. observed_edits is recorded beside the transcript's own count so the gap between them is visible rather than inferred -- a divergence means the stream is not seeing a class of edit, which is worth knowing before it empties a metric silently. Covered both directions: a killed run and a shell-edited run are not abandonment; a trial that made one probe and stopped still is. --- src/adherence/metrics.py | 22 ++++++++++++++++++--- src/adherence/runner.py | 4 +++- src/adherence/selftest.py | 40 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/adherence/metrics.py b/src/adherence/metrics.py index 33c8c33..e608dec 100644 --- a/src/adherence/metrics.py +++ b/src/adherence/metrics.py @@ -184,7 +184,7 @@ def tool_calls(transcript) -> int: def abandoned(transcript, expects_edit: bool = True, - completed: bool = True) -> bool: + completed: bool = True, observed_edits: int = -1) -> bool: """Design §5 control 3: flag trials that terminate with fewer than 2 tool calls, or with no edit where an edit was the job. An arm whose token advantage comes from giving up sooner has to be caught here, @@ -208,6 +208,15 @@ def abandoned(transcript, expects_edit: bool = True, return True if not expects_edit: return False + # `observed_edits` is git's answer, and git outranks the transcript + # here. EDIT events are emitted only for tools that name a file in + # their input; an agent that writes through the shell -- a heredoc, + # `sed -i` -- changes files that git sees and the transcript does not. + # Measured: a trial with 26 calls, 35 tool calls and every check + # passing was flagged as having given up, because it did its editing + # in bash. -1 means nobody looked, so fall back to the transcript. + if observed_edits >= 0: + return observed_edits == 0 return not any(e.get("type") == schema.EDIT for e in transcript) @@ -226,7 +235,8 @@ def turns_until_first_compaction(transcript) -> int | None: def compute(transcript, floor: int = 0, duration_s: float | None = None, - expects_edit: bool = True, completed: bool = True) -> dict: + expects_edit: bool = True, completed: bool = True, + observed_edits: int = -1) -> dict: """All per-run cost metrics. `floor` is the per-arm harness floor from E5's calibration: the input @@ -280,7 +290,13 @@ def compute(transcript, floor: int = 0, duration_s: float | None = None, "compactions": sum(1 for e in transcript if e.get("type") == schema.COMPACTION), "turns_until_first_compaction": turns_until_first_compaction(transcript), - "abandoned": abandoned(transcript, expects_edit, completed), + "abandoned": abandoned(transcript, expects_edit, completed, + observed_edits), + # What git saw, beside what the transcript claims. A gap between + # them means the agent edited through a tool the stream does not + # mark as an edit, which silently empties first_edit, probe_trail + # and every routing metric built on them. + "observed_edits": observed_edits, # §7: total_tokens is the only figure quotable as a saving; # per-agent numbers are diagnostics. Both are reported, and the # total leads. diff --git a/src/adherence/runner.py b/src/adherence/runner.py index d2f6035..7e3ec95 100755 --- a/src/adherence/runner.py +++ b/src/adherence/runner.py @@ -833,7 +833,9 @@ def run_one(scen_dir: Path, adapter: Path, model: str, keep: bool, meta.get("expects_edit", 1))), # A trial the harness stopped cannot be # said to have given up. - completed=adapter_ok), + completed=adapter_ok, + observed_edits=len( + gradelib.git_changed_files(sandbox))), provenance=provenance(scen_dir, meta, arm, arms_dir, adapter, harness), fixture=str(meta.get("fixture", "")), purpose=purpose, diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index 15469ad..9fff70d 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -963,6 +963,45 @@ def F(n): return problems +def check_abandoned() -> list[str]: + """`abandoned` must mean the agent gave up, and nothing else. + + Two ways it lied. It fired on a trial the HARNESS killed -- a 45-minute + run cut off at its ceiling with 27 MB of events was recorded as having + given up, the opposite of what happened. And it fired on a trial that + edited through the shell: EDIT events exist only for tools naming a + file in their input, so an agent using a heredoc or `sed -i` changes + files git can see and the transcript cannot. Measured on a trial with + 26 calls, 35 tool calls and every check passing.""" + problems = [] + t = [schema.capability(task_events=True)] + [ + schema.command("sed -i s/a/b/ f.go") for _ in range(5)] + + cases = [ + ("harness killed it", dict(completed=False), False), + ("edited via the shell, git saw 3", + dict(completed=True, observed_edits=3), False), + ("touched nothing, git agrees", + dict(completed=True, observed_edits=0), True), + ("no git answer, fall back to the transcript", + dict(completed=True, observed_edits=-1), True), + ] + for label, kw, want in cases: + got = metrics.abandoned(t, True, **kw) + if got is not want: + problems.append(f"{label}: abandoned={got}, expected {want}") + + # A real give-up still has to be caught, or the flag is useless. + quit_early = [schema.capability(task_events=True), + schema.probe("read", "a.go", 10)] + if not metrics.abandoned(quit_early, True, completed=True, + observed_edits=0): + problems.append("a trial that made one probe and stopped was not " + "flagged; an arm whose token advantage comes from " + "giving up sooner has to be caught here") + return problems + + def check_analysis() -> list[str]: """The pre-specified analysis (docs/EVAL.md) must detect a planted effect, stay silent when there is none, and REFUSE when a precondition @@ -1077,6 +1116,7 @@ def dataset(ratio, floor=9500, passed=True, arms=("a1", "a2", "a3")): ("process hygiene", check_process_hygiene), ("live cursor anchoring", check_cursor_anchoring), ("cli grader verdicts", check_cli_grader), + ("abandoned means gave up", check_abandoned), ("proxy attribution under concurrency", check_proxy_attribution), ("pre-specified analysis", check_analysis), ("stdlib test runner", check_test_runner), From 3c719f0a8e963f3225e8205d246814147f000698 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 14:21:10 -0700 Subject: [PATCH 29/41] live view: running and summary shown whole, graded absorbs the scroll Three fixes to the same allocation. PRIORITY, NOT PROPORTION. Running and summary are bounded -- one row per concurrent trial, one per (arm, scenario) cell -- so they fit and should simply be shown whole. Graded grows without bound for the life of the run, so it is the section that scrolls. Sharing the space proportionally gave graded 22 rows it did not need while truncating a 3-row running table. NO SECTION CAN VANISH. Summary previously took 'whatever is left' (max_y - y - 2), which on a 24-line terminal pushed graded off the bottom entirely: absent rather than truncated, with nothing saying so -- the same failure as the empty sections that rendered no header at all. Graded now keeps a floor of one row, and a scrollbar to explain itself. SCROLLBARS ON ALL THREE. Only cells and the activity feed had them; the live sections printed a range in text or nothing at all, so 'there is nothing more' and 'you are at the top of a long list' looked identical. Also a blank row above the legend, so the last line of content does not read as part of it. Verified across heights -- running 3/3 and summary 9/9 at every size, graded taking 1, 3, 17 and 33 of 41 rows at 24, 30, 44 and 60 lines. --- src/adherence/matrix_tui.py | 68 ++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 3088661..36ab0c5 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -100,6 +100,7 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, # whatever fit, with no scroll and no indication -- so 25 graded # rows showed 6 and the cursor could sit on one of the 19 nobody # could see. + self.live_scroll = 0 self.graded_scroll = 0 self.sum_scroll = 0 self.graded_sort = 0 @@ -373,7 +374,9 @@ def footer(self, max_y, max_x, total, avail): def render(self, max_y, max_x): self.header(max_x) - body = max_y - 3 + # -1 more than the chrome strictly needs: a blank row above the + # legend, so the last line of content does not read as part of it. + body = max_y - 4 if self.picking: total, avail = self.view_picker(body, max_x) self.footer(max_y, max_x, total, avail) @@ -459,20 +462,26 @@ def view_live(self, body, max_x, max_y=0): max_y = max_y or (body + 3) runs = self.live y = 3 - # Allocate by what each section actually holds, not a fixed split. - # Every section costs a title + a column header + a blank, and the - # summary line at the top costs two; a section with three rows - # should not reserve half the screen while another is cut off. + # Priority, not proportion. Running and summary are bounded -- + # one row per concurrent trial, one per (arm, scenario) cell -- so + # they fit and should simply be shown whole. Graded grows without + # bound for the life of the run, so it is the section that absorbs + # the scrolling. Sharing the space proportionally instead gave + # graded 22 rows it did not need while truncating a 3-row running + # table, and on a 24-line terminal pushed graded off the screen + # entirely -- absent, not truncated, with nothing saying so. HEAD = 3 - n_run, n_grad = len(runs), len(self.rows) - n_sum = len(self.cells) - overhead = 2 + HEAD * (bool(n_run) + bool(n_grad) + bool(n_sum)) - spare = max(3, body - overhead - min(n_run, 8)) - # Graded and summary share the remainder in proportion to how many - # rows each has, so neither starves the other on a short terminal. - want = max(1, n_grad) + max(1, n_sum) - self.sec_budget = max(2, min(n_grad or 1, - int(spare * max(1, n_grad) / want))) + n_run, n_sum, n_grad = len(runs), len(self.cells), len(self.rows) + overhead = 2 + HEAD * (bool(n_run) + bool(n_sum) + bool(n_grad)) + spare = max(1, body - overhead) + self.run_budget = min(n_run, spare) + spare -= self.run_budget + self.sum_budget = min(n_sum, spare) + spare -= self.sum_budget + # Graded takes the remainder, and at least one row so the section + # never disappears without a scrollbar to explain itself. + self.sec_budget = max(1, spare) + s = lv.summarize(runs) done = len(self.rows) self._put(y, 1, f"{s['running']} running · {s['grading']} grading · " @@ -493,8 +502,17 @@ def view_live(self, body, max_x, max_y=0): f"{'elapsed':>9}{'budget':>8} doing", C.A_DIM) y += 1 self.live_cursor = max(0, min(self.live_cursor, len(runs) - 1)) - shown = runs[:max(1, min(len(runs), body - 12))] - for i, r in enumerate(shown): + rows_r = max(1, min(len(runs), self.run_budget)) + if self.live_cursor < self.live_scroll: + self.live_scroll = self.live_cursor + elif self.live_cursor >= self.live_scroll + rows_r: + self.live_scroll = self.live_cursor - rows_r + 1 + self.live_scroll = max(0, min(self.live_scroll, + max(0, len(runs) - rows_r))) + top = y + shown = runs[self.live_scroll:self.live_scroll + rows_r] + for i_off, r in enumerate(shown): + i = self.live_scroll + i_off base = (C.color_pair(5) if i == self.live_cursor and self.live_section == 0 else 0) @@ -521,9 +539,13 @@ def view_live(self, body, max_x, max_y=0): C.color_pair(4) if b and b > 0.8 else C.A_DIM) self._put(y, 86, r["last_tool"][:max(0, max_x - 88)], C.A_DIM) y += 1 - if len(runs) > len(shown): - self._put(y, 1, f" … {len(runs) - len(shown)} more running", - C.A_DIM) + if len(runs) > rows_r: + self.scrollbar(top, rows_r, max_x - 2, len(runs), + self.live_scroll) + self._put(y, 1, + f" {self.live_scroll + 1}-" + f"{self.live_scroll + rows_r} of {len(runs)}" + f" [j/k] scrolls", C.A_DIM) y += 1 else: self._put(y, 3, "nothing in flight", C.A_DIM) @@ -556,13 +578,14 @@ def view_live(self, body, max_x, max_y=0): if self.expect and cells: per_cell = max(1, round(self.expect / max(1, len(cells)))) self.sum_cursor = max(0, min(self.sum_cursor, len(cells) - 1)) - rows_s = max(1, min(len(cells), max_y - y - 2)) + rows_s = max(1, min(len(cells), self.sum_budget)) if self.sum_cursor < self.sum_scroll: self.sum_scroll = self.sum_cursor elif self.sum_cursor >= self.sum_scroll + rows_s: self.sum_scroll = self.sum_cursor - rows_s + 1 self.sum_scroll = max(0, min(self.sum_scroll, max(0, len(cells) - rows_s))) + top_s = y for ci_off, c in enumerate(cells[self.sum_scroll: self.sum_scroll + rows_s]): ci = self.sum_scroll + ci_off @@ -603,6 +626,8 @@ def view_live(self, body, max_x, max_y=0): else f"{'—':>8}", C.A_DIM) y += 1 if len(cells) > rows_s: + self.scrollbar(top_s, rows_s, max_x - 2, len(cells), + self.sum_scroll) self._put(y, 1, f" {self.sum_scroll + 1}-" f"{self.sum_scroll + rows_s} of {len(cells)}" @@ -641,6 +666,7 @@ def view_live(self, body, max_x, max_y=0): self.graded_scroll = max(0, min(self.graded_scroll, max(0, len(recent) - rows_g))) window_g = recent[self.graded_scroll:self.graded_scroll + rows_g] + top_g = y for gi_off, r in enumerate(window_g): gi = self.graded_scroll + gi_off hl = (C.color_pair(5) @@ -667,6 +693,8 @@ def view_live(self, body, max_x, max_y=0): self._put(y, 67, fails[:max(0, max_x - 69)], C.A_DIM) y += 1 if len(recent) > rows_g: + self.scrollbar(top_g, rows_g, max_x - 2, len(recent), + self.graded_scroll) self._put(y, 1, f" {self.graded_scroll + 1}-" f"{self.graded_scroll + rows_g} of {len(recent)}" From 8a5f00bd36c03e7d4f20a0e46a6e6f6235cbefdb Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 14:22:35 -0700 Subject: [PATCH 30/41] graded table: 'ungradeable' did not fit its column, and no gap above the legend The verdict field was 9 wide and 'ungradeable' is 11, so it overran into calls and rendered as '0ungradeab' -- the trial number and a clipped verdict fused into one unreadable token, on exactly the rows that most need reading, since ungradeable means the harness stopped the trial. Widened to 13 and the columns after it shifted. And the scrolling section's range line sat flush against the legend, so '3-41 of 41 [j/k] scrolls' read as part of the key bindings. The body now reserves two rows rather than one: the range indicator has somewhere to go, and a blank line separates it from the footer. --- src/adherence/matrix_tui.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 36ab0c5..3839928 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -374,9 +374,10 @@ def footer(self, max_y, max_x, total, avail): def render(self, max_y, max_x): self.header(max_x) - # -1 more than the chrome strictly needs: a blank row above the - # legend, so the last line of content does not read as part of it. - body = max_y - 4 + # Two rows more than the chrome needs: one for the scrolling + # section's range indicator, one blank, so neither the last row of + # content nor the "N of M" line sits flush against the legend. + body = max_y - 5 if self.picking: total, avail = self.view_picker(body, max_x) self.footer(max_y, max_x, total, avail) @@ -652,9 +653,9 @@ def view_live(self, body, max_x, max_y=0): + (" ◀" if self.live_section == 2 else ""), C.color_pair(5) if self.live_section == 2 else C.A_BOLD) y += 1 - self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}{'verdict':>9}" - f"{'calls':>7}{'tok_in':>12}{'dur':>9} failing", - C.A_DIM) + self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}" + f"{'verdict':>13}{'calls':>7}{'tok_in':>12}" + f"{'dur':>9} failing", C.A_DIM) y += 1 self.graded_cursor = max(0, min(self.graded_cursor, len(recent) - 1)) @@ -685,12 +686,12 @@ def view_live(self, body, max_x, max_y=0): self._put(y, 1, f"{r['scenario'][:19]:<20}", hl) self._put(y, 21, f"{r.get('arm', '-'):>4}", C.A_DIM) self._put(y, 25, f"{r['trial']:>3}", C.A_DIM) - self._put(y, 28, f"{verdict:>9}", col) - self._put(y, 37, f"{m.get('calls', 0):>7}", C.A_DIM) - self._put(y, 44, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) - self._put(y, 56, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", + self._put(y, 28, f"{verdict:>13}", col) + self._put(y, 41, f"{m.get('calls', 0):>7}", C.A_DIM) + self._put(y, 48, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) + self._put(y, 60, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", C.A_DIM) - self._put(y, 67, fails[:max(0, max_x - 69)], C.A_DIM) + self._put(y, 71, fails[:max(0, max_x - 73)], C.A_DIM) y += 1 if len(recent) > rows_g: self.scrollbar(top_g, rows_g, max_x - 2, len(recent), From c37090a2d61d6f3b11055553f81c4ed688b4c885 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 14:23:34 -0700 Subject: [PATCH 31/41] graded table: when each trial started Rows land in completion order now that each result is written as it finishes, so the table's order says what arrived last and nothing about when the run was doing it -- two trials of the same scenario can sit rows apart having started together. The column reads provenance.started_at, which is stored UTC because a result that cannot be placed on a shared clock is not replayable, and shown as local wall-clock because the operator is comparing it against their own terminal. Falls back to an em dash rather than guessing when a row predates the field. Also adds 'started' to the graded sorts, beside 'recent': arrival order and start order diverge under --jobs>1 and answer different questions. --- src/adherence/matrix_tui.py | 41 ++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 3839928..01d6588 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -54,8 +54,25 @@ } SORTS = ("tag", "pass", "tok") SECTIONS = ("running", "summary", "graded") + + +def started_local(row) -> str: + """`provenance.started_at` as local wall-clock HH:MM:SS. + + Stored UTC, because a result that cannot be placed on a shared clock + is not replayable; shown local, because the operator reading it is + comparing against their own terminal.""" + ts = (row.get("provenance") or {}).get("started_at", "") + if not ts: + return "—" + try: + import datetime as _dt + d = _dt.datetime.fromisoformat(ts.replace("Z", "+00:00")) + return d.astimezone().strftime("%H:%M:%S") + except (ValueError, TypeError): + return ts[-8:] or "—" # Per-section sorts, cycled with [s] on whichever section has focus. -GRADED_SORTS = ("recent", "verdict", "tok", "dur") +GRADED_SORTS = ("recent", "started", "verdict", "tok", "dur") SUM_SORTS = ("tag", "pass", "tok", "dur", "left") TASK_SORTS = ("id", "grader", "files", "dirs", "pr") DESIGN_SORTS = ("arm", "always", "ondemand") @@ -654,8 +671,8 @@ def view_live(self, body, max_x, max_y=0): C.color_pair(5) if self.live_section == 2 else C.A_BOLD) y += 1 self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}" - f"{'verdict':>13}{'calls':>7}{'tok_in':>12}" - f"{'dur':>9} failing", C.A_DIM) + f"{'verdict':>13}{'started':>10}{'calls':>7}" + f"{'tok_in':>12}{'dur':>9} failing", C.A_DIM) y += 1 self.graded_cursor = max(0, min(self.graded_cursor, len(recent) - 1)) @@ -687,11 +704,16 @@ def view_live(self, body, max_x, max_y=0): self._put(y, 21, f"{r.get('arm', '-'):>4}", C.A_DIM) self._put(y, 25, f"{r['trial']:>3}", C.A_DIM) self._put(y, 28, f"{verdict:>13}", col) - self._put(y, 41, f"{m.get('calls', 0):>7}", C.A_DIM) - self._put(y, 48, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) - self._put(y, 60, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", + # When the trial STARTED, not when its row was written -- + # results land out of order now that each is emitted as it + # finishes, so "recent" in the sort and "started" here + # answer two different questions. + self._put(y, 41, f"{started_local(r):>10}", C.A_DIM) + self._put(y, 51, f"{m.get('calls', 0):>7}", C.A_DIM) + self._put(y, 58, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) + self._put(y, 70, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", C.A_DIM) - self._put(y, 71, fails[:max(0, max_x - 73)], C.A_DIM) + self._put(y, 81, fails[:max(0, max_x - 83)], C.A_DIM) y += 1 if len(recent) > rows_g: self.scrollbar(top_g, rows_g, max_x - 2, len(recent), @@ -912,6 +934,11 @@ def verdict_rank(r): mode = GRADED_SORTS[self.graded_sort] keys = { "recent": lambda r: r.get("_seq", 0), + # Arrival order and start order diverge under --jobs>1, and + # each answers a different question: what landed last, versus + # what the run was doing at a given moment. + "started": lambda r: ((r.get("provenance") or {}) + .get("started_at", ""), r.get("_seq", 0)), "verdict": lambda r: (verdict_rank(r), r.get("_seq", 0)), "tok": lambda r: (r.get("metrics") or {}).get("tok_in_billed", 0), "dur": lambda r: r.get("duration_s", 0), From 60118cd46cf667ff11d8f5a354b8b7eef5078101 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 14:28:34 -0700 Subject: [PATCH 32/41] calib was failing on truncated transcripts and hiding a real gap The H4 tab read FAIL at 59.6% aggregate. Thirty-six of forty-one rows were 0.000%; every non-zero one was a trial the harness had stopped, whose transcript is truncated by construction and, before salvage existed, empty. Comparing that against the proxy's complete record is not a calibration failure, it is comparing two different things -- and the banner's advice, "drop the adapter figures and re-derive cost from the proxy", was being issued on a false signal. Incomplete runs are now excluded for the same reason exclusion criterion 1 drops them from every pass rate. Underneath were three disagreements that are real, all on trials that COMPLETED AND PASSED: 13068|a1|0 894,535 vs 2,376,415 62% 26 calls vs 66 13057|a1|4 2,657,861 vs 21,234,781 87% 30 calls vs 176 13057|a1|3 6,982,703 vs 28,287,934 75% 85 calls vs 226 The proxy resolves 13068|a1|0 into four distinct system prompts: 26 calls matching the adapter's root exactly, then 22 and 18 on two subagent sessions the transcript never recorded, and 2 auxiliary. Forty calls and ~1.5M input tokens invisible. E3 is a claim about precisely those tokens, and this is the first time the proxy has caught something -- which is what makes it authoritative under design section 3.2. The child walker queries opencode's store the instant `opencode run` returns, and a session written moments earlier is not always visible yet. It now retries. And metrics record task_dispatches beside the sessions actually captured, so a gap between them is on the row rather than inferred later from a proxy the analysis may not have. Also, from the graded table: started and dur now sit together with a month-day stamp, since a grid runs for hours and can cross midnight. --- src/adherence/adapters/children.py | 20 +++++++++++++++++++- src/adherence/matrix_tui.py | 21 +++++++++++++-------- src/adherence/metrics.py | 13 +++++++++++++ src/adherence/suitedata.py | 9 +++++++++ 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/src/adherence/adapters/children.py b/src/adherence/adapters/children.py index 25bef2c..aa532d6 100644 --- a/src/adherence/adapters/children.py +++ b/src/adherence/adapters/children.py @@ -28,6 +28,7 @@ import os import sqlite3 import sys +import time from pathlib import Path @@ -36,9 +37,26 @@ def db_path() -> Path: return Path(base) / "opencode" / "opencode.db" -def children(root: str) -> list[tuple[str, str]]: +def children(root: str, attempts: int = 5, delay: float = 0.6 + ) -> list[tuple[str, str]]: """[(session_id, agent_name)] for every descendant of `root`, in creation order. Recursive: a subagent may dispatch its own.""" + # Retried, because this runs the instant `opencode run` returns and a + # child session written moments earlier may not be visible yet. A + # single miss is not a small error: measured against the recording + # proxy, a trial reporting 26 calls had made 66, and two whole + # subagent sessions -- 40 calls, ~1.5M input tokens -- were absent + # from the transcript while the proxy had them all. E3 is a claim + # about exactly those tokens. + for attempt in range(attempts): + found = _query(root) + if found or attempt == attempts - 1: + return found + time.sleep(delay) + return [] + + +def _query(root: str) -> list[tuple[str, str]]: p = db_path() if not p.exists(): return [] diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 01d6588..b881329 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -68,7 +68,9 @@ def started_local(row) -> str: try: import datetime as _dt d = _dt.datetime.fromisoformat(ts.replace("Z", "+00:00")) - return d.astimezone().strftime("%H:%M:%S") + # Date included because a grid runs for hours and can cross + # midnight; a bare clock time then sorts and reads wrongly. + return d.astimezone().strftime("%m-%d %H:%M:%S") except (ValueError, TypeError): return ts[-8:] or "—" # Per-section sorts, cycled with [s] on whichever section has focus. @@ -671,8 +673,8 @@ def view_live(self, body, max_x, max_y=0): C.color_pair(5) if self.live_section == 2 else C.A_BOLD) y += 1 self._put(y, 1, f"{'scenario':<20}{'arm':>4}{'t':>3}" - f"{'verdict':>13}{'started':>10}{'calls':>7}" - f"{'tok_in':>12}{'dur':>9} failing", C.A_DIM) + f"{'verdict':>13}{'calls':>7}{'tok_in':>12}" + f"{'started':>18}{'dur':>9} failing", C.A_DIM) y += 1 self.graded_cursor = max(0, min(self.graded_cursor, len(recent) - 1)) @@ -708,12 +710,15 @@ def view_live(self, body, max_x, max_y=0): # results land out of order now that each is emitted as it # finishes, so "recent" in the sort and "started" here # answer two different questions. - self._put(y, 41, f"{started_local(r):>10}", C.A_DIM) - self._put(y, 51, f"{m.get('calls', 0):>7}", C.A_DIM) - self._put(y, 58, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) - self._put(y, 70, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", + self._put(y, 41, f"{m.get('calls', 0):>7}", C.A_DIM) + self._put(y, 48, f"{m.get('tok_in_billed', 0):>12,}", C.A_DIM) + # When it began and how long it took, side by side: with + # results landing in completion order the two together are + # what place a trial in the run. + self._put(y, 60, f"{started_local(r):>18}", C.A_DIM) + self._put(y, 78, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", C.A_DIM) - self._put(y, 81, fails[:max(0, max_x - 83)], C.A_DIM) + self._put(y, 89, fails[:max(0, max_x - 91)], C.A_DIM) y += 1 if len(recent) > rows_g: self.scrollbar(top_g, rows_g, max_x - 2, len(recent), diff --git a/src/adherence/metrics.py b/src/adherence/metrics.py index e608dec..0260f35 100644 --- a/src/adherence/metrics.py +++ b/src/adherence/metrics.py @@ -292,6 +292,19 @@ def compute(transcript, floor: int = 0, duration_s: float | None = None, "turns_until_first_compaction": turns_until_first_compaction(transcript), "abandoned": abandoned(transcript, expects_edit, completed, observed_edits), + # Dispatches the stream saw, against subagent sessions the + # transcript actually carries. They must match. When they do not, + # the child walker missed a session and every subagent number in + # this row is an under-report -- measured at 26 calls recorded + # against 66 the proxy handled, with two whole sessions absent. + # Recorded rather than corrected, because the proxy is the + # authority on the real figure (§3.2) and a silently patched + # transcript would hide the disagreement that says so. + "task_dispatches": sum(1 for e in transcript + if e.get("type") == schema.TASK), + "subagent_capture_gap": max( + 0, sum(1 for e in transcript if e.get("type") == schema.TASK) + - len({e.get("agent") for e in subagent_calls(transcript)})), # What git saw, beside what the transcript claims. A gap between # them means the agent edited through a tool the stream does not # mark as an edit, which silently empties first_edit, probe_trail diff --git a/src/adherence/suitedata.py b/src/adherence/suitedata.py index 9425ddc..631e095 100644 --- a/src/adherence/suitedata.py +++ b/src/adherence/suitedata.py @@ -347,6 +347,15 @@ def calibration(rows, proxy_rows): by_mark = M.split_by_mark(proxy_rows) out = [] for r in rows: + # A trial the harness stopped has a transcript truncated by + # construction -- or, before salvage existed, none at all. Compared + # against the proxy's complete record it reads as a 100% accounting + # error, which is not what H4 measures and buries the disagreements + # that are real. Excluded here for the same reason exclusion + # criterion 1 drops it from every pass rate. + if any(c.get("name") == "adapter" and c.get("status") != "pass" + for c in r.get("checks", [])): + continue mark = f"{r['scenario']}|{r.get('arm', '-')}|{r['trial']}" pr = by_mark.get(mark) if pr is None: From 6cc4bf5fd717a5564d314903fe23b725e07a959f Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 14:35:12 -0700 Subject: [PATCH 33/41] say why a row is ungradeable, and stop advertising a key that does nothing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An ungradeable row printed "—" in the failing column, so the one column that explains a verdict was blank on exactly the rows whose verdict needs explaining. The reason was sitting in the adapter check's evidence the whole time. It now reads: cli-cli-13057 a1/0 ungradeable ... adapter hit the hard ceiling of 2700s while still active (20,580,192 bytes of events, last advanced 58s ago) which is the difference between "something went wrong" and "this trial was working when we stopped it" -- and the second is what decides whether the scenario is too expensive to keep. And the footer offered [space] detail on cost and calib, neither of which has a detail pane. Advertising a key that does nothing is worse than offering none: it gets tried, and the silence reads as a broken view rather than an absent feature. --- src/adherence/matrix_tui.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index b881329..1b41201 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -378,9 +378,12 @@ def footer(self, max_y, max_x, total, avail): C.color_pair(2) if n_live else C.A_DIM), ("[s] sort [S] asc/desc", C.A_DIM), ("[/] filter", C.A_DIM), - ("[F] clear", C.A_DIM), ("[p] pick", C.A_DIM), - ("[space] detail", C.A_DIM), ("[r] reload", C.A_DIM), - ("[q] quit", C.A_DIM)] + ("[F] clear", C.A_DIM), ("[p] pick", C.A_DIM)] + # cost and calib have no detail pane; advertising one is worse + # than offering none, because the key is tried and does nothing. + if VIEWS[self.view] in ("cells", "tasks", "design"): + keys.append(("[space] detail", C.A_DIM)) + keys += [("[r] reload", C.A_DIM), ("[q] quit", C.A_DIM)] if self.editing: keys = [("type a filter · [enter] apply · [esc] cancel", C.A_BOLD)] self.render_footer_items(max_y, keys) @@ -700,8 +703,16 @@ def view_live(self, body, max_x, max_y=0): "pass" if r["all_pass"] else "fail") col = (C.color_pair(3) if ung else C.color_pair(1) if r["all_pass"] else C.color_pair(4)) - fails = ", ".join(c["name"] for c in r["checks"] - if c["status"] == "fail") or "—" + if ung: + # The reason lives in the adapter check's evidence. An + # ungradeable row showed "—" here, so the one column + # that explains the verdict was blank on exactly the + # rows whose verdict needs explaining. + fails = " ".join( + str(ung[0].get("evidence", "")).split()) or "harness" + else: + fails = ", ".join(c["name"] for c in r["checks"] + if c["status"] == "fail") or "—" self._put(y, 1, f"{r['scenario'][:19]:<20}", hl) self._put(y, 21, f"{r.get('arm', '-'):>4}", C.A_DIM) self._put(y, 25, f"{r['trial']:>3}", C.A_DIM) @@ -718,7 +729,8 @@ def view_live(self, body, max_x, max_y=0): self._put(y, 60, f"{started_local(r):>18}", C.A_DIM) self._put(y, 78, f"{lv.fmt_age(r.get('duration_s', 0)):>9}", C.A_DIM) - self._put(y, 89, fails[:max(0, max_x - 91)], C.A_DIM) + self._put(y, 89, fails[:max(0, max_x - 91)], + C.color_pair(3) if ung else C.A_DIM) y += 1 if len(recent) > rows_g: self.scrollbar(top_g, rows_g, max_x - 2, len(recent), From df1ba6feaa731e5781bdd73b3edbc8d8393cd142 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 15:06:26 -0700 Subject: [PATCH 34/41] close a grader hole, and screen for what actually decided this fixture THE HOLE. cli-cli-13523 is cli-graded and touches no pkg/cmd/ command, so cli.surface reported `skip` and the only checks left running were diff_coverage and scope. all_pass is "every non-ungradeable check passed", so the verdict became "touched the right file and nothing else" -- which an agent passes by adding a comment. Two tasks are affected and 5 of 5 trials under them recorded PASS. Such a task is gradeable by nothing: its unit tests name symbols the fix introduces, and it exposes no CLI surface. cligrade now returns `bad` rather than `skip` so it cannot yield a pass, and mkscenarios drops these at extraction, where they belong. The runner has its modules loaded, so the live battery is unaffected -- the five existing rows must be discarded by hand. THE SCREEN gated on license, PR count, subsystems, AGENTS.md and CODEOWNERS. cli/cli passed all five and then produced one in-band scenario in twelve. Four checks added, each for a failure this session actually hit: usable_rate source+tests PRs, not raw merges. 174 merges held 32 usable tasks; the sample estimates 16.7% against 18.4% measured by hand. behavioural_suite an acceptance/e2e tree means a repo can be graded on observed behaviour -- name-independent AND discriminating, which neither current grader manages. Weighted highest. fix_rate a bug fix's tests call API that exists; a feature PR's tests name what the PR adds. 18 of 34 tasks landed in the second bucket and none reached the band. Reported as None below 8 classifiable titles, since most repos do not use conventional prefixes. median_files 13057 spans 13 files, takes 45 minutes, times out 3 of 5 and passes both times it finishes. Also [S] asc/desc did nothing outside the live tab: cells, arms and cost had a sort key and no direction, while the footer advertised one. --- src/adherence/cligrade.py | 19 ++++- src/adherence/matrix_tui.py | 18 ++--- src/adherence/mkscenarios.py | 13 ++++ src/adherence/screen_repos.py | 129 +++++++++++++++++++++++++++++++++- 4 files changed, 166 insertions(+), 13 deletions(-) diff --git a/src/adherence/cligrade.py b/src/adherence/cligrade.py index 45032c1..0c05ef5 100644 --- a/src/adherence/cligrade.py +++ b/src/adherence/cligrade.py @@ -99,9 +99,22 @@ def grade_cli(sandbox: Path, mirror: Path, merge: str, checks: list[Check] = [] argv = command_path(code_files) if not argv: - return [skip("cli.surface", - "PR touches no pkg/cmd/... command, so it has no " - "command-line surface to compare")] + # No command surface, and this task is only here because its unit + # tests name symbols the fix introduces -- so neither grader can + # judge it. Reporting `skip` left diff_coverage and scope as the + # only checks that ran, and all_pass is "every non-ungradeable + # check passed": the verdict became "touched the right file and + # nothing else", which an agent passes by adding a comment. + # Measured: 5 of 5 such trials recorded as PASS. + # + # `bad` rather than `skip`, because a task nothing can grade must + # not be able to yield a pass. The suite should refuse it at + # extraction; this is the backstop for one that got through. + return [bad("cli.ungradeable", + f"no grader can judge this task: its unit tests name " + f"symbols the fix introduces, and it touches no " + f"pkg/cmd/... command so there is no CLI surface to " + f"compare. Files: {(code_files or [])[:3]}")] # --- the candidate: whatever the agent produced -------------------- cand = sandbox / ".adh-gh-candidate" diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 1b41201..14f4af8 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -96,6 +96,7 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, self.proxy_path = proxy self.view = 0 self.sort = 0 + self.sort_desc = False self.editing = False self.buf = "" self.cursor = 0 @@ -278,13 +279,10 @@ def visible(self): for f, want in self.sel.items(): if want: cs = [c for c in cs if c[f] in want] - if SORTS[self.sort] == "pass": - cs = sorted(cs, key=lambda c: (-c["pass_rate"], c["tag"])) - elif SORTS[self.sort] == "tok": - cs = sorted(cs, key=lambda c: (-c["tok"], c["tag"])) - else: - cs = sorted(cs, key=lambda c: c["tag"]) - return cs + keys = {"pass": lambda c: (c["pass_rate"], c["tag"]), + "tok": lambda c: (c["tok"], c["tag"]), + "tag": lambda c: c["tag"]} + return sorted(cs, key=keys[SORTS[self.sort]], reverse=self.sort_desc) # ---- chrome ---------------------------------------------------------- @@ -318,7 +316,7 @@ def header(self, max_x): elif v == "live": sort = SECTIONS[self.live_section] else: - sort = SORTS[self.sort] + sort = f"{SORTS[self.sort]} {'v' if self.sort_desc else '^'}" tail = f"filter:{filt} sort:{sort} ref:{self.ref}" self._put(0, max(x + 2, max_x - len(tail) - 2), tail, C.A_BOLD if self.editing else C.A_DIM) @@ -1759,6 +1757,10 @@ def handle_key(self, key) -> bool: self.graded_desc = not self.graded_desc elif VIEWS[self.view] == "live" and self.live_section == 1: self.sum_desc = not self.sum_desc + else: + # cells / arms / cost had no direction at all: [S] was + # advertised in the footer and did nothing outside live. + self.sort_desc = not self.sort_desc elif key == ord("s"): if VIEWS[self.view] == "tasks": self.task_sort = (self.task_sort + 1) % len(TASK_SORTS) diff --git a/src/adherence/mkscenarios.py b/src/adherence/mkscenarios.py index b819961..4964ecc 100644 --- a/src/adherence/mkscenarios.py +++ b/src/adherence/mkscenarios.py @@ -86,6 +86,19 @@ def main(): f"the grid indistinguishable from a real one. Re-run mkpr " f"without --no-verify.") + # A task whose unit tests cannot compile AND which exposes no command + # surface is gradeable by nothing. It used to enter the suite anyway + # and pass on diff_coverage alone. + from adherence.cligrade import command_path + ungradeable = [t for t in tasks + if t.get("grader") == "cli" + and not command_path(t.get("code_files") or [])] + if ungradeable: + for t in ungradeable: + print(f" dropped #{t['pr']}: cli-graded but no pkg/cmd surface; " + f"neither grader can judge it", file=sys.stderr) + tasks = [t for t in tasks if t not in ungradeable] + prefix = args.prefix or args.fixture.replace("/", "-") out_root = Path(args.out) ids = [] diff --git a/src/adherence/screen_repos.py b/src/adherence/screen_repos.py index e45753c..8afa30c 100644 --- a/src/adherence/screen_repos.py +++ b/src/adherence/screen_repos.py @@ -108,6 +108,111 @@ def has_path(repo: str, path: str) -> bool: return rc == 0 +# Directories whose presence means a repository can be graded on observed +# BEHAVIOUR rather than on internal API. This is the single most valuable +# thing the screen can look for, and it was not looked for: on cli/cli, 30 +# of 34 extracted tasks were unit-test-only and none acceptance-only, which +# left no way to grade a feature PR except by comparing CLI flags -- and +# that ceilings at 100%, so it discriminates between arms not at all. +BEHAVIOURAL_DIRS = ("acceptance", "e2e", "integration", "features", + "functional", "system-test", "tests/e2e") + +# Title prefixes that mark a bug fix. Fixes are worth far more than +# features here: their tests call API that already EXISTS, so an agent that +# implements the behaviour passes whatever it names its internals. A +# feature PR's tests name what the PR adds, which no agent can be expected +# to guess -- 18 of 34 cli/cli tasks landed in that bucket. +FIX_PREFIXES = ("fix", "bug", "bugfix", "hotfix", "patch") +FEATURE_PREFIXES = ("feat", "feature", "add") + +# A PR this large costs hours per trial and, measured, does not +# discriminate: cli-cli-13057 spans 13 files, takes 45 minutes, times out +# on 3 of 5 trials and passes both times it finishes. +BIG_PR_FILES = 8 + + +def pr_sample(repo: str, limit: int = 60) -> list[dict]: + """Recent merged post-cutoff PRs with the fields the new checks need.""" + code, out = gh([ + "pr", "list", "--repo", repo, "--state", "merged", "--limit", + str(limit), "--json", "title,files,mergedAt,labels"]) + if code != 0 or not out.strip(): + return [] + try: + prs = json.loads(out) + except json.JSONDecodeError: + return [] + return [p for p in prs if (p.get("mergedAt") or "") >= CUTOFF] + + +def _bucket(files: list[str]) -> str: + """What a PR actually changes. A raw merge count is not supply: + measured on cli/cli, 174 post-cutoff merges contained 32 usable tasks, + because 47.7% were CI and agent-config and 24.1% dependency bumps.""" + if not files: + return "empty" + if all(f.startswith(".github/") or "workflow" in f or "/skills/" in f + for f in files): + return "agent-config" + if all(f.endswith((".mod", ".sum", ".lock", ".toml", ".json")) + or "vendor/" in f for f in files): + return "deps" + src = [f for f in files if f.endswith((".go", ".rs", ".py", ".ts", ".js"))] + if not src: + return "docs-other" + tests = [f for f in src if "_test." in f or f.startswith("tests/") + or "/test" in f] + return "source+tests" if tests else "source-no-tests" + + +def task_supply(repo: str) -> dict: + """The checks this session's failures argued for, all from the API.""" + prs = pr_sample(repo) + if not prs: + return {"sampled": 0} + buckets, fixes, feats, big, behavioural = {}, 0, 0, 0, 0 + sizes = [] + for pr in prs: + files = [f.get("path", "") for f in (pr.get("files") or [])] + b = _bucket(files) + buckets[b] = buckets.get(b, 0) + 1 + title = (pr.get("title") or "").lower() + head = title.split(":")[0].split("(")[0].strip() + if head in FIX_PREFIXES or title.startswith("fix "): + fixes += 1 + elif head in FEATURE_PREFIXES: + feats += 1 + if b == "source+tests": + sizes.append(len(files)) + if len(files) > BIG_PR_FILES: + big += 1 + if any(f.startswith(BEHAVIOURAL_DIRS) or "/e2e/" in f + or "/acceptance/" in f for f in files): + behavioural += 1 + usable = buckets.get("source+tests", 0) + sizes.sort() + return { + "sampled": len(prs), + "buckets": buckets, + "usable": usable, + "usable_rate": round(usable / len(prs), 3), + "fix_prs": fixes, + "feature_prs": feats, + # Titles are the only cheap signal, and most repositories do not + # use conventional prefixes -- on cli/cli just 3 of 60 were + # classifiable, so a fix_rate of 1.0 there rests on three PRs. + # The denominator is reported so the rate is never read as + # stronger than its sample. + "fix_classifiable": fixes + feats, + "fix_rate": (round(fixes / (fixes + feats), 3) + if fixes + feats >= 8 else None), + "behavioural_tests": behavioural, + "behavioural_rate": round(behavioural / max(1, usable), 3), + "median_files": sizes[len(sizes) // 2] if sizes else 0, + "oversized": big, + } + + def screen(repo: str) -> dict: meta = gh_json(f"repos/{repo}") if not meta: @@ -118,6 +223,8 @@ def screen(repo: str) -> dict: instr = [f for f in INSTRUCTION_FILES if has_path(repo, f)] owners = any(has_path(repo, p) for p in CODEOWNERS_PATHS) prs = post_cutoff_prs(repo) + supply = task_supply(repo) + has_behavioural = any(has_path(repo, d) for d in BEHAVIOURAL_DIRS) fails = [] if lic not in PERMISSIVE: @@ -128,6 +235,14 @@ def screen(repo: str) -> dict: if len(dirs) < MIN_SUBSYSTEMS: fails.append(f"only {len(dirs)} top-level subsystems " f"(need {MIN_SUBSYSTEMS})") + # Raw merge count is not supply. Applied to the sample rather than the + # whole history, so it is an estimate and says so. + if supply.get("sampled") and supply["usable"] < 6: + fails.append( + f"only {supply['usable']}/{supply['sampled']} sampled PRs are " + f"source+tests ({supply['usable_rate']:.0%}); at that rate " + f"{prs} merges yield about {int(prs * supply['usable_rate'])} " + f"tasks") total_bytes = sum(langs.values()) or 1 mixed = sum(1 for v in langs.values() if v / total_bytes >= 0.10) @@ -143,10 +258,20 @@ def screen(repo: str) -> dict: "codeowners": owners, "languages": sorted(langs, key=langs.get, reverse=True)[:4], "mixed_languages": mixed, + "behavioural_suite": has_behavioural, + **{f"supply_{k}": v for k, v in supply.items()}, "fails": fails, "passes": not fails, - # Preference score, used only to order the survivors. - "score": (2 * bool(instr)) + bool(owners) + (mixed >= 2), + # Preference score, used only to order the survivors. The three new + # terms outweigh the old ones because they are what decided whether + # cli/cli could produce a usable task, and the old ones were all + # satisfied by a repo that then produced one in-band scenario in + # twelve. + "score": (2 * bool(instr)) + bool(owners) + (mixed >= 2) + + 3 * bool(has_behavioural) + + 2 * ((supply.get("fix_rate") or 0) >= 0.5) + + 2 * (supply.get("usable_rate", 0) >= 0.35) + + (supply.get("median_files", 99) <= 4), } From 78216e2f2d6480f48601ba6f6d060c4f0457f251 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 15:46:34 -0700 Subject: [PATCH 35/41] ignore _private --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 460054b..3854b70 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,4 @@ proxy*.jsonl scoreboard.md *.bak +_private/ From b2d1db4cf097ce98097a990161cfa2913b05f266 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 16:06:49 -0700 Subject: [PATCH 36/41] the 'left' column counted cells that had reported, not cells that exist per_cell was expect/len(cells), and len(cells) is cells that have PRODUCED a row -- not cells the suite will run. At 86/120 that was 120/18 = 7, so every finished 5-trial cell showed 2 trials left and an eta for work that was already done. The estimate only converges once the last scenario starts, which is exactly when nobody needs it. Read --trials from the batch's own recorded argv instead; the runner already wrote down how it was launched. Falls back to the fullest cell observed, which can read low early but never invents remaining work. The [s] left sort had the matching defect: it ranked by dur_s * trials, time already spent, so finished-and-slow cells sorted above ones with trials still to run. --- src/adherence/matrix_tui.py | 41 ++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/adherence/matrix_tui.py b/src/adherence/matrix_tui.py index 14f4af8..b908d7e 100644 --- a/src/adherence/matrix_tui.py +++ b/src/adherence/matrix_tui.py @@ -155,6 +155,35 @@ def __init__(self, stdscr, pattern="", ref="a1", proxy=None, # ---- data ------------------------------------------------------------ + def per_cell(self, cells) -> int: + """Trials each cell will run, for the `left` and `eta` columns. + + Read from the batch's own recorded argv, because the runner already + wrote down how it was launched and a second opinion can only drift + from it. + + It used to be `expect / len(cells)`, which is wrong in a way that + only shows up mid-run: the denominator is cells that have PRODUCED a + row, not cells the suite will run. Measured at 86/120, eighteen + cells had reported against an expected 120, so it concluded 7 trials + per cell -- and every finished 5-trial cell claimed 2 still to go, + with an eta attached to work that was already done. The estimate + only converges once the last scenario starts, which is exactly when + nobody needs it. + + Falls back to the fullest cell observed: never an overestimate, so + `left` can read low early but never invents remaining work.""" + for r in reversed(self.rows): + argv = ((r.get("provenance") or {}).get("argv")) or [] + for i, a in enumerate(argv): + if a == "--trials" and i + 1 < len(argv): + try: + return max(1, int(argv[i + 1])) + except (TypeError, ValueError): + break + break # newest row is enough; one batch, one argv + return max((c["trials"] for c in cells), default=0) + def reload(self): self.cells = sd.load_cells(paths=self.files) self.rows = sd.load_rows(self.files) @@ -594,10 +623,7 @@ def view_live(self, body, max_x, max_y=0): f"{'calls':>7}{'tools':>7}{'sub':>5}{'abnd':>6}" f"{'med dur':>9}{'left':>5}{'eta':>8}", C.A_DIM) y += 1 - # Trials per cell, from the batch size when it is known. - per_cell = 0 - if self.expect and cells: - per_cell = max(1, round(self.expect / max(1, len(cells)))) + per_cell = self.per_cell(cells) self.sum_cursor = max(0, min(self.sum_cursor, len(cells) - 1)) rows_s = max(1, min(len(cells), self.sum_budget)) if self.sum_cursor < self.sum_scroll: @@ -964,12 +990,17 @@ def sum_cells(self): """Per-(arm, scenario) cells in the order the table shows them.""" cs = sd.load_cells(paths=self.files) mode = SUM_SORTS[self.sum_sort] + pc = self.per_cell(cs) keys = { "tag": lambda c: c["tag"], "pass": lambda c: (c["pass_rate"], c["tag"]), "tok": lambda c: c["tok"], "dur": lambda c: c["dur_s"], - "left": lambda c: c["dur_s"] * c["trials"], + # The eta the column actually shows. It used to be + # `dur_s * trials` -- time already SPENT -- so sorting by `left` + # ranked finished-and-slow cells above ones with trials still to + # run, which is the opposite of what the column is for. + "left": lambda c: (max(0, pc - c["trials"]) * c["dur_s"], c["tag"]), } return sorted(cs, key=keys[mode], reverse=self.sum_desc) From ffa60443655de460988ce97cea28cd3c70bbc834 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 16:43:41 -0700 Subject: [PATCH 37/41] the viewer scored harness faults as model failures, and it moved a scenario in-band pass_rate averaged over every row, and an ungradeable row carries all_pass=False because nothing graded it -- so an adapter that hit its hard ceiling counted as a model that got the task wrong. The registration forbids exactly this ('Harness faults are not model failures'), and analyze.harness_excluded has always applied it. The two surfaces therefore disagreed. On the 120-run validation grid cli-cli-13057 hit the ceiling on 3 of 5 trials and read 40% in the viewer against 100% in the registered analysis -- and 40% is inside the calibration band while 100% is outside it. A display that can move a scenario in or out of band is not a display bug: it changes the count that decides whether the experiment can run. One _ungradeable() predicate now feeds both the ung column and the rate, so a row cannot be shown as ungradeable and counted as a failure beside it. Verified: the viewer and the registered analysis now agree on every cell. --- src/adherence/suitedata.py | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/adherence/suitedata.py b/src/adherence/suitedata.py index 631e095..4f39612 100644 --- a/src/adherence/suitedata.py +++ b/src/adherence/suitedata.py @@ -103,6 +103,20 @@ def newest_mtime(paths=None): # ---------- cells ---------- +def _ungradeable(row) -> bool: + """Did the harness fail to produce something judgeable? + + One definition, used by both the `ung` column and the pass rate, so a + row cannot be shown as ungradeable and simultaneously counted as a + failure in the rate beside it. Mirrors analyze.harness_excluded -- + the registered analysis stays authoritative; this exists so the + viewer cannot disagree with it.""" + if row.get("schema_errors"): + return True + return any(c.get("name") == "adapter" and c.get("status") != "pass" + for c in row.get("checks") or []) + + def _med(vals): vals = [v for v in vals if v is not None] return st.median(vals) if vals else 0 @@ -148,7 +162,22 @@ def load_cells(paths=None, pattern=None): won = [r for r in rs if r["all_pass"]] toks = [(r["metrics"] or {}).get("tok_in_billed", 0) for r in rs] calls = [(r["metrics"] or {}).get("calls", 0) for r in rs] - passes = [1.0 if r["all_pass"] else 0.0 for r in rs] + # Ungradeable rows are EXCLUDED from the rate, not counted against + # it. They carry all_pass=False because nothing graded them, so + # averaging over every row scores a harness fault as a model that + # got it wrong -- which the registration forbids in as many words + # ("Harness faults are not model failures", docs/EVAL.md). + # + # This disagreed with the registered analysis, which has always + # applied the exclusion. Measured on the 120-run validation grid: + # cli-cli-13057 hit the adapter's hard ceiling on 3 of 5 trials and + # read 40% here against 100% there -- and 40% is inside the + # calibration band while 100% is outside it, so the two surfaces + # disagreed about whether that scenario could discriminate at all. + # A viewer that can move a scenario in or out of band is not a + # display bug. + gradeable = [r for r in rs if not _ungradeable(r)] + passes = [1.0 if r["all_pass"] else 0.0 for r in gradeable] fails = sorted({c["name"] for r in rs for c in r["checks"] if c["status"] == "fail"}) cells.append({ @@ -207,10 +236,7 @@ def load_cells(paths=None, pattern=None): for r in rs]), "subagent_tok": _med([(r["metrics"] or {}).get("subagent_tok_in", 0) for r in rs]), - "ungradeable": sum(1 for r in rs - if any(c.get("name") == "adapter" - and c.get("status") != "pass" - for c in r["checks"])), + "ungradeable": sum(1 for r in rs if _ungradeable(r)), }) cells.sort(key=lambda c: (c["arm"], c["scenario"])) if pattern: From fe006e523ca5ccf58143e2573b1d8041ac57958a Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 17:03:41 -0700 Subject: [PATCH 38/41] validation summary: 120 runs, one arm, what it licenses and what it does not 6 scenarios in band against MIN_PAIRED=4; 5 of them unit-graded, so the primary tier clears on its own. The CLI tier does not discriminate -- 11 of 15 at 100%. H4 fails as specified (19.6% aggregate), but 22 of 24 scenarios agree EXACTLY -- 0.0% tokens and identical call counts -- and all six in-band scenarios are among them. The divergence is transcript truncation on ceiling-hit trials, not an accounting error, which is why the proxy was made authoritative in the first place. --- docs/VALIDATION-120.md | 280 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 docs/VALIDATION-120.md diff --git a/docs/VALIDATION-120.md b/docs/VALIDATION-120.md new file mode 100644 index 0000000..1c4f20c --- /dev/null +++ b/docs/VALIDATION-120.md @@ -0,0 +1,280 @@ +# Validation grid — 120 runs, single arm + +**This is method validation. It is not experiment data and must never be +reported as a result.** + +Every row carries `purpose: validation`. The registered analysis reads only +rows marked `experiment`, so nothing here can leak into a finding by accident. +The question this grid answers is not *"does the directed-contexts pattern +work"* — only one arm ran. It is *"can this fixture supply tasks that +discriminate between arms at all, and does the instrument measure them +honestly."* + +--- + +## 1. What ran + +| | | +|---|---| +| Batch | `runs/probe.jsonl`, 120 rows, complete | +| Suite commit | `1c573d7`, clean tree (`suite_dirty: false`) | +| Arm | `a1` only — the practical control, the repo's own `AGENTS.md` | +| Fixture | `cli-cli` at base `3c162a78` | +| Scenarios | 24, five trials each | +| Model | `local/qwen36-35b-a3b-nvfp4` | +| Harness | `opencode 1.18.10` via `adapters/opencode.sh`, Python 3.14.6 | +| Concurrency | `--jobs 3`, `--timeout 2700`, `--idle-timeout 300` | +| Window | 2026-08-04 20:27:11Z → 23:40:16Z (last start) | +| Integrity | `arm_sha df9a4467`, `scenario_sha eae60fa7` | + +Cost: 370,649,394 prompt tokens billed, 1,768,053 completion, 11.8 h of summed +trial duration across three workers. Median trial 161 s; longest 2,701 s — the +hard ceiling, which matters below. + +--- + +## 2. Headline + +**6 scenarios land in the calibration band `[0.25, 0.80]`, against +`MIN_PAIRED = 4`. The band requirement is met.** + +Split by grading tier, which Amendment 2 requires be reported separately and +never pooled: + +| Tier | In band | Scenarios | Rate | +|---|---|---|---| +| **unit** — primary evidence | **5** | 9 | 56% | +| **cli** — Amendment 2 tier | **1** | 15 | 7% | +| total | **6** | 24 | 25% | + +**The unit tier clears the threshold on its own** (5 ≥ 4). That is the result +that matters, because a passing unit test is a stronger signal than a flag +comparison and the registration treats the tiers as different evidence. + +**The CLI tier does not discriminate.** Eleven of fifteen cli-graded scenarios +sit at 100%. A grader that everything passes cannot separate arms, whatever its +other virtues. + +--- + +## 3. Per-scenario results + +Pass rates are over **gradeable** trials — rows excluded as harness faults are +not counted as failures. See §5, where that was not always true. + +| Scenario | Grader | Graded | Pass | Band | Abandons | +|---|---|---|---|---|---| +| cli-cli-13057 | cli | 2 | 100% | | 4 | +| cli-cli-13068 | cli | 5 | 100% | | 1 | +| cli-cli-13362 | unit | 5 | 60% | **IN** | 0 | +| cli-cli-13412 | cli | 5 | 100% | | 0 | +| cli-cli-13413 | unit | 5 | 100% | | 0 | +| cli-cli-13418 | cli | 5 | 100% | | 0 | +| cli-cli-13421 | cli | 5 | 100% | | 0 | +| cli-cli-13430 | cli | 5 | 100% | | 0 | +| cli-cli-13449 | cli | 5 | 100% | | 1 | +| cli-cli-13459 | cli | 5 | 0% | | 0 | +| cli-cli-13471 | cli | 5 | 100% | | 0 | +| cli-cli-13523 | cli | 5 | 100% | | 0 | +| cli-cli-13541 | cli | 5 | 100% | | 1 | +| cli-cli-13548 | unit | 5 | 80% | **IN** | 0 | +| cli-cli-13580 | cli | 5 | 100% | | 0 | +| cli-cli-13620 | cli | 5 | 100% | | 0 | +| cli-cli-13681 | unit | 5 | 100% | | 0 | +| cli-cli-13722 | unit | 5 | 80% | **IN** | 0 | +| cli-cli-13723 | unit | 5 | 40% | **IN** | 0 | +| cli-cli-13807 | cli | 5 | 80% | **IN** | 0 | +| cli-cli-13823 | cli | 5 | 100% | | 0 | +| cli-cli-13864 | unit | 5 | 100% | | 0 | +| cli-cli-13987 | unit | 5 | 80% | **IN** | 0 | +| cli-cli-13988 | unit | 5 | 100% | | 0 | + +Exclusions applied per `docs/EVAL.md` criteria 1–2: **3 rows** for adapter +failure, 0 for schema violations. 117 of 120 rows are gradeable. + +Failing checks across the grid: `pr.task_pass` ×8, `cli.surface` ×5, +`pr.diff_coverage` ×2, `cli.builds` ×1. Seven rows abandoned. +Fifty-nine of 120 rows spawned subagents, consuming 24,125,708 input tokens +that the parent stream does not carry. + +--- + +## 4. H4 — proxy vs adapter calibration + +**The gate FAILS as specified, and the failure is entirely localized.** + +| Set | Aggregate delta | Worst run | Calls a/p | Gate | +|---|---|---|---|---| +| All 120 rows | 19.571% | 100.00% | 5319 / 6090 | **FAIL** | +| 117 gradeable | 9.484% | 87.48% | 5319 / 5646 | **FAIL** | + +Tolerance is 2% on aggregate, 2% on every run, and exact equality on call +counts. But the per-scenario view is the one that explains it: + +| | | +|---|---| +| Scenarios agreeing **exactly** — 0.0% tokens *and* identical call counts | **22 of 24** | +| `cli-cli-13057` | 90.7% delta; 115 adapter calls vs **846** proxy calls | +| `cli-cli-13068` | 14.3% delta; 205 vs 245 calls | + +Twenty-two scenarios do not merely agree within tolerance — they agree to the +token and to the call. The adapter's instrumentation is sound. + +**The mechanism is truncation, not accounting.** Three `cli-cli-13057` trials +hit the 2,700 s hard ceiling; the adapter reported **0 tokens** for each while +the proxy recorded 134–172 calls and 16–20 M tokens apiece. When a trial is +killed mid-flight its transcript is incomplete even after salvage, while the +proxy counts a round trip by construction — a request it handled. That is +exactly the asymmetry the registration anticipated when it made the proxy +authoritative. + +**All six in-band scenarios show 0.0% delta and matching call counts.** The +calibration failure does not touch a single scenario the experiment would use. + +**Consequences, stated plainly:** + +1. Per the registered rule, cost figures come from `runs/probe.proxy.jsonl`. + Adapter token totals are dropped from any report. +2. The gate's aggregate form is dominated by trials that are *already excluded* + as harness faults. Computing it over the analysis set rather than every row + is a defensible refinement, but it is **a deviation and would have to be + disclosed**, and it does not rescue the gate here (9.484%) — so nothing is + gained by making it. +3. `cli-cli-13057` is unusable on both axes: 3 of 5 trials ungradeable, 4 of 5 + abandoned, and a 90.7% accounting divergence. It should be dropped from the + fixture rather than carried. + +--- + +## 5. Defects found by this grid + +The grid's other job is to break the instrument before the experiment does. +Three defects surfaced, all fixed. + +### 5.1 The viewer scored harness faults as model failures — and it moved a scenario in-band + +`suitedata.pass_rate` averaged over every row. An ungradeable row carries +`all_pass=False` because nothing graded it, so an adapter that hit its ceiling +counted as a model that got the task wrong — which the registration forbids in +as many words ("Harness faults are not model failures"). The registered +analysis has always applied the exclusion, so the two surfaces disagreed: + +``` +cli-cli-13057 viewer 40% registered analysis 100% +``` + +40% is inside the calibration band. 100% is outside it. **The viewer was +inflating the count that decides whether the experiment can run.** Reported as +7 in band before the fix; 6 after. + +One `_ungradeable()` predicate now feeds both the `ung` column and the rate, so +a row cannot be displayed as ungradeable and counted as a failure beside it. +Verified: the viewer and the registered analysis now agree on every cell. +Fixed in `ffa6044`. + +### 5.2 The `left` column counted cells that had reported, not cells that exist + +`per_cell = expect / len(cells)`, where `len(cells)` is cells that have +*produced a row*. At 86/120 that read 120/18 = 7, so every finished five-trial +cell showed two trials remaining with an ETA attached to completed work. The +estimate converges only once the last scenario starts, which is when nobody +needs it. + +Now read from the batch's own recorded `argv` — the runner had already written +`--trials 5` down. The `[s] left` sort had the matching defect, ranking by time +*spent*. Fixed in `b2d1db4`. + +### 5.3 The grader hole was live for this run + +The suite commit (`1c573d7`) predates the fix (`df1ba6f`), so `cli-cli-13523` +was graded with no CLI surface and no unit grader — `all_pass` reduced to +"touched the right file." It reports **5/5 pass**. + +**Those five rows must be discarded.** The scenario is out of band either way, +so §2's count is unaffected; dropping it makes the cli tier 1 of 14. The fix is +in the tree and `mkscenarios` now refuses such tasks at extraction, so a +re-run would not produce them. + +### 5.4 A sharp edge left in place + +`status: "ungradeable"` is used both for *"this check could not run"* and for +informational skips such as `cli.extra_surface`. Across the grid there are 174 +checks with that status against only 3 genuinely ungradeable **rows**. Any +predicate that scans for "a check with status ungradeable" will classify all +120 rows as ungradeable — as one did while preparing this document. + +The row-level definition correctly keys on the `adapter` check by name, so no +reported number is affected. Recorded because the next person to write an +ad-hoc query will hit it. + +--- + +## 6. Instrument floors + +Only `a1` ran, so the cross-arm agreement check could not execute — it needs +two arms to compare bytes-per-token rates. + +| | | +|---|---| +| `a1` always-loaded surface | 6,518 B on disk | +| Per-scenario first-call input | 11,413 – 12,295 tokens | + +The measured floor is stable across scenarios, which is what the check exists +to confirm. The rate cross-check must be re-run once a second arm is +materialized. + +--- + +## 7. What this grid does and does not license + +**Licensed:** + +- The fixture can supply discriminating tasks. Six scenarios land in band, five + of them unit-graded, against a threshold of four. +- The harness measures honestly on the scenarios that matter. Twenty-two of 24 + scenarios show exact adapter/proxy agreement, including all six in-band. +- The grading tiers behave as Amendment 2 predicted: unit grading + discriminates, CLI grading ceilings. + +**Not licensed:** + +- **Any statement about the directed-contexts pattern.** One arm ran. There is + no comparison here, and there is no primary outcome. +- **Any cost figure from the adapter.** H4 failed; the proxy is authoritative. +- **Any claim that 24 scenarios is the working set.** After dropping + `cli-cli-13523` (grader hole) and `cli-cli-13057` (unusable on two axes), the + fixture carries 22 scenarios, 6 of them discriminating. + +**Open before the experiment can run:** + +1. Drop `cli-cli-13523` and `cli-cli-13057`; re-extract with the current + `mkscenarios`. +2. Materialize arms `a0`, `a2`–`a5` and re-run `floors` for the bytes-per-token + agreement check. +3. Decide whether to run on the unit-graded subset only. The registration + already permits reporting the tiers separately; the cli tier's 1-of-15 rate + is an argument for treating it as secondary rather than as evidence. +4. Re-run calibration once ceiling-hit trials are removed from the fixture, and + confirm H4 passes on a clean grid. + +--- + +## 8. Reproduction + +```bash +# the grid, as it ran +PYTHONPATH=src python3 -m adherence.runner \ + --suite suite-pr.yaml --adapter adapters/opencode.sh \ + --model local/qwen36-35b-a3b-nvfp4 --trials 5 --arm a1 \ + --arms-dir fixtures/cli-cli.arms --out runs/probe.jsonl \ + --jobs 3 --timeout 2700 --idle-timeout 300 + +# the numbers in this document +PYTHONPATH=src python3 -m adherence.calibrate runs/probe.jsonl runs/probe.proxy.jsonl +PYTHONPATH=src python3 -m adherence.floors runs/probe.jsonl --arms-dir fixtures/cli-cli.arms --ref a1 +make table FILES=runs/probe.jsonl +make watch FILES=runs/probe.jsonl EXPECT=120 +``` + +Rows are `purpose: validation`. `make analyze` will exclude all 120 by design — +that is the guard working, not a failure. From 8b239a884a45106d73b0f392892f3150ee26e9a1 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 17:11:22 -0700 Subject: [PATCH 39/41] validation summary: weave in the TUI screenshots Each image is placed where it carries an argument the prose was making in words: the cost frontier IS the ceiling effect (16 cells, all at 100%, across a 93x token range); the tasks tab explains why 13057 blew the ceiling (173-line prompt, 5 issues closed, 13 files); the arms rollup is one row with empty ratio columns, which is what 'no experiment ran' looks like when the instrument is honest. The grading card is the sharp edge from 5.4 on screen: verdict pass, one check ungradeable. --- docs/VALIDATION-120-make-probe-sh.txt | 163 ++++++++++++++++++ docs/VALIDATION-120.md | 58 +++++++ ...dation-a1-0-live-grading-cli-cli-13068.png | Bin 0 -> 116479 bytes .../validation/validation-a1-arms-rollup.png | Bin 0 -> 57649 bytes .../validation/validation-a1-cost-Pareto.png | Bin 0 -> 137244 bytes .../validation/validation-a1-design-tab.png | Bin 0 -> 157452 bytes ...lidation-a1-live-summary-cli-cli-13068.png | Bin 0 -> 133799 bytes .../validation-a1-tasks-cli-cli-13057.png | Bin 0 -> 188355 bytes docs/media/validation/validation.png | Bin 0 -> 353480 bytes 9 files changed, 221 insertions(+) create mode 100644 docs/VALIDATION-120-make-probe-sh.txt create mode 100644 docs/media/validation/validation-a1-0-live-grading-cli-cli-13068.png create mode 100644 docs/media/validation/validation-a1-arms-rollup.png create mode 100644 docs/media/validation/validation-a1-cost-Pareto.png create mode 100644 docs/media/validation/validation-a1-design-tab.png create mode 100644 docs/media/validation/validation-a1-live-summary-cli-cli-13068.png create mode 100644 docs/media/validation/validation-a1-tasks-cli-cli-13057.png create mode 100644 docs/media/validation/validation.png diff --git a/docs/VALIDATION-120-make-probe-sh.txt b/docs/VALIDATION-120-make-probe-sh.txt new file mode 100644 index 0000000..7b1de3a --- /dev/null +++ b/docs/VALIDATION-120-make-probe-sh.txt @@ -0,0 +1,163 @@ +tyler@ego-killer ~/git/TGPSKI/adherence-suite $ make probe ARMSDIR=fixtures/cli-cli.arms JOBS=3 TIMEOUT=2700 IDLE=300 \ + ONLY=cli-cli-13057,cli-cli-13068,cli-cli-13362,cli-cli-13412,cli-cli-13413,cli-cli-13418,cli-cli-13421,cli-cli-13430,cli-cli-13449,cli-cli-13459,cli-cli-13471,cli-cli-13523,cli-cli-13541,cli-cli-13548,cli-cli-13580,cli-cli-13620,cli-cli-13681,cli-cli-13722,cli-cli-13723,cli-cli-13807,cli-cli-13823,cli-cli-13864,cli-cli-13987,cli-cli-13988 +mkdir -p runs/ +bench/isolate.sh python3 -m adherence.runner --suite suite-pr.yaml \ + --adapter adapters/opencode.sh --model local/qwen36-35b-a3b-nvfp4 --trials 5 \ + --arm a1 --out runs/probe.jsonl \ + --arms-dir fixtures/cli-cli.arms \ + --jobs 3 --timeout 2700 \ + --idle-timeout 300 \ + --only cli-cli-13057,cli-cli-13068,cli-cli-13362,cli-cli-13412,cli-cli-13413,cli-cli-13418,cli-cli-13421,cli-cli-13430,cli-cli-13449,cli-cli-13459,cli-cli-13471,cli-cli-13523,cli-cli-13541,cli-cli-13548,cli-cli-13580,cli-cli-13620,cli-cli-13681,cli-cli-13722,cli-cli-13723,cli-cli-13807,cli-cli-13823,cli-cli-13864,cli-cli-13987,cli-cli-13988 +proxy: 127.0.0.1:8010 -> http://127.0.0.1:8000 log=runs/probe.proxy.jsonl +isolate: recording every inference call to runs/probe.proxy.jsonl +note: --jobs>1 with a recording proxy. Trial marks are skipped (they are one piece of shared state and two trials would interleave), but each trial routes through its own /__run/ path, so per-trial attribution is exact and the H4 gate is measurable in parallel. +cli-cli-13057 arm=a1 trial=1 all_pass=False dur=2701.0s calls=0 tok_in=0 +cli-cli-13057 arm=a1 trial=2 all_pass=False dur=2701.0s calls=0 tok_in=0 +cli-cli-13057 arm=a1 trial=0 all_pass=False dur=2701.0s calls=0 tok_in=0 +cli-cli-13068 arm=a1 trial=0 all_pass=True dur=404.3s calls=26 tok_in=894535 +cli-cli-13068 arm=a1 trial=1 all_pass=True dur=303.0s calls=62 tok_in=2898750 +cli-cli-13068 arm=a1 trial=2 all_pass=True dur=244.0s calls=35 tok_in=1383795 +cli-cli-13057 arm=a1 trial=4 all_pass=True dur=1166.8s calls=30 tok_in=2657861 +cli-cli-13068 arm=a1 trial=3 all_pass=True dur=273.4s calls=47 tok_in=2420639 +cli-cli-13362 arm=a1 trial=0 all_pass=True dur=97.1s calls=29 tok_in=1049417 +cli-cli-13068 arm=a1 trial=4 all_pass=True dur=189.8s calls=35 tok_in=1272343 +cli-cli-13362 arm=a1 trial=1 all_pass=True dur=105.8s calls=30 tok_in=1293304 +cli-cli-13362 arm=a1 trial=2 all_pass=True dur=108.0s calls=30 tok_in=1160735 +cli-cli-13362 arm=a1 trial=3 all_pass=False dur=37.2s calls=11 tok_in=237090 FAILED:['pr.diff_coverage', 'pr.task_pass'] +cli-cli-13057 arm=a1 trial=3 all_pass=True dur=1482.4s calls=85 tok_in=6982703 +cli-cli-13362 arm=a1 trial=4 all_pass=False dur=25.6s calls=8 tok_in=184949 FAILED:['pr.diff_coverage', 'pr.task_pass'] +cli-cli-13412 arm=a1 trial=0 all_pass=True dur=71.7s calls=20 tok_in=550371 +cli-cli-13412 arm=a1 trial=2 all_pass=True dur=60.0s calls=20 tok_in=512865 +cli-cli-13412 arm=a1 trial=1 all_pass=True dur=91.5s calls=26 tok_in=842463 +cli-cli-13413 arm=a1 trial=0 all_pass=True dur=45.6s calls=12 tok_in=245068 +cli-cli-13412 arm=a1 trial=4 all_pass=True dur=82.0s calls=24 tok_in=612347 +cli-cli-13412 arm=a1 trial=3 all_pass=True dur=89.2s calls=28 tok_in=767078 +cli-cli-13413 arm=a1 trial=1 all_pass=True dur=29.7s calls=6 tok_in=172849 +cli-cli-13413 arm=a1 trial=4 all_pass=True dur=29.4s calls=7 tok_in=156997 +cli-cli-13413 arm=a1 trial=3 all_pass=True dur=44.7s calls=11 tok_in=322022 +cli-cli-13413 arm=a1 trial=2 all_pass=True dur=82.0s calls=20 tok_in=419035 +cli-cli-13418 arm=a1 trial=0 all_pass=True dur=320.2s calls=60 tok_in=5670343 +cli-cli-13418 arm=a1 trial=1 all_pass=True dur=390.8s calls=75 tok_in=5475968 +cli-cli-13418 arm=a1 trial=2 all_pass=True dur=529.4s calls=68 tok_in=6032990 +cli-cli-13421 arm=a1 trial=0 all_pass=True dur=91.0s calls=22 tok_in=1214383 +cli-cli-13421 arm=a1 trial=1 all_pass=True dur=44.0s calls=12 tok_in=315729 +cli-cli-13418 arm=a1 trial=3 all_pass=True dur=441.3s calls=73 tok_in=4941788 +cli-cli-13421 arm=a1 trial=2 all_pass=True dur=103.6s calls=20 tok_in=496254 +cli-cli-13418 arm=a1 trial=4 all_pass=True dur=440.7s calls=101 tok_in=8838701 +cli-cli-13421 arm=a1 trial=3 all_pass=True dur=104.7s calls=24 tok_in=1099840 +cli-cli-13430 arm=a1 trial=0 all_pass=True dur=72.7s calls=15 tok_in=393772 +cli-cli-13421 arm=a1 trial=4 all_pass=True dur=96.0s calls=16 tok_in=655945 +cli-cli-13430 arm=a1 trial=1 all_pass=True dur=117.8s calls=30 tok_in=992842 +cli-cli-13430 arm=a1 trial=2 all_pass=True dur=88.2s calls=21 tok_in=508089 +cli-cli-13430 arm=a1 trial=4 all_pass=True dur=34.7s calls=8 tok_in=215432 +cli-cli-13430 arm=a1 trial=3 all_pass=True dur=119.9s calls=16 tok_in=472160 +cli-cli-13449 arm=a1 trial=2 all_pass=True dur=175.9s calls=15 tok_in=634758 +cli-cli-13449 arm=a1 trial=0 all_pass=True dur=648.4s calls=88 tok_in=6988228 +cli-cli-13449 arm=a1 trial=1 all_pass=True dur=752.8s calls=96 tok_in=7704365 +cli-cli-13449 arm=a1 trial=3 all_pass=True dur=855.2s calls=96 tok_in=9068772 +cli-cli-13459 arm=a1 trial=0 all_pass=False dur=386.6s calls=51 tok_in=2973607 FAILED:['cli.surface'] +cli-cli-13459 arm=a1 trial=1 all_pass=False dur=166.0s calls=25 tok_in=3162088 FAILED:['cli.surface'] +cli-cli-13459 arm=a1 trial=3 all_pass=False dur=319.5s calls=56 tok_in=2478276 FAILED:['cli.surface'] +cli-cli-13449 arm=a1 trial=4 all_pass=True dur=1083.5s calls=98 tok_in=10081404 +cli-cli-13459 arm=a1 trial=2 all_pass=False dur=632.8s calls=84 tok_in=5241689 FAILED:['cli.surface'] +cli-cli-13471 arm=a1 trial=0 all_pass=True dur=109.1s calls=22 tok_in=1621232 +cli-cli-13471 arm=a1 trial=1 all_pass=True dur=94.6s calls=24 tok_in=1780156 +cli-cli-13471 arm=a1 trial=2 all_pass=True dur=119.1s calls=25 tok_in=1856871 +cli-cli-13471 arm=a1 trial=3 all_pass=True dur=101.8s calls=19 tok_in=1368389 +cli-cli-13471 arm=a1 trial=4 all_pass=True dur=206.9s calls=43 tok_in=3798524 +cli-cli-13523 arm=a1 trial=0 all_pass=True dur=201.0s calls=32 tok_in=1494979 +cli-cli-13459 arm=a1 trial=4 all_pass=False dur=687.1s calls=72 tok_in=6690945 FAILED:['cli.surface'] +cli-cli-13523 arm=a1 trial=1 all_pass=True dur=116.8s calls=14 tok_in=1136913 +cli-cli-13523 arm=a1 trial=2 all_pass=True dur=137.3s calls=29 tok_in=2441263 +cli-cli-13523 arm=a1 trial=3 all_pass=True dur=156.8s calls=22 tok_in=993191 +cli-cli-13523 arm=a1 trial=4 all_pass=True dur=125.8s calls=21 tok_in=618300 +cli-cli-13541 arm=a1 trial=0 all_pass=True dur=741.8s calls=136 tok_in=14587499 +cli-cli-13541 arm=a1 trial=2 all_pass=True dur=1057.4s calls=171 tok_in=21189386 +cli-cli-13541 arm=a1 trial=4 all_pass=True dur=143.2s calls=46 tok_in=2878231 +cli-cli-13541 arm=a1 trial=1 all_pass=True dur=1257.2s calls=149 tok_in=18833119 +cli-cli-13548 arm=a1 trial=1 all_pass=False dur=297.1s calls=70 tok_in=4367467 FAILED:['pr.task_pass'] +cli-cli-13548 arm=a1 trial=0 all_pass=True dur=341.4s calls=71 tok_in=6027213 +cli-cli-13541 arm=a1 trial=3 all_pass=True dur=1030.5s calls=166 tok_in=22243133 +cli-cli-13548 arm=a1 trial=3 all_pass=True dur=349.1s calls=81 tok_in=4759703 +cli-cli-13548 arm=a1 trial=4 all_pass=True dur=242.4s calls=48 tok_in=3784065 +cli-cli-13548 arm=a1 trial=2 all_pass=True dur=408.4s calls=82 tok_in=5319810 +cli-cli-13580 arm=a1 trial=0 all_pass=True dur=506.7s calls=94 tok_in=7448490 +cli-cli-13580 arm=a1 trial=1 all_pass=True dur=536.9s calls=92 tok_in=6829563 +cli-cli-13580 arm=a1 trial=2 all_pass=True dur=644.2s calls=122 tok_in=9196758 +cli-cli-13580 arm=a1 trial=4 all_pass=True dur=461.0s calls=94 tok_in=8526204 +cli-cli-13580 arm=a1 trial=3 all_pass=True dur=541.4s calls=93 tok_in=5145390 +cli-cli-13620 arm=a1 trial=0 all_pass=True dur=582.4s calls=106 tok_in=10671217 +cli-cli-13620 arm=a1 trial=2 all_pass=True dur=671.7s calls=122 tok_in=9581448 +cli-cli-13620 arm=a1 trial=3 all_pass=True dur=519.3s calls=77 tok_in=6326413 +cli-cli-13681 arm=a1 trial=0 all_pass=True dur=35.0s calls=7 tok_in=140826 +cli-cli-13620 arm=a1 trial=1 all_pass=True dur=831.7s calls=114 tok_in=14318005 +cli-cli-13681 arm=a1 trial=2 all_pass=True dur=27.8s calls=9 tok_in=192142 +cli-cli-13681 arm=a1 trial=1 all_pass=True dur=88.9s calls=14 tok_in=215045 +cli-cli-13681 arm=a1 trial=3 all_pass=True dur=83.9s calls=12 tok_in=293425 +cli-cli-13681 arm=a1 trial=4 all_pass=True dur=67.9s calls=14 tok_in=317490 +cli-cli-13722 arm=a1 trial=1 all_pass=True dur=81.5s calls=14 tok_in=282432 +cli-cli-13722 arm=a1 trial=0 all_pass=True dur=145.5s calls=34 tok_in=1179386 +cli-cli-13722 arm=a1 trial=2 all_pass=True dur=146.2s calls=20 tok_in=514474 +cli-cli-13620 arm=a1 trial=4 all_pass=True dur=517.3s calls=113 tok_in=12521195 +cli-cli-13722 arm=a1 trial=4 all_pass=True dur=81.0s calls=12 tok_in=245366 +cli-cli-13723 arm=a1 trial=0 all_pass=False dur=79.2s calls=21 tok_in=906852 FAILED:['pr.task_pass'] +cli-cli-13722 arm=a1 trial=3 all_pass=False dur=236.4s calls=20 tok_in=699433 FAILED:['pr.task_pass'] +cli-cli-13723 arm=a1 trial=1 all_pass=False dur=114.8s calls=34 tok_in=1541929 FAILED:['pr.task_pass'] +cli-cli-13723 arm=a1 trial=2 all_pass=True dur=427.2s calls=55 tok_in=3828896 +cli-cli-13723 arm=a1 trial=4 all_pass=False dur=331.2s calls=68 tok_in=4348326 FAILED:['pr.task_pass'] +cli-cli-13723 arm=a1 trial=3 all_pass=True dur=388.7s calls=68 tok_in=4560597 +cli-cli-13807 arm=a1 trial=0 all_pass=False dur=441.8s calls=45 tok_in=2428552 FAILED:['cli.builds'] +cli-cli-13807 arm=a1 trial=2 all_pass=True dur=484.8s calls=41 tok_in=2933541 +cli-cli-13807 arm=a1 trial=1 all_pass=True dur=683.6s calls=71 tok_in=6177076 +cli-cli-13823 arm=a1 trial=0 all_pass=True dur=210.0s calls=52 tok_in=2487856 +cli-cli-13807 arm=a1 trial=3 all_pass=True dur=560.9s calls=70 tok_in=5923553 +cli-cli-13807 arm=a1 trial=4 all_pass=True dur=611.7s calls=112 tok_in=8274050 +cli-cli-13823 arm=a1 trial=1 all_pass=True dur=299.4s calls=72 tok_in=3582348 +cli-cli-13823 arm=a1 trial=2 all_pass=True dur=206.0s calls=44 tok_in=2023766 +cli-cli-13864 arm=a1 trial=0 all_pass=True dur=115.4s calls=15 tok_in=506492 +cli-cli-13864 arm=a1 trial=1 all_pass=True dur=77.9s calls=12 tok_in=375720 +cli-cli-13823 arm=a1 trial=4 all_pass=True dur=238.9s calls=26 tok_in=1479459 +cli-cli-13823 arm=a1 trial=3 all_pass=True dur=351.9s calls=62 tok_in=3722595 +cli-cli-13864 arm=a1 trial=2 all_pass=True dur=78.5s calls=13 tok_in=421433 +cli-cli-13987 arm=a1 trial=0 all_pass=False dur=51.1s calls=9 tok_in=189640 FAILED:['pr.task_pass'] +cli-cli-13864 arm=a1 trial=4 all_pass=True dur=100.7s calls=15 tok_in=476778 +cli-cli-13864 arm=a1 trial=3 all_pass=True dur=128.2s calls=19 tok_in=533772 +cli-cli-13987 arm=a1 trial=2 all_pass=True dur=53.6s calls=12 tok_in=612767 +cli-cli-13987 arm=a1 trial=3 all_pass=True dur=49.1s calls=9 tok_in=327236 +cli-cli-13987 arm=a1 trial=1 all_pass=True dur=107.0s calls=14 tok_in=559753 +cli-cli-13987 arm=a1 trial=4 all_pass=True dur=39.8s calls=11 tok_in=348235 +cli-cli-13988 arm=a1 trial=0 all_pass=True dur=70.2s calls=13 tok_in=312838 +cli-cli-13988 arm=a1 trial=1 all_pass=True dur=48.3s calls=9 tok_in=185792 +cli-cli-13988 arm=a1 trial=2 all_pass=True dur=41.0s calls=8 tok_in=135470 +cli-cli-13988 arm=a1 trial=3 all_pass=True dur=41.3s calls=10 tok_in=201787 +cli-cli-13988 arm=a1 trial=4 all_pass=True dur=45.3s calls=11 tok_in=238263 +scenario pass@1 trials verdict +cli-cli-13057 40% 5 KEEP +cli-cli-13362 60% 5 KEEP +cli-cli-13548 80% 5 KEEP +cli-cli-13722 80% 5 KEEP +cli-cli-13723 40% 5 KEEP +cli-cli-13807 80% 5 KEEP +cli-cli-13987 80% 5 KEEP +cli-cli-13068 100% 5 ceiling — drop +cli-cli-13412 100% 5 ceiling — drop +cli-cli-13413 100% 5 ceiling — drop +cli-cli-13418 100% 5 ceiling — drop +cli-cli-13421 100% 5 ceiling — drop +cli-cli-13430 100% 5 ceiling — drop +cli-cli-13449 100% 5 ceiling — drop +cli-cli-13471 100% 5 ceiling — drop +cli-cli-13523 100% 5 ceiling — drop +cli-cli-13541 100% 5 ceiling — drop +cli-cli-13580 100% 5 ceiling — drop +cli-cli-13620 100% 5 ceiling — drop +cli-cli-13681 100% 5 ceiling — drop +cli-cli-13823 100% 5 ceiling — drop +cli-cli-13864 100% 5 ceiling — drop +cli-cli-13988 100% 5 ceiling — drop +cli-cli-13459 0% 5 floor — drop + +7 of 24 tasks land in [0.25, 0.80] + 16 ceiling · 1 floor · 0 harness + +VERDICT: proceed with thin margin (7 usable). Consider a second fixture before generating contexts — it also unlocks the N-scaling claim a single fixture cannot reach. diff --git a/docs/VALIDATION-120.md b/docs/VALIDATION-120.md index 1c4f20c..5303317 100644 --- a/docs/VALIDATION-120.md +++ b/docs/VALIDATION-120.md @@ -10,6 +10,13 @@ work"* — only one arm ran. It is *"can this fixture supply tasks that discriminate between arms at all, and does the instrument measure them honestly."* +![The design tab: arm a1 described as the practical control, its always-loaded surface measured at 6,518 bytes with surface sha 5caa66e9, followed by the eight ground rules the run is bound by.](media/validation/validation-a1-design-tab.png) + +*The rules this grid is bound by, read off disk rather than off a document — +`[design]`. Four of them decide what follows: cost is meaningless without the +pass rate beside it, the calibration band is `[0.25, 0.80]`, harness faults are +never model failures, and validation never becomes evidence.* + --- ## 1. What ran @@ -31,6 +38,13 @@ Cost: 370,649,394 prompt tokens billed, 1,768,053 completion, 11.8 h of summed trial duration across three workers. Median trial 161 s; longest 2,701 s — the hard ceiling, which matters below. +![The live view mid-run at 73 of 120: three running trials with their current shell commands, a per-scenario summary with pass rates and token medians, and a scrolling table of graded results newest-first.](media/validation/validation.png) + +*The grid in flight at 73/120. Three workers, one row each, with the command +each is executing; the per-cell rollup beneath; graded results newest-first. +`0 stalled` is a rendered state, not an absence — a hung worker would appear +here rather than silently vanish.* + --- ## 2. Headline @@ -55,6 +69,14 @@ comparison and the registration treats the tiers as different evidence. sit at 100%. A grader that everything passes cannot separate arms, whatever its other virtues. +![The cost view: a pass-rate-versus-tokens scatter in which sixteen starred cells all sit on the 100% line, spread across the full width of the x-axis from 202k to 18,833k tokens, with only a handful of unstarred points below.](media/validation/validation-a1-cost-Pareto.png) + +*The ceiling, rendered. Sixteen cells on the Pareto frontier and **every one of +them at 100%**, spread across a 93× range of input tokens — 202k to 18,833k. +When the quality axis is pinned, the frontier degenerates into "whichever was +cheapest," and cost stops being a trade-off against anything. This is the +single clearest argument for treating the CLI tier as secondary.* + --- ## 3. Per-scenario results @@ -97,6 +119,15 @@ Failing checks across the grid: `pr.task_pass` ×8, `cli.surface` ×5, Fifty-nine of 120 rows spawned subagents, consuming 24,125,708 input tokens that the parent stream does not carry. +![A cell detail card for a1/cli-cli-13068: median, mean, p90 and p90-over-median for tokens, calls, tool calls, probes to first edit and duration; then trials 5, pass@1 100%, two medians for tokens, ungradeable 0 of 5, abandoned 1 of 5, subagents dispatched, and a per-trial breakdown.](media/validation/validation-a1-live-summary-cli-cli-13068.png) + +*One cell opened with `[space]`. Two things to notice. The p90/median column +flags a 2.1× token tail in red — a median that looks cheap while the tail runs +away is not cheap. And there are **two** token medians: 1,383,795 over passing +trials against 1,902,217 over trials that actually worked, because the one +abandoned trial spends a fraction of a real attempt and drags the headline +number down. Reporting a single median here would understate cost by 27%.* + --- ## 4. H4 — proxy vs adapter calibration @@ -144,6 +175,15 @@ calibration failure does not touch a single scenario the experiment would use. abandoned, and a 90.7% accounting divergence. It should be dropped from the fixture rather than carried. +![The tasks tab for cli-cli-13057: PR 13057, judged by the PR's own binary flag-for-flag, forced by symbols IssueRelationshipsSupported and IssueType, answer spanning six directories, thirteen files touched, a 1800 second timeout, and a 173-line prompt beginning 'Add Issues 2.0 support: issue types, sub-issues, and relationships' that closes five separate issues.](media/validation/validation-a1-tasks-cli-cli-13057.png) + +*Why `13057` blew the ceiling, from the `[tasks]` tab — which carries no run +data at all, only what the scenario asks and how it is judged. It is a +**173-line prompt** implementing GitHub Issues 2.0 across `create`, `edit`, +`view` and `list`, closing five separate issues, touching 13 files across six +directories. This is not a task that a five-trial cell can characterize; it is +a project. The 2,700 s ceiling was not the problem — the scenario was.* + --- ## 5. Defects found by this grid @@ -207,6 +247,15 @@ The row-level definition correctly keys on the `adapter` check by name, so no reported number is affected. Recorded because the next person to write an ad-hoc query will hit it. +![A single trial's check list for cli-cli-13068 trial 0, verdict pass: pr.diff_coverage pass, pr.scope pass, pr.route ungradeable with routing evidence, cli.builds pass, cli.surface pass, cli.extra_surface pass.](media/validation/validation-a1-0-live-grading-cli-cli-13068.png) + +*The edge, on screen. This trial's verdict is **pass**, and one of its checks is +**ungradeable** — `pr.route`, which could not judge routing because the trail +shows no first edit to anchor on. A check that cannot run is not a row that +cannot be graded, and conflating the two classifies all 120 rows as harness +faults. Note also `purpose: validation` on the card: the guard is visible on +every single trial, not just in the file header.* + --- ## 6. Instrument floors @@ -240,6 +289,15 @@ materialized. - **Any statement about the directed-contexts pattern.** One arm ran. There is no comparison here, and there is no primary outcome. + +![The arms rollup showing exactly one row: a1, monolith-realistic, 24 scenarios, 120 trials, 88% pass@1, 1,260,354 median tokens, 26 calls, marked 'reference' in the ratio columns, which are otherwise empty.](media/validation/validation-a1-arms-rollup.png) + +*The most honest image in this document. The arms rollup exists to show paired +geometric ratios against the reference, and here it shows **one row** — a1 +compared to itself, with the ratio columns empty because there is nothing to +divide by. The 88% is a1's unweighted mean across 24 scenarios, and it is not a +finding about anything. This is what "no experiment ran" looks like when the +instrument is honest about it.* - **Any cost figure from the adapter.** H4 failed; the proxy is authoritative. - **Any claim that 24 scenarios is the working set.** After dropping `cli-cli-13523` (grader hole) and `cli-cli-13057` (unusable on two axes), the diff --git a/docs/media/validation/validation-a1-0-live-grading-cli-cli-13068.png b/docs/media/validation/validation-a1-0-live-grading-cli-cli-13068.png new file mode 100644 index 0000000000000000000000000000000000000000..851bec598e1257cbed210ce081a22e4194f1c924 GIT binary patch literal 116479 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 -$C}V$V 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 CtXSOu literal 0 HcmV?d00001 diff --git a/docs/media/validation/validation-a1-arms-rollup.png b/docs/media/validation/validation-a1-arms-rollup.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c6028a7f58255f60d029cdb960deb407617037 GIT binary patch literal 57649 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 literal 0 HcmV?d00001 diff --git a/docs/media/validation/validation-a1-cost-Pareto.png b/docs/media/validation/validation-a1-cost-Pareto.png new file mode 100644 index 0000000000000000000000000000000000000000..c5bcea910e7d9f6a398c300ea08f6bc07a797236 GIT binary patch literal 137244 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

EHdtWxl3E4sN+kQeYHd!`Ph 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

_t_@pofN7Y`5`_2Vua*q^ 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 L$EqJL{_;Nn|8LKL literal 0 HcmV?d00001 diff --git a/docs/media/validation/validation-a1-live-summary-cli-cli-13068.png b/docs/media/validation/validation-a1-live-summary-cli-cli-13068.png new file mode 100644 index 0000000000000000000000000000000000000000..06744b88535eb746c0cbd30618e62f385b304fe6 GIT binary patch literal 133799 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 z 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

Lu>xD8o`x38Jf$!F?WMK!PM6M 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𓂮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 oz7>Gsh5NJV-zWbad7+Ud0sd45F8}}l literal 0 HcmV?d00001 diff --git a/docs/media/validation/validation-a1-tasks-cli-cli-13057.png b/docs/media/validation/validation-a1-tasks-cli-cli-13057.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6083d3929a9212388b77ef2e566bdee4bc050a GIT binary patch literal 188355 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 z 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%0AeIq=EdMc_TNbo&^{ zzPN%|Zv+2VmXyx`ZE${9O^xUaH7r@U9qWkH{230)kBW+wC@HlJ70@mh+jI&sY6UI( zB)K)t_62>zL9w*3S-J}5kMbs3f^8On9pl}H-wvSVDm)Mx_!c(b(xyn3g>`(~6U`sd z(vrTB%$d$|^vpnD&eUqN7xZYaK4^GMB7h*8LCLTxA3n>@DUYz~7`Y*-5GrQw z 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

@ zMsIRt0^is9ot@qa`{Sm{4~E9+;`1@?rsJ?2j7=z6J}>R z_l`~*07(=-h1exb0}u2bHZ~CNqd(Yd0XM~k$6|7Nw`J7Igt{LP@qqlqmcwhWo_Bb2 zyBIHD$rmO|n^u)zW51xH>Rd~A17-}$%F2%)56>3BoxX_zGopz*#Kgo+?_`pnH6R?n z9sAw2M}RbeW3Quq>aod9ADLWsi}oKmz^NQ7txYPS0Tp=@`wcb~w(tqXGSQ;MP6QeA z%8s@DaV+u_<{T*`8$pI9nNKWeP&vQ6ZR)a_R-PK@Sx5dJ0R4a^f&YionI5UdB;qa; zD`R#1R6L1Qf(QF0q9rAdCd2)MF|gDo2i_ig8=Jdav0rC^p*{Ly+x*4?IHX@Z+7{X0 zKY7kB1rZUZE5chvaYvgu?4lgnJW*up3gt;nuoQLEC=NZP_=- zclrkUzWy7%AovW_)UCtgep3RM*v+8}&yD&jzw8yfw@_lCvn41to^CKs%3q2~sKSKE zX{rOaqakz*%tmhwtF2id_g(Ebz@+pV=@Ib^7)1H1J9np=uVRf&{2DBCmb*Ic69=W_ zLd>ep&uk50)igfUld7+cQQvj8m0FZC-eGl&=!0+gGT=VB6q=AEg-lyTE?ub z{Dfz0e1KXgl8kjAbJ)ylqV$U$)Qcu-?xpaAkI&rhst9tA1r)~ZoxP2tZ5Y(zXer4Y z4C@-h^sysZ#j*A8IZ634v-*{Ah*r8YS)VPfn2wdguc*FfL@|0I&K1*!^>I4FLDNkZL+is5FvF+61J=~%Gco043QHia96V7rg@Yj^0$p-zi%iNQbMesDz-KQOA54~xVzZ`~Xm@ro zv+0k$yYQIQPx-7(7 z+{e-zOzY%?54r{TOVQFWa3Mys40vXAbi^*xfnPTxSnH%{{QN(ER)s{w^aSZTbGucE zuJ7ybTyd%957uRrXy+z`F8=E6jcop^w>4dM6Uc5=os4bVm$153!LYEXpOp<;sc&fd zc(C|#-7&>J;~td^iJYYjrxOuZF>e2~r{E3N((S1dr z@gMwf8AmLotM+;@niaDN6ZH9nu`DAcCeU;-JK?dm)tG%gys& zqJ^!o=I8a6mX`~?F1Z=5-``PIMtqe>V140Zx4NbN)yGF3cx-`g%4PZ3nTC#u)1R2t z0_AXJN}?@@wBLm8YxT} zgk&p*!|H*c+ndF?xtALQDXFO>dMklh0)iTUXg{hhf}|>;yY;O10sxRfIF}i4^JimztG1uG9fSkZF6Dr z$Vc&h3|kFupP=K%&wqI4O5QODy;vKb#OHQK%g#1y@2zh3b~Kid8#OYo()(KrKz&0J zS*FXyya5pq=a9bYu{Adg7W;`MF%gtub+}v4lU2O)oHtJE_0jTvK)kG=tlbmxA`7H_ zW_4`V)YOpXGk8XN*6r49Rge;cB#uUwKT!YZS5Xd$bqj}YaudRXE4Bx<_($c7JZ%M2 zj<_2yJ!qMkSKpe^f#RgCMXJ@0JZ*cBJ)PJOy=fn$NC94cy2E{}df7NTr$_3ombo^+ z_;(IBiiU<)COO$W;dZ|HqgEE-4;2UNR^DmkXJwVi{4nsrVsJIeTF*9$Ijl)La*^LK z3yu;lu9Gp{*o_%t8i7?T{^}U`WGIycuw|jA%X_S3u6sHlgOl59yuznyweP1^N=5eK z%MM2o5GF4~8#1$R3yy41ymfSU>i0}w`p?{d{8!gslAGdl5{<{1Wv(=I$_Z=U`qR>K zGmK*-xZFiJ@}k(QocI|7Wr_AvY~k`~ASjKse~PFukdG;QXu36_@NQc({6*S z>I!c|sF+CK*(c2BM2h2?Hum;S4GoWoK_ml)_U3kRF?{(Ga@Xj_7pVD|us-eJeoAy3 zxlVV9X&G_EEuiOS=g`a5bM0hYbY1XkBYv}%z~|^6Mevef67o9z?8tBGN4po zIms2tBqk;udR;;#ACf>2!}IyakC(tIo!8^+o;eug zS)hcP(f}hxEP?a0FCg^paHWbo7FJ7z*B$f9!6Dp~6@^+herXtJQyEpH*RQznN8$Fj zB~rw39zXU~(QKIqsm3){i-wcxSt}dL6LopZhzti|hG}xi&AcJ4I@+`)q}?3m{*==u zqnP23YslD8A2U0n)yR?rH>=CL#cOlC$9M<%lzqgJ5v?)cN<{-#0R_v`kDZ;8;CJr^ zX_z#l9MioixIS!dO3(X*>cY3;J%)x=`Ucz9XY(%qK4F^{B%-akyxKy3rJztyJuqJT z{*3Ao)D*7#K#BmML!cC9*S3@&wL@Nb)VMCE;opdLgso?Le|&;MOi(>)+(J|WLNudnXPyFGdGMBu31K+F)oD-ieQ>8V}y#$D7xgyooA?^|12uk^)9y*0Tv zWYo*u?6^7c=`^wq1dHt~HTaOH<&|*Jn^uJ5*)99aLzHdI*+63h{mPygJVG$2X z9n8~AHGLa!4;^c6=iA|1LAStQ)eCHHc35Q_<)QCno++WncfTW{~W5Ge4H( zf#9_=<4h5wdWbU^gsAu*!6BH;fnTYc>_#e=?LImt4}# z!)wiyhICIWFZlivk14uq{U!qVoYKn5OpGe%N1oiIu%~B*LX9M{46bz@zT=aI6fv#A z)Xtg>XIn)A4dlVT|21KRvI!kDGGgLflMP7S*cjYPO`E>%8vs%-6Z^Gmyn^1dPg9%_ zthV5!x#9?2@JYWkH_w9*xBb@1YgWuQneE2Cd6Bm>#iy0hPt_1SmsRlJjPlQAH34*c zx^0Gx!QMampFMvqABy@?Rnb7>*K^qN$uzGypN>wVbcH9?z`!(9+*e*FHmCvh5Q+&o zUbjK8K=aCO-ReMF5|`iY1eiCu*OZ=y1qH3?V=yA#UAHOJG?WN9P>{i``1RZE5L+(X zkD636Pnns6-FMuhvp398z$mKg;j!xaU}243+*e0JR*Q#LR#w#|TaI8359XrS5o)zI z>a!4vGlQJNb%0P%OLcWd3!lnnYtsK8ukt#OAV; zj9edn;Xmz;P0)gN1~&wbCLY&Kcy@;v&=GBOd}i&1m;P7Dw}Cm)#NyK0n}bA8%%9yU z4v@HjfXydTX{DiMvzHGoBd(Bd6=8Z4zi7|ST|&Y}&)6k7K$UW3$v7&UhSXcXdZ%HX zu!4}GwXbD1H!~0H4WI0^&_BPvjT*^W(<bUZ~#OzAQLqGBk3AX46z z3L|+!UEeU2RiBI!ouQrW56KA=YX|ok>ikG80WOUwEE0`VZe4Hu0|Lgug`aX@ZrRkj zON5y}UZ*S2($Yf0t8qk17cE;~YJ?Xi=&X%>QdZ`t!eGlE#CoDy9Im*?5ih}2(D8{Ni%ktAC&%%+l z>-U(nP;=M}F14KP(i&^ZA}grlud?C`w6p6|>%sm#ubC%IzO?<@bXm!WrEwDsa)H&-d`T?A<$^ zaTdP$6UPm)uAHy{*Y2d#7TZOEqCTQz68J?mfqTvM{eC0WX#?O(+_WX{()BCIx>=}RZ^YVE-Rhn z#P1WFdT@nCUbwNzd4@!?ny2r3yz)_y`;ldW@RpMT6wEK+CUkexN{L1S%OCH@=XNVH zkE5h81_=EV_(V`l@$R6m#;)-?}Tk6zj(Cw9a9j#&SX&MxY$1u(NPg z9rt4S=c&ohzM%b3sRCw-EzPzm1!dL-E`r$ z)3)Tw@aXKq<+Vp35G-J<^l)MRo-r?Blex~W3S>>e1w$8lSD&v_j)JMXWHZu=4~pg1 zhEw?Yov*D9{OG%Sm^mJ#4Ko(edm@fl{W4dV);{Lt+4g1@6?K{f;hE10+1FHEppN9K z%PA>QI5Ssch@<(4;WqN|@fB^3CZSwjuz;Dr<#l6Sj>-xrzDtsTUC76%$lCe~SNmJw zHuCWy^K5)L^xdZ_mNQ4lU~?qN#r+&DJ*P!?X=(id8FExn%(@1+;28D92Zg1Gr1*W! ze*)ePnX3t~XCPgf?1`#7f2xrfH}R=wcKMx-4ysb&GEzEyc7TwXng2erI%OALwwR~Ro!>0^Lpkyx-~b8l}Dvq~N}rXop3$qb*B89okvN<;8ydh5Bq~G?8jdtCVjldDi zX1?)`$Y<2Kxnu(e=*INZY(tN;E6wKC6Bau6r2$CMPF#<-;ms;CjPIdXw4kawC40G@ zZFI85@3PaPig`F>ap{V-UVJR^JV z>0MQ&nhZ{Qwnp2xEetRz5DmkDfVsMDa&&^4K^)J87G+EGw~cGr=7a*BQDZu_Jp7ZW zKNN<4DtwxN3!&RzY4P^TI!PzY1Px_KcJ$>eO}R3PD{kiJuQbE)X1(e#ow=Q@DqNr6 zoZ;YFY3}KP4w;&!UbDvIfOfYD7}e?zj~;W&UV3=m!@y)^&qP&?kdq zr}f*n+icdo7B^)>ttV1GM_WRgq~UV~yX)mPc5HPrgz{h3&rXFq)1&Q4?lX=H=avi^ zDva11Rnt0kjn4U$rKMU+wUd3*uIPamG5p3esUIoxt4U20A(z z-moSj?UP*W*0Z*5tLA0T8dz6@Pw*tOJM^QV+=w=T>{g3Q9g0gU%l0Q)cs`19To?9uaEtZgbW!LcF?**kFH)}X%PGial*S;V|NKRRUQf#?WZXsybUMtgKogtePXfu)nTOnwWI z@#dQ&F=uOV?Ir4&*)lC#pDId!VOT6WH!-%R)6yR0NS;KBF*A9kIJ~7{01uSF*4!WV zhU5UyO#?M&G&3^;?rHE`ojP=9IQ@Q&0U^8F<5@3bfk*a$z98X={+#|32j7?)#lkYz zUabxE2S9yuzE+nM4O0M}9vw7}!gcd8($@Bc_a_bt@-L@mFUH zUBh5#jVSVymRnNs{^;RcUrv6FjA@K*Xth*SFF=y?msK|(7{;h~xw>^M9tCYS0Eao^ zH=4}$L5lWj*_R4fkdFjgsEA2rGJ)7$>@HJIrLLZlDK;K zw_e+X(1=nGJQpV9S2Za`HrnbNVgX~N`zbqp0A^h2FZ`=QUHC8Rn8w$iGhr~U*m^F& zX`y&{P7sB%JWGC-t6SIb5EW5o0Sv~_Em>GCWn>sjsqE{1F^-nhKSW>XbUX6ZyZ-cL zYdlJy24nBk{GqMo@W_aM3LBYSy4Ahd*jV$h2bWds2~x>fU3w0I+_Y$i=bpNkm|~FY z?7NSSORecYAh|rBw@gn*CO3H!3UbBQxJ%K{=hRVw7b-(X4-cQ5VENGgG>D8}cB8O0 zZ2Z)3S0>42k(<@t-X0p6*MND6d&TR++5*<)j7-B6$klp2-;`v`b!tIeOGOa$$8*6fP_NO3yEu;WYS7s85w<$_L+s z1V+K1FFN{|!8y5D<||J5;91>|`ZZ+r4q|F={#lx>V{8uok+su5(N=L=~o0qZN`2N%hK0uc^{7^6R&qCHpo8%>}Olt7!d}1d+s)&J6QPvCCxl ze*42{34)!;Tj2^ywndl|=Y#X%7nSr$kjl^F&b{VGUt?rdr`OWGq>2E)mo0Ab;02C1 zxG_Nel$o1LL0{!H^9{mK>r-FqEct>^%!w;HrMKF&wtE zR0A;^v`<6ka4-qiecan)N!iT<76YIgXz#OjTg#@G*RU2*-IyJ*yHu zB_}H>E6cxAN?MaAQq8Dvy9MATQLX$$&<_a5%Z>_X8ql$`2Vjvtf0tD{a++U0}XsN0#OB}N_KX#dk;PZ(3Syro40`Z0pf%9?!npq zVE?T*(hd}WLh=g^cp)GVe{?i-!yd8J2N$m%iLlTbZcmP;8Mx~kRNe4MW6=aZe^%Nb zETO*^`C{wn^qgDn8nrOB+;_Zq=cxb#0r8VSNs`trb?3eDRr+(oRja1iA(cpW`xS@A z*Ix>fBZ-lx^E2-Fz)i66T1eN>m!6hZe}t5MeWC)jlnZ{eJsk$QJe2qM_jg&Th|0_! znRTIW?=xr(GzB>G+w(NG1-F*H_9kq*tutF-H1utL*RReyDg*5jagvsu{Rf~Y5Y26a zFQ|xs`de<&=^bnUoAL?CnmBUrA&}OXkdujl8GH3{^)rOaJn-4%NcE?Th=^cw*aNWu zsF}I_07MCtz-SB`GRtNxsr69H^5eZQ4IM(4TbLB%GkGReez7 z)_O4BnNP!5b?}`7`_kYMs@0bHk)V?J%}qnkT-Uy*Ct`}f6fCJMwHmY?W4GA@R45^! znl!ij!(7Tj7eF0JnEZK0B~s{P!YUj4!LXoceKFsh)8(sYpbO$?NmgfToM zptl32zk#x&7xA3G1$dFgCi4PAKdEYtdy(m)JqnKNWTP$~U+C8ehoCK|j6VTgWWw=e zYq}~bjk(T<0MYqt`p_8U&uzQ7ZRobi3A%+#gdJO3F?i~sO8}9^1Mc?TUL%u6wV?$g z^}`dvt3Ca6nX2g$f{)f*R!a@ykpz*rKG^zK)x3Zi3ISSc#PMvw#g`}0L?tqII~wQS zL{S$P05)CAxG zFH&QU*!y0Hb?U3jgH1-K7rI)BU%m*2wL+7{gH1?CNC5H)IN=w-3L=6!Qb5Wp`O0*v zBg{&F@5d*qq>;&DXL9m9HB$`>)_+Hpa7;x%ge0UEdL8*68V+$Aza=6447xFPLQ0Rq zg9mrck4G`l(4H8yp*@^#LUVT~4kBkB` z+{dSiALtLea~Vc*r)|c|EPkWykc5BmM0L3Tjwd4ce>~CuA)biwZhgzRA9S;B;aApB zcg?2I(D2djWPm%~v}jas!hi|g7|36cimG`fZ<}SBS@0Y*H8(O8fSID&Tz?5xl+WVC zGP@O`&G((dh~m?&TOhW^ZmnNWC4cfwMeA8K-cQc;3Et1C124b=dIS29z4@kGowAUC zC=M~(5f85i)z1$2qe>C;MP!>w-Q8xoR45;pH1YFIu2Sc?8}B@|jal$S7g`EJ5Xk~Xg_ zC?y3|PUz~Xy83wa`HoL|&J#e2MhXeP96$a+xshj|cB08*e0N|#Ud+%@HlC*=$GX;7 z!{S(s8q4q~^G%|s7cGE2(sO#8(oRsjl0eGA&CHkYNX!2^Ph_oj>;Io8Vj^PXF0pB_ z5D*k}U8#V?!JY#(OV_Mx*zD=<4HSA4?F`T-baYI;iSG0C`9?`l|1S2b51HVT0Mqv@ zhfO?FqQU2lum7kpzaj}D7j7`7uSX@;}4eoFCJHUk_uYZ+>mSz~f+jwLEJ$kSONm+qe8+ zvK$kT)JP_k32VtRW`HhN;rG5cUSk!~*%t;NrdTkUUvPf#z-+OT8@t2Y*J#bwoCoWx)aT=%SE(|jz;g7ld5?Sz`%zfz@7vx$nc+Dh9^lvSI&{fIJa1rOl-Xhk}0+s03 zGK1D5)9ULhv>VvCGB!0;K0GRl{ThaRAond2$dtCgG&vs5o7QpZFu8l?Ec#G&qdtI^s|52eJcE)*7RX{o-PY5R3y>t(`0ls?5pC``_5cW_@u=vnhIGfb5sVnTAp z>r|vfc^Ji{lT$j5uVt;gj;uF0c7g~ib&Xu|tQaugHbV4hD3IAw=~~z4!2M>a?ix8r zBfEZV26hl|LI|ALbwVr;;iwelTpu^?}Cg5f|s={2)Be;n!->c|17u>48GP~Tn-_k;PM9fnC z>g#!~D-w9(wh&v_h>y3}{YzLlAm#~JQdCtG)>=8Z)d7%ZpB@#IOofUEzod0ldO zYWG9?tugf4@gvk&e@VdV5qVS^Ch)lWzW~${X%rA6qX30jR2&wh5R?(kEy(?I>WpX` zdjd;=g!Z@0%Q+E*j~}mD-ydEl-R-S!_*8Oin_i^QmWA7rs~aa_nzcW92Nlho_5FJk z@EVe`^%w3{kP%Z=Z%bNtOQ&CJaQRLn5BCs3F`gmW98$bh4*SLVB`%VeduHo$Va zclCYeD@siZCdZj8jhdqg+3Q4l01tv%Z@m@XuHMo6Vwl2vSPo(dxUp z4zsWNY#C{$vD3CQ!Ux?p|CwyEv!~tGW!b&BXNB(@P>k{H*|v>cNygMt&l7tXT4XM0 z{ki+*@crYGqY*j0c9yU5w9t!nGN=5z_YC#=YmP7B-N(m_)u&8Pv+d%Bg9Fd&e7& zAGF)qvHsSV&>6|t;NXzdqg}h=^SiqzY8^aguDiH@Gq`=ZY`w6y_MT`a_X}FE&93LE zJ@`}XdUy)XaHH+XGRroYnD7?t!~YjI)OBq`4vJMzMDyX6J+s32(~iOZ(VWp_l`7j= z!NWbvP0`WbM^nWn&os-fel5kZ|1`Y0rNB?*^`MA26+ZJ-*3AbgPr>T!&{Yh+aJN5X zM2EO_GzMXUXk%s91@h`|tKNe*+R*{;-Xm|6rt{reX%N5W?Kmh?kk8qU=B00>Ni|QU zFO%7BF8uXe#lt1uQ8#08bGQ2_W?sxTWLk@mJ6W)!%H9>(^CI_bk4ILvv^#NfJ$peT zAfb+OacQf$JoWa3OZfm(dlGAkcxb3y`x^TC=KMuLVPOMMN#h&0(R)Fn4cg~!We&sM zh>Eh>PSI>_Lz9l*xz$wuE6EghT@5_)(;bkYp5uhKVvGHne$Tx+?`tlz?nPrMoEAQU z@o<#gAGo?73}~62OkNRRYwy$MSDzS#`91t|$>4{>b&Z^uR@sgv zp8bQOs*ry^JOL%=Cj$6E+3dARW#?N*co3yr&C54$-0x2HCqabH8O&5w?_zIRKh8+K z3{NEgZ|Nbcz0u$GWnPH7HAw$V@C6*!A^rt<8bn~;k&iJUBFXc0KH2nm1=1Oufa+FW z$$B(-Rw3HJ+%Z_1FZ)qaHUf%3t9=ug$~9!x0-j zJTMTVU3YbRZPjPI*q9mkV(X`n4`B)%LdZysmZ)9Xho*hkL($0 zuW#vSApSU9?YZ;RwU3ODb&(UagOlI z5t9Ezf2r24oA<;{V%tyjHO#;UG@ndlZ&1yySi*F`tDur4Xln?6jFq;5^gQb)M#s7j z%w1|(fFqrKZ}5g$g1X3(_PX2q4!8W$OCYSg`8CS4j}LKmus?sf@bwF#;${v;?p6^S z8ygSGW)vDti!nu0RDt=-|3VQ#L+ijjw|+kGZ#g0{Yj1UbMOJl^r99#7cDES8lrC(1gsqLRfef-G0i!@zouVap_n!ip}=mLDNtGINw_U>#};S zom7vGjX}xB*IDoYL47pia`~k8+6yDD_7ba)%Tlf2J(G3KKAUrIP22Osg?r1{j(pzO zq;Ivfm_eGsEl(V=G=*d*$HHt1z(J56u5_o0Wf%;b9a@*)@1mg}x(fL?K+iZpt)n$u z>P-;{tBh<&@$lPT4k#`bM4?k=qzx0erKhZky~!5RMUEX zp(UWaqQaJs5qc!-oyP`%oH!iiVLql0x<9~_w!^Sv+6@hP`EO_>=kCmT;KU5Ld&FUD z->6SP|M$D{k)sN$Xjoo~SgHL>uz-=u) zyT&`{K4hkKBd(dB6#sL**zS1X^~&~k$J!DDA<1)Y=A`1)BA$4+!L?oWL2&8C;&C2q z_9l2#+Cl$mFiElzz`oI!sQn6wZV1<3RxmNc^>t%_y?Y|B0!4hV4Xmx@-ha%WXN-!U z`oqp{(^_k5!X5<})CDjLh}--~dd8&JY*Tx!hY`gTu{aOATi>e#IfN(wGkIkApUI;f zY&=G*t?1i8i7cGtb#-U8Z`0??=2RAHn03qt99PTnu`w3s5sp9pxNtp&m(ensC;SiE z-a0Jm_1zc7g@QpS1`P%w-CZIA(gIRLcY}1y04h>a%FwAGAl)q>HFS4NGc*jH=NWbV z_FCus)_(W9&puoie>lL*IN#@azW059if39gP|@&od0gamo@(Ml6zmEHxj;tDtD^0E zV@W(+gUMJ<_x+vE(3hHIWY)b%i$iBIERnO9BH!MFQw6xB*%`(28SdV3gd7tmo(`w% z1_aKO&7a{W=Nz1(xi;?Y8;7lqz~0)WBU(Z;kNaN5QLNn}8GxN#q3+RV2mb&(xj5an zjvKd?2CTeqC8v*`TsSxEW&XV4HHY?G^70|R#-DmWXaXdmOfr-Rk4#onSur56=r%?v zcPY)!t1am;j43k=EhNF0tG1~DYnp0C# z-*I!i$;tmlA!INDb{%v-m8k8H(=(E1T2Sz(=E^j^1%}vDFsNHfYj~4xyCbtt8na(7 z+te4bj->;SJ)Yy!vn-Nl1LHM0AJ)fr1MaxEX!_zE81Ig}+TURMoSp5tOaOQUZ}LL% zTcJUI%dLMA2yrD*dJ5~jTy?y2Cz7bm{-RuQV`jr-zjI3Qnpg|VW7bNYL2@sz#ToxL zX{LozZX9BE|CHtsxck})%{89%>2OeSH%S-^&Z|z|)Z*e&tF86o0(><26FR=Gh@l%j zv^6{)v%%A5U7ei(J>_)h#upIKbblrpmZbX}G*c-~PT^YkkYpW)@lD@zkH^E|4)>`C z9U}%EUOE1NrP&GGi3(R#RrNKE<3y3Zw~ z_+)q^Oe(PJf7cCa-9YpuZ$oi@eqNrXjVtE4=fBaml$5KtpMW9}lFIB?F|-^%3@C^+ zSRYS+89G8FL50I3UElajQc*)g3gANDZd|Ct@ZY?7BU|a@`+5SXOaH#`k)>q-((u(HB`Ngpwjrjd@P5B!oHHsX&OYW+phCDJW9yI;7L+a+mR z-fj+ln5(8RrEyLvpT2tg_3W6PT|ska=g^14Et@QnO&0Fw@0J})Mq;TfpVsf$ws74c zPeF{g*KKjjm}i7w))KPmy|}qSvFC)wbAM}uD&?`T4rgcAo&t0157J;J1EkzoEG#UE z7YCNUg&4p@^!oevAg&eAM$qygpqIKwA`PS{SH$;t!t*3%{U3mnw8$i3TkMZTR&Y5V z{{_q2Z2(pT>3rkCgpuZ?Lrt$H6I)U_RyT=1{Tp{_QP8 z1*O~!PFzJtp?t^c#nL1&+eN30^0{pq(|#^9iHXs0T)z26x}@ZsckfTR(}f6_0-;O6 z|MzO5r2BwB`+o}#iRJwF!J(=T@aCiJ8xj}CyCKw%AAe8~xoEqorli!EEnw1D;s6R( z3*>ke?Zxp@3b4@M?r>mHRPi`FyI-5==H}j$XRDi;N&hOpC`AFrC}fZfB(bN(*4PUq zXD^fhZZH>_Gk2gPxOa~1fRT6LirFp39&f!z8{x7D(K8PTU(*PJ-l(cyLl^5 zLaiayJ{T$a?8eG~hMZo0EFSs5OEdawxDF-*(Kqc;oL1uyFH~!Pd!+E$X-1z#fy?Wu z?Zju|Wq^p%9g@WIsdw4d-+6hyZRFamfdR9ElANaL>5ntlL;*2ndmX{J!VH|}Ab~qO zfjE@h;ee&~^<|0U#z-Pv*;GeUAmNe0Ab&$++mNT{%YRb;@CX@oi(RNUz9u~(@xULX z1E`R{zSuU(IxzUUdy@p4!QqS2%|o97!#xyvG_-ohYOaf%BdySMQ`q@5)~dMcrNemo z7xa8lLxWBX8~-7gTD4urC4X2S&1okX6BA=~uCM9Qq$>Ys1El$Pu&Q#+&YfENWOxGA zP}ddmb=d~^9~R9GPXcdK>IOL zWh=s0aWvs7M%k4p&^_v)(b(LC7Mr~B_PeyOp1ym!JVEyspmxfd%E1Z2xPWI8Buf?o zFS@iQw=>R++7&P5z~#Sgq|~| z$ybvrD4elkWJrdxn-`vU2B)$xJ}~cy_MO2R9UaAyBeH}{Fj`L4{1z(2-NW4KL<9>S zwh%Pf&u)o!B=PtGoEbFy>b2*jkzV=9z3>1-3A}}_(IOyP1d5+`>*Fq4ZL6CvUTRs~ zFUVAN}T*p#-Uf zg9563$|q%bwtRP~J);Ft9hh&c=U)6{QH%D`1||ZWFnBp zneeA+vYU+#3gkcuL7Amg7fmJNzPI1hIr%0tlcbP?r9gjDqpyGO+7pLa2z+GuIUup! zBD(pyH1qwyKnf5CwJujeh2kmElAnOvBDz53%@-EiR*5@px2-gH`Qu-8LtLq*vOEO0 zedm^zWPp~q3Vx99*53V6ZFu?<&jIjsZliMFTWP(3E;ccE=FyD`Q=gf1?K`cLiS{jj zyo`n0BEICu*LDgWJGiVI*VA} zBMfnTi*U0!%xefAoBCbqyV4u;GuVVEkWyV_-OSuSI2;cus^25Ts}Hg@WoYz+Xn*CD zu->|}jQ<^3j5Bvv6=b9SisD5N@x63^aR(ajUcth8p{P-Jlug#JqFVR&-(e^FdsOp- z^HL*T_P_hS`L701>HpqWziPg#494J?jpQ#nl)}pH@stE2S1h~!`WAjZ z;ZSo|@sIAx%|th_hlcaBL8=k4NWSPZLweG?KxhC=K@1H03*A0jR(k-#iQub?$)A?^ z<-(ZdFLm_qpbi@XW4PCyQ`lbvw8fVuh>KC7!dOs2aNE`UYBfmIw(EaKm)3*GPU&fzM-Y``jDM%H3d5m>mPhtEZs?d@Edd$6@6n?qCzGNiyj1Y&FwG*=PnD6 zTb~>b#lT@z-lzNzUQBLNK#quJQh_EHpvt#t<#$%%Hi;uUe`=UB{;ep<1ACY_fj1ls zA>8(lQjM18NpnbD#RLIiF;J0sxfbXQ0lrkAqCCdDxUcB|IPlF%&2Pds+as5!TbRk8 zlW>H6e+?v{41A8utXad>$y&;_wUN2Q@u-QuGiZ*+imRe~JUvqP*Hv$vj%tFlPFtOZ zJj#%~^jwyxtLK53>_d`%i!7o@)_Wkjs02h8jU@xw$a`4)YTnW(K=jkYm2`$ zqK&LY(bR5Ecf(~8fu(cY5o(cufTX@S1|`?v6Ja(tgGeY!>t*JR20$%xh^deBOH;5s znJ@4a2FwD>N@;)9Rq19A_2>6*5Oyp$LP(NwP6>E;xPa)SXDFSiT?abMdCF3TDl-DJ zA7k}>tA1agsSZm_RHQUY18auc>U1bS`)SiIQu#4cmcp#AT$NTvLd5ldP#yIfRRhj0 zNMn1tlUN;0!0H5gJj%SoBt;D$KnxlkqqC06LYDnx7)A2pbsW_c8(sMNT(%!R8)v?AO&?bRhx8qY z%4K1KCIHC@!_-TQYnME&iP>H6PhaHwOq@Rba~s%I8)OWq{)|u0$;5i{cU6v8DoTSd zzPs(x_vtbwxNTy~IS72)yr|&}c)2l~Dns_XR|GiWr7A-KKM|15yI+{tRB;Y>Nl*6V z;Wq(x(?K2W^0{ktGO(XLa@eHe?dk5h=M*MEt!Hc6oo4IBN^ko$trTJAl?SF4O+QI5 z?yKr6ysS$neevh(e^dP6anW3ulDQgsy?-C*c2XURy9)TJ$~JKmU(Xmd^7{U|FJk*^ ze`BJxv_){%g5Hl4wTBdyPOAvuEmAX=%sg8;H1LQK1(;28exl=&peEF`ST$#9G zRT|9jxVi#_b6CbACwHUc8lM^R1O!M0(MTw!Bq!gx%((kdTw|<$GZgnm)u(us9^3=B zTAfq7ML|}Mr4GLKu6T|V1{PX)o(UMv~6wuV14@#SBQEsdvS; zmst+mfZ2$)ba&J(im7&(%cE*{$HnTqwngjBlo~q&sNkBPAx5Y#f$paTlC51`i<9^w zT+>%x>*PtM_s7V#+ihsw!T{nL1gG5|&ifFfd4C{EbAFZ95IJ2cZovH~u+NOS6J zod|i+H=mVrGkB5E`oWI7VdUfW51uQGXk`!0#Uoc}iRsplH)~@h zai>okO!bssKE60DQI!r2OkK+1lSbwAE3JPI>z0w}vV9^c0v6;|oHc($T?l&-kD5GH z`YYhN2EUkNFDkqQgsoi2FSf0)RZf?LvfZQVA?86HPQ3kZ#V}%#^IZ;1Yzc?s0b=L% zsfL`giDx=G6t;PXANo+nuXmg+T93%NV5|**Yz30;Ggs)9l>3j|*Rj}(P(f_JS6yjy z@|B;)b3e{p@=J>5TB&8+wwt1my(t2lIj)!>sRp%WLeB3P4&AIuLVxFI*78hSvstoC zgOKlF-L>#&wln96$#FLO##aejVrfJCbhp1-u7>XsL`}Urw zR5%AT66r4L2bcfEU|TttS|SdzXaMmu8$_XJVkPj*k|>IH>)60{J=qziWS?f07!R$z zfPbJ6N~myxsD;ob7%upE70#@3euI(4urV}J<(jgX(#UT-t54LLa-Vz5AaZ&;7~#u@ zs?<@{(oFs`xp^#fDL4h(pAF5I7N1IbQO-68KVaM5x+@ej*(ZTR`BrsRR$ZM)nI@#E zt83Pj1EZy-Z9&%ebN{XHqf%neTzRVwsG=PYA@*9~WTvSV~YVkySiB#a^6mc~8 z;c+7#Tc=BR+q&l2$R@DIOjg}?T`1vk+dK=ka~#NjbsmpZOZTe`GYe!~u@0al^n>J> z)YV_4%;(Y0%crFkte_N-!|6O#`=|Q*q*0M^x@PgxS!&%BI7F=98Iuzcbrhte{cI`k z-_ygnAlcQhNO#jF>}<`lkNNqD6D7-(AkKux=lsEkKe+&q=s^(iJz0B(Lp0g6Hlq!fmZF>~T#Dz$Z6=;|}p`7Uh3)s01%VXA~8gc0QTYn>KqelO;E&*B#z^n=d@NW#-FmjK-jEi6ER& z_i@tSTu1o`CFR(@)JPY-cKY^EXdHuhs?n^(3<#_ZN6 zJY<{}^liB0vgDWvJrQcCh9Lk46&1p0K2nH*?~}?mR#UCg<*KRb0{guTw|00SeGEc*L-kXWU~3}C1!^~ccH;S zrlhi8O-6E}xHs#RP9o6ZlVbB?09A*4X#P2FGNjpWvs%i?h!S2bd2wXRZ8c>vQM$jQ zL4W3mg-qudDcZabF=cXCoT%&Xt~St0T1?k<4&!cSRsZAWojWZ;E-bSpYLOfZi!q4w z&`ljqd_qFPM7J7G3|cB)f6zJ4aT6u>K+j5|j?Pc4VW@SN@-oZjdLNW4YLBqOVM>Up zkU8W(GB=(bAQ|!zeiFHTASfhoQ^W=bwb%vx zb#$#cC*dWQ8|9CMY%vZdxI%m66G%?EVTC(IG}t#lMNl#(>HtBVj*X78du=dU?79zS zbCGXZ<-p>qx|sNChq9^1WRz_wxrXIQD+i8*9Jp^w20tn?ostIk`wF+Ccwu7kdT=Z%2K1S#>Z@`I-L0S^55uVR&I9E-~I}$aRrPRW!iT5Nb7eX^_ z#&12^`-pHPpE&{;!Xn9sE8~AhCIUa*_l$QT-ur4?YO66+Zs5eQXG-h`u?ijJ7uV zDXr~WdajU3t%Hrp=dywwnS-Q3=EN}!t`@C^yP+!$3ga%9(6gYO$l0V;b2P=UxdZ9A zW#%H@ya_S;b$N9?OYQ|D>dJ9BW9_r#9ga#>18CR%{Z7dCs z(s7#<%=k!9R95i2#b@eH7L5iH9Gaw?RU{#_>9Mq22I~vT7BdquMn)!u$T;i00Ixyd z3MZQO#wVWDA_{{5!GLEn#TIze$a>uWrk!Xt+iv;jdq=SAN} zwV;sHh$a7BHF=!}#+B?Kibbw3&!?c^5gNFus2wPYV(^HbsjS0%+#g}b%GL^t5^ol7 zwNuS3ExlLL=J-CllCH?YVrA8GQ?Gk82nU=@{0JEt89UqIuIR;eq-cqb0$}g6F&*T+ z!QxSix`$+}B?+e>lWbMPoY0=KcH1lE7Q$tTe+B z*%!kz1?io)vp~Wkbe1CHbuEX()|q(>j@}+bFQ~!5u*lyZ;AC2P(3k!p4E?C)f@7iV^*r!Ha2`Ew_y7XZ+LqmrJg-<}( zv7nr(V01af&`=gj|6zRt$S=Lmk>xq*gMDw>J1L1$**3;p_6F`XEcByt(byEQJJ>~h zpG~`f_2sJ%Qe&eWrU5}~-qNY;o_w2Qd_-z$YF+VsmIMqC-C&(*vxLtdZuUDkGkNT8 zr;o%`D{@&h=GSWb$!X5c8~FtW2HX8e@xX3y@~WwO;;*9{7(A*cr{_O|Tj5*(sJQqb zpQol%Nhx{h2jvnGdk3Xj*|A_aqU5ghxQD0br3Vk{XbzM`bXhhA zd_8>j$j6C^V;ncg-b?Q(dmO<8?Hn8)(UzT~T>2Va1qB6N7mw6}&1-~pFz&=Nu%~GV zq&ABq-IS%xYnUeS!V7m#@hJKI>EJZU!>exdx(Z5ZS*-Z_ZH)!b_Ey`+8K#zuVrSkE zJ1`~W^{swO?cOZu>suE$7r0`)RA&2(MR2T&blRPcp4s?<5}TL}Mr4!AoWp+gx9Tn* zkDL74X=F65j;xJ5UfBffkvEpOvWAYtX5yqPmGy%13!evq^$J`GoX;ED z{I`fl<9g&ppGiEsd2c9g9{BZNx$jR$dE%CDQWikhoX;Hwuv$z`+OxhGb>aul2 zn04qhOfff|mHpUoD4X~)_EAb&(Iu|5sqD0=#FWV!Bu(UcOG^NqG7P@V@(^{G1ic*?>Xi>;m!)qHfB_0v_p@ z`}N)1`iJnOTGO@sX4sHq-dSrIIecP|aO5LChOOY7hXJ-0DofiY>SNtABxAf#dE$s)Vkb znHg)pO|4H~A28`Csyp<0reciFTWM}D60)#Bj;7q0o12qT5OM0=(RlQ)H67KD$1ILq zN=;oFo*IhG-_kKMF)Bcn2?bBlkO~{!=Lw>ed|I!AHoM#2=R6-+wk&^Kj?r16SygXwq!TS zV~JgZZ4a0JDi>Rj7zoVyn|BCxx#T^JH*&8Op@+W{leqn^ROAAPfjC^C=kapB2L8XK zzNEl`kB!~=t($#Ob_Fa{s4yDYZ_A^ArH6`S65L%Tm~+j zx`Az?J7$9)F4u{*clF6Ws<%yLu{FnJEC-GRLur}wq6t`(neiO0Yd=d{pe=XOLmRF8 z%n+!2DnJJ^mG8_CPxGv;tH?&r%eYc1tgQ{4x~-8(65Ob;mQYL7asTl44>8~Xw>?*l z9G<>Gs0Kwlz_pcsPs2@@lHtI?fDjBvYG+SM`W{emJKyoFsd))J+rk}#_DE~Z_s?M^ zyTQxiT2?rKQVX<4`Ly~hnq_BCot)PNUAVKie6I~?DX(7LN-xZO-w@z;Uf}BLN5<@&H(hQaeg8n zld}@}Zl>RyCha`E8LXOQw$TKtx?)R3yt>f{V!g?G`%bkdMu+4m8Fys%_$sm-m6$%QKjK-h-iuRaYQDwVo zXlmJ>=A@gyUbRyxw$#|N2`upQ=-8qTVq$0lKgTt5>3(W_o`wkGq+-KjNju zU1nzHk#T`fs%0DHJtfRZIl;L2Q(lBcCS4f!ExzAm4v&ay6x?qyNK>etq{6+=z!3Pc z;C9e>*(7HGZK7+o=sQthG0G!b(6>y+DOJw@W&*0sPozA(sp94dATQ z9|6)4oFi*@`Ip{HcZm7i1*pGl3~wZ`js_AQu~0=FMRSsYdYhjcjH|{O9Aa*;R*uEi zr^UoVl|JmA6GW$HXF&fv+w$>I_GG>fiqMh9Zg{rx8yV0L3m%P#0k6z$gaBpirm7Jr zeu3aGh8FYH>@)VfZ`;fmVtIj!Lz*`1fvm6^p}h_n8gqT2Ds~zh&hv9m5bp76zD04! z`ZTTAPW7qz5k{p8vhi@+5QP7v7Z$#6@WU^1Zny{UUMY3FP*&1?F|`q)6lTddL?C}B)0Q-kVw&S<#rE_bmA zII~)r&9QvL(9N5C0*YvawXUr#1#HXnocGly(Qr{WH$HrkV-|QZDs@S&loV3@3U6a$ z<8%qR)ai0-sEC1K%F|l}kL(8+OPWvD2my)ABi6?skVW^R{cbSyg8Eg!R3Y8)35H}S zO>dT(0_uZm!Ro6_+xf9Be(U@P9gXn0v1ktnjv#jKhE_2I5fVVnn*XS~`jCHcFw*ND1D!6&B5`4g1t;?y z?AuOlxmigNDG!zcivk=quDanRy_!`#$&ku9?F&gxfY@u(o2N@(!9Ly&z2b0$>b?!D zSz#EfsJKN)=w0Q9omab8I2B@~<%|%yx`ewNDrR6(h-)kv6 zqI0IbxftMkPCWfBK|vSvoeKo6q->DrTmI)yX#?^LytE zf4rrWC;ZGlq4w1q?*Lyvph0q3e}@nitDge!-zR{~Q03AY&Pu=|6T37wJwa?nQZ21= zzuWH2338Y=2=Ihs&m>Uc;hUABm;iwV2!*it#jqG5b!sYOv80U-k1Z`Z=I!R z*EZ#Do}&dwj%p08_P|`IkTg(rZF(MN95G{n2An^k%Lo$Uu=F0px#V!A1!S4NaHM)9 ziPPL)1n?F6Fu1aMl_!UIQz{~Qu2~`fD2@`$GjEcSjr=If3jr<$8#=|W#RB{ePuutU zRC7OW-~JZxet$7gK{*;`$htnk^(8$b-(7|O$`xPve*Uu*ZDRh3P`t#DmoJy4_!Juv zd&J@4(ZV?bj^)^5zQ=uC+F~kBxaob;Bl-KBqoXQOcZcr{3=Ju1D4MVNWAS>O*Xy1H zNe!P?zFdinOM3ybriQF*qc;m%(wL^XVsjm~KA8c95wCmp`86o(w>N!cl)AQ_=SPI_ z?rIL=QNUCDvAKEUp0fo#lkUkrg;9JbD;^F87@*vE?dJzgxu8DZI1owQQyKex2wJ2^ zYDGzpnJ2ss@dO0aTSOzbg1yO&O>A}IpUclI7tGPD^KmecV({<`OL((Nua0Zg=xGR@ zZ>$r?=H>mq^*1MZn*8`~CZELLkUI%2-;0cEX>Xrfze}m)Ueht}0*=nei988h%8q=% zn*ymnnU#RE;t2R7Z#vcl4bk^_aKB4lFED!p2Oqbv>jk;h`kJeKtC9|E+ZcUvLK&vM z*VRo4e$xQ5%!R3wjV17Hx;nJk>7v;&)?VhZv>~Cp#%zq(9k+9_ZEm^M;Pz@enP&Bq zYL=bD;B2OoL~7+BVfP{1BVyM3vBnA_l1<`6REGflDTWYkRGA9vkP9yNGKE7obQ%>z z&L+?@9AHqs))s^;bC@?H08+MFmNhzlAR4jAG$xnOkr#QnatA@qqSg-d`aKp2*KXV} z1a0ZasD@xE1LXa6_kH`hlmocNwg~|whpEWKFZSK;GO{D5ztUb1Nd^!WIIeE`%)(qt zkj4WVJ0U0^hn+nw!T$Wt5UHfb(M*yVCwE88@Lu8U*n90-+D~=^tadQQ^$D%zZ_vl{j25knLQv9G)_hAAyB7?7_`!F#?wQp-`DoBvwZ+B=h+ zq)Ese-dp1Vg>wQy1URSZ=@~_GrQ6e$GQMVTdHndCYgm%uNAcHX!cuJY=kB+f-WEv8 zJ`IY}^+;)b^8rj53opLkf){@exdaw*7(C84%tp#1uAPuEt9iOw$b08lRc%$Ha9880 zm;l>+W!>pXtFc)^0hrGW-Ki{6<#bt-gN@5NZtHSW&CIdy?hN1l0FE>Dy`%Kq)&4kb=sD|2ungLmO+Ixn%M>3A zhe+?9qQabBXmBtxT2Wj)qLqXRR8=z7MYEVgIpfdO)fF}%yZFFbjFgFS<;Rcj8`GXx zII9i7xgaz>QfT;V5pu?lLT|j35=ha7Fgg<57$&Qn7CtsdlFZ4cCFpOT;qTP%n1X7I z0^=I=U}sAti520WMSEn#f8h?xXw_r^bm`F|lTUW}w#6T|N_Hkeby6en=EtWeh~VG` zpk84aw&KLUt@b8xC@}}vw5h5Bo3`~69FvJ&Tzq`Z>o;%{Br`JjBZci=&(2~U(5TS# zn>aU!rlciL^xPU_>$#@w#wB8v+T3l6Lm=bn)t!Oh^ zRBO!)L!OEjwVj^T@h~S2Y*#ust^H%Rj}20^82-d=LYL0ZVW-F_litX{koS$?eNDRz z=h><@1IskRL=M?J4N#^_w@KA#Rfl|g>wt(Bf)Wt%IOAkwn4gwHMZhH4rrMkxsJW@g zIl>R5wK8FPhZC^fnIDZdNn?HD}@?HY<;MeQK(!v{zFyLS;~{rW2eZIg|1% z;!*-R%Gx<)W^HtYIly<1ZS7(XqltQN^-u$%OML`U3N7tPj2Pl!I=e&I*4En9sy|JM z4aR9yw6w!Utm4R{7w)wyBfXT`6(P2z=SH&aZ8`z9Nj%^U(b)Qy+>t{IY_f({jVDQd z71WTJ|L0H(^nVs=q0J%&Q4|bRz$fW89ny>wuQ7nN7XBegtuCf0 zf=ni}wia}ys-PNV^V%T8BNJ>qKf?ycSwJ9ZXT4jI>v|6UIrqA-rxi{J39e;L?xx<} z{tgxI<9yM91yVt?`>m~X!TiEt=>3THfN8EY-4q)@!}?Pb8iJ_PEJSyXZS8bORv-h< zB(IOAZAAcTse5jAw!U@XW#4&h>58;gHq0qAbI-`sSoy^Zy_)uCpyc3E)0G)J6LRT% zRIHqiRf`J_o9x!Qw~IU0>(1_M(&Na5{GuY`^9hZC<-KeTOaAY@eS0Ov6kZ4WR^}dY zeOv3qsY_zWvz3lfSu(B=^v(ru5^cA3EK38#i=?L|k$e9s%wi#~s|RW5OHUMCowW*! zjC39|8Xs$Sp~j=+1Icsbo;5m%Ki$?g%SWmY?gJOfr9_Wd3=vyHt+iz$prRoKC+y5( z=9TY5T|Gx*Jt?7rEx?i5?NC=H$Q&E((a5wKbCa^YQf_(>J5ZJ9fp8?4Nv}9&Ct*eiB1ArUhGslIyynGfI`HJJw;@XKI4FWW5hs$upYUtg&QL*194@~Vz zfT_;}n*%?&;27~HDHj(PtiWB!lE>3KYba*<{9|J%X*+NU);pbScgolq1Re{sop&iO z`Ig-aKNOh$bqt)h=M5$I@)DK3kx;f7G-sY3vPzFiE>3_*=csbn?mNOfJX{wB%O2Bl zk!RZ=k9DMk&O_FZq*uo8{JgI8V8j3lhmfydJ>U84J)Qd`nm1ge-)~ZSwwonoCF6#S z8196V(3x*>NB%A=oYXn5Dl02Hv>ruh_HWO>M17F}g8*r!cma4&hb*^8QI7C-p8KGZ zNXs3vWd$dvlGZ;;!N-pAV_~!oY$!0a;GMyukuR?!!v2t$Xj4c|bf*Oo94Fh?r(pU* zN$KeejvFKIBZt!!E@R_S7;K(DGmOm(b@BEG7i;b6&W-D`ZE7w@+F5ly7fy?obev8C zIH6_=v!7w-Bf8Uy3vV?9LJyALzxqlX+|gZT0E{80Eoe(p^4e7AMf|Js7`!a zZ(s=7&?VmmL-1gJDF%9ax*|mmgGSa6@(cKvIXapXmgdwpHBHSxh%tYJ>f``~i)-(o zq}2XG83J~s$Dc@x`}(dDqjh>|DfjNRO({>$2LOte-5&(mx3aa?^xBnY?eV*VAA#Mf>`Pro!HF0{t62pF=BJJ7mIeDebc3|) zZ+i>aXuMf(&FF(+z=s%>+Kqb5z|Feu?$C^~4$d?m-^-ZjM`=1R@rB=ekH+_Kn92hf zyoG9gEvD$1#J*^%5^=4g%Q{&Q;5eFgX&vpd)U$KBd!#t|K7A_NJz6sG8wHV%`wI&4 zFqeXsRscBa1YuIH3lQa=pm4FC?jA#|IWX6$OpS`2m%^$i~CrY00Q5jbrH;t^K z$2wmChSqcI3#!EjNOQ*9sBW+33L$FMG!zlp8XQ;gb|mGPhVd!BS07Bt85lggI5P-lV-}zd zEs7bX5y3o`oZZ}PHr37MM%*P#GTbLGTJFu^;9h}X?QgcvU7XV{btTM+DAYbt0rOgh zUU$KXNg~cy_f=FDM#jh3@AHQV-|NbDK*p2-pbnsUZXD0Tw79z)h-2v3@!WasG~&x#4o_``8D!W7a{5QH<3@I> zmYV2`{6~g!n5~`t1!w8Ub(${tq*ypRpEC;y1fa{5>+=w+>$lRz-VT?8X1klKP(=I$f10#{nU^-pn!RWQEGB=>MxB+2} z13@{>lhx!HAmoN^&!i!av^`0?{_yb7cSZu#-$6kMdWk>@!#r&m%4l-DJKhPuH1f^( z2EI^bV>vk?N6;125&;2$EFe3Q^4OR(VKa~lRgj99P`Px)$N`)MxVo>66u_f&p>g24 z(bz3U3U6OMJCS7D_XRgG$xxE|(+U@~B^p3_z~Ej@2ZqEgWMNOLG85Y02Ts033Q58< z09k=Mt`P+UNXBqEkSH)}NO*pp$>@qppZX3Q@;W`o^}rQ`728L+*#{y?djrcyh`v=< zKc=J8SE$!1wK?%wv1sR?Z;T)nsf+Ve)PWTp-Laed!>)JCfxbGLMJ*xue(iaUzHOdC zJ(X_#iK~HW`eL`?5^tD#i#12(&TgOgojXJZD)j!8n{u`1I_2eK$|@>is)#Gx*1U3% zSbdBhz!{=q|3+I-kOIzzRDgke`C^zoeHh&8aRAYYin9DG#zW}rT>9-BjQHe&_f>1* z^o7?AyH~GR-3TVNUQV-$`Q?=n0vL--PTHU$ZIjoluIJWdPtbT;A2@~2r@a!Z=9eHc zk$IA3FA$-mVozR+M5w5c$qRN2ua*%Bw5=9LoFw%f)0=}Vz1X}8nUelRb$e|{pL`sL z<#A_lT5)EP$vVI1v88)vnwFG@s2h4jW|Lb(f(_My)C9RqoxN^+)a-Q$A~t7ffi>jRzW|AH_Ym?aORxqh z^yR#2tL_A1>w_PtC;ggRnY7lfro(R~r(Sm21*h;m)Zj|qXpKYJ(FTx;wA20zMp+$- z^=3`GA^&rj8Vx9Hmwp&oR3h;h^w$^ug^4s?F#iHI8mW(tj+As1yGA?6P})HE@*mIS zf1%Az{=e&9Oj{j|{*Hy*^y1i|`8^8y^CykEQ|{J$fg2tzf=7idajbtn{`*blJoz`c ziwaIXNb@Z;pCq(8u@Pd1(4r=RpeO1-q&h#JWT<&aa7KF4r5gs&NYjZSq~mTd#n}C1 zwg`w%VBn4YeY~%OIRea%IqjyFh7H~a)4)fA1H+$$_1z8Q1sb+LkxePgmbNwnqqWO( z`_?>ivjMaemN)f301r-FxGjeQ*7sJ$hREP7paO6G<~3njqp5iGZtuSgoTv-QdoHlCSgszp4(YE{71@ymQ`oDos5dR(cgpN5WpBW6$${qF{`LQm) z+BG8pl3-4J^Sf1^3O}CNzqcE&))oLo$P);}-Q&YeuiKG2l3?{17)X4`cbTTfRs~&D zIB1H_3-p-1&fVU2t9ghE@bCbaqE`o7KlaL|%6R27+K-@fvl26FYaMEqLvfoH+b4kl z_v8e2_e0EpR8V!VlNJf^5uGDlG(Hkc>YW}%%Tj$D!p6+o6AFSd?AW;?z!QTd7|CXr zg8VUBML@(_OG2rUhh{8wGc~~X06Cw_ChG;8 zA;LO5Jd)F23Gkz$`V)PAwL=%05ZFx`>OD@njPy&(WF(npA26TjDjOya(B~Q-ZNv*< z0$+cdDvx_JGu6!eEp~!@5p%5>7>?KRe&~h@cMO4Oo1{=7<9pZKJ#a-%%lic@q&`0& zkKr@q->g2kl-^|o@H;JGeQiL*@C6%*<=ZX^AT<-NQ<<3q*n>AN2J>~O8n#W1-F46{ z&B8A{jqlOD+bi1TClTSkC!i@%bF`0*(xyRw*q?{-7qt{`*;b#had~;zARYOE!;{H3 zA)%I5hT_NabTSu-c`n$1f8KT=V)clp)=r1X!%NZKGh#7|vujM7#|#7QgLYDvzI@@{ z@&&}7TtRJ6eeWJuZ~p4}@#Ra^tswzQB@Gqa*SWIIyXIwFZk}-|oYVZBC4{NrrI@eL zUT8EV6l3P{2h0i40xtLXMk~G@u8borKZW$IHiYenqK?41&Xln^XwquO=QZwrj~fip zgSNJG7OO~+gDD(9hY)8ia^4b_o@l$fK=S0@U>@Ihb^?ZY9`lC*aCQzkdP&=j56nP- zL^KBYqZ)Q>&(V&YcH%F$F(zm=29p8MjDa`V>CuF zfEx>m05k$YXN;V#T1cY<8j}L2aTXfnB4p*FKSAfL(M~|*Pr<8T;%=1kESv|)6)a$Ugz+bYSHA~J;8Zzp&HzmM zA&71&Q-eK69hYWt?{_eA<#|qr`+EZ#(o^OtRvj<^=scTDb>BP2MZo-?5&q7(Z;1 z4 z7rOpFGWl&{^~B-wnUU(Zn0Km{?b)NBX&wl<^E<2-=aMP#H@D$m7&Q!=yB_hf8>;$C zX?5##$;M9vyc4SUwuewu^*p2{3C49;bgItgwKQ#Y;`|TE#}V^wAkGH_Qfy%I<1Yo# zYsLUqu(dTO2~W;EUMcdl`fH6o$c^Z|#{G?n<$K>QyFn{`X2Nr?QU;y$+xf~=W zg%jo#T*{r1J?I~R;&i*Yxeq|$A?Lzi93^HjJJasYA#M&pt6yv2UqDFMh3=)lqZv0- zhyAD*ycbb9DPIyGO4C_#NW0dbQWpJJH~vG)!b#$q34{Vh$f9??&IT<`-bV-U_8xu# z4%o7uVNf3|qI79XXEK`Kn7zt{cB{?Oc4z8@a&Gyn{>&*Kg6P+Ts6{^?KZzz+b4>X+vrOiLU8i;cK;g$2`pZDLc zzw1Xn>HiZW3Xfj{8K=;rE3>eTTSJs0ykPxQd< zgtM#|4Ev>qFJ}E*IJJR*j%Q_UedOVC#vkYeCWUsNv*Xv|$@b6eUcY}2c>nf*zftY> z)u6LvDTMs2H)8eBWK{uCoV^xtc;aRVzIJHjWO_NbF`_EK>~3WxvRm`ljYJXf#ffZL z6hNY0FeVv>A0B18r1}MxV$NK{!4wsHVW`wt%Ec)UDTt)8(S#l`MgST(U?Z%Jy4=hu zisWx~VaruO^|J^_#c^~KQU32*k@JmzqZKL57Y3pg5YtLMe95O42AgTQj#fl_e}<#tL9Bk82QDSY5xz2K@8^eA7GG)oYU5BP6ev2HV(AH z)la?g0ylVDvl9xxyJ>D(L*{gy(i%8h&qOD8ydbEFjGf4c~q7~(bkE| zDeO7qY_Oo~VAJ)#;0`xf85u?X3IC8?fp%-7uC5Pc)Y&%BGKg5(=YOhzF6%fMdW&^1L#v>~*YV zw`rHj>{mOZ{SHkjdHDyx;j7=2oi8lhiek(F^ne{eATaH`K3k-++5!JvwK27Tt6l=} z=&bQ)@>n4*X6~XfH#bk0E6u5fsm*SEd^9pTIp4 zaQnxSbx^eu=IVXefgBNIWQ>?!*Jm#lpb)^0e6fh7W`1o{7USO`4?KbVLXCqQ z+*5IHygf9k>3xEV7BC! z7+~(c-)Twg# z@9Bb-Gb?I;4%G3flNs_r7lrvccnm?cXplR2299#+xokzyquAyiUS<83s&BIr9su|a z#yk5`7GrdYu+t%}E2P$s}SngR1Z$t2EdJOfL!Tp?NtzOG@*;ahhHL-X@> z%*Z&G_uRRy#yU!qJh|{~Z?RPGRJtiWqE`DC?C_L05DT5@lDmAZfB{s|gMt~iELlLT z%TgEBBM!LSv{jbEX_ijO06sf-F=cIS>%t$V#~BX*XrY7WohIz>CMTcOTB5fUl$h_W36mrIoMGh`>Q=JtXO{O{I|oyHKfU{# zjAOM1U2YR}E@T0a2r^yky^4kZNmdO}*GPrZX6g#tKb_mxK0O@14-?=a1Z@YRkrV;X zKX{Ub)0X;Q)o;ipzPsG>6I3{(y|)TDpy4aGiR+d}h~T2p{#&fTPNAhEQ`cqYP1C`T zrKRQpO%sy-r($m}p&z}y_y(J@sm@A%Iff(sHUXJY7)`d!pE`|IKGTG!Zv*_Vav&#w z*<^BN=KHq}d*pnxD|YsU4NXl5-mTsm@0m)GX}$Z;^75JxR{1onja$B2Vl%fOW6%-O zX%jlSUWctv2OQ$X&@4?43iOr=3XV_WbOp)AsfS`ZuhS4 z3GU?4()DxcbZEEk>1O~OXiT0dC$FTatSm*hwuXvoEhV#!^{%O<(pch&#BO~`b=7uG z6xf&h7j_>2!EI)7rH}p>Jr{JXt9t!)?Y04KvrY4h^RL=FdDzWfa7HW`?{16+qYVl{ z3l4}Q2@-)l0v2mAg60pq=YMhcmSIu1>)tSmf{1{M0+I?yh;+9|iKKLQ zcXx`?B}kV@w{$ZgokMp?_s}&kJQsT3YpuQ4+WUBq_xbjGlw%l~`CoCK=dXnHh3@F+ zG>A#@3CPGG^@rix9zGy?)+W3b#|*~=c_uRX+U7G#r zA>|pRrH8sCbiQ~9B>W^Bs!->PrQ@|(Wi7kpxoP`t2M zBe#)}p)yh2_KuFI6wkaa_Z}U))sDPpw*f1jjBQ15WStO}c&YlhCcp*{Y8zZe|K~W^otXe?- zcQr=g%RiG_AvIinwiw!Zgm#L%iu|mbs0xdf$b5k2>qeNR>*;Q&lu|!Pyi-Oj=C|h- z_s&*mvkhm>hSk;STtsK+b;P-r{pt%{fzs)?ySukorvt{WNV^n+v}FuyEUZKnhuPy| zXSEB-e6IAfKe2}HOjz)DW-Ltmxmre?JlRBernbGp%;2 z6qD0trCoY2OY1A{yg8rnO!XV}@{^?Z^s7Az*;Jjy5UYvl{5XcL*gd|KiOJma!wJqX zava;~kRqOjqvwEssT_TOvBPb+7=lYzbRw@X8WC;dBS|0?6=R5pR8HPMrD98Tyge6x zR$_Aohl9Y}zQJ@cfD%ZihrP+Pp*0yhN+gh+l{e~}a%itG{@OkY{C`2}NzcS}hYtme zItJ0;mo>{355myPmic=mhiGdcEJ}Rh{l$OoKH%Q)45)^0-9i9mhYiO*gI4kUknwZ6 z|A0$KmR(z^gI=*uqo9FGM~pjQlfV$KY47Cw_H~)ln$8D`FKM2Ca{&~tkvry@&5<8G zr{X5vRr{7@qPlzE(!?}zC9-bvKytdEF`6G96K!CaAFo)c5@S|mGP(LO;eHUsJ*v{W zA5_RKCvZJ`Z8|C^ftSfmNP<-Iw?k{X3H%bUO9MN?!b z#)C$qZYKNN&>z1L_8XhfnQO(@++?2$Sxg99<)nKT6BXu54##=Bw_S~3@P7al0bV$2 zQa_dXtpCiEUvN+%c}E3y#XNKTId}TcY5%n*6WYz(CBW=H$e#I;6Txf}-~GBy`@g&s zy~@97I+*_LM?d?!$p0HYAw(1*_E$syH*ONZ_5Amz`TO5DU7JG_9feL3A<^WIRhmjG zm0f<>gfuifyn)L(Q_s8FKkb4z zH=+@aBPS=fp6+Dq)<>FAcQ99n1bzAxCE>B~!GMj|a<>-@2Hqr&6*A)82PXTJ=s1mi zpMi5z&JQvWwDW-sWw_Xi1j&$p|Mh2Kk)Cf{16c;lei#Ho@2nX_^cX=}F34gjd7p~2 z=*p6!P}H5Na_xx$ zfjf6mWaZ_B%(oxiq`mm0k@hFJDvC?id@GvW#rGiaa8r0sZ^UD z>jU|751X3>@Ipagwe6=r_Fv7UQnVE-n!gqod(okM0;;N9F!vwo@r4NqCp!+}O1m|1 zsbCfc4=gtu#9M>XSEk)}?^%rp34B0C!^HfalM_HD8dhp}mBm%Kww1|0E?lSaLGD^^ zy74c_!izFd`lma@23>S1?AF7loZg-u@K>aHO!&bYB%FkyB7z`xfoVEx)9xDBUc=>b9q4C6z7sJ_-FU!TK^e90kjm|yT)Z^QQ z-7&;L{wZB_$#}jonJGi+li!_#gtzx_19Zh1I$#W&qLh_MmODyD`&d>gpNCAXOpcOHS&99B`x5$@j^xTRQ79x zRnyWsb=AOw^s6#!3)zt4aNOod_1J$(?8@tlD*PCKDo$zMIWh9_R-7RlS{l^Gg-P1v4nlg7zgJkvt5e*R;2~c)pl^uJ5b6j`4d52Mdgpyo9F?ow`VA`ha);N ztJiSiM>9yqWw`PY?NfrStgapmU9UdE!IwDLkZ+^;#EUlpVF#Im^^MkyIyz}y)8W@@ zwN7M|?6Fv}9wHknU0wB;?pe~w67M4TjfR+>7C&6Pu-+efiP;uMad>O0+|;jMSoEk7 zdA0n)RZG=uV&NT7V^5TyqZ-60jHF<>&QAG)Fyfokk*^vEbymCwAvJ4smmVISy?j=P zMAJ~j-c7}s3_{}M|3LFd+vMN1pb$9o?zL>8lH<=8fmZOM>|8kR% zVzsNMltb$zGx8=fGK%(MqpMYam4`F2pQvTB?m9x)U2^5G2jsAmr6_qNZ2|v_&5dX% zNcpt!WH4;9j5x~!eu8%&J#dboj{q!&71T0(AX(Pm{~ok*3rxv2=Iq{N-rJfyMC?pe z_ycNT#AWbZA)#_5L#4q+3-lN|m((2~syb~O&%3Nf88Bt-&d7J&o#fQl*Wdef0R5_h z^fe|%mjUl}jC8g23si65yJnYg2DgVz1%my%ur+;8Q0K+|K3ah$oEKDZt2g?Oy{jw| zh9@|WaBx&NMji5X1W9C}840M4NRiUXx0*US>J(v|AKY5};KP~u{8}C{O`Y67jTZ{Z zIH|)GXrefs`dN%!+axu3H%2J~L>h~pJdKXDCiOoylk4g!tM9H=A|Y`-xu4-v6}A}3 zB=vHo#PZmLi7CkJsT1$S4;%4l18O&W*n2>O5)D^S7t_4inrCp<4AJn!$qF+pBWPm( zaYg2dyEQ4F5AeTMb5F_4Gy+`36%*oKB{isNF75b~Bk&ejPKzJrB(#g8hiJmX;RW*3 zmY|Tq3l3RD!}AWtrPt_Zrp(Q%oT1rmw0pwI$!R`|C=;%&C@|5&*o0_(X2JZ~HyS!H z(7vvoL?tuhl2$q6{l@Di1t!=tAu>V0Qj-{soJZJnpirKYVq4%cv$SvQMs zpY2mxHrCK&OK1KtgKFNKyI@%9;?-q)K#!wbpOuBk221MVbVC3(*RZ#Ll2x4%*V?Mz zsMZix9%62g^9QF~H3{W)$?m6A(odoEN8NehMi>MdbYR~+ixtY$YPCw3wtQqqYs_9@+_(#E;iv1*UA zhc_8~^%nk2JvW!D+X>NPQ#0ABh4(=F3y>fc6|Yc2m@oxyR*RakO0{`D-odR|G%PHm zk$`3nP8AOe@dnx7M|ry4D5I`2IYvDX$U$rxc;Oom7+84H@12lCi~Fr7^jEp*Xr#h? zQCjs7xr~MKaHDD=4!aT&;FOMEdfxqU7(44;yNEvLzLoq6`^C4$8S&Wr;NnUXPDsp0 z2S>QDu!5GBT+P@B^W`C&ImfChGE#Q6-|h2iU*h0l4DsdZ=h%U|y5VdktY8k-ncVE8UVFJ%x6B_PrPZN5PfJPAUnp(VG@fsXe_5mP_JO|c zV;ab1NI#L4_V^tClj7>ig0i(fagz$G@fge5T58f)U|ri-|43p6lbuRuk>CbcY6YKi zX$Y&?7&h@-7^)GUcW{|qG-_~db@h+6(^RD4Lmi-khX&I(s2c2Tc2N@R!B2=TFQ+w; zD8eBAY=vt3BV~uZHk47aajb9~O|8BA;I6*=+;yHW#r?v?F60c}nkumxzqYC}bNqeK zIF3Vy5Y*CjE(`f}iD8`5{iJLs_Y$iR$Ia>=+=yL`DnXz9?b`z?LwKcp`|LbE35jTb zDmw=8OA7qB(@OzcJDTJ~7LytFMpim5TH()Gw`$wdEb;D(pXr#jjn+KdphSBx^lRZ; zTKNde!y>j_*U<`bNe6`v|RHDokNlmkB3U-i_T#a%EFJ=^3l-9e+LD zfKcvRP2QeWAbF{mGS#Cnppur7l2X%awEO{Zq$Pjxi(IQ%Rq&(+J?P!AccX3YkEw|| z_JkL{s9)mZT48RO3oE&6Dcquq3kz>%7>DvdYi9SuODcyqXD{9(`3m3sZ zMc=(GWmdE$*qXSAh@Z9}dFnjN*IE~J$y^TQ?-CD>yi`uF6b~zJmQbX0 zcBDI3bORhK&1sz3Waz5?a+CD%(8TldTq%+woAL z#HQbMMLi^!FcIVQK!FeDmXQ<{Ng)}ttQfO=b1IJe#2F>)o!|cj-p;zJ|CZROEchL# z-m9TOaC;*WBu4NgxH0<48a_A-RCu%SI0(E zw(7pHyxdt%jZH;EyD~jGPP|@Wz^f)_Dalj@jf(e3!A9#^x2JosJ|C`-4=Hy1*_<*u zVyTlRa1+z*>yK%-&?Io=>h%3P3X|UE9UMqi@1iq_r}eA8MArNx(=+=v+)*i<5&7ML zW@PKpjkA-wAjgB#!^Djxoq>w=oJ_gE!xNSF2DY9X**M0qf}D)9WLId9Y)?`)LSRE8X!d>JCK`gkD&n zM9?=#U9o?UFS@uGoyK-^&vj?K@|>>-rdKTbK!N_}Ff#AV6T>T1%-=+n(1<%-bUz~A z#W4{R%ciZ|@wi3=O^}IN+uD*+4M5#v#SOWXfV2SJO&L7y6x$OG{npdS%d-&_B&p=dvAIa zT}9?}YRrK>SFCas#TNo@xUHZwS&{}JsD1Sg{q#LAa&^yNRM?ECgJ$5PukYE}@Mdb6 z0d%U|L{dWHHH}gsb9QDH?XR{PsI6RV*k!eyQl{}Ss8PX9D@Pgjl7Ycn7)0r5B1S29 z%vGRcU(E`a<*32IF*GpULlGtHm7OqUag_6j9H2Kg$6mTa)SAw_CbbS5O}p#9z&#wI z5-PQ(JBRW*#y!6v%a+@5yD6;&G^xSXcB8izzB$MUO=?P6HnwTxc(qgNu;ABtT`J?B zv*eVW(9+N>XykLk%x|+Q=S;9RV9Ll4CWZ_RjwF7 zxIn>E&&!2N1X556ruTTKy)Gr6Sz@E(HWW(ak;3R_FsT0Y7cw1rVsWLVrDjFN>ak%R zl&_-lew<#(nYDl2&&bLw(HTAoYVGMzkZL2BQ#NJ*;lwytijsWMx4l!X$PURvMACIy z_ond}FWKw}-`LugwmBL{$&3}xYk!FWM+dOZN*LMu_Cd#uh}#i}a$2^zAL>Z~2iD>z zA0WWeebDrEY*J0>9Z40HD+xcuH1+sd@vc4IVA=~tf9OGnPmoWZxA)@vM^8N`T~f3h z6DVYPc!}28o5EkTB$j%4(Vd?^6_3pct(%(}N+-DMcN?>yH-}tm^~w$j0Hi`DoLru_4Aus zx)D<{)0V)}LRLqnjY1})6Ezq`A1qLS51i{$-# zaZV?`@uV0B7t*et;q-3pMi8z_L^fq}vh5Nnt=3pPe%Qsl)b&kIxt6 z*AzNjLZ9TobVAj&%?_71@fdg^34}Dd)pHiQ3^O1N4bh~a9ZoFSS$`-%k6jPi0q)HZ!dW4U1>+h}3?f#HFU zNq2T}O-*WlMD-i!T(h&Q!q+r#(JyUp3$69DKPGCp&ciaRGy+1+a^pe5&{fgHb3Upj zT#(2DP8~j@kUF5@`k(Km%Tr0C?5?IXeMf@>;;rNc}NG8Yt zSA!b#r^rnwQWkZ|yl!Dxk}ax!yg6Q5h2NJ(`OdQx@YrHgk%YCZ0NO~!NFi~a=9)bpL2g3$(cyV#E5gMBNE|r6xRbrTRS_I@-yF8;8q^xWIi}~R9#oI zu)6y8&`@&EVqMTQ!Q|ufdJP&bq4IQ>G79^hq0d>8iIHFJBUk$p9zI!zZaf)&EMYnc zM^u0YSSs1_+s&&s2YmMS2m-?S1)?ZkRM%~GcC%sVFR!X=54FNg@NqsWBKxLaFqG{ z*u3Zu3$x#v3JfD69oRa)EI(Ab{~#+fwlQEXBAcQA@6(e0NN@i$i7_j68))vi6 zSo~>M*474#rL91(Mg58e3{3FSMQ5cbP2@hnbtq6U;}v+}s#-oEXH4~7ERM$4 z-!C%SLVGRzsqf|-AEx~l@tcytfGFmfkAp-`w)ZRkW1C^i3x< z0Xgg{CTM+${xmEtm zUck;)>kv{p#6E~PF)&&bXck5}f{89IAOZhJ)hhG$xH{MZ2#9mP+TqG4p(?7JLFaTy;!f4uFIMQu zVmaE^S)(7Lj|UBHaHz<|>5gxzm0_ElibGz{m4J5WaW6LdQj@8a3^e5s#bb@BI?i}xGN8`w3l zMz{SFHd?F4PTP3tFs9j>l7;A+2LxQ@w$&=Gu3T57{xnf$`cU}kwpy~z6fyP*c$hOMjFuMsiX0LejD(s-wkK!EQ66*4?W~yb@8+& zBFgAdHVf=LyLuyw?m^>@RPd3{l^c^qx4vqnxlgl9rxoP7odA9Q#nP*-n&4V+z_qSF z65N9-8$}Fk%(8$f;??Hd4d}4D*pUU3e#A=t1gn8LJJRmlb%nY=xsbz( zgWC+x)9v{qA`ctep@X#&bizPRXq-)6R()6FlioW{s1ymKB&w7989+Xq}<$YZ-zKx z!|T+S1c;U2HRz_S&Taw^_VOZV5 z%0?jQ>R4$*SQ|oxWWjKz{BF|-7o55OdTr-+9Z^)Pxs6iLDw?9^fp`LHLT@w-! zI=i3vO5pKhdehCi+U9;6AYGlzHe__%Zon}?+Su4Q3MRCiBeq-H;kmvnizbx-%CTyT zWjwHfEsMC=inN5^{uImN+sk1}BxZM71tu8ZB)7(HPKcSBsJrO%t8b-JnB*rO6)N`R zJo4QbufjqqOLdO{ak^+ndfe%>Kbh&x^4;|lo zXqfHBuPNBrVgSyg$hkJoj*Dxg>3o7VG&JP0=DX5uuJAWd^qSWR!2|6}E|x&iekafG z_aJOB^Bnyhl*jCgktDC0_|E>=IO1w{PCh7))b4?YHgvjPO2F`8*UT9hq$kz6h6q&O;n~7a$>5*m|>X@YK@G|AKUZg zpo5|M9c>r_vIYlrDDO=j3gURF4gM0LAGfc9lozX+pM%wUNMJw$>?a$80`fxIbuUCQ zMbigmWL5KeD|0Vq_`M*0_2(BfH)GCJuk+7y4SAT#w?KnJGzdRUtU|uJa=F}}ytLWV z&ZLU^`SWc`(qV}3RNG}R&UAEN5+j*LkP00<@`nhFJ39BPe0ePvOF^DOvo5cqG7?< z%ft(M@?rC7bnIa#iH)&$|j!WG=r5J7!toxcsMTiuh=Z*_JDc zL&pc)l`(d;BU~9JFKdq^tj+i1iCoBD^MB*JC!OGNp#^4(z2m`n6TI4|AZZJLglOuh zO(Bon`Q^Z+8|Hj(19m`wvDc_r+|qs^VYu|2Zz{_7puH}Uh0~S$M`iS{NYl#8Lr5Gi z^CXHC53@o6HQ=>)EZvg)`vj&$ofZ^edC_!)O3bR29G{rjBYvGI3fjf4Y&n1jooH)c z&)w*}FMhUt`b;DAJpFGjz-LVd>yEL_e03X(#v;09oM$RgHd65lW|=`dc z#;z3f{{1;KWh}jP<`)N-J&bQk$XHnwW+roVRCGF1jd+JAkWs%-wY=Bjlj&|s02%`Z zV2e@_ei$C_c%w{-wNc*j0aI`i5}2w7#pvfc7@;tLkkqQK3wraSZ}wpVXL1Xp|M|gI z#i*y_e+88I^uCUal~s%oT7ktqFKNL~OHbdStj~fqfUI6`T#H_mKvDE%%C=Z$*wR$_ zuqIRB>NG#1T>xnPAK_2oB?n{Q4dQ+|5@Tk;J1$R`!;NXyQ{gneN&gpDgoq!}+Q;s+ za+LeTac8oJ*J)nt#+;2_MG8CzyZVF+FfJT`NMiwl)93Ii_O_R8fzM2BBc!M+>YXA1(HUFh?OmW-@kdKn>^P!GMVHm0Qdv`I97ch4UlicaoXE zTYd(Bcy-CC?XoeUc&tZn)qLTL=S``B*t-=0!J*tfX+Jib#5MAZZG{yCq{8Z_3&~)P zTb;B%2z z*wONknU;3i2@_e%(`)_l4%|os930+YQ1=KMTP>d(VCv~Hj~8TV}5?vvtf#Oz0Dw$dyq6D@fgoua8!6}!uprRvex8Y&AN(XjTO#!UXJ5{ zK#|@n?Dj>N*{p54$ws{U*`O`or7f=zcsN%LEUJ@QIDi|XPzoZ$)1Ujq;)Hf4z5+M@an zvPTk3Qf7ALIR$31QeY-r>L%T0SO3b+X_#@XOQp4)Sm$soA8Ye^)}F3E z1fTO`3nOD|doq&t8;BYj8s=&gv{6wgzsg|C(GeC%Q6NSoh$0G7U^>U=i`duv@4$y& zkbW%KHaFzIcwSUgM4lp{-&Y%|udi^u{WPa0#q9fu^Oo85rkdmx3-96Uo*1w0R(Qvw zr<@PHvG@1g4<_FWlY>BF#TuF>Wp&w|*?QLK{L0zQk5N(B#Sl|flrdwL$O!AmVx_`d z+ZFCOlp~A%dUUhRXCu-1t2bAcrpmBZWTdoB?zaeFGIT?0{!U5;a)(*WCk9BRB(JD7 zcH9T5Z5aICA}3ZNjHSe($^zCA{2*@>$H{Lp!QUU1fZb|M*5{UYpPHBUK`R=VH7w4Y zs|QbLd0x%d+aHe47iOzf6_uM#&g2#@<+k_^G0J_+%xAmI}b^}i$|YvF0WWzBKIVbNlh_e6m`hTbCbBxpHas;w9lo5Ov+yG>X~d!=qFy3NCVV;o zXqHO7@vZb-e5=Nb-L!bQ{k=T^zdXg}kZehK_~?=49Ln%hB`bQ*D2wUJGLu7`dIA>h z_K@6q_z8hT%Eb@Klwh(E8fsdDHxNyb+VG5BY50&0EFSz&l!m%Q(07&nJg~)FPV9GM zzi|E_t7tf<$P^Q6rxZb=;ZCr)xsDW9v^RpJ8HTw`u;O7EN<3>t!N>P2581ZuWu|_H zk@aqp$E+la{T`CK16Si!k?u#3K^*&oA}#uRK`a2Kdbbag-n|paw$piY?OC9D)!>5E zs0B;;tv#wc-4-l%(mU#$jz3O~zqCSZDK)5-XSo&y{;quTtyqtT!DW;s8Q* z6dAxpEbA=p0TnC7i!PQDc>>c-=-5AQze{F-eF7?a@r7@CQJIYVT&sT$HGH_{~3uYm}OFN5I9%c937vp1n^14yi;K= zKj^{Lta{n4ta9zy#WYHeZE`~Y7;{`d0BFb8=x7ZG-sM_H9=;Fp@}B`bt;(DgLJ1}? z7>SiiiIRNm+w zZ!c2PV%JiirRA;tpiQ+PBay@eg1BwV@q1pz7rh%D)0Q%5vK3eYhbyZYlAuVVoV{^P^rm#(QR zL+|4!*QgnuEUYQ*_fj`4a(9ga+R8{pV&OUb0`%CXHvVtMRszZCrNdwO!otEZ?L&+^ zCd<~u_$(&93UnlS1^ZU=cy9_=qsnc1)2-stgnm?R$6eiym97~SO=2)TPJC2_0Xivx zgCbkhd|E0mqS0|!=BDzYhmyq=Fk>mP9-IdHbtZ$Ms|P`w9k?{(afgMO1%;cN#dKkU z7JpKNe|Y`RXq4j0`dYPP@OBk6yEkK+CXiCUA8 z@ut_*1nCzF?u~$E%bTD1=Qa+W@^n4f=1gG2C_D26$cuksK7kQb5%P7SB8OJVqHc0( zhs)p3uoI62$4YkahCyxNx?_h+PUPhZr)-Ol*rXMK+yR1^( z&0q@wiuoj|C2M8Bewarh^R!U4?pH$m9!P`)Z4U|(I_5Y+W2Kj*HZOmW0L*c zD@{Tv8T|{gYg9r^KZ0L3deRV3=!~C01M?(yPBqN7=ou%ErVXzALT4CV$x*S|9y{?g zlZw#(`#n2ZZ9)Th2)bRUR{JZlG&Z)jx>F-vNn8#=zW(8_TELJttgMV#n(yQxDi#sS zb9(mqdOBz4I>kG85{e$)HygSGh%qQ9?1dec3{MWGi#)RUGa?&cT8S}z#)SCh7hYz= zdPVS)#?PebUqX%~4h4lEXSy#*=v>0bwXXOpt*!%OXcL%$4yW<#fF{_XX1quZ%54Q{ z`>3>9>H(L&bLWiNV@m#HH4G(rsvc#?A+X>{4 z4&?iwB7HV65L#0~obfy4B8e8p1g7~U_14{MYKxRbRChD8AU3$1>Te|nhs`_fC>Y-Q zVRounJ3kX@64ibHFXDA}cD0`V@ghk=Lf#?!jYb_4hk{CMKT$EK^7*nJ79fnd7&Pk| z0J+b3G%874e+HT!hdW11(;Kgg)2$XLK;Lj1E^9j z9D>ULv;+_@e)Ku#{3-f!$j%&;8&==paXQ=63a3PR_&2b`=y}<211uegE7x}(?VW)P zvkPI&s?Pkt2G~4c{@tKU!R2?08*YQ9p8cRTsRrq?){G>)-!*AtIE&$W#S>`r%j`Fp zVqU9#*oe+j8zJ#pqy{)sr}z0)S6`n2{A8!T=FB6Qqr!7ypC+7#E73%b;&8FPCMz&& z-fJoJGYlLT@_xZwCs(UG)f{yUKfL&pl9L0u9Ybi987`9`buObt_A(ro;( zH~ME`p=%w^5~5_Mz|bzEbt1wy*AZ`!WDn@~MYmINY{r9cgwnRFAuf}mnajf_Ac0xd z593+u*RIolLRRvA2r?jTd^}anh>FNTOgDj2VB?nwkk;`YOjof ztM$B6mS<1-_171u+QaK&7b72s5r^vSTu6?3N{!1yl}5_FOh-o%lQb1qM>4&PF`h?^ zU%p&DbA$2z6F8#E%hELcUa77o2d{Z*x6IMQuL8!~SL+OPNx-xavxCrZRv{(SiHGk? zN2;qpym?k7paa){vXl@sISZg$K1eUw zBu}7y2G9k-?jB6H>=U{->Q&bF3B4T1Rch2{N3i&UEydfk`vz+)w zM#IVHfS4l*Nd9lGPG_gav_Nu3s@FaSl;;Z1DTJ_njYbLisrYln?E3nd#oM?4+mXy- zVYx25k0JLPVo4KQdY6T5p^wPaK3w-)FU4&qFateF@mnOdYkYmW9p$Rlr8 z;NaR&xLtP@a^c4`S+H;*Yohe->d)?hyr@24K8Ih0XD3Vt`bH};c11iw|4Hq{ z)G?Z+H7X=|56K}22@Ay6D~5~tpKQ}*LwO8gNLjh?$G zgabEXzyl*x4V)|JlxL=2!Ub}*^G2kwdZJ?AK+SrU7104)YH$X&m~z>STUO%Gh0ARQaGEDZDTcE92%2pT+8eD8CUB zax-vzx-(s=y%Bjj*{FwVr{!KaMKZ2hC=ze40OjTO4+(j|r;dncLjU1;Ei}6|SAl(X zand|q^~mq%+r=ep<%SbCz)|aC>WA6-@DVYZAU$N`O8UrRnj}czNsnhY!?fl(xzcw&;4Ep8RCDovoA9XceS8cP49l1rPS#Qq?P0C29@SC%<;xJqX!=2g$r)AhONq$I*H;{56|v~OOi#7Dcc=pcT#n&0@o%n<9E+{_%4t{fwUlwJDh#aISO>JKkU1>tE)L^ zTFmUv_C651*t6Z#g@tNW)MbT+FnASE8{_bAn=)B$H#obo1F)WthtJHgq62ik`v)US zxlW?#H5XWIX}%YOg=$KguICCtL3u?MSYxo%9JOCNs*K0e z_*G6d9(&#@3P~IoAq7j-NhHKv< zfUdoV6{2-(`_h0twdm|4`@C!RRNzCi?z_iVjajw=vo;fMUUOxzhrj`{ z#j6K}0LWIMDn?oF`qe8OP5NU4!DOE3cW$qsi8tOc448r$-&H+m@#%Dz?BgPYFu)9RW^ny9#dl2=lZi{dVir8)!N3f z=-{~mE-voLB?4R9m9Mwa0}cWymGUp~+z$dfCK^3Z`L8Q+y#tqEX_8xtJjdHSc1b_z z_bH=XR%={voEiX{Mj?gg-``f#jqLGxZ-BeZL7d|5U4u7_(^Z*FyNEGhzF~`~H`!xi z9Bisz8~Gd`_cs>+D>6}SVOfz2g_tj=)4k z#mLOe@_7kp{OI5VrHh0uSW7%8v7to58-OW-^5uNFthmnxI8!t0?>&Ev9d+gby#-*( z8N0Q2goK0v+=i|i9`FALeNS#!g_l*&*v|GGwxn{D3}D>+931>o4ACflAV+lSRCan& z5%aGKr(GFCwb91kqM-W>e~W_hJRqZY{}=HOZS1z}G;H)MfL0JDSCjuLPRfG{6y$2% zB7d2>C@b*dS$sSQka;dFEW*TGmM0;So6DbBq``Fq3+?hgg*x3ap5ed~O!JXc^J2-) zG%C2UYe7Xt4d!+>7gp-KtNtG3pB*D+NdDaEMNVK$cLqO?{PIO7WdVtU&@HL*7rR1G z9zjoRqjCFdQXMl`?=K1lMPeB@*oU=^?e9m+lE9UWn)n zF}c3||8Ecp&Pg^fE4_8)ItW~s0OomX_(nA#0NbUAV)!0(>Atjrh8I<@KHM5yH`mOA zCZ{SZmD=oSzq#$7pO1}%FUg6Iu|7)!2LBmP7V_+t8*M^4<0CpIw@GFD@i=jmY&|UGG1ShMND0W zv^9153pIPFUZw1Pv7fY(`-dHU0U#OnfK00Pe$mr6Y%rQTIksp83Pj+fc>7SxZ7Z+G zcQUB(qG4+3jPlrsl2R04EpJpzsOO7{xESxUp5~k7x>p5HUC3_jpB(47=YN2)6J3g#{eG-v3U75Se@g3TQ_UB{-0<52}9*Sz#bVH!#LA` zD(EG={pF_re)MGBsIliI^A=&e%2R%Z({1ig&Dsm2N}7O3Gf#-iX^k}PInkdfe%IM$ z^Om(e6Gr2GIO~5A=?ozm&*t3)&8+Gp>QAn|{ug$3;cpZRC7vHkyg;H=+j!>Uzfx)- z8m_K8n;>Mlz1@THE7aQ225?bA`UoP=H?o6P{72d~=(+w~5)&WObZ$DTs#rY#DSIxt zh}{94d(Gx^2fj?@n!qjSs^X>5?pQQP+rL@I-&_8j~}x3eTeRPalYt}>FHz` z4Gnn@R28$>c46AE9W&bWk~pVW_XlyiOfsce9uR~fD_3%`3&9U%ro2)Bbih5!Dw1a0 zgX?6jL!^Hiv)Eprm0UyTk~@SIcCiSrdz+empm&D_)O}nKQFT;!b60qHM9rjTdAFjL z-QrLaM(gEZQPzjk(~VOXZLzD06QlCtd)DpmXt(LM173IYox%0=wNbt@qcBdLUb&vT zx}>aeuetPdLOEM_pq$V&U$r{^@~f*9$6|Z#qS%uH#r$}7Gkg%DTVHC*dgCW|!aiQ~ zRkrpT|Nh=-^Z2+waKXDow0+80a<9-KOG~@4e|T$_FPuGG;TEFYs~4ji;Dt#Ku(pB(+fApEmYa0@$k%q4n@nyA1yL*z4o7R}LFPFGpT2{qb@u zES!hF52x2YV(*HkqQ&jyo>vXZt|MUOB3ip2jA7yuiyEn(l#K7tsHUbiNKYQ|@#9-2 zDI@%q_?8*RdG(rAOaGTuM!-z2JU41%u7RMqSaVpPn>ky9T4xu5TO zdv6&R<<|F);$|x<0tzS%qNJpBj|zgcfP%D04&6fzDhPsv$j~JqAl)4!-8po_(A_=o zU%1`(zWY4S`JDf|^MV(OD6+0=t@Zn+dDP_}+2eVuBUHGLgh?1dQd6hbXyYy9dG~Fc zPmaUR$p z6s7}7KHl4C``#Q3Dh%Dl--DkH9ZSVo6)piA9B8I!7$$k^J`WVxVPUBc?`?QFFHR>9 zMYUfO)oflZH83PSG?{$tF`;Y1c{35EUE6Aq z+lVYUyH@7?M^@T5unrk#ylAZ(qrKeroE(&tDR9v{ zQSyU+YLPyAJ}X7tBIWB8WvnpHSLL)Du@zzy)I+1gD$ie^5sS$T4kp`Sxu0C2aNxqR zUzTui;9ck(gxP}}FZNiifvI;ic)SR;R)N zYBVWN_c*8Z>TGNrO+z35#KZtrWyooE)955Hwmn)nn%638CPZ-{2^gUvR`{t3u`}Jl zNh#BGj5JM+jowl;jp*j-+eZ z7{2TmT8~AA(s(pK$tZf${>q~>hI#Jv=(zK1lJtigxI1&Jk)I5V!g`W3?!S9?j2`+N zQsA9ORQ@_y$?gIA9(h32wB7_FydN~SozMFB3dp7wil!R!z#&f-f56pNi5)E#+Cc%w zFbOigATnTM%n~Y7g09e>HiCk?VNUWNT z&2dA_vdo!t$5;^^J|qwm6I*Jb#lwi|^^fCu?&21ztdU)|plOGoo~*JtQ5W#QFEEmu zZVr~v($@ay=RaHTOWa8kN;;snuo}q<-uUK@mZZe|EeAzt*?jTId@Ci- z1mSBIQ8#`RuZ=nzEZNrC_BBtlMnJ+lW3ijNx{TYxEI?a&c2BH>zLXTF@jfd^Y`kbZ z5_N^o%&AS9Z#U_QD~g?w@{bd@MvSg=ev4Fr^cbNQ*eeHu>?1X1(yhwYQ-7&~bYYf~m zn3AU!5FCB3tu5;~|FqarOx~sZOq*-IUcG!06}J(|6%3ld^G=a0@&yrM4qV_zH+6n? zqE#?B7xuc-ahKp49hdFzViOZDUaEz}xcSR#I`XJ11~f*6t7T73<@jWmav-v;z>h!i zp480J(qn1qYbP@Y1>Eyerl$V!QOe{v9fN;8YFP=eu5ABL)B*AF954I(=@{s?`%~7m zSXub}RQ`C-(lTPLIvy?@dgEU;>ic+AL{yXsxPDD+xuQ$pbss*d<>;!kGY`f%=6DH? z>ZPqY&ld_)fEd_?Hav=>v+Z4-Znuiwk&(^b*4veP`x=B_0tcakcATIDld+WV_g zWiOc?N6%mP56EAycCZQeZ3vXCk?c-w@5*24XAq8G#Vaq54xLn#)NSN9ULM|m<%0Pe zJ+QSvj|%?DF#N$3TwHLq82;tAUJ3l0T6(Ul7nx~)ecjcb>jpO^|L)h|FH5}rs{XEj z<49B%1%!S+T3$eKB-*G%P&Oz2AHI^7HK+($yRkQg{jjU&xRRc4#I-)jeS{9b*!AX}c9?g#wUwR#BsBS;rjbKt0DfqHF_8V9eqM-~5 zbYoy+(`a;Ss|*;6hjN{94Ce+NJ2u7(SkQ@5=#>@mmoIsxrKQb>Dr0d;+VCENa9>dA zR$7y~94io9%aVh%c%_;zX2&!P8m-|E0)xv~}fB%bbbs(qkuh-6?%{HA3$ z60a;XBFdC8x%X&k|3R{WdzQ`EuT|p@yF=qOT#TUzWT3&m`@ohC6ah2b3V8YQCHFmB z5zrt+9^1)N@wCVgBO*GovyI!;TLI&Mj}`b#*O8yU#y&KyGnyfwFXP+ieR%-Qj|tZP~^5!`0vRG3o%7oJF9 zv_gGWC86T|4b0eL=e8lxu$%m>pa{05CocGYo$sW_kHjmle>-(Q9DQGQx<7hNO#NJN zO-t*eAGvQvG(}Dpe2}M7{nD8jtA;>O2o&m;e`W{ZKQby_Km2tnCuqN>WZv*F2>v-M z(o_H7w}eVnR@Qj)jN8~x&lJl}w6q_~G108EzoZd6+w$kzX|A zv%r?}di)%O+tLZS@T^m>OP-V^2l@2cQYhO3KW+?K_2tV3oRu?UgsPGbv@jFVYa3b& z0TH6E$$JI%G9_xv$tz|{pq}yP<6gRT(Kc^70#!ySV0UMksXg@srR*absBfx0VSAwb zNyySNTdvBLftL2M8s)4&+?Pf$L|~Qwez=vB9F)H^YIU@b5AsYOr)B_|A0(22Kh10* z5D+KC zGnr9L>BC@?Oy1SQV_{S#AMYxMxPb19`sEVH*Zu7SO#rv4q>lN5>wDRe+C)l<7yhcE z;Y<3ANtdAXWpZ%4YK?U4>XTflu->}oL$u2;js?2bFN5>;5QBpUozGOfmOSdp#}Zzk zUIyZ-?Wa1C3Nzi)_uUSWU3e?+i;?Ta2u&+8IVGEiRymlf<8#q+!0fNiX@w6Li}QBx z>1`5+mN_8eE;jGdew}n)(^NH7hAYt5$4Xl&P;+Fvpt>8Enb_2zCmATMGMUk;-eYy4 z?uOrqncwU}O<$mKRLWk)-9bGd|Mex^&aVO)B==#->hV6?&74*+S6$b4dk1#fR zMn(`hcGAp)%ZY?1?u~POhk$~~(hAsD@NXdyFF^jcq>@bn3g0h| z8%sTa>9PdQxWMUn977GltzX9jG>EUSF&sSxINpKRuxlo$+{Oll9SBhqJZFTElmr9<2$HO*U{XD(0&!w7pzWef}=min@MD#rR{uXcMAh{VoI&&p%ixwe*3j zVa4oOiw(ssJ}*$33ql5D9OQWcEe6JQZgs(Em%ihPU z1n6ndqB3@+NF(4=!Trua{O>Q+);URqh2GbA;^fUNEqu>3cL}tzTVd2tvwlsGqF53A zEvcolVBfv^)bzfNPF#Bw^tAeG{VWjz_~(e3k!p)?UtjdrljvH0D}THYV{-q&)f=|c z7?{ed9Z9ahz=8Id{(h!!u&>xE>q|9Tvpbot8~l78p@BZ(R48LdK0n+Wwy$gJ+3Ppj z^!HYz)DI@COo~+7;|9@DGnRDV{a!;S^(@%~TRJ;ZaAu6iHu5|5ISBAqwj}*r{l`Z~DPDq2 z@>#0-R;djWo%`t?0QH|J2qzeHZ*R-cvEsS;+kEIhJp=ZxmrPCVSv|JZ%N^HhyET0_ zHyBl?7N;J8d`oXqy8)aInv&07f2~m*O ztg70mFBuxzFS%iow|gA9lErH_Txx?0;_Svs7OjRxhIm|PGqbYTY>=l|i<1Ne9_N?h zG`6&o6tbmgoIgfHfT;N$F)X8wh$lI5qE6<+A>IOd>dFd6n>ptq(A~aIGRbcS+Luf$ zEJjX0lxb*EFv!P%7wUJy5JfCbt{INQqvP!wsrX2VPmuQ^NqEA@mgLOLJKq`RN99r` zM~V3P&939_#fC$nb0SBFw0@r`w4z_Ak8vk47HjZ^-aZcO4m{gOsP%1*cOF;R+2t$F ztR*$H%6w2r-QZLM@WS(vb&Q+n5(VKC;Ovv7t|Sl^7VcF@$+OvUw2fMFE!YRTQ^}Nhn$%un9Wl$pqxa4?WbZSxO-$ zQq$6I?M%|HXidILprIlEx~;99;N}YL1D1^Dj*cV{7%6Fkr)}ZheQL8Z)Dyn#XA9a* zCq9S87U1jBC}w76`p4ZcV;*6!oZ@<}SKZD&yx* zXguz@?~91Lr7E0>SfAh1aW|w7S&z{x%{V-Jx&tzvW+E3>aI67#1hVFba#>jw0~DH? zKk9jTet&Y0gG+K=a9)cFR9ldnN@l5p*z7(51nI@MF1Jc}ZoY%WD zetXy)_<^e4k4d#V=xZCDx;?()I69JJy-1h+{$gtJIpnI{z8smOhS_@LL~uwNJ@KrX z?Y#NzrY|cwIrH`7Oo-x>kJI9p1mLIq`;BW&Jw0(PL{`RIkULwG#yYv*Q}KDp&E~se zrLz>8!YRmMyAN(nZPcBX6*e~6k|jzvB;_3LIf{*W(UM!xHx zXbh%$eOc@1;GhG5B2gNdNl~#s<*gbLiegN*Et|SSKw!)&WoN9gan$7qm@$c}cW%mMcG(8>FeSWJVz2WgHZ2crDZmV^w+x^lg?ngtsUrTs50h-gGv6=#`ib zvWMqa_gc?;02G2zAnUAdM<&i~nT#@)(jP>iC{nO#x?tcz_21}#;vK+k-lu1CQ|gp=gTz=0E0g!QQ%$d|F(_b`qXd5%tq4J{ z4zpsp>@POP!sPgT%_%U)dvlw?zqhhH$SXnp_By$k%a<_BsQs0qCG|`P$%;ygh~}k7 z2h@Rbrx{y?hEgHy`Of;}*jLI?jHTFo#j1<;MQ&BRo;2|9@$hHRv4AJgijDpZ#%tGn zGtb`?(6Vux;VH7|Hp(Yp4&g9!&&A@Tf5N>7`JDKidw=Irh~;t-qGiJnE1oXI-@spM zn>ZB5OWXsu?#;cuX$%1cGIdpBAho{8+^R8+`<139Y64VnyzU7ARTWYE1C<1e8~gl* zom+>iJ9uDyy$!#%q(y%{vJH*1V$1qo+PBEuH>up4mYzN{L55nK8dxW=z+vk-%T6BG z?b2{@%`tSBrz-g`V7mbx8#-A{hg;tC+c)1-mtXS>TU+Mih>?*ImI>N{k-*e%kqo?V zmiAOkr^m=Zic_A0l$`s_+*-K==B~VFQZVi9G9)3E##? zheoXVxKT{tXM*VMRn{6U;+C;u0jDNZg%MTd%CDnamD1DJ-7!7Au5b!RGdI}o;4-st z)Ya9EGgWnFiC7oE=P66HEA)pQoNrcxOG1+54dYr1^v6k$XFXGaWy&ax zb?-kL*^9W%ZZhz5(0~A`7%Hk8D)2qrrH)jZ9R2;6qkwg}{w34gd{c}tC{J<0AeIM_ z97*@2$nk1-@vfzSmYvMi;{$e)!oy3Tnjpe$@P@d?VCN+)1H(Zi(R_kW_!~1W#$A8# z{7`ncFv-6P(}>OParG90702lBpW)CXJakSpl{nm#q_Uj}(znW~X=!QYyy#6it3-B# z-jvh|uh5p)0UpK}B3rxhG#f9{ zH}GPu#dOw7OG`gTt9eja$%Zia)7npAO=#_~Gotpe4+qo#hQ=?K431*E3cFsvPOivn zsGp=a_2W`~6OGBX;mUlr;x+ow(Ld4olq-Ls^Uae?*Sq3VVH-N2s=%2Ua}Y2&tYU@K^BLP zMUS2#5Ee?^GQ>KUu-U6}{RzZ}iM+-(M{% zZLbIJwgaboBtMMLY(k@fF+LLnPjGrnPy)AKL&AM2`8rT|5*QGG7bIp60li|EzJ4q1 zgUe;NwzQN#!yFGlQ{w$W^MLoPOb^deG9mQVLU0gP+pk zW)1i~)W-m^jx_&I zCOoFzKF%sSs^V}RObBQO+>HT`MV$6gI`q!u+Hu^GopHhIPJ2ME z`zLu~CrL^^2l){1#C=nyZ~Q&jJ)c964d|@V3fC^hv4fJ!?Qw#k_oWE8_V*1WBuF9a zM=gti`^Dw!#f3vvC#7@qHSO`D0lII{*0zo_#Wp=LaIdeO!F zmJr;9F1-PNW=g>?APyE+DL6O=09Z$fgmuTuF`^*=2_-8Nbbj%IuX>&N-_GUCqL#pX zAQ!_)9Z=*An%#$nOg>(vX>7>&+iD3Q(lEA;a>|L`s%~*eMWf$+wmgfN|4xs^T zj)3(P7K^TyVZ?E3pF6IRO_wMPy__Borw0f)!(^I=t^Qm=8yUZ&d7ZT<=z6<%uPK^= zzwOIP$uDpa%7ryrY_$-a+=kbtbl<1o^_doc+b?EHHqGKZqqTBL*o`16s+ySLg2gex zi^ib+)g#|*wVis%FAPV498 zr4)^7Phk`GpWy9LHBzW3=pj~gs2k&5NAve>}DSPjUq%NP~P4;+pH#qqIMeufd zdDQHzzWGRgQp-lt-(c=5Ded5%wa0DjinEJ%4`7FJanuL|B9{XW5!Q!)1Nq%)?6T$S zXF64`j)q#hCLrb!^qew0qz%sDvsieeUZxZy*d%@}c`mBF_vd`bX8(vYNm2q>RUWIW zlSzey3|H<^uxnMiV4~hAl*wGcn4?vKdj$qE#cBYXm1R-e92hl|ekRn}D|Ob{gj6O&U@`;ezlNHV6;r~%)X7%7!MOMiLr5ddU|tv>l<`RmYQ4ZFPOT=Q59MK z<*A29JMt09vbC?>Ms{6_42hQ;xm*f?r@9_(j- z!@WzZ3uo{8Z{hxdy2~9NJ6*EoVyhFVd-6{>`yW+Rr4MLmtR6gI@t+vflm7d^=WyrC z(!T~v{mXB$#@wj=M~MAN;cx#laGv$eO-X%=j)8!9!krF=7|J#Ig3*}d!M|!ye*T}r znnrl04_r3i9f6&;D_2WLr}OROI&uk~6y*#swA3~>-YF_~X!9Ct)1V zNHc+hD6>kS7(Fa3aN$rB;`GY8YzsoaO3je}Ij?6dJuIZ)ivlW=8;| zd*<6hxo3`(W<@jvU{`2qYb2o#3Ng>7LkB1MSXtC{&7QmH6x(AE**U-HA@KCSeA!P& zPoJl^|gv2M%hp-sHwo0#p&$!S>X4tqM;>t0yF3x419%b+pfxw;L2+w$EER4|MAMyKw zG49+`zm_~05XP?d$0`F5W9xB*#VB&x1h|y}DMomU+LEy66(AMv-)jQ(n%{eto2*r?2Qy8guB2j_TLi*ybNI{|&VF2~%P&b~B!EA2izCqwmjM9m%F5vZ7IRaglVt*}9_E^f$g> zs+{sIK>X&bpYBMDImQqSU@p2y6G8jQ`m|+X)%<$+JQG_qa7Vb-5D>GxD2XegWlimBC(Fl;JUFIFa|qjk<)l^simnyPdsCqw`M05oSCc1Z%sdl}r8 za&+Woc*50ZolF=Pn-w-s<_GNaYeh5(6>cHY(okmH`Hq^dCRA=$`#493l7=OfRTsXO z4;~uK%*`yEIho#wVwJZevPF^$NBz6Y6CcX#jK4&OG=0jL;3*syl4;|GfhH|>rqTbl zBL5lhCw=fI-Y?|!zry>sn~F5Dxa7+d&sjAuIybD42f@%gui+Spl?ub>9`|bNtYI6E zoS$9>h86Rn!T?ZFDE_lQy%;SFMtiVkR+~!$f8y>%ZJDc-SXx>!qm`)nE~Ecmy1cHOQcfRI}>MYdD=$;yDi{|Yyb-ZE$!wmVO}Oerl;%NTDlqg?kyNe9vm z5fw6M?x=5URC@l(AjUb?WO5>)y&%#X-{Y;nit#0DJ3HRfHG@vL(i1@9te5K(g70G0 z|EPy)TuWw@c`@GLd23D*!M@}E;R#H_EF+0Oc3R4PA5XvP0e zsDLB~9@zMEWy{!Gdg7#FZloaU{>9*nkg%{CH446v&=4!)UyOKZUc}yeBEakoRG-`# zAjeZ=_4snpsSZR@Tb)sZc|}DJ@vH`d?@Jw>c*-7vkD;<1O_X^7&<}xwe{j)fy#K$l z0cQ!Kj`qKM;t;%PKy@jp4?E%8UXVf#mvQ!A9~V|g3q`dHn@ujX@Xx$^-AlvG)ff*Bb~&o&<6q>Q0F(Jc!X zsK5Ey11bUz;gqgbb7B(G*&klM+8-ywo0bQI^4F^-yG^qqM01*W8vs4Fpk(AoZOpY7 z8-j(uuW{_{b+d$H;=8`W(y>NV?@oU5N~*nko-4X%1RBZ7{>719!G3q|jrpz#2!ITT zvj)JHKPb51KcoYivzgh&XNHD5b6V0)L(eIxsIKDU8})iUG~sDHNMy>Q`SBO|khHtv zE0dhK|78o0+JR~d&uW{~7|E1SsP(q{QqAsSPb^3E*fR&u$6w773S-}&ZLqisv+X+; zt6@&Azdneoaw}ce*U{N?3BjfXTYxe0(azla{I%yU<0dRJ2l2ft+>hh~0_POPWCydg zNnKWMo?+^*gNVzk6nyne_)$npCN_S$?~Eag@^tL%acVm5p0EiFmas4zm}dCue_f?4 z<%~qHaq|gXFVg6E|Ka@W>^9YBpjT2qZ;=9nmCuknG71!NZePESrvklvdEaPrs)pg# zUSTocD|NCUvX`o=6jezLy(`AqB?Fm;=tee>-D*3Th}1LFM=d^0FD@>w$82MN^?9B~G(OVwb(u8vV97p89KTUu?NNJunN>NvS$79^5W4 zQjjt;LoI$NwCDhbTyt|Ukj~v~pjU%)1e=H|1oEw(GKA;nYkZB0u;Pw{TPco>Wiqq& z!E{oRLw9D;0K&Jlwoo>->GF>oGVOn%x+r`qbUdn}qf`eIUfJmEXc6-*3A)3=a$6|2 zT3;H#h^Eg?JOH^dOrds8%^~{+x?t#NdC6?@=1eUtB6w_mlOiO1CO1HH5PZv{28bgF#E#qP$_=4B;BB|VYdrw(;}p{;BGfk1d``Zoe05);SvOB?PCaOACBYv5F9;{0*Rnr=&=%G1j9 zX1@@ycQ8Sa zU@_M?+G-U>59(5nTRGMFU!-B3oMY~=^F(JLFb6u#J#2wkY@u6(gyygAgr!QR>KoK^ zJ`u-xV`Yr9h@%G{o_E8b}=p|11h zcN{f@FUUO^nFr2Cmt(|2o+{h=DQU^NKoyUxmJ@=uJIfwlo7Nz5K!VXFdct!dh$wAV zx_`7^LCUVfTGudq3(G8^dgtY<>@EHKM{QZ+pmL*2z?Bd8ZJcPi%>q@3{JqgIjVz;y zOeiP{+-gnlM<75Ow~Dj3-8 z+cq2{9tqljHIet`;DDK}GH>4f(K)dfb23=if-e5A{UhXI?^qO|{aR)JhCVTM2GU|l z#e}o4FACuOKj@5*#3^wM5E|6fuseCmY*$jJoI^2~Sd`r*ugy);m`4S#zk-7uAGI1MF{L8=GOm= zbuj(kvkpK+m?9r5cd$P0;C0am)vUo&bEy5#}ZYd z6}ZC%nvl;ktL9JZpAjTB!RCLwdm|&elFF_G=-#rw6VCUiupU+JTEiIO$Sq>gvZD{c zYYTcLED`u%41O9J8nwAOO(}dv(b5#4Yn#>gC%+Ik5KDt+HSt^nLZL|kTB`Xz_QIUP z!@_1pvSXFX=_~$$b%;XhVm)1xhn8Xe={Mk6xbPd4@F>FgP3?s`Z{MNl-DW4CD-#gr zU3M!eE>6^a28ww<7{u^dlFWn40XX8L3aG-|#!K(8*|@8MqyBrDEy#d09GrVR0&XS# z}pC_o2?aIiTl~L6GB83J!55sl1ZFjb}wzq4C^Ui#OfHYVztTbNp%AVED zv{Y38Ys3Cy80!Gw^_lx~JapHqVBSg^lb>HdU}0%#&Gy)+75_x@y1$KuLgMj1@DE&O z`yxpmkkzxE&m62OSqg)TqT;c_FfI*Cvp-n@_<_4Z$_ftF)6u*O_5TYGd9%sK5R%gm zSFmY?#_2QVu9%$)uf%^gWBQhJANw^DKNh{O(O3}x^$atUiOX{Gcctke=-N=Ja|Sf*jkXXD=e>LFOl)6O z7}GN{1YyweeGWXh7^IcVgOdX?b*l+C?KKb`vs`VbPU3E3y?4H5N zE#Zb=Z>E$vkc|bRY-3^8qjJ6MuyQe$D$71-_ShwNPg1fik~&)@8)h62QUB1;+w7eR zc=vu~Q1Fu%#CZV&HRH~Fr%{Jy#^G$p9`HHNcSYBwsiX?nf7=S0nVm%s4GnEBiXYf5 zZr;L@@sq{dd5?p$|D#RQ!`S0dssi`|$$;*z0+16`)0KC!$D-WayD|u5VxZ!C`Fyf~ z5o@~6Dmg#hFJ@J%PSzN5<|JyBquznrg`s))5YkrzY}{$PFLy_~ z;z~CoQ#a2I2#unUeK+j=$`~JOJ-%q1HKxP8G zC=}cI`L-=ArFp4|`4aytAHbd`lS51luYYX!WtM;_6*3Ya+P*=slTw-KeOh_UXpCr7 z7qaV0dWSjwTGYQSy9%BpUSmkHmuu;S=B_0E8u!EMW4SNGMk~Db)(0Jfd*WxMn9xC@3HTF+EcHS+t@UVm?0dd$m3`d8_w8yC;FsFLWoHCSAw<3B|cz zsULWhU!6{2c9&2-+uPUiDFuGClBkiTRC75@zE>Z!>l!aDUrt^4(+;rxf6We%AM!PU zk;cP6+VZ+#y9JE2w>>T1#2tM542q<{C`Jojmd|dhq}Q%VMGB&+sdcM?!3v|D2~(&J z$epf}6U!<&|M7T2w`78+>}h+9qj3`Rn`O5$J+#Atg4fFU|2-x`K-PHOxp0;S7mV0* zkqc^M$%7AJ?rcw&oS~MOzlaA@1kQX`&cCM~vX)dBxd8!mwt?*8jnqvoJAQYz;R(!I zPA)Fbm6dC&4>15>2#z90Gw&bB~d+682ia^PSQr^;FB^KFdhEJ&+x(tUtO~sfdZMHWWdKCD3oV@K35V}UYgh#H-k`a$g< zNPfZmfy_xddMZPyX$99mwE$@FKJ0NbcJ?w?1+oZQ&Og_%jGYgRR+i}`up22*wkWE4 zS5*!oDooret1g_74Gf;Y;U@8MI z+81K|BX@Oesils9V|q~Bhg@Rm<%<`ai@hFX$=Xa+uM5Yz6F(Gyt$z*)5~rh*OX0Qo zg?2V?Iy0g6yF2K`9s>|KCNHk>;XiBBT-}hY`SZH1@)vr8n=$ zFF6xe@W&A`r+FI=I<7@HojCQPxR*W2t!)d9XPd17RDLLa0jwPf zZ;p4<5Qs3Ik6e@e#r(jih)dEwHw3=3-K|vcopBl2)194BIj=VieoyN;$NS3jb4{Y{ z#t>jl#MOi?Wg_k1OwcZwqW=9WhbNmQm+g+$N{B9u4kKlyH*fP2s`2ydXkxNy*EN<8 zq?BF85SBU0K&V^zi=_Mr$pJxaZ7i4!mAcg_ zY$oWy(8i-_gYhyX<9#ClWRsPfy%|8_ey#^Ov#K)WeA>`ZS+#%PJ{*Tp_HP1zKqK%T zdEE??T>`NxEQ8&}RU$&x3%ZOp;F>3PI=R3Q?1FBTNX#3^MXzkg6=;0uUHgt+8-BN$ ztLJv2eZ%?khm>KXw5k_v)4yZn@zn^0av`BFLo?wkqUq^oSWFx&#v`ICf6yV-_$2H) zJQ}(=)Y{!6rod0q{n;pcz8D5*r(SNZSD1aAKAp1(NMu+|uT(f^t}Z7~a`LhK{Tlpy zFXm%tWJc^_b;c_=Ve4|XcH2%i{n6fhN~uM~C1tig7{jXzpZxqspnupVp!Q?!S(7yK zOExOyRWi)l@x8~tOjc)=?bKdNG=$Ax8VGI@6H5TvVC!VYd24PkdkJUc`z>+jz0hMQ z6$tt&GhA%Ga%;X|_PC+3achLaO2s9?|MTa&s8z}LE--W~uN7f|8A)5bOLb3>8CH>o zVU+#TbM;~baKB8zH}0cYf1Dos4#3*Jo=JH5Oap{t+wVGnYKC*66kta7zGyMewP=DN z)LszYoSK|MWo5X#@^f_=kqen)0Y%{D9~~WgQJsP|Yrr!|XaAWo9*$_OM_%dfd?_pG za!oh0Yidl;Jrx=oeMOL)wcQ7Q-SLI$@-tDT`Y`!O1cG$33c}hRkWg0%T}V$ZPYF|5 zqBozgj*5v{HuEbmn2(b>gHMbhO)g0h25z<(N0-_!eSuz$qh2H9nl*Z(k7iDJ(f?fz<)`Ooynyy*PHUq(2AM0xI85ssGUSV|zMK z-JZXJ?|0|h`yY2nCOr5*@LJKK7fm|a)wKhjxZntJ&c#tvDvEWLAHel@)Rvr_h99~c z87GzgxQoLexBBF?T0|8IM>uR?yj9H_R-Hw&nLB$UU8z6#;57gl@zm67AOY}{L>(11dlmrXD@ z5E7GeNPtQ>TB@TKZpKSPKSZFml!PGI)c?WRB4_HieCRZ`UvO7Sn8O}}E0i2`QieJ?uYzk3*xS5!2R z|Ixz0^Wqo#?+G0Zkcvgia2eC7NOF|Cp%qF%Y@gcAlJHkU`)z#Ua%eR+A z${|Y_EiDI#?<@=N^!BzoZ*Peclkk`FrRA3zODdWdnLc3IrLv;JtTE?&pRS1AgDuP( z#Mh5XeF_b|9;+~UD;o$icRD&r_Zu6Cx?AEGA1VPA^3HI$=8YqGbsP|o(sDrJ=?Nx$ zVq>YGj3|JL2n#aAzO#4?F5};Pi3GlUe)MMh8kVHw>1BwnuGrxscZi805Oi~hq{j0V zfK$D%FT`!XL2|n*mcJfc%yRdu2qGOe?1A9olJ!0M4+LTwRv)3QU%Su1zgxhcedZ3G ze_meop9zp9h_M1_aW7jb6>RFba5*ri{N-|J%HjnFx&yGd{9OdfjT5f7Uss#&tzWnN z22J~T_1?TjSXpuzLY;r5cx<$4F2}N@ym$tskHV38mgqZm`9&pNT9L;2%_1QUaTp(^iu6eC1?sb--WBf!)afQlfor~< zyWYp^_noQ450zWT$_(<6&{9pOo?7RNq>5VPGLe8@0GbUTizFBi zyRF_5baw6o@}ubci?5DZinTGqnt=r&R460+*%unjmybeYL{sOSWZch96|^)%qID%K z;kOu3TtLP`=V)+4H+#aQw40LKjR}iU;j}TQ;vhk_0`#Z-e&-xYd+sznr%K}x5pnZV zK?sqqyLP<5_TCl)4_)bFgspT-Q%i@Y<*WVu^+z)iJs|$#6UkXo`=&E7IpvSjGP?_% z1r9#tlPpJiF*xx-M|1;4+oaX@6VV@^YxqN=q6TI!Thk*fH~1$ln#Ma~g)QUjwP6!A z4WCGC?Cj7lT!hHNQ;oS8*Cl(jAeNmruAA?iy%Bl&tJAkt2(9{95!r!NL0{mpfCCqB%d-hp5gWbb+!=U$s+jU+WDE)%Nb$>(_ z4AZ54i}KcJ&ybDhX9MmE?TSN#esa{CU#!^W$WX7myu7k`nmFWOL08q=k&gcFtoPCW zJ>Uu0I1q@6@vo{91tf#F5__5R2Y^(bKcA@D;3N<54%azle0-_eyR=j(&+P!C%C7yO zsZJa3ZEV%qOh&E_nh;&O7e))bhzl{o;dqZqvSTA{n+!sl2a@|$xAy%AE@8A2Ys=~B zjsf%GQLPm!IZy_e5BrzgTaIXGTOhqINKdjqCfH1YN#IaYTJ$WL9vX==K+ax4FrRx% zi&=Me)mK+nO*WSFo)Ow_Oay%UmXvvH8%xX1;(ED@&Dk$H@p!v#U)y_opu5D12A@Xy ziHef%rvf6ZV!mPqrPkZw2(o~Y6E=F;z1u53(iWzo zF<}3tvTPrie!!Fv=2G=-mdLHj1rL;veEhihAtZ@NC^pc6f-is1CtkjeZ3dJ{@UWSF z+a;IW`^A;F>#Gu`q@>LI!9Erh5~VGrJPml|dV(kimYn?j0^m(IbDy4DOHUSS0T1sp z2Zy2_Y!z5Gh`$Vg}*Yo_dEwfn^reu7U&)_RI@qmU@f z9vRUvf6=JY*(d*4MFl0)(hU(pm7PQ{3)O`PIPv5mTZ$ba&cA4LMgp^@rJ3b!fkrIZoI>~X9U>%t4{n= ziQ76j617wUgMvzwoMSb;Z-8HPPJbgty)=4g?8?GYgcu#+d{b{77=IXmAcCgQzTFlu zOD?40UnpgE{#eoLQd5aGVwUMz5OQ=Z-VIole*E}Wq_O|xLAUMbs8-e2b9@2!WdmU4 zXxD60<8gLthsGDFYb z?umW5hPnI~-Wt8*Tef&l_mxl+Z8e-x$%QYPraehWg+y+`f{uj{jYYR(Yo9Ek7;BlX z5s?!<0i@msl4Xt|BSS+J*cTu46L`%m_h(1_T5bD{LFDfWLb%NaEI73dC7?09$|FJ1u46#uIbkMf8TNJ8Et^QxoD(oW zQmLq|dfoU0E&bEa`(Yy!^UIebc*Nd)zl3o%ZtxHYO+YF&A$s@6uOiHI1X+(@h7<@CB}WvfExpB z43LeHR1ew@V9CcpOSHcA*R%8S@=Kg=4%uFq7R7Y6@QQftg(#|SP58}Kp7x&SIjjWP zFHv@8Msgp{qPqO&wRI~jMXjpJ{F6D@^;QOG0ElW>bLzZ0To4}fiy}GLjPN>?lqOAH zBN~+I?JPB&VLQ3qNfr>QP-PU6``3P!x6~5AZs2Y*W3%ruE~!t8p%D z@{*R8HfhLBMfl@OCj^TSD~a&5Ww`w%Jc4GeiK zns}=9QFNE^D+DT>=9>jArAuZHh}o447Q_nI`QRCLO}NLjmD_rx@N{Z0uQhduS^_a; zPFYiypv)xA#jdi@X{3_P%y{5NeLFPZr0VCh7(fk(Cw<9W*8^%G)>@<(uFGW?77nlc z&3#)7dZO{^=fD!GeC#4Ky0E_9SignNEh%8UkLJP0->>&4ZA{((b# z7vru{k-S}x&c&);oo?O(&5Qw(Dm7=A6ZPX(uDU+86zW%;(NNTSBT5B=k!jsR%f%(q zl;!O<(EH2FnUh+64ha#L8xugy7^&NxfNcGTsMJXdjT=82<)fWeTj;u^gwCFSNm z-`?3#N5b#3Oy~|TDooY)JRB1?=F`(lxG)^(H!0}2qGK622zho_QHs_mc_q3rN1ufD zn0?={g{jwFvs=EqYZShop4iMyK_UN#xUY_i^4t5x0#QOh=}=I*yHQC=5s(Jy?rs#N zL%Km6y1PTVyQGHhZWv&=8})bMJ?CBb-1n|^uWR|w2m{XZJbUl&CnIbFm02?OkHS`| zD2HZ)c=Qg;gwRR!55}D@PDtjOBXcAJ=+Z?iEZc(dq~5-LI+;x!Oir}CSr%U@pU;H) zgwAw}Qxj3>ywGXUXrcWsI7-ji>LVu?a7$^ua%-5M`=&j8*Ms!JS;xYn*`l4{Yl3{s z2%h@+YKad}WVL6@f8`vDzQu7qx3cq6K>?LZIr?Ye4hkL~%%C#{%V4|5iR5^9IN+>O z$<@t`l8)}?N}Eo=utrDQAnwlgyOP?kc|U%<1(K6&wv-;2j9aifk9|&yEg=Gx-fW@t zi997sBob1JTHyF*B9XlMqft=NH7FB~5r~iH1yEpMRV9>oqc!7gQRUcKDX@k!5nfpt zdiU%Cl9x^TVwn@Xq4|N$W~ji74+H`k^!=PpX_TCmW40TZ6^_UFP2l=8Bs$Jiktoe- zOw#D)7%BJKs4hLJXhYt6hsWm;Y*plU(Fdc2~3i*%iFFYjv(fEF}1n0 z_5+*^S7%P46jbMTZ+dJ5t`BIylGJ|ZA-G)!V~(A_)w%(c0a<6U%IL#mkV6QXFu{pJ zxx~JCmsszwMX`3-f>v){FeDaR6RYG`U3YH(Ppf(%)FZvl*)T~(pe@{gs2mm$TZRo#imKZT`=a7D69Z4=edEfMpUnM~Qrs?LyvygrJ z_GMOPZlV9GAZzPCe?@HYpP0cvr`$&i%>VLIQ`Z~J{~C&PPwYQ>Nl6&94cZqBx-E4! zD@?59YGU%u?Z%+|fBm%IkD?L@&+w<&&3U9%;ArA)E*62LT>sEQCB>JU$OJ;%=Eg=0 z0?-2Vu+08q%hc@rkPMyCWCaD`J0j}xJEt$QJ#sR%`mm##pe_VZ80+gtV4#%b+FPCxH4?!*LF?ePv$dd?R^IdB{I{A?Kncb%NFa_1nVGgqS` z);h>a6FRxuJ;qGV@6Cj~&wJhU&f5B+q#_NJfv@@ti+zvb?K^h{jB~`KrS*@irPOLu znNZEfB04KD_-gkJ+_YpdJTwnJ$ts`HC*tzhvw~iG!!iXzKIaI~2F?b{eUERj9Rb26 zLy#y7DuUDa4I+{}>}X|o3sn)V#}gf5u*1W{n{60sjg{C}c@@OhPvTs7b0de~%2Y2d zgxB|<{QjUXt(19@ORR<~2qn1CUb?E$GLebI0AI}LdnRUcLU89AC-&Kv376?#xVlXq zPIfa4K|~$gCyTsp@{&NAg7Y!=$BkSFSO zfd(I-Jf>sLLMyAQ4_XyXq!f_{(?263SziB2OnSqwetd76m)AEWq;T=K5(0pfUrfH-v^+x z#bQTHa=I%Nqjdv>HA3Qi%FbKgai>Rk-_e{^?;1Kxs^xp@3ZI3vZoVXn|P zw3itJPvNkoMbq;g9{9nC4SDFd;nBUT^2GF3k#y6yMJ1oC!M_=?N0g6F{%CfhfX$Vu_2 zhKpO1*~SR0%lPRs@y4aek=)UV-Bnv^2$!w^IX!uEqnx~k?>>Z7sv@F)uT1@X3cbdi zS?=#1DrUy+sfqrEpxJCf8B}5~UeSCLkyK|#d&~tny37IR(H(VeCWjqb>;BdKu3`ri zH$g$RGB!f#q1n5(FU0$YxqC-*Y+ZW!h{wc@u5%-}E`&S(erLxfeqIOrfhe|sSb;{} zfV_O6L%)WG({`^3>?6DJ(p#uwoqLSCl@+p=PaC^0V=`NX#d!Wq?fHpIggPw+b8+PtO$;gz)Uf2!WO` z)pEFQwYZunNan(18;I`bm)2R>PANUKC1rs`FevK1Q_5^GR9Q{`xPuaa_RXt;B{GtG zNE*Au-3&V|t&Qx;TiAukHb!8ZHxZa#=50l&KvBZ{<$1P=zsW=C^mMDOGh~Q66VECy z0x|K9cYtf&RlO-{J^wFa0Ab{n z{&w(lqWR(e@pmQ%+S^kup?37$mW@xI9v*SsbQ++}z5v1;p0p{g^~ID@D0dVrLDm^Q zDyw4gwjH2W>i5xhe8VAp%Tj@!ZwD_=%eZ?JGwkAW6#uMAVepC0!H}->{o|=2;xD?CEr~ZV}<}{Ypn#UVo!t_hcQk5Z5^qO{^aNjc+jX zRYvDTMmt!&x~>gKtmEsab&68da0(*kt3KR)VgdBKAMl~MWTL_Q1I;0O;BTQ`w?leP zum1M-RJ~2byiXz~OZse3h5?VZh|u9`>%;hIL;?Z=-s#cG9Cg{OIQXqf0P@wJ?}$Q* z!P)<J9F=Jpjl0>1w5D-wxrt_7D|&4sKMq|LZ;sb-a`7;^n-YT2dkuF@6u@+V zQ?J|b{k#(BOYE<*EiNQieuM;p+R+naIgT8?ez#)VVMeH0-lq!}~=!d3eAC z!u7W_EcWzuO*_S}oaDp=&x3~t{?Y;v5MWQAQiwAEYJr;1OCj04$Fsg}qHOhBr>2@Z zSo5@~^ECKe7!3!WhWk282c!L*#9s{rNjrfe4gmS-Io|OYo)B0{wi~mCZcxm1xO&iAF&n07*=Sq#-C4L>f-kaD z^BSHzn27^&IkuEpK;oX^L1XoJcsS%vIC=1@*gH&7IqBPv2yAG;?hd%~Rr0|FXG=Mr z!sRKou5J@g>T>t!)SwdZz6k3V`nUFi&KhUdwk5& zDSQ~`Z(Kk7&ck8nJVEXZiBroY=XJ*LY-}EDex9{l%_AI~?vGwRlvHf)#N#Ay-hN|n zBPHwX?q3b{A^9;e5ql)Jo~vBpcSw#S5ZTd5H+O{&@7{9Je?-FZz%x863;cG};bMob zHF`7+J5UKjF-9HCg`$#@#lwQJc<=d*g_iITh83VzsGqQ2P7NCZC+}(d7#m)~t?j}h zCOCg;UbeZlyqV2$`Pgb;)$x19&7URLg+@gfE-o$_?r#L@a^B~>pxb_&>`~=?+0-`M z9FdeEzQHDH)4m9hd^i``A!~FO4QFzEH{8o7Gj}8`KK`bJDQMy4guAS@D~~;jkX(w^ zVH6399@nZOChlCoO?0U*frQmNOEQHrX;Hhfz#a?j5P?6C*$wXxa z$QIHOW$6~ZJQ}1L+}(n@k}kVvl`5m{n3p!9I2>Dt#fCWS{kPzTUi+$_NW5C4WR3vxfe zfZ?>g>@mc}o1lE!Q?rn8h03N-P|4r+q7C>#1<#gB`neqF2|Uf!d03W%JIO=yAQrRy zg#2Nj)4yZl7*HUXnwd&{|6KM)>}YxA8QissIw;rX34-lYJZ%OydB6rv`0QLgl5%o}CrhRrcWIUQKqcnG$A~8SR<<$H}|1=uC ziK3@GLE~uNDL4IiG@7J**Z9#)ZD)8}xD%{&Fw^TOaG3Y-w1JT_8@*wNZ{#U#Qa6b| z08onCe0=ypB47YZK78CM(0l7Xo(Z6}^5 z9F*C!n?hAI9i3{7vt*dRAR@g}S2sKQFwiq>aBFXW=R*W5P-5|(dU!0ayt)(1vkNDm z$|=>bay#0d@&S43g}X1qQhH|lD_#k060q)(Bcier|4BZ|CmH72_-6o~@!&rJ;J<*h zJJ?7ksA`X`h$^VmB379RBP1l^jE>Zkf3NmVo{rtM?wNZhUidWv)avZCOuM<)F`S5esn`;?XFUgz32Q1aD-fRJ77spV8#Fk*=W z5%!%;wG}(erpzYN8jGt`FPq>0t2THO^cd_LcvP4aw{qZldKtvHP9w9mrU zAX{27C~v!LmdlXd#3K2f+r_b#yjrd-bE=H)U7*F&T^$i{m>+CK$9(kY#}bbLepgfT z>suXtOvGgeXOIBgaK^X`5=UPz(O|qhaIgng=P!sITf1~Rj{kB^XKVX-Sa}qWOWP6h z(0T!8WmN>mma(rlWdp!((2D5yC@~*fHC$K9GG@{c?`d&J+=&L7_aJRr8aEnA?T>-^ zkCiSX<0-89bg}=0QOmeq59<9LS`TQwiH z)2H-|yVY^hS}8~CSX#DLJgm<@gVeqU3?rJHbk&w0!8uX~{E2~4J?9i_$j^ko&IX%Z zhAj^*2sav=Qb}f686)^F=((Ixsr$b|_L(G+xktQt!+@ux;v?p`EpgHh^twZfQw=f< zwUaLRB6W|WBdq4;v;g4T-aL~h9LD&2|GK~VVXBehgP+lS2K|P zy48jiA|MU|#=&vP9O5&;!^6dB)#RwAPH1Ii^}JT@K6JaTqic-fKB=>PnvAYY6VDe$ zMr!}ULPln0X$&aUX9N$;zJyVk#?*+iiUOBtP^&v0zbF0dXmi-d*B6?ao&*GS_Z1B& z4i1iSn8p1WK)^fS=P!s_kWZh_LVIG}(39QE{gWNGnQD{Dixa>R>JdJsFKXE|x9%f! zzEa=R)aUTi2}SQpBL}Ia6eOG?_hu1*havAi);`O~$xly}_Ykcea&A4IUtVtnd?3gg zzm3GhgNV8%I?Epl!Zh5c>%*;s+^Ms`)X4qi-s0+}R7T<3*RMZy_H}~D>W37fNDwM! z+V$5~R9}Q!MXsyuks)=_I8zQW9LHbJuBz?jupXtR+ZeDti4%YQI`NGd3OR#j^9jiY z!zUN#31-7W5(O2y6Ew@=molWJJagIQ2CFiwgN8>qaoi4edebeI#>S;TC&w06SH(=# zp7!- zB1{gFbHf}MIn2HR>x8CjS>N7yj%`CkwB`-tPITuA?Ca}eX;^Z*wTS^Z3z+Xm5RU>r$eW_@*uy2e{9vn05s{IYSbPa{Pd%t< zSZ&eJ^$t>zb@lX$mM^yT+i#{cE4ubY3)Ogo{2GkbG=!EW~#kefVa-rB)h1j=oyfh4(=C$(WA(H z7~8fw%55d&cXE0YuOG6NDGcBX3nt$;pgdi{DtI1ywg^QckMv$fQoT@DA5IK*pJr9{Jziw6mJ#W$bO^*1&qbuMD9PjO&^#P4^( zBotKZxWMDQxc;J_AZeZD-yrg;J*73|Luob!QI|Sd>(qlypoT#2WdwRWM-sWaB%`@8 zlC(k8-g)-$W9*Rz4T5OrE%q+X8C#+W z6FzxPZ~pui9B!DCE%t`1Z}K=kh<|qD=hW2xg0@Lax z%dyMGJ>LzI6q&*^*jo_GQxx%d%GAUd!@aos5!6d1VVfmxAqJvot($kA^7u=WCa z0ZPy2I@^gCRyEz1SJf{ZKQx+lvBjB8GKdEkfPJ~?r=vMO?iZgL9&k(nhljD;nY|j( z?LSmMt;IQkg!0*dPI~Kj%hvN73&AFfeFB5*9XI8J3Yd}U=QGItb=)6VA#^JN3=R4h zeKP>${e6Fe<+n#0)C&h0eY|<0CFnWh4|Gqt_1LyQ=-$n%DzVSCZm>Qp!H4(vfCK82 z%|umt&TsVZ*S|+f{%e=vW|s8yEj{M(eYGSWtO_6 zVg)zYv;TUZ-%xvQNTN~W?(v@2?{)%Z$l!p-Tp=PxP?o7YkRi>_&G`mNb+3F;sd2L} zFTXqwMFQG5LFWfhcEb%wrx-Yev1XJ?nhPk!0sYluMXv_(Zt zUDoyroBh}0VsQzjqNQHgmC#_M!~Wj8Hc`i-gC&YJw+n`%7os8LCC)SYU2JV`RY1=| z`rSZLq&M=&Y*D) zr}GhI&bXQJ(M;+ea_qwg1QoL&_$wU-^ zWMpI|{9?ZBY7eMh}F)Mwrp3PvmI{(Vml{QI3qqgc&K)=203BbXuXFpXD3b=m? z5jaQTD2w|%XmuCKVJS@!np&-LJ&^?*0l%({(M3dkQrSa**M0nQ_=XF7{d+h%_rjLINc?hgXuv)?W*ezJZaw`kfP95eLrSW~0EIrg zDXgt9_jPL^o*We&joBl;8QQw*o^7A$5&D+4;19d?S7DwQzaKZ;qW`Zr{Rd&3NZNTd zd-~O4n_GK_>pvok6kijdJlTw8cm0?-P5#S0E0%4 zzX{FF^FYQjZ0I7BW^k~y7{d6?;;zdH$&C%*A3pdRy}hR(8OL$=Dr8U{?*3NgecLCe zQ_RP6CY*?}cVMzvdAjE{B;WF~5nsyXYr#sh#%=j&@+yKGERevdbg^c)B24jvhB_*! zCjf`vItdEUWgxtB&a0t(5z%$DC$zapDMGda5iBL=@w;B0q#~~z)(jOVqxN zOK^IEklf%|Q};15sWYW<84U&o2H4^}>*^+|)U~Ln*Cx8X(67V0{43<%=4{8X@k~>u zipnVN#EnH_QQ;_^H(KOgaNi*jFwpOLz~a9-(H*&u#Z%-UL)<;f-PVQf-rU(4#dTP% zA*ZHVkQ3FtQHKY&^T9l(QHS=(!0{^Xo=svKk*2x(!0ybpM4 z{9dZz`A?L^^MNu@eGx0SdqUK3FdLb?H(6W}C;8bEeh~*WqTq)rUe@cIH)v%!mslTg z#;3`=N2sjk9Hd|ln{hc|kF_j(zp~Y^VN4{ECJLk5We;$%}-v*0$Ct1KfVBtxv^C=iT>7DPO^aZ{wLd4wG0@BaX#MfKbC zH|QSeOh!a!@Bl^lGSIEQXqfx7ZY+H49~JFP9o_)HQijMffDd`1M1O8+&2kh8SyN`# ze4+~os4(#{dtyF20s-#XWzKQB)&lqc1oD4Y`rkqRnlWC(Ptptn2G|m&F$d#5=|y$BYz2IRUEM$X+dRbEY9?s=mBwwAGJ-M6(Ad z8C*-!_Jx-crf);9=NfwI4G{OOAi!%I*Ck3)!0dMy$)!dFLS3pbDixeED*XYR<~i!QMJT&E8-B#4PIqSLE% z5EL-z4MoICLF?Am)_%lyYuvP_;b=Pd+OiF})-Av?|66%Kkl|OI3nxf+w{&)f{tRVu zt#Z~0$C(!DrluLzkOnzNQEONX`Npb(m?Dbm61JbvuMp4XwoK7I#T5d??-`H7p7&Ih zEOYWqFqw&nN~cA>`>NSFVWSe9F>(qD63T>6PV9S?eggA3kkaxr}aZj_T=hbb!u zo7G@&)&Lq3%l!r6>FH_C$Rz2uWux>SzZ{#o3mluN@%Qoyo1DouNnk(*N&xuB)x*`k zc~FEz$Z2`MY%=ofOm>>X0^5StV|LAv_v{C66OWzo-uNC^Dp+G_4fCNbpOpZTf3~p+ zI}Iub;YfMbi29wjf9RO}1qlU*MU~dXRLvbf9TCuoK&x>!UQFIlp!|KdGRpauH%fi% z$Vh1pxpD4H*-k^c$V0Yq^i~v-2S5C<8umAL+%iY$C6hQmwtA>^2xvG?Fg}3)cdUV( z^5p+U*S~;X9(A&1!|=`ChK;(rgHxx}bbI@P54h!l6i&voAw&yA8)-ZP%PtPR{Vorv zs-927xqkE3(*necgPE!J{XOfpd&c8yuI2I#TIO}%WGe6d@&pL5tJ^gfj=)XC<*wd>cpx!x z?yhWxalD1%V#U4bu#8HoYz6_-*?TYF9U#|h)OlxS-VzczYU&(B2KBAgs00(R=6>&n zvQ$M)k72+94Uvl||2aU?cIQ5ql#-GH!A9!nKuaSPfM0ZSLS+Z0G+jM|60O5ASX1|u zf`nTb6)Wf0jSXW6(og*){)e6+4oHwxknp!qb$vm@fsWrX?R3g9p^Y}(f*wxlA#-UA4Zg~YqHlM1! zy?rWEtugKIWXBY~y4wI5Zqi&vWezFjc_b~r5YU`Hmj=(EI=%D(Su25ZsargLL2M0qdzA#E)u;~ioq2d ztf0Js|m*uh31PLI~oiLFAsYZ@Uln4`CZIJiG9<~@dm?9d+3 zX#v(!S_yfrdkocyeqBEi&}f{HQdsy1vOG3IMH>;yG$^8%^6VK%J(hJ$fqx3AbXQZ` zva-q99iDU;=)dPt^omp{Bd2xjxiS`EI=c#@?-oSA-V{Vvz%U*+&%Ee>)(?9a9j5t-Xs>WQ->kW|F0Qb}MtVo)^ERF$=zzy0ym zN0EL@WMs6V0-EfGmzrwfGfdV z0bSGbinZyNBv!wCO5fK8@kAgGl+lGxy9D0&O%Nz+Kk!md{JM0vIXQo_e0b?`vMV5_ z5b6G)n;?kmqJT^M0{BTxL0mkCyT_T+;{5z8bB(LhRk)io27yhER#jzcATZSFn3x2B z+aN{l4+wSg(|!+GNn6G7g;Q14G}p2{uxI*~e@}q&)$F${h5$Eq)22o3)Y`M7K54X@ zTzo|wQ8hI}fbf5EaA7DeK1TlJo20&uH4zSI1(ZO4Qd-);z(Bdr4i5k>9L-{IEXPQt zx4pdyO~V3NXykyhxPl!$BmK?+au1P_k()**{AyjVz66FXJiMVBv{GLE%zXOH{ke_) zY;#6(-omQ73rayo9<9MxF5YMFyV`(>v(HpTnZ?m^;-{&j^Xa8S6)|{L&il8p7Dsz zm>3hc6wCN{Jh($dAjymMHj0XEQYabeA^~}3bnfoKEp7KeKw3LTd~w#MbR_VV3<_GT zlo#pztZ^XuA}kDkLjw5dn(>X$nj7$FvtTT*(QRdAWz%!_nrHd7m!yF82Z|vd zaRrGA`otLL)ory}$I$);6@!yIt&w9cDU}gT-?bqg>NTGSq1^%7JVy}Zo|L1?Sk(fr zL?VpPx{kgstyKmW{GhSyA!9r)Qhbu#lb>%T`ia$X<7341fud^s_i$;4h_=@33BNkC z9gU8NnsJnqr<(8pY-me+knZ(I!KIZamLQdx)8>TGpiiHLF`GnTbQF;9D3rTC;{E|| zd_y2Q-vrpIjhn##!TvN6up|4eikm160@Ze?27nqF8I#vB&=K@(K!+^q+{{2%>2zzh zbceY#zekIfvNw{xI>Q`Mu}Ny9bq*2Aht5Yp(B6v9@ZDh-3bwzk*@on_0@|8|!`J^{ z4S67G_1O%ZeXF9I@OTxKuB5t)pT)-@cCEMODah3W$sTx*mYY|CGW0k%a_@Lo6A9_bBKaBC#5jSA3xPY2`^TkJ()7NyE`ek|Nv#zA_i3M6it14+ zJCQgXkU-gMM`v}5x1B*p#{dOFub&BxzEtv%q5pSo%{&dAmDA_i7)i5Yi@0CJDRN@5^_3bcJlX6yBAlT#9la$<^DTk1HSs+?!R*aSYLyPUJbe7 zoj5VjR;_%1z8LyL{4#0rKi$CiwI>bmPAl|KlbiffY7sh9^Ackqm&AZ|+N;sHPh-1+y4ThX39ZQ1%~r0yb9j zaTY>IQ*{tzc*|oL>M!HAc^u;Zf|S8Z&3NMn(C5SYrP6Pj1hdaAOKQGh$G;O9LNwvO z$d6~{hPQ6P<>lX7(({blM*fW?5X$+Fx*Kv6ezP6FAC_O!l#1tn_L9PLEfD5S|(jyrqv+#BJq0ZqWwOol}`8PeH3`Or_OLcZ1~I zdPcG_=x&ILY6IO3_>nW*oc>5Sbg3re^bsbkrc)<(0LF;@A`J(X3GjPkH=x3sMJyod zMg2h*!Y3@8HpZEG?`R7eTjU2p-aE|zO-~@2LAlPHWf_0bM#Z;WXx)hfsNNxqq8PZi zF9BoG+1ajC;?9D@U=+9joJre^(f`#*fC|79+XnrelVHCPEy>rs{SAc?VDN_6$&t^B z9PPEu5Ao+Rvh7_h8FJoab*QJ* z+i}wKbM~2G{#vtB+gut0VpWn{<`p2!Hd794DAr~us&zYH7i z9?$j?mo18cvFirdPj+(nJ9gA+TX2>=42R& z1>8qPn}h#~5(;;%-gr3aHXzZaAd4fx#rgNV{ktt&J+LA|)r0L0rB2<~rRfRiPuvyG)i< z{*pdqc&;)zPWa+D?gC!;J_-s%TB0DfA0V$fH*rjDfmsnzk?g*|(+XZ+$^uR)Jj&g> z^oRukNB|TgmJkL;M`Ezce8)^@>q-o6f*?m~3^4E}HvQkk0K;>Fm=w}CIm1UDZUcJmpK)+RU*PZ=i;=3=I{FzT!3k0tKLT0g?VcP(r4Ud) zw79a;)?HBl%Fu96fdNx#s8H3%GNm$RdDl&-clp!@Na;4z<@SzGNI4ohmKZ))?o;vY zivDIPD0k$Y$z}NA_wT?&3JtEcnoY_Pft;M)V-^hvk=q<*EnXDNbrlS%C8S-j*;F|E z-H8A>;06o{S9Ib-&tw@8AkXgy6kmI@*KS&vMlZs6_Iv4X0+of+ckX%$R%JZ)!vy_UP|g; zjMUr3?JM#&Ha6i*NNqq~6YnugPTOERz0%5~ts`0?3<-#)$J<`rQRkUoT5Ey2A>j-C zMPp?Czoao7|3_8?)v?YI)?gw5En9cp)dZv;&CN4g0YnR@csza4nIG$2Ppt5bj7E z9cl)PxN-#yWwl>X9RSzgj%rW;P!|3?@pegJL+@_ixk`x)X9NxqwSOQVY$HQg7HDS* zVoU1&*{qOKO9dV>T9ryqvNxhQ7BJ9>Oe#^_6 zhY}2*Zr}F*Nuva5o6h|9$$v1D!>}sqp}nC=Es9O|zj9(APq7`*z&IhXS%$(^OFNlZA(? z&lmcVfEm#H>nnH3n2`i@XwDk##=u}K2AOK1oeil$-;$O^#tT<5taM3>W|IQqlFI4r z*V}d;%i{c~1njx;4?ts-m7P^eW~Q;|dT;s(C+#3a^^w_R=}Pl5iJV$i2{a+jy39?p zWXW-ti2t!yDR7cc1<~V^z*5J^t*6iy!#M=yg7WckwC(PY-^>MC9Du5sOBiC( zhc%k;7M|^ey{VVPuzPQTRue`X32+%p8t?KYo|~g7;_#H4^*$A7cuc8(AwwnUm`RtE zRIXO}VM{15faU|d+oz*9&(>lnmDyZdb&II<@e_QW*YSv)pxdRXe~LP(PfCU-pdk4U z$eBe!)M*c!w64f8Q9r#n5oWgS_^`0BaBj1EYkEcv*Jf4>_&|O6^7D0e^{dCMGMB-F zni)#QiAiL(QAvmkLytSV0Iu9w6}9|)^-ah4vx@;P&X}HD+9bzI44@wI;~{8|vx^ri zNM~{0EZ^RmAb9hk1i>2(xqWOb%ECj*LZfGci-&7(n#IP?kE<)nOurp4)Qzn!zPG7c^pz1?5_f;Lj)%7;;OP6Eln)OtR^ihs z$9IE}d=P$AY+%vK9e^Me50iVV^aHd(OMw;)8qhn{*w!Y(#GG5s`Ex3kLP1uWapZzq z@Ar9ddIzj6XO1qRNlE4pED;F(xL#d+yajYWvZ;KhyEsoEyt!`Iw2_wd zUq0JVZB2RL;uzqhOFH?EW7nIgBSRd30>pm={#3aP6j z+ND#L1THxXTGw`7g3KxnE1L*h6cm(g2@suTWo>&m@D-5kdw~ohg?n1I+^YJL@j_XR zKhSe5>d-o-gf)`j#t3a|@A8@U7Pho?9yH;KcdZGu#OKe{S=o-<`ZgGmGUyp#Bm9V* zi;6@PNwrPNuxo-Px}%SpluEgO|EK>&&WmMp(eav{ip$c69Euz}7ps(Qyp|-<44O9$ zV{q~{^!YU8#C!b^kDn8NY3;&D#OHK_n-NF7{~P2!FNOXJhjTNBf>HBiu@nq#m}S z8Wt{h%Wx|F$>}V|WUlVjka3x0GB2^_Y+G%OE?)G3`E}o^>crRkB+jS%%NGg;VsGg0 zg8d0c1YVN%eYyyus8m57Y(7)B_ITtzj|%~c_q%davAJkX>U5HKsyp^_!*-eg1>u-2 z&^w0pR#tHi9|q@x&#fscZtj$U`27?R=29^^6HwRaF(=xl(c6wanhxjfo`pjF2&y zn32PI&a8pQ4y^PHI)-@_`;ik?|rfwl^ zo}?|m**UzwcI-?X$C)IOgu1ciTvQ5;1DDeu#vA+tK>)BoXO|wDaRwM}M|TDCH3Y#U zgZyB_*Q@RhqSwcpP$aiil9g7I)~VfkgCzOZG*!pa@ZTUn#e;xPjA?0UWe1;s260+( z_wi;uFqsu7)0c`D6F1H_k~T)jCsxFJ@+$oYf(HPm9zXm^{+#^Q-1ev#2J0YbyoV*P zuFvF945tgIZNszk6sHN*t8G^RPbfs>%bs@5ev&2s9S*8(+Cqq=HplWDJtq9A1E>Px zyItwNY?%8rCK6z}J&*T7qUK(~=b+D*|K4O#L%%mguk*CEx7T~%BNT-Qns9Yt)7hO9 zQ!QjxHTC7ixSMQfk}Cn-vu9VF?hDV0C?Wz_$0;O&1%ovBcE2ggEO!j|NG_`&f2&tB zle4L{Kd}cHUz9`E)`uP4-OZ3!cjP9&7CtKOPga~x?iR2(K4$C)qNJe_%#oEQde0xJ zWMtH8<>=ysftQw`LPfTD`~2Ryql*jGP>zYBjq&CeSd9j4*7(?%H+>^fM_>KRCa&e< zJ9CT6Z~Pj6oIk8eFYU?sNaesWPTlyZ%(z5@EjdK>l^aRBx|?&T=GXrDHKjvZ1pBSY z-r$_ZX~dm;6#Rh@j8hac=8d7R?-$~yMQ;(@TTJJ!B zaD@r>(J#F;s`t(E)*i>7#|X+Kw#IPI_S!}xpZlWf{}LKaU2%uKl3d> zVRnk>skv+A0#;ue!5z=|rd;Iw9%zgJfs@^?q`9Rs+MyrH1FfCk!`e=IM zi+7TJ`XDVBk~m%WNF7cO+k5N2qm?b2Q$%T;&U?MKw6)ajtwvo@KJFS?tW4@}IKxcr z&;r!c$%-!}Tyy5UxU?o@ zZ+|T3ryertyt#Sv0KwgMbw}#R7;#Z}FD_}8a2`_~>=I#o%*dc9XsBw5Seg1s;CYB+ zLLBKzSEgJL*WaG^jX$KhPg)ePm%f41GFC-a4+grb?RI<(1kr~x0cXRDM#w8EcI{qS zQ#JPH(Vy@PEh4aanoiaRtq-RcYM*1)!<|86RWL{)4vUHDNHOL<(b19lU|`VBBJ+!1 zM^NkPW$ArLJd%PMEN(Y#hf$4R%UF5OZ2IV>(`s_fmz1twx-)vkT&$VY;)`o?joUd z)W%zGas8z&$SsCThZ`Jv?5sjWZNv|ClL18Yjm<8!1k@Y`+2+FA*Y%*j40*moEsb^{`FTF7FA)*0Dy6n5f=G+Ua+M00by3vCKxa zqQNb5o14v^1Mo}O)NaLySPT$7SsCnV^u#bH2{`Pwj`l{nc%v?xswHUOZS3cLvu02o>pI?VOY zTs&T1o}N|%HY-kURigcUzn>H9_fgloBQI%mb(M+#7KX&ly3KuDm|5{nbv3xh%@r+? z+wS|fZ(px2PD|GEUW}_TEQQ8~<8kb~;^hq-c5ERQ=v%u8BICfWV+zs2z=#ZpPfbh1 zz-OQ4tr8il^+Z}l1jc1ofW)xck9(Kdt7#nkX)dqm!w8R9@Nm#B~Q2P zu2i>DZ9?HY$zfWFKI7t8;-o`5FL=k&u8553S+s@X3u}Hr>zEj1Xr0y7-*wmreroH3 zGvQzn%@13j*=yOa89^Lqw=wG@rXHUi2gk(?eNihbDkCaI5P?Lvzu#7-OH1WYQ+QOJ z%xKR#Q{%8GaIKzM$uQ0#5h9pTvYaUVkkfMS>xN4gc(ROUvY#BnYdUx(QmU<^pyS4q z0usR$f;I1jP>^q|p8&@SCJNBohV}ZFvHdu6A>%cD3V>0yYFj_IP+8L{IL(U}6=Q1! zCuXY5rfVPKSocLW)g&ctQ3Ud5S|TrR3s>bg65W4D;0Z$gVGG*YIw2+YS1Sbd`J-bd z`PG}kbP@$QU2yR_1itEfOolHh!Fw;QuG-MDN7)gSTc3-!?!zOmYOvXkRSwPz^^Jp@ z8==AA2>9V#G#L{dE&BPca6K-od<5)8_d9wz!IBv>IWcs&-_oED9_<2LC;3>QkAZ5< zPY;$L?U)YU=91i!Yj!H&yx8Z8teD2vvq}|9&{RG{QI0f|{x@%}mO} zrV<-G0r)Fn{Ff>!_$gY=Qd2s+HPO+U?kVq(AuI-cmi-+?{-qw%6JDaLJ?T>MW8fOz zM3F(ASKX``)Y&6tRe@szSZZX+ydU8Yk$6%hxqoaTtt);@lv&{XB~u1$<3LkZd(bot zGEes52mL)In?Y&qvRG`p4%cfgYqJF#Ae-PJj-wHDbEOjj1r=QnETY)8^}eNnriZ4Z zpSVl4EYF^T6DuV(^}^bqPOfr8Y`5Zr$IBZVoVf}$V|2Leri@aTSA&}Yetv#hAT&wA zJ-*apDohJ3|GT?B8aI+fQNY5;MV`n>nAI&CZ`!1;T!JRc zG82wVyHE^=8Lz_L#cvyQI)UZ#^e@JDJ8jI1k$}T&S!v4(0Sw?ku&Mq2J9S-s%q^{E zaIgi#=gLG`HvegVd(E?5T6ZrX3EkhcXc#Q87)2xWBvC9Nv%Yp8E-wf{m*G3Ui-b;; zE#H+{SoqZ-$wed7o~wYg@OE2p26}W|J4j`8)PsUPincf<5LDsOe-S6i_RnUvpamD z3EXaNrQ3twZjtR0NxQnf7ETdYQ%}IL&_P-c=3#h8oc6}IS z0F`n?L|Re0yFo!fN$GCs?hZw|q`Ov+5O{T;iy+dd-}ozR1Xe9q`HVLQ;#ehB}$Z)sykh$z`pP-?)V+qN{KBihCyq;}vfJ-tnXT42upBTv z6=+p|KCwo4DJs?<0eMe@-DEMjOT8a+4O3Y z{Pw0LU!U}s7RBm1AtZsEI*8DP9~T#whiCnh?9^km(<$coF~*)@vbs>`Y2mqJyRRv% z)XS;3NqH5dHWVu8fNXX8_rs%Y$o83q_e!1LPZ`P&L$x&OSsoWT`v&>v&)@?!8Eo+HPP zrylA+j zD5A!_K2wt9S_V3NPbT|FbO*RYbXyUs*>Mah~FVBp$1&3n`42DyLti83wQJ~!F zlbrcBCzfmD!Lw%(55THrxUmO}H9^fxb|kIla|U0=!N|;bsB`c5#Cq4raemc2nZymS zh9P;CN{MmGb(D`wnU=N&Gl>RD75IcA_aqMM?)v{>I*@&2Jb<4I(L~>X`2s`orOn0n zR-YJwz14M%GhyDQ@|w`!!~g0(17C1FHeBk>NulXf$XSkZI(FJFbTEW95fT?W61%u? zA1|?jM2454ytjYc|2KxRA%xCceiOieH?|4sVG?Xgl`fFQJyzNH#@uiluxhh%5i3PuUmCrUKL9+#Z_ z*EK%(T?WsmT5~D!9m*$9^6k&ZDldO3s`(;w+1jojOG%b5c`2!>nZ~iyW~G0;!Wam` zo%F#f#ZkVP{xos(GSop=giPGHh+;A=gZYhc)hlaFvfg?Aj-Elur3J0l$W1fzTu}Lk zZ#Rilzk*g6^`G$^&mK|cj2i>|vblTs zHXbrbGtHk{`+L8Bx{8W?8Owf$u2NRobhpuza0<_J(~ z0m`!BX~1@GUz1k6XuhuR>B-i3Z@~v76c=t&(@4e)kSE{1fdK#?FHwa>p7lTIu3Dl+oKLh>fPZYW&ZoIR;1KfmMzB+Or0 z41BjmRkN^QuSUWQ;gE%owk(XLIS4QR1=7by-Cj-CnQ^qyG zBhc%u`kB=Azk&Ga<5V7)n}K3K3FTE~8{u%yvWofeXI@64^(Fuv{hx7sF^NX4#$B}( zaIb)Z?xV9X@)aggdhSOlVPX9!t-|=@>{IvgiadTKZzR+Cs?o^k=%!~L{KQ~-@%&A+ zaiCWKN}ebh@@SpX-w0Bjw)9irm=Jh!Vk_&3xbU&>F%)GE7^%#i?<`|(Kq~`Dc56K# zU3I}T;xnKgjuz#J5ooD>e!9ya6j+Wbo6XZ^f(m0Tlqx@-g!!j1&B-+>mm?4Xnp)OA zozB<|R({fpc3?bo7EO~~QxnVnqDeOyeN3&mh7-ICWS`S4kpQ5jR6f{R0lGrMF;JEG{jzZG@dMooSX|>~9Cs;>kZLSL;tekQ^W0AxUom^IGKr=fr*?`MIiM4DMv*n24r}>i69SIJlSOaqOWH| zM;Vn-nj>L1R`tK5^4r&#?Iv;m7gT-;bE{F>my&`)YZ1SAxNR_}$MB^pKK{J&HC~}g z)t3>$(PC}`yV|X-{{@!Me7c41e~{)ttl6Y#=M%XifS^)srMX!%W=22?TOb>9@%8=DDv>q=}U&1LKGz_sIge50aJ3=0C+67T+oXxq?h(`gkK zR6|7vg6b!rn#WXd#qi7zj8LWvB4Yjaz3oGLu3ydh2Mwo9*vZy#9B-Jf_$JJ~8V@+A zkFve%U=^mnhu+;njO*tCpx2%|5s|Yzybb4JvEm8l!5_PT>lE&q?v5q1SDxi>WRRa* z!SMk3N%He&5rQ2;fF%~pl!Wba-!U{+u{GZ8xvYJX2i^NL&!^waYUy4827+Cy;lQ_2 zXS-yZ=p=&;_MLHmJX=`gm>jS`(g<^e*YxB*Vglv2tc*;$k`gNzCLmZ83kRh7gYJ6# zjz?-=gEx-tX3_Xe(X4T4ZDS;h*%yQO_13!z%Kqw7sjO!L6mf%xnsd7hH8z6jpx3s;c?AA( zadCN5xAnNsUI?6C90y#fT-d2xyne#%!VT=W#Amd2p7#F+(}n6t0|HJ~W(*%c-t0WY zBKPOD>S*wzG7fEp0?VMZaf%!a>J-s}ii#zUhQh`rCa&^n7zIuu)OO ztnsr)${VpQAXH5gvqUK?r~hFo=`{Bcl*2MQ43@V7MU=G1##%jd{cs;I2G(&G>WXq! zS(ka5TFu?5$^=41FDCR^bzGKI;x~J^!e7Q-)2)u*J{n=Rsyura`+Lx_)S>+Rdv{k~ zy47+AnDr!NUvE8|O}1!K>5j}}el8{O@Fg1Q)YNPP`6ifQj%|%pGJCZkQ+<1#P-7L}=W5Gv|8S9z9=M+*(|Uv$wbR<;!j5e#XK3*TCDbOn(mfm}Y#8$hWfI z@{k0Gc?9#vtt63~)No`(m%RPT~VDOIdk-%F>qe*o3Mkcskp= zuro>FIqrvmAyGaE5pe%%ZFTM<@?l|fvwPcuj`4ojgS>Fv9xpN*9Ycf$mk3M`D&j( zcM;cT1X*N;SMF;9Ji!oe!Q$FurV8QvNqrzmWAaG_+Ne&hrdwq|r~-}dVar{K+ZBC< z`FQvzEb;@88ba|qE?^&0{awhSPxtCn({Ogm7r-&)7MgF3aIs}Qg7BHceaR%g^h51{ zQDt1ngN3oY^0#ETIdw9s;Oa})4S6;KAx4Y{|0F4zrPuq8%Wg+YBZ$nMkHvV!=o$hc zMtGkDl~z*|mz1P?ydJb(T{W)QxCA|EM<$AghHH9!0{j`D*MB~EOS)=xm~O@U(oozW>|~I@y?SH|Am;Clb*cY(eVa(?x5Dc8F+&^_@yValz{Wuz1cdV zz|}E;IjDtyn9fxtah4k}*=+qml7X?XvIEZ6#d}57o#){dbQXSEoG60GehF_(0NCW) z967>L>6uRLUHkp%&ZI^cM%^CA+u24OMRvtKT((FsKM(kmmVbY$8%(xi0m2Tl13KEL z`&fqPBJ-mtA}yXN>sj*q&zX{SX{r4$)Pb5`P`e)a>kv!XYn11{6eGT}kZixda3+ ztx4~m;3`L>F#ppeVMx?V^3rV4ZcNm^u^~eM7Y-vO#8V)f~9XGnXQ{f&M*9{Q>=6k?6l z5pr*Tc)bom#fC+!-gn*VS5>sQY_<#%@#h)zbYx^)KE#veOQP;y)72&yFaUX|d2kZP z&5E(Kv{Sj>9YllW`aqrgZ=wdnNY^K4HS=&%L3@ad{;0jPGvWH$HKe_x%)C{BPBV{V z9#ZBpDMP%gra4xT0vZbodX?s*P(ISjjmOC@myEaPHkckeAxmHw(oIkCxuQJ&7emmIqOGrXZ&T`XN>@d0%?X)zv~46G*?GM(OM{Q{&xLe z-k*HwS#I^X2aQ_$-!X9r{o|JVKeAK@ely^yBUkW7TLRopKfk2J z`TOVm7c%}-VC=#F?MwNOS~g70rc2iFt1Q$5LCNK0-&lT+!u!>wj~Xh?X7P&E+qKD? zU~A&u|MXk~&{{Q|?32gd_1JK5O(hth{)W}5N?E1O^MS?>nb|;`-3;gX^Pxfmm?-Jb z5kpqs6t81o5Ly+&eX-?o2TV5|xBNw7!Eh6S*Lki#>RLc34v^(~&kr%FMi53uMjoN# znk9qIxt%n4t^;B5G{mc$4jIqfhRozcK4R6iW-jbV`D7ynzwOI zRW<%QtawD`!;zA~JeDP;5426F<7`r(_GS6{>f4!bRu{ieGxqk1qE0yMrLFv$@T61s0V;dT8hI28LAa5Fd4$jUpK;~$M$ZvNfP0G)aCX;nYtv=}4{t$k^ zLjix?8z1#JWUCl&(>gR>sle);nLx|)+(_#>*&PnA?vE&phuWLNsz_UXFgjo`Oi)CF zpI7EQmu+%?xK60I)#OJ)3jvfx?T+O|z7_$rv3A}+oFQvKHR(z~}DHCPy@826{9cmIri zeAMr(mZgqy=coG1*@Xmwycq8sr``z&3iOG}WliERzcS?jo9~&|FP?gZ@%7saNA{JZ zc8j4VH*WWvU2r88@|_wJ-ZU2=Tkc+^0=){z|n9;k_tucb9N*HL(!$C(ukq$KYGfB2~NPd#PGa{v!nxfiGjX#)xFmKR0jg$14+kM)#gf^pHzr zMI0O-G>kU@bVP+YhlW2}b})U1rAZXW>oo-?13IgBz|*;9D9!8e=yYk9w6}l0Qr~#H zups*?UZZ$DFzPPnBlR_EO66s0RT3iNbu6z57hsH@JC8eneaOJ!`ZTx!Z*J(~v#Nz2 zYZ4}_`N~xpmU8z$FpC6ag^0G4(KABR7Xc}$|UfWbj0m>(ciJTh%L9^`GU zN^xI;fuszDkzBpwY@k_94&}d%Y|E58Hbnr;F!%YxdZ)6M0_9Q8XN3K&HpwhV2^a)i zEuk=vRzMb-FuU&F!EV6=WF1UJMa378#>nPoPsr@17Nus2FsNsHL9RDB^VK(S2y{0P z>~_@Vzb&cA*u`zvjPo+I}}2%_0OFF^aZ!Nc5-_<4)pvxn!q)@*cN*OQ&T z?Wup8s)lidZxwO7gheFuiln&vFK(R;XEpHXOQwio@e_y3GK=r$fg7jQ;nElkJ$ev;Yt-xs4s_5^@gR3)ky&tQ(Z(JPgYozTdPmLnV-!{xERe^uo^ zmno9Y@L5?|D+7J|G0pFD-Z;4ZeJq$)JL>FZ*zQb)eQOaQITJdX;NG7bA~y6wp6wrT zpw89?9*?U7^(YEd+MFiy5D+hNG><|Y=D?YP&vpLm-ON0wd6@m%BFCE6QbMWrj0V=pUc1W!IM*D1x$Zd3D?m zytrfvU+Y#SKIl=Hqd2XWp5wFMiNDwW69gAUX}H<&Si&ek&dgNRjp8wlRfHico?5Yc zhn)(oVe?$J&Q@E?2vYzRl1vLen--9n1}73wQZZUGk;fEc$#yqDYo82Nf2C&Ts$er) z$BAKhLj|q4aj5)@=Pz^m56|DdBhr5B1Q!T2(rPSnva=8u_V)Cxa_rO(4$VKN@HO5$ zV7|SqudLZacG{|`hV#d7LN3mDQZmG42$mvseoF~N^{dBr)m+A?G8}8Kc5agM{yy% z7!UH3`Ol}Fo%na11Ssf3^$t=4q-3Qo`+WD5Sy1T$(irm*-8$mdjMVPg!)DK0w~fhS z`eY)a=P}Q*aAKN6^C#mTzOu^_(!vr(3w@PpBzxk_n=_cG-Crk>2>D^6Q6a4UZH5^j zY@?@9*RIL#dr_jKG&$Mod&F*-@82gmZfU__P zhb^ZzC8<`Mb{x3)jDVReNHf2m{(*q03o+UC-?RE{eL%`f^`}p9FH4Nbkv!~axB$JU zzIaMcC-waLyhlhzR||2-y(?8|X9~hAoh~hB_?DhR3lqS3>fK=`$+qfP9sGX2B8Xt= z*<2jyMK|0@N9p>#BoHkIxDNavk;*B`s8R(G(>5ZSngHYQgSes@T_?I}i z&ATBw*Ish7JpU)%MG?{5H^b3vR${ul*d@^$%vIMD;*%|%OOI7n?LAuu zZGo8=*S2&~5s$k$rl%Nc^61M|QJCnf(#tp6q8{=E@S-;pY9v>fEtvOQaf^MDm6TrE zS$PMd%ItTpg{(B^@a65y5xrM3D~Pe>&wh1MuYijhlqYRt0rN>SxW}v!9i+GXwQ! zAFLxchr#8g(<2kH+{p`di+Rjl=Ucp)8YwgAy5j;3-m>fk_@2aL~js)6t` z%-tA*^NqVo?<6*y)2_v<3T%B=@$LzQ->o(gDhl?kRh=PuW zBaY#+^KSvi6rFcAj$f))V{OSBn;An+150>!->PzVXM5BS^x)PfQ;gt*etF;11`~X( zug9n6t35@u`>RS{nz&z)|ECcU$^8gu65Seb{Iz8_yUjiC=RdjV|Kt3JyZvDiaChK2 zK8Y}eHF;^?O`$Ze`0E-@R-q3zF~H<7nt`o;qsQ&Tmy^E!0novG)ED8AI_?4dFM z$VSp{L@eKOLB|dm8BT~<4$szsJ1Z+S?Usza)#LrP#6Mn*O$NR&FLJeJ8i-8M*i_++ zj~SGe9?n$UvIV%6xcTHW#lq-@d_s%3cG53vFN+)BDH=fIMFV@BPd5Sz3u#?W6$+N+ z2^De3TUwB<7ZzSy(^F0^|HPEIb^~%6aeajsQarbhLPA2?l7e-?S(FKT_v7R4)$R;V zH-Py30|VCw8&NDBY_$8_-hkYb*Qbu-7;*;WD9JARbc~E5(`CERUrF(~g_Ge|@sc^r zcF;|@^FShJZ#As=^>%}m#8=f%61$1fVf{HNH=*5_5)8ESZvT_;gT(>>Xx4nj5n1r) z$d^CGjSL3Dx3jYCDRZ*tdyMNa^9s-GpQili0v*o?Gt(4s%n}lE2Fld@KTN3e^KN?7 zw_VbVWIaH9>~qwnoUGzD*dPiBxM}~G3AGhDD+28dSWaWl3&g|*S2oG-gnHK=Byz|f zy1Wktp!evQ31HFQuD%jiuk5ve+!@7xyPP4O9L-mhf>xM+0@D@iW4iK{Mm>a+Z5JF` zm5PO9da8%7rq`*z^%{GG=9{h0^SXSN%UnMOv4k0BKtTplMq2?X6UW9p*zWu9VovXW zmy{^*OrsynLNve3b(m$F-7iqmM6uV4YEMAiA;68iDP@V4D!upPCvw0bp9{=t8gBK4 zw6dMFn7?^NNww`?!yT4#K=;UQ@}fDzM!)=IPAI6(BYl&yah3Qk6x@2}U>I;j-%AO2N$Y|5j(lXS%kAscKc%yZlA(b%<=CX48?_>R5BU;&7F8C5p zCX4|1`jP32&v}tGxKDa}IDQy3?AsmN=44ikRhUU?DsL*tyypV`XOtc%}r0iaGp03u@ZlIjeB358hR> zhKx<*pEkX4JK?~M>%ibap#SfpkPzz_?fT3(*uGL@Hc#zgiE=VwT62h=Cv?D4o*T5J%BKNX50`a5LK)T)G}YfH4NH=xf(Ti3~+>Ot0jm zRNH`wKbY_$Ol{dlX(GQ9UUOn%qP|U?$G409_U++|rb9f5Ygh4oMIDBN6r@1qlhZ4f z6Vv7cZNXS(1Ge61k1x)JHBLSv-w#9UFAv7qVd061Pu|V271rD}4eOI`i^R|+ak{>Z z|JFh>$^&In(amWp(ZFOg>r-!xhZ@Yg(MXG5b+w+Z_CGb>Moa0 z0X%!sy?h8a>#G-ww%Ww|Rhm$!USIV=q_bq}$}YPiatynHYaeNEW4L_@DPX)w)5wSt z<_d`(-)09Y0r5fZx@U~Gk3ia(sk6G?KhhIEZ}*J97DRMJLXIQV<;tcbsJJjC2&CQ& zBFh6`4t0rLp8s8&QdCs=c~3?5U|g;kdMrI-T(2Qk91{<1moeTKtW@9M6)?N{1&83I zhb9AUs>#N12KW2-gjOXE%~}j4=B>h2``4`vj)lWeIbx-<7k1-xYaUp1YS+m+s zKQl8sek~JuVaqB?`Vhq%$j{pjTwXF>6UpMe19<^D+zibr;o;BPTYf(F@5uSp(1=Hw z{T8u{p5jA{L!3WWXE|^mxSb-*>cV0F>yd$CPa1{lh2WXlj%?nCo9*#q3}?7p2up9D z+(0m0fmnM0M)X~LY#bBo26de8IhdTkkRrnNEPkVlEPtTBXq^wGml$E@S^D?ID zm>hj>eeuO#Gcbx5ssjyphT!Tc9LX~;9IGm?j=>3&?#YW{Dx>?M`6INtI)+5O->#@i zEwTq@``|F#Rcr-m(1Cysj0RetK2| zwWp({T~?EMMh&^{;0XjHsJ-8=%1fs@|G%=8*)ekG|2Ai1_-D>W+Z%bhB0C89#0F60 zSPmtcH3U_z+Aa|{F%0j*4cL*}0kq=_6nREER2L_@B!kj00#Ae_ABVSQW zp1C}^z|l-+#&=?Um8ltp!Ktl|rl&U*Z}+T%0l(ehjc8BLXN|&Yc7Un_%Jv&3>pNB) zRw7oNN4#|o%dOZcmTXNrc+X9KgolgfE6@%b+Q%oqI5pYvuCM3Djl+g98_#uJd1F5L z1&%pT&czy7EiMT`t1WyL@>%VQSWyji`sxoR9}-OFEAG1O&j0zRqqFnTWrCQvQB!c^ z0}c}kw}o#HBjZcMO6v^$xB?>KjM6K))*mu76NwA z!On3pMfRJA@X0`^J*A>-W9r_0w zg9>wW>w}ujw(}qM;E-Iuw~Ig(gAb;u) zPcgs?bo%ARRgqR&eE2E7S-*d1(-sX+D^am2HFap|&zIm72M9!}ktgKv&MdfB&G%oU zyrts*Wt5kE!X?))YY)Iu#m6lL>eb0-Fx3_?y(tAFKNj1z7$ilCpe-&s!0 z+q`r;OF&pjh-!^ePA=~-qsZe;Sm@VJ-EYaWM#}VFC2`p^&j8)YH#^LzRw)@uol2qD+I&>>fmte8OPKqD<=u?9eP~RuZi%{8G zTBn93m12$b{vs+=5QHHYAv}+ce&+OPS~=2@lvuSey8A&>Vq=}w;p#I)6k0Xa6@_8I z)cp;=@)3=QXz#nPx7F6z zrm8WYN9FGIaY#~MESqvkhWT45-tlv;Gl4rZ3*PVuP1;ptWCzhC4>7JS~+crXEKZJcKYv1WCnuc@tNvTn1qt>Ri*#wslz z{S$8_hWbLWtE-GBHcw&fs~{TQ%bp!&*$a3z|Ijq_8Ji&jU@^3jCV~|wWBmkJ-~#sF z_nPxR5RQ&fIqW*l?|^m^kHr$Dd1eL`AHOiq?BsHZ>J8eRm7)}wSV=1=bd*lTP*BJr zqmEbg{%U3X@BvMK?c~!A6wZx~SA#{w_oJ(eqWzKzfSmWu8Ud~y@J?_ScQd59BEi%$ z0HUqt&jf@7j;rJB)QuT`?T(rxpu*>jN$jZD#AH4@SuYe2(Z~~48MlkyWA0BMHVFrD??xxH5dSHU?a`Y~+ZD$6Gk>A6|0T7i6BxQ-| zYAM_{uoar?Dd7pa%N!kf=s^n|K7g9kq>>7w*{`SquUeu*bsKD}4Vr0bqr?UEg*zw5tJ zEXsBs58!kDHrS-po%$fnHu>oXkWvZ=!=RK=I8IlPFykf;;Tz~oag|h>Lg?Vn}6 zBeT$WA`J9^V5~oWwhAz49{3LRS~r<-F^|b7Z?%#z_*B)3_rFwes$=(%Vc}7M8 zeqvO3T-^A|*;nX|jGSw--hRQtL|#N3s|nev-YQ^MYgC!ejBADB zT=B_T#I;@5mNUMj;)rt$2hWSuIW+jM?PJKz;%5Gm=5F^Mi(3k>vxBetgOHfs;)&Ar z9JjS;#iYW?e~nH(XnJFsTEZcG`pL62lOxY>@9`2tWPaEHLZYaoy#CZ9)#868rWC0& zJ-Rn$^Xol=!_#Izn`7)Is7o!~(a7cpq+wV#0+aajxyO*3(GshdPXUqonZxOtFLskTg zYDqw>3z5!5LH%iaxuSO4kU9Wy6J=wD3 z&C=7`nZF?{ZY&K-UpmfyS-JXT21xNbPxAi!?(KtcaG)zCZJzrXx$+y|*0Eg=5X8shX_hA#ogLe1$k0voO8Zx4lRi_ff zh&xNK%F4Y$0kXKV(lsi@E3B{oqIdpkh$kV{y)pJF9|k|aCiv#g5JH32wcSL>XMLh4 zN*XCD#yyP=zf8dp70>nOe0PL@L+y^+Xjwe`=Fi;S&a2bC?iGKmgX7~Y@TPP-LqI51 zmA*wW)Ox!@j=Q94u3E0vj;64fbS8@RMxIa%Uar?atsypcx;#-+m*=S$Qt!WXaklfyz zj}`cW4$vB6E&}h21In}2w7H?xHoCX7%C@^B-pifKkI{Avh(@Tc>(4Fk!iCyWJ}xYe z-?d5<8!WXwwmsTv+qP&lAfo$_@U)RVI>P@`wqEGzZk+x0b70}R?d1uA;PzA-JYnwK z-3BI*Ot*Ub@4lh!t)mguF&?RYjd&{Mu-KP;$YA2tbnTqs^y2-Ev(^3*QX)rKbB+mL zr$jNiPK)F9P5se`iG{5E_&N8f^|owpymfh5*;JXCuaUBsPgfT=B^@POmU20tYIYSd z=E0d>cOxoiRAL`^#kPKl!S4rFwmV~`$~TQrYkXsW`=La8*t1nO+gf;~ZN1ElCaZ1j z<#gSe>HaEskO`wjfA59K=oiG_KZ)`Q${gV$6m3t-j=w_jEUkm`rFn>d|3mOmdvA@k~-9mvyJvC@1JHQ?B>Lgl2R3gBR4a zU-!c9Vz&Ze#2~nEmh%{+f!irOLNV13GNO_X1DTf}4ZA4p-SCCX-IvW0pYnwOthwDC zd~!Vzq5OTR58k&Ca1{7eSMXI9P@Y|TqZ06`xRfKmOVQvR;@tF`^B9WM@4qySgSxvO zq<(!#g$7b&1gWU<5x`VIcVfqBI!2jYHTN3YbnQ;m28jprFJXus@qR<5DPcjLDs= zcUr5B!M_h*FCUF1XMKiMo|58zDRg)rzFz6@#M#A;3B6@ZTDGW$$p;hnqmtnxFqyx9 z(YCg?6Be_g+S2}%WUm+Bs#bf5Dc64WM7TpvF;^$#atsek)~@qJ{^86;2%Nk^^^edM%;B7I`GzI!d;V=&- zM*n5q|`N#OWaqEu(7k;e+IitouUVVg6G&c z%j@fi`Z#g4g;KPD$2WZ{kzphvf<`Q$t^K-FY7C}bZ0}YjX~wSsa>>2ZT38SeE7@(v z*5bnDWL3?RqK#1|s$42p?Kigq0g3|4~yv=kX|kV z&5@ow@Vd+^P=)yS?eHA`S3ZZ%II1K#iAuJ-&Mb$Foi5`HoOUbOH-K$CwIU4&H5ula zO$VXu$CD_;YsHv+eFI7LedUGv+whs=QNB@3ZdMY5Id5MPmlgp*$CETt33IRe2-{hB z&9?fmVLZ`~=?Xh?ZhN=lkM*xh=*P#$-{vGMWO~(E3vHurO$K%;J6P>F@=zTW_;z2WKNg2GOOdjacrGoDN)@5f z=w2bE!(gb(#TPi`kmrg7#D-|C^uIap z939MXup|94_DD7e>aJ#1{{&;FKWKAws+vBUJ*KI(2a~U3TDh|^a4pXFpP-)D4u~in z5ae5eu3pJ?|4!QV5Ti@Bo3h|$M-~~q=IchRWzf4fuapUom8+ zceS${K3rMG{1e9^h!7a*8U#{zN$htGSXfig79vymL!;iW@HQTv*rukYo~El0!&5xm9k{HwDKD2?T+VNu*YFxva(S;}rlxw_ zKR|K17f70#z>oE&#mdrhA+VS|!8fjEQ~f2sI}M5l?+5A9qegYJuLIp-z!JoIWkY&t zN$Md3+l~|{nwFQPAPnv8ZEZ}9IuEB zgw(hSRdv?PSCxrqRe3#A7I`H>?R5d7KIX2!!vShRE>g`oSWPi5kl0W zl?$A8tA}4H2|}ug_o3sVWk*Z^&>a8;ej^_LePZPk`OQp2~r(E>x*7QF{R5jYH^6JeZ;5)2PfyzscNx| zvT}DIeWP|Vx)PnD8m_$X8{Jl6MkF;hO+=lv5+{1QmoF_rcQ7YIgLNm-)tz{10>%UePBeRU#O&uo|+YIuwG+LyEdx zdA)fqOr0}IPTW2DYsJYE$+pR};)%9OR!%3Rl@)ADCQ9t20sm6nmUH8q2{L*XlS&L4 z6$W49jIiQKP3P3LP*a&Ur9?ZfCJjZ18~BVKZDc3L8*~=&0y?S9mDy zHwWzs+3J$5T&la9aUSjDtlwhmM{#kI{emMO@3o>q1?8Vr1KvN=TE>?|LsZys_xouJi?sM0b~-e>fg`aePTVm_W{YBxcJ3dQb+b zzf%q?UgaZegA*XWp~Qof=V}&pV@?g*h?3Iad2f{l1omcciV@5LoA@-cbJVP@2g4&& zJr;Ffx2^Yf?IVGAS%Jk489CZOHRuFtSZnpc*J zKL~ln%ZueX-&nL9GGh=cq@j+D9o102^d|L`PFj10gv^QA^gAZF%}L%g5_oRAY{uCq zSVPN}JLyV{1ew?|w%X9aWWu(r)389lGg_|ct_g&&S6Z1VZ*8)GEw!;QTr}M7402jt z3?zAnN*T<%nsBz0n%P(y111XrpLJxJH6q;r7Xom$?oT()NxZzy4=#W;5IQtc3!39~ zW%~cQbH1i3ln90AWmV1kJiK;0JU(8{km6$j`Kj9Nwt+M6*oS)SzU*AMMTok`mJT|c(nwz&e}2V9PAHraCZSsO3_drwwn)1KXNR##8E4kuO2PkT6Bp=?zY@2z zgOlz*H8BGWg|$z?Q_eSIb)a)%Vq%^y-Uma^me*D;JD13KLPefD)5Z7TSqH`+;TxYN9V zcUcK(5LT`RP-j35O;3{3_U7s-ql>e@*{t8!VgSO+rsS);aLDVYHk_Z!UOKa~8eUq{ zx4=8!7%H`=J3mH876|IV+v!I(xvt;F?nU@@1Ghb}W#R3YQ8QgRC|-Zb3B^3KhwJ5n z96D!P%v6uNSM5Sgp5}A81qCZRwdt4dv@XXUA!F8sfdaBQFB1CTsA?-ClwT;nFloMM zAa)33pA4}-=c9XWki?A7X2y8GEyn89YC#ffB^sVBpjM#JG-ZN5&NK?@&clC4GgprS z9=$kDIq*HUw6cHA582FXqZ2W!Eu6-n>x5bh3Zolb7RoZ>1@j!9S3bb1O(7XYCc4B7uM*4_>}8X9}OG(i@|EFhEJV- zzskI3X`-U$CA+jV%;v_9H;$P*oHfO*D0a|!IlG_6<%(9r=@2(Py(!1Wz~TkH3OM~~ zlsVzD9<#hQcxQca{XW47z@mfE46(U8B8MYMfqOg(YTX`X#j^J@?R5rjLbRl_3K_2p zvZbIF|1m?|x$|gghQTh(y$RuuxglSWsQUyp@FTCRi>s>2$^1(nO#Gg7r}A@BXJYd` z^I0Y*lAQ1ekF%uobSEmR;8|t}IlpU)zodaw+gp#35m63@qFa)qLtUhxCx>r%cOT;7 zW}R&0Z3o&x@Z+wF57M)Rj6dqD3Q9y@iDX~42aU!YE`*5qzS6Qyb}zO%Nso^i47lWZI3u&zz>gu@cY(YRsfk6;pQX*_O7Cn<_Z^>yq z(^$EhouenCq97`1Pq*sRag$uREjv?06O~^DDXVg?65T!hnN>xsI8!t`Hy6uh_e2GS zmXb0DIFLSj!4-g-h11nt?#>|ld!Ze6YLCC_i#wrtLDLZGOXTWlaCgI^r?(0M);tw8 zT=KhPzTY*RA@oMmuJ6_F>+JE`Ao%fHeZzGaB=usDriu6%|0oH-(>FJKToAm)Tsj06Jvgf#>jH)H&R~k=_^0PVT$D^r> zf(p6QfuDuWY%Bu-@V^D`%feom(cpA0pytn3-=|E@ktAk&i60S8i8;DN@+YZ|R7AJp z#G@hA;oVr|C0e(>ysf!|)gYc@_(tnYe9cSy_BR5Nd%l|JQ(k%RuG( zRkchWey%m%`8||aY^4A|P;~n1MHbVza4(XgnRXl%OnkOT?N%SEqb3c=*L^xk5t~Y- z84JTojB|(Go?n_#Qju(vD}GjEV`C+HGm^&z`qHZWm8*c#7Fls(8@MkZThFHoo;1Jf z$sg4G=YEIFoebMWareIzvB$UIglb*Gr8{aduy95S%+8ES-;y0~U;z;jAWHvzB&iOM z%;f*IRNT)wkpU`)%Xy?vCKZsHp8hSUPkdgr6p&9lybS-M_zCz`368G&{4(38ihC-c zru#Q~k$fR?!$Koa5oxaO=CoAm3%q{pb}o!koKEEpw&DM>zas8E$|^2dDGrSzXAeB` z{{27nuU)wjEvY!=3Tu#yR~3#f75>V#P+}Jw@hOGBgot; z>_5Jwz5L}L2gHAX?{w_0{}V8-h2_Pdf`U?IdY+hT!M2p`z&O~n_3v--FSNXb7h~-) zWYWt+xot@ZRigJEMC14(=jGSIVvh$B4S~|6WuVBe)4Rz2=DwypS-b*=>NC$@f+E&w z6>5JTk6~dlnoOt%uy_^}(6n?&F-jpfw<~v6^=pPj+6H)^@#c29tQW>SMn#p+90xko z)nufzgy``xsVO2*8fHrczoKFJ!_$}8CBRzHn<*C?V24L1vY}ydaqVSid@O@6(k1HD z>LI!vwBLiwujj1)nv5KOb2`GF9D&#W2CMHCKTb?x>@kfNDi{F6c)Yj_KXkzT`09jF-i_(*nVwjbYUjx1STeD3-t^!^BBZJSBr=pV@yEU->S*(`O!ipBF0(%B zFaKLcIhhNf*y*}m{E&OXv+K1|i$FrtIqb8L5UFm5)ccI#&w4EJ2GzOw%KR3^7!8M8 zfhW5&zQpd=VZ#}Ccc1@Is&>aJMZt)Tc57&KIvMu8fZxZ3h>Gnc`TF{z++FPV0;$eh zQqoe}X=@=U>foJkIg)`yukkjysTe4@?gK81)axv-9eKWfz3CHFnQJ>>1Ok<#)k%CH zurn;Do7~Gd>#$~G?5@}uZsHv^Px^oCy=6d^>)I_m5d{PR5fCIr1Oz0dYbq%%AxL+3 zcPP>=-5@O~NOwz1cXv*@C!8DC+Us5W-TOUf|M&zdxmTNAN`8>~kUDp`n8iQX< z%-HSM`(c7(z@2D!mlJ2{p%XkKhhRU9R^}0J)-_OfJQ_qr-C+U7VWwV2}vX$fM%N)+t*f-QPpT z`wH2!Po21GseA)yKt4-fpJpm8j|>nTb9*e@@eLiF1!*SPikP-iT-v9kESZuhq#|O* zG=C!IdD&m&oDTMVpRhdji$(NBz~?c1>Vt~dJ$D%v&_x6366=n&J56$QICxG~w9i+O zQJtkM(~uQ(F@(~G`8{ zyDP%b!mX>rTq>|Zy$Z*Kvi9H6+$eGQUQwZ#(Hm<;3l5~K+KOv`LX#~j<+(jF#QSLI zX>!>i;Cn~J#hlMYf_ zTUSlKh_@rNbtL8vudTeodmFCISjnyauq3sK{K|4cvzk-bVhf`9W1Ho5EWS%^a#mK> zRWil*;v*K_#0_`Z(f+$z)O@mk)Lr8nU4^)!hH9eP-YG1gPgFd20$TwPgW!Ra>5#25 zJ}sR*JPlp6hQ|Z&ZcM`|d1lV7A1pL**l-1}yD{}#9qs^;-~Mg@CN-x9>W48>M;ANI zRzEF45g2(x>aR$1bBUiQ!l5MI*}lk8@1vemWtW)4DVa+Tdj$SGOU?Y=GjQyKkLDZZ zY|ERx6~F?nl#R`%0xmIM_4@-VDv?9Wzz`zNJ`GaW*ap5cMs9~)=Kk{df-#GJ=}QUd z_OM@~9UckE4!G6}1HRELRp=3vpP6jeA12?x#PR8wvd=C2savUrZ~V;H3JoMa;1jZ& zD_j--D0lyAckg&hXgR-z!=5KODvxh*%Z_k;dLp69CK84g5C|1javH*ORi2tB^jaU; za<0E{MvOwI@AJnez)(_gTiRqy;RE<;1 z#f{CGUGuC^Bb8Pz`}ipvWz0%!8xQb%M(#6R~CX;T4Ki?iXD}MU)DVC4* zPQmD=3#l@=Ef~mYV}1lp21Y;%>A5bDkxLmU6|4}B{(#Okm65o~=Q2@{lfB}E~W)%Jfr0?4B&No6X7XwvGExooW zefQ=Lcg=;{@L-34S=FzS%ZYfHxJlQ{;gUL^Qk@U`tn#Sg(~OY#<6K_o<_8+Z9d`wn z>uZ^ujj?avf_M(M1CO>Ryu#T-=SiiZp|c}VVKU?rOruB06;g421BSXlgA;J%^9j-A zmCgkVV0~A5GhxLCUZGa@qgJr5POE8uwts9{`$b>6V_BGpZc(YZOAj24TEqi+Yg7~H zW#k(~^QT;^ilx%3>gMhrjRNu;-QAvW+2$w-@+L))pPY0tk$a`d?uR@EYKOAh#uCJ$ zVB-vjUdBxOMx>`N-fIRQDT&86*4MB0hb{d~kXy`;ug+z^RjxmNvFCQR5=^_JX5*&G z6sB+g4Z7|)fp=fyJ{Oe;koh+wnxh_XUmdFLop5Di?c;L|c3OE)#}dcE=8B`LzKS z4x@8P2}yRSq#DF0Cj>$5lV~=e$451pg0pj{kJm6ndzxQM1fg_*Q<9;+JgL5-Z1ZpM zxRJPLZ0rY0VTq@loZcEI#2HC7$#E6ZEnt7;47=Omk|yV_?!<@Qs-*o+h6RjE*ku!{2XV z_sfat%)U7&Dk~g}Nk;UM(Gf`zEgv;7wHW2YA|j>?ALgftA0w+>)ozdyNtmmXU_u?C zeSLk;Q^fRJvdnbZ@$)zS2TcBD8IBq@yJcJ+GeLp-T-YD2K{J;EdNVkho^f+eu{0uB zKBxa!|Aw8_&zP9B(AD=NBJzvDslDsuDHD0#pr%60*24%)j5I1JIH%|tRrRJ6nD_Aq$F`s`G>k0ITq_qK20rddn>1YBI_^TN94$vwQB=}<&P|(8YS15V zfG|oN+A!S^mdxwSa>n9X;w%~AbuYTBP8sxj0PE!|Tk|b@xnp1x!{u@F!d<$-J~w-r zevI^UFvBLos^v^`?w5N`;tYqwI5YEohOQR zFMn{=ZW$@d0kvwDCpTQAL(vZv{y;(GD^`MLoy++*G>t zxrI;g-a=j(SS^l0v~*(t-MO5Uiv892JvOtqtL<-+D#>!lL!?gdgGaWjY&f@ z*a{2Icz5`YZ3!?iFl_e>4I=Q^Rld1{wj4}I2Ln{Wb8-r5YQ1Y3X1egz9l#zxu^xI& zDH){M!QO?Z)E~7@<~O9HIPrR>B;JSNZH&A1=aL}{`gU2XRYPHyb)-Ye_zD_hzkgd|vJM=?Rd=t&$c za23q1G}?pIPhq1s4(Qwm-1IF_UxZR6gOdc`(ax+?%HyA{`U;2xXw;0|!?5a*Y{W=@!f_i2p zz4JPtriNEbr!JNwlN%WWM@Ci_YUe*$SwIJahfpPD}43GAUOubAZ zJ_3tmJ#9w$cg7YXhU&#$r^EuMHPW=pm1DoS}rMku~EQleG|bJ2z|=%n(gddLqXWal{2LGb;EaLI%_;`YCmag2E&8$axg@qQ# zqeP+NJ4HUj(P)YmP!+jCFE3sIE{3OQyxxp^aA*p|T1s5E^?WQIt||h?tUTp(4Y?sw z4ld3w$!XI!-a-_Sk&*KQ^>xqOPLmDoHHadO=K6xIbcA0WM|ZaFLWd14vnifaR7|7) zBg(fexlp>|x+VenynK)w>1ucuYGpUAA?X6=ulg7sD zAVR1D6Uq>j1I4T9wY~z}1&_q(NHno$)j65ho$5x`BUu@%QuL`5;N^bsV zy%AxZ^wS4+u-T*Ubp(7DXL3LErPYJ)6VI%FO02Y2Rs8{M-x84cxNP%xNc-6FQJ4r! zirESC_hIUn&(#F}cR2rW`6bB=;`$u)trZhvstP-ByXAB#bbmT;Y*cW;$z}Y6WnEZX z2UGQ6Wy!9&!+SB`29zecRi)*%luVb?+m-8$#oVG$Jo-NR<+Z#7+1xahY^mmFgpGUuB}-_l*-JYKG@6wwY6}5n)Bjh2k1ePjJ{==U#l4( zqHZE*DPMq0us^CQ`V-c~jS8tYLzaWqxfBq>lKQj4-p%s-_i#3{yT)~kW8|=2u(HD6 z2n$n=sf}R=uhv`~rrS_WmYIO93HZ$p`w3=ish96YZcOvnM;O=6vA@Cwe%LseMExb+ zG%GfKs6Ta*^iq{E6c<+4W{^@Kls8ghxZn!h1A5cQJ9=CEL!}!B2Esc?ojgI=fV@+c z*N(^I$9?-yNib(UqFGk8!e5R+%B;qF#T?&Y^&CYiWeeM<&u4y?CQ z5@iU-6mrZ?UEHtyFJUS@wVV#t%WsK520_q$v;|*M591T!3A$X)W0$|9`f(2kED-^< z*&x^vYe4Pz!@&ToWw*BOQt_tmC#}rwUWWkL@pnh}=Rj*C4BPCg{H}EyX)ymT(TT(I z{9oq_-qNLb_-#?X=Y@Z$2MZ5}93 zJ?HDQYI}N!tPf3)2}eNn#;arZS!nSoF`Rwr?mz3BP(xTDk^D1vS+|Y&rk9f>24s&! z&-Me&c>x_eFI@!S60J*YsM%R|PxIAMGXJ^@jr%oJMiSk3tcOpK=eC0uKT-rL@j$*?XVKxm2Mz#a873w$Rhr+n3_0NgwU_Opy*{hrFGvoq|N#8G}Tcx%*mI}seI5UC(S zY@hUW@_j0)J)nzO?WtG6Vh4jgzi_B*MsE`K{l;rVQX9hT>pbw$Q2=?%;5uk06zY8*0c40IWURFC@C_6$?ndp!=cngvB@ zX!AO|DjUC@V&~-KG{k1I?JC<`2|gmtzlh!2*YQuZqXMBc+tbH%x2OhY9Zh~gio%ws z$5dgLS}?a{z})s4s?yGS9DjI zJv5Kk!z`){9uG8_Uf2yui%AZ12C{-2rR1=$CEo&o6nLW2sb=xC0~6W-3KK86$ZXHD zC>B6@!@}b_U1$|#WCk1`O8x;x4cHrAOf#NM)`9)mQ` z$wLkIvJhVA&a3~1zMttR)gR$TUmY_YF6+zGTmJ4rnuAg-3?Nbz*)%|U@z0w1C!cTk z0$cUYLF&Bu3yTBZN9B$Gk5BkN@(JEEf9U1;9Qq#P?DZR{1D(y+-ghqb0HtXIqG{0T zYBS<<*l%+XvRSNMc{3mW%H!X$&lyO(*3@>y2jVlQYj4G$U7hUxSr)KlkRgNsr1L9qC4LLx;!X+gY z!UG@H(bd=gzFmjeTl&8A56S#+VgDe2qT_eUR@!CVsDeP}PQZg_ipIw$L&w2xS)@o^)#^P$00sk2Xm;L6? z-@1GA@W~6H)*1~hQU==KN{`NGi_*{c_BTOX_}D9}#k*WicCw~Llkl(60O61So6tVm zxYy{EPR3loc+_Cy>YX^Cm3g72Ns~KfA>H5ue);zgSON&(0n87v1cIq=NSu(Mk&#u= zf<@y|i|gsP0OG7XEaU`IYjx`|ax$j4&#k%;=exEGFloNNKDC;&DY^bQq0!BWI@(fl zgYVWWG*a1m@dk+RfHb+H#)FwI6yKS=u#nz#^2bPIR=Im~Igqyyu(PwPySY&#AY3bM zcX&AKV{F86LTpbqe-c+nu7T)3*MkOz-e=y1+{4Kh*v%c`U*fwCPN7*B;B?AemQQxQ z(gH4w&j6YLAS)%~3IRHkORr9>r2#I(iTWiKu;7S9prQ7bBIM-erZvCQs-DNRyuR`d zbjo_3r}XX5%Q=$fMfGIkN!CYTtvs{=0bA3t*AB8Z8n;^LBgclV!g3#pAh)PN6&0I+8>aYEm z)cIkay5-_ro9}zlT3;`P?xB93Zj++AH*@uFAF8yUfP->%;W06%b>b~H@8PzmWxqSE zmu$ugbQ#GhC#)A*4xHhoyUi`>yjp2wJQu&dP*!LSerEK+AZ|Xqal79_v6_5M$K-wX z`ND{DvTExI_T%>U-~?Q}Fwn0Us)79*EY28#hQ2#psEflEWITNTGcN z+ZE!!;#BZBBTN|0oFAEp`^hd-nDOa`AthhzLk?_<}|1V}~PS zggK^+D8odfKV1G5dIuuQKQ4Iu&b{t6--1$om%RT8ddIOc4gm|rUjJvjz5SbpVg#kn z?T*``%T4HFpu_8AF)6JbgA``NMs&fBE8`RY?(SX&M#*s8@gfHBVXy|~WZPJ`&Z=|j z>oUsI%npD-zH}5cUf;D^^gn&Nu)6tj2^2HSRd|~zJyt-Aex?)p5VtIW)I9`26O1QE z8#94a$lan!UaE8@+#H8q#COnA0=H$GY%jjI*ov5=KoX~nv zRQGUlWX`+ffTn&%$-}|iew5nP)oy&sgpt4m7N$VxPyo~qdfKgbK_2g!-rO5-U&c9I zvH;CD(ESYZ)bA5GhK^gZ*q1Nv2+{+k3#wq+{%#vGaY69d`uFVJ@&kedUn@`rFQIC%P!`AnRWI z$R*-*j;uVJgme8(F&}8o`CHCjyNzROJeGa(`ye*~7|!IEe%!_@KYM%fCOxz?K1q4<6Nw~|Kvf23pwr03%5YC9Uk z7-o+x=DM(@WtdSF^-#7nIh#Ec?EkDPHT%dv2@XOhY@2WL0=yQIF|rm50lKpyUc!^l zpaT9IRJ%#?N8y(*0fC5&WdVW4$m*)cCs}Xsb>5?sVW~eLTJ|n2eGCcCLJCGYDm?aL z+%U@I*dnUrE}_l-642TIDlA&P$^Y!)dL+Kmq&Gy(1-Oi?olIrDI_$5wO{4~58jh$$ ziLN%In8|12@HgY@;gILgui9tbE(f;MVwrXnNG=*EuGYL2C8c$cKt}|mbhij%lb7$W zEw%fYq#bo=YsI$b-}FxzqBpb4r_1eKY5%6Xe+_p>IO~R^ZA_$#cuBWV<&Cj$e$dRF z7RA!B8r?W^R)fFxtWc!7Q+>|vXY53$1{Pod+ol|tdAOtupjN1VCb*bU(aHX$eQ{N# z1|U{d&|IC*V33*faf%_yq_(=piqm0+u)BYVKCowA?feroeXKk3G$<))=6wR`#s8n! zcRBfAK()y1gw5(iGm@ah0a!jJtyfME6n5r>jGYd?+F@Jyq1O?rra9!JYfd!mPxy&z zaa}ib;6rZ+U9Rhm8~jMXc&U&TY(2SNj|h)i%!bs=Mv<|j>khV}*t^=CGdRUjrRSkT7{dxhchFO-gTz3Rq07H%lIV zYqjrm`1}unm>?Q}NVBS|m92coqawp%O_PWHz$97Vg4Y8=kR#}((l@ag%oWj(y(GZ4 zZLXZT)@G!Ngb^e+H#cC#$2`G`_IARbgr_@27c<@dEkP%`4Rsv81s7}Hw2t61@kL&h z8sHx1al;EoHP_4fuGCN^?R=Zy+?Gdg`5H*_Q&tOY*1C|ej)5Y*G1SEvS$2A6=RV<9 zTPyVpr)8?&moFE&;=}D~fe(C8#dda3(20BfKhNR7){McbFmi}gNQQxKY%~HO5nfPJ zH>JC|$i@GLuA#r4emkLu|D`W~rvf$UhNqLx{Sz#0KI<;p-y`#qUC68o@(;v4-sTo@ zFKCLlCI*4=52r(~uI|Y8znF3$X8lbcf^|p&S@c1SD;2D>%6K+1^#iuV4v13i^V7h|d%F$`u7dcM*~<2n!GIv>Q7XOh50lwHmAV3)wwY zalclocEEg{J}}&I?g*Gjes}jFIYqUQ$qUx(Y3RW|9fw0mz1t=5c{GT({+8eoGgQ{tGjugcos~R?~h0H$40kwgy`>oy=My}d9AKalE7}E*Y<5hUSU*2!mO+G#`#l% zIe|ngT}6VyeuK2aJfMEsQ%oxQ6IsF3+CL!E9h4h^&-fG{h)5Qt6X(|lmU`mc*l(Oy zoxnthQ2ARROQLtOp?rx+w46R-(i@@D1AdlskCR>Qrva~Eh-VIjZbr}4S_@x%cr6oz zj{7o4W=P`YcdD#u3I}QjCm4NHqtzH^3|#dx2F zMrk>`i)~YTbLD=moxD~dmux_A*mEeM+lu4pSeag1OEkdrecWT7adT_pazP<5e&^%- zLx=4dw|n8Qu2Subo1>1HU2D!!15gwC2^AEWd+Mjq-n3K;WPVv%Jb(1O9Z#p}>-E{G zxB+mz42|majFTZjA=$tvOUL~&iL|WyUTZ8Q@2&Wdhj@ErWnuI1lG(tga}*4cj~>@1 zbYf!N!3SJla;MT{slU6=&~n&u6$+_i=dO8qesp89aenUVTANl-)KO(4I$m$XAl4o4 z`xDV~;SB;{{vKE`Fc|(&eom3pagyXxq!O~K3YCkVQra5B@j^O!GaO_DR)sza=Lzw< z-YGYo^ZK?)kj^33C4`#Wjq9@hv1)y+f*!g1S2U;OpKSi;n8R7`MHY<-oA*YQ7{JzsZjvc6r*BsaLc{`Q`}Hevi{&z>1aRaD>^Zy5*Ij}64xo*a{d-vh6&+<3m^fBy6D->CL! z2?u}LUoSgr)6ZnT|H~g=N+4{_x8Lp`FC_?})}Mc!-@m*}m1Akni4@zOJVD2}sw6f> z=C-o;-P+y~`TZmR@g*r#Hqo;5`mB{EU%gB=wlFuh$xmhp{h9KYPQ7<|BgG{pKC0#u z_GuyN&`kc1P$(Qf`lb3^2+Dn8-*21B>9KgpE~sdDe1?%o5FqMA35}(bLV}D>OltP` z!NR{-KcOXsr_0QG%(&#Rf{@0c{#wsT zu3)RMdv_mf2j;{L&F`#uS66dAfBsy1E2J)`aDh)iEhZA~el;%RIDhSe?w%PF5#bf1 z;URgyg@Eo6HuiVB4ib5V5fr8!>X;|t3$aYRkBVxmF*u#P z7fm}e^5@8DACtd$@oQeOmtIY*T?OX$LL#B&imR*9y$%bP6}_I1@0a0^w{PDzjuN{l zt6pYCrch_lSNNBe;a=}IzXE&1O)jLaG=0%M!_Ke9tP_5)HJlKU7F1bWzm!P)bwE;) zQ;F~4vj5(S*>iLZX0K@sFK>^$KzXnpY7{QFu(T9>`@>Ntx0ENjOu4!KzLGLy+9$%X zGcN9}RT+m6&!2wOC@HpZ-y0wB15t|f_()I+)JakGvE_xRLNQOxKiph+FdF`P4HiG| zVz*aZb>Krl?&ZhW2r6$Q229MW^M2_iTh+ujk>6QEUwQ#M!s}z$SgR5Q7$D))9?l}A z|4`I8#{;U>&qldhB1wUz5d_^a^n#cg8j0L7pPRf8Tge_Tz}A9A6pI?$0%P`$S7Gzp z%b$P#q_(uOYpWsTd+dvCcRy?U6g*QY9_P^XACvK1=^G*1yN5mvDeR*>C68j{Ak{udR$qi{moMlvs!;$Q{b6tZ(cOFK^;+Z|-plf;Z>8=*j!sV7G*Ubs zUwT~J_i$R!lgUsARw%`e1N^Q>15}k?!s+^uAb_A-T+?vJ&T8Qo0shq(-1gg#2Qvyu z?davGq&<}j+QC?Y=-~k^<*^OZzEabAK~2}@g9#OBDO*YhORZ=mm6#+mYT=6SUS8ZA z*y)di*Qb3)FjzbezD^3R>L(;?YLUs#ZSle6^A=XYgyiHFHZ}V`o|dl?lnnJ0%Wa-@ zg9esLXm?$_S9t%VV6O4HPD{tkD|TFtKfbEFC>@B@0tQQ%UC%ldf2p~2X4HPYlcz}U zTU3DzB*Ktb1$WuEYUbDsnCueq93)V^B?_n6YI3i0x|JpflcEG8k8eb!xr zgWXRwE`_>7M5Vj8rw_YpaA*eobmkSNl|kQP;EkIB&X{1=g`IxZXc3O=rVhAiGBUFX z)xcq$wRCQfBD`1pS}=u&{Nmp4V{gVt!u<0S5**L$6z4l$$e6;CW^}+UZLj^pLFKCD zWgEyt+3Qp3ojDg5?`G7W#_>WKvRgd{pY7dQILtRECtvv8FHI|ZG%w`iHW9+Pj*lAd zO~BZDbTMU%(!*uJ>DJu7MY`dU0Rm*!2^4`ITf*9al8*tOExya-)XN`I%U9ALAS;DQqiPDrr|^TMB9J&y?ZAy46Aln~&^DOBn3McG|eRLwl% z5|-o(B2%`Zmg6sG9Z9x{2${TfHOE?b?PWk$^ zMA6+&&>;HeNZ|SS<=Z zm~~!jI9p%p*D^8j5>cRgbw=^~bg>hnyFoJnCY9k~-76p9KS|%Y@1Xze&NUjpI#xs> zVY}P$RXWgpp!%v=TgxxM3Bl_j0Rc^bp}vmUJ@4kq-kd@ylcV71zIykp3(X~}@p3b& zJBWyT72q49_`-u1)sZg*lM?ofKDmBdVK}kug zyF6*}<)+{lhU}#x50}oIu|NsRmO+X@O&zn5UCdtPfXOBdEG#+8Oipw@<@ec(+8eXtT5NZ z-3d_x#DW&9KPA@kyB=)deYn_rCMYa%4+2VVJ5aek780Yy(;&rsfR4)V{stlWdP%3a ztW0QgMc#DkJ95>I;WDcp{6R446O2q*U`G}25^OJYV$bGyJ&_$27Ut)6slw(QC+n_2 zqZc?UNMHuHb2%(8QzbN^?MdK9HdtB;53{`wVWhaCKf5@aKP;-p6-o%r?Jg)9E8|*@ zq&|$Wc4aX#sgiV`_JDLqw>CCplj=)^ewNK`t$?!3A;y=us|hJz;L5)rd&bUyNhRHp zRw(6FTYL35m|Av|oQn(TRhG1Xu`z)=)CyH91jBKDw(8vroVQ#>4APMGffi)eGS=~$ zo7AxAh)W9BTHe%mFM^zX;sSf^)aM`NjcuIG5d7{O&|c+YwYSu91C6RT5(b1L!4kpi zjtGIEQhPQj9IwR}^Ocy(HN%ZBam^{(5EvLFqTE^0HWW)Ax*a?K-nu{~)pB+^S@9V* z#8aK7L?p9Exl@;S5efQoy)SLgVp+F6)1oCj#1)1KAE1UK)tt*x0BJzGp_~uzEyYT=u;QQzbr>0rPZs z54K_OP|tl;y>R$kl$TE;O7UG#?I&$jF;U;(VAd=NjE++k2Q<*Hz<2NZ)Tw2RcGRa} zG|BAvxxnIlk#`&L05S*$qRPbhfFC9;+X%0P_1Qqm-*@oHzLk=C5=11{>BSg6WF{so>VpXmF7gm@xHp_ z5RBfEWl=Arug?b2e0@`237b9t`ZI(gru)0~2EU_|(;~1EPp$pB1$Avml1$n7IH09| z=5B*p!fb*7fnRWI?((*`L??;oH;0(z;$uw{3*4E})GP3m8uN6k8QkA0>TSUk4c;=I z1WSh9G(pba)g+|6Kwx@HARY*NsOsh&PJvor3>K*}Ih*jY?x0@pS2R3j(R~rp(TWhJ zPLGI;@!Hk(4x2}VfM0LdtY3_VD+0NI&%%6~4u3U{>{x#o7!v@Bus?w}b~CH22z*@j z=YmrZex2?zYZHO==ng3$SFnhcIw1JPQ*D}yB&ITd7X6+(z7zxh=#w>aae zb!MOR=DyXd!6Mz)x$<8V0wWlqxmym|;mV}w=;&vwmpkLtHVnW`oXL3EvL}&=_|pAK z>5LB2N~PWyT`=|V(W9Wo#-`%$yTNE^$ljVl*SaCsiy6(sTZV+y8$v|W9xiax z9kFzP(PxO#;nAAVf;9L0OrF;t4Z)HD*hC8+%nYk`_i6X>{#ufyYl&4V3c`0{>q!?Y!}ahljygbWM>fG*PGz&`@7%X)z5J z5x^=WGkU;<8ptSEkqV9d3=AsMFa5H%KAmM!P=m|GRK~Zt$&#b+lgViCZeoMwz`9G2 zq&uhWg9cR-L3?{y9Y8aM(*mG2+Vb`S-&ma|td@M2rS-QIrOWooE8? z=x79=E!f=r^|}?y93$kj^L+WOwq`Q`{6RHR48osSwF6|xdw!+99v&GXLG!pc zJS=`3d|d0e&wq3PGm0E-9c?E7>}Lyb1AI5;?^E)1%jDOFva3OkV$s%^nMfSF0T=%# z5zvZ~E?F!4a3q*BadYDi8+-rS8|anvaL-{eL>bs1NPEaSdUiZ`n(+#UWf);bwczvY z%as+bL{7C&R@kod>%+AVa;?<-BjMM(oUax(Hv<$kTvXm39@rv7aH1knjnssI2HN@f zz*mA2n`GD7rK+WG6vNxQS3pvfE+#+U6s)WxGfy{ zE^_E=iJs1>6Y>>VoR~<>U#TBKE7SZ-o)_+V?9|qa87oQGQ2thJ*C55?UQ~`R447pr zvs}d{{+{w?+-`h?h5t)uF zg?Jv6plYe^fzxpBXs}@dHdjgo4$my9(NIJUIk~{}4(;PtUvf%|<^Yy6(9$n*bLxoz z@f5{w|0vqFiW5?PgZXM@k zbV98xq0cQ%O$aLGYBveQvSXpB;e+ewM`2#%APZ zX9*pGLd5(~x!`eTrrz6zZ=_v4)082E!JP{cmWzTc`2_`xFAc-OVv>@4ubK% zen?M$u^{lJFQwz^@-ZT06uu@T*qdmCPY)6y-#E6KT3IJ>9bVM!P0M|#+$MfF!NsV3XJc4?(xe^M}e72{n2nnI*CB5v{8W)!~_?*mlhYV(D`77EgPV3%KB-c2R21srT2E`S)*FDy@(-RL`h`M$DFR8G=QLdJdAD6uFv1d`XxLOi zcyMKglVxhxlNEid5~Y_)jv9e!;_*N>n9wVr znf)Oy4lY{?dw#xdtXl=%Cm%asF^Z11LyEUS4DFwU;QO$czSNwzq_hzTuhMxQ@(dCi zi_jXDq5tgs)?7%e7#^K<6CFftrRGh2>Gsp_wL}sT1}3J1yrSZ542%8t1y=`HKfN~PI- z!khDrtq@bLOZwk%3g%g}=K57*HtDy$U9TCKR(blrctoAc6>{~4V8Q*L&#Irkh zqy0&e;NRY3^ZoZZtGu$a<2_leoDQ?IrTiySV&UiS`~S}`g$tIte^3K|d`%*9`EM-4 zfBSb&*~HhwGT^G>9IVkCx5#ludh>#X9NC!oq?t_&1{Bi4OS#JA%;s z51-z6A)yWx)zy=LSqJ@De5Wq+)yf1E( zV^Fbi?V_(^`XQDPzR;1fC~@WFh4Saear=u7@hl2?OgEE7pDh4oP{556hxbk;n+b#Y zO=DxdUpy!Jth#zmUY-Cy|FiPl@xV=xDBY&?NjA5!`QGW%7ltUN`DPGE&FOZ_EF4)V zyud}bO&bhZ0TBq07XY`kZE?0$COg|3;~c^!-ony4O}XRoFiJrV!J6R$ZK=; zv=-fh7n3_+d*{PzoU9H)5Obt*p^*Tk1>b4Pu4CIxG4LWmGs_64HSPsygc;@E<*<;>Aq3igwxNSK17IPbr$g>!HjtHs?ED~ z(DbZwjO%OnMbij1F{!4iL%bkoVcoUmI}o6P_HM_`waUUDFJjjhlJo`K(~slhw|>%% z(K{~h-m4+bPwpwPjY1$%V)wjNF}PLW?{p!l1I98MMc7%H<7I0iKhgPgF(Fzy!f8K# z;H>qrpSl_?u5EdDjODjaoRywkOznIjVC0I(3?yy*8K#-eLfxVXwkExS34CgPt!&~5 zKPIU(&uNd`c$o_Wurzzw$Cl8E-NLBV>{wY{`C6q&$k><*kV0fErYsvfus|@BG#80r zf?fCL*%_KsA-peW=&`l0;I;ePDJjj0HEr*h)q z)ph@M8>)%=vH|CMwMSGlk=Wl2T1EG^76RMbg_l>@Jv0Q36Xj=UFTO;ya8c`V^H=qqO*AZ zqf1y!%&jpnu0ew2uX%)6s0F<}Y{FN(llr!94)+*2>W(m9!86PFRUO#zc=pH1e|Gh? zk0msCiRB8m4tF|g_tMms*t-Q**O-{%gAUdk`1S}&#eMdTc`2wrYQmrXH4;AjD8roL zuRB>raR}TiS;ex{Dn}Q;47XI^Bz}Kka;kZCPczzQ-md@D95&kAYwFNI!E6WiFo6CM zSYO@z{B@Bz^1b}xjsrUcLK#FFI9unkRNCM0XjSHet}~4Ay9`-NnmmowRja7gW5_&c zz$~u>A6&UyXtf``eGw(*df6gn^&uMoMue5|bQ0oEkW3`j-^wc}kX=s;St+1l@1hDx zL!tQ|TfFPGS;u0`LZKvlIk^Q)#JBmmHAE)hY(^i`$r0QArsJIR@{N>`r4 zY-p-915~v#lIDs85^{A?v&WlcQL!y(xc=e@HYQ^DIlLrA`P1+Y#b2lIrm=Z~a4Z#x zia)UEAk1{zU!fFCF`dY}2LaVVq2R+Oq$CWeX`PjT*Kp-%Wo310aq-U_1AeK(`j~*g z((8qC1(ndiP9unC+8cq?5o2#78?f_zi}}2GL4yStm;=-Rz;6YKQ*RW1|K1+ixp3yb zwW~l_Vs0Rod8di21&f$?YSYU-O6+bc_N#A(l<9M_XffFtc&TmO0Vj2>xsnPYM02##*EGAEVBiu|wm<@8rkimn2-j zaG(v5Q>GQ?pnT6>^!|}Gf(wm=iM4+Y;TP5i&Oqj>6`&9}0*FM*z#tH}o2326PfOGP zRoz!dMcHoc4pACJ>#X1U{`@_Q#hQm<%?uCEz3*#Z*R}Vas(nsr=Gs6h6l{!3g$fZ6E(G0f?)Ib* z1tm`iWO0^Bj!zh7AH3=8QVar6OTgoob9ht*s>GfVGMQ3rkh!yPRrk9Qe z5pZ7N7dhFmV$=T)G4FrW*xij9*TS^4A2VNLqnbPrLk}4H2TlPnbi@8q`AB+zX{hz= zX^fDkp!9k;RJy16zve>B50_r6wgL01{a24Sg19t-mUDtvk&D7@+ZfD}^ANY04GtI&mX0N7(sH#!;j6vD2U}^!QV^b0&L|zN z7|6W$h(q*RlR2}%m{l1$?Ggbji2bfNrWkU?35X3%*+E!pMn;j>;@2OpF>u4BVXT-z zlr_N!yc}L3XNHFl3DmU=>HBK3!2Wav8+JQG7$XC{*5nrb(kjEGdzSVGEvf{BO=haT z0eDFDmp$kV=rzFnA!Q&5y+1cyhF@;p+bE5-8zPq@+qFt)GhL67ia2t&3NO60910@b zo`mBOv`2M-kOc8BA|pHNuW?fji~ElaGs0#eI=W<%=$)Ogsz?nbS2Z^988SjXspQyJ zeC|ut!js-9uscAxsIR-;KcdNOyrl6C49r!M^VrGLeEdn1d0}ho!_8$k_u2lks>35> zt-y!hOFZ=1K$a*pv=tqf)E`jKcOdRN$H#KgL%cY~pVgQ->?Opp$+$>C&8$KvjO&pz zgJO4={jOA)K+)`OgE=1{_uj_=f9&6fU8pFuV0iz;F(jinf+Hg(!TQKB@p7&I_Ft)P zYwtogd&7d&XpeAQdkE{*tqtq<5rbCtPrm4{588QW;x=LWeY`>WKf0s*|9^Pw7lLPv*ne)MO<`@cAj+e_E;4%{pMcCdXi6ovkkzMZ7~BYlfN z$CvR0TdHD^RPvYwVsK#K)dNY}!f~rX3pF!ER@TlpTmhkxIYp)N0V+(&tXhvdvHNgj z+-mx~>sHRs+k13jZ0i&zf^jT8)eX+BGnv9PPP=|z=lepAZ^LEcSczP+yf#}C(Ak4F z$Bm4mj*2GH@iRL1KS4kvIYPvoJB6hVSKFjno*MK1xcLnvA%V!q5Khfo;j$Dh+;@H2 z(>_tg0lffynA=j$4$<)whqbm$#^E%7aA#Hb>|S;_?eFhdJ{a_60bJueoMvgRK^&{! z2)VS)M|H6#%s?gbSXtH2k@o_Z#_GY~F_6P1j+PqKO9z*-NNzA$^(h?grAX?qn7=4V z;!45x^Ekn?FRSb*DlL|mHLVb6?d&z07y5NIGnt|RvxN%IlXh3z@_VJbF|N%R3&Bfj z#4Gd5=PT2kZr}un%5wPdR%JO24E)`O>Tq%>@JnlBHa8puJiIV*I2vHn?}vr`2!AE;jkzCPA27;9Pf^ILH90!|l2_1v-Tf2O{O&cnkU39Gt_Jl2Hr>Ro#53avgLugk?$>s2dArx0_Hat7dkFf!-uf>|UxW``qu6aqr!8K`c3^}Cr($kNx z0||_0lGdj?PT6!1$T+o^3v0iO~iR+bxMt;i>YA2 zJwE9K`1rGbPR-tX@xm}5exzvW4SkLrI_gGM_|KdvY7~@!GN)5&heX+tam2nKdp#zk z*j134gb%ZcKGGTIJNoduD$DCb+Bk#e3FL^c;|`p!-+vTs%h1%$pFY?7o!yoPHC@^f}L%#Hr|+2G7r*@CqB z>)L%|TDD)cLWjI+-G>4adxH5!n{ymFt_$wvcqjSItz+wgisjzu>L{mM%c?G%0%})r z^5IV*Agn=eiSyHJ* zNuLLX^O;#GHZAJ#*Hjqex*e9?+B*$)TOI9eY~r1LcR~>qgT=%muSv5DwtN>*>d7qg_RadVRf_Zlc5EOWWEi%-3Dgm^ndO? zuoJ(kU!(wc_0`nttt&QN8h+_Q&4mgbV;SWh1skMqNc2;XW1P(2NZ4#EcvqT|KrD|3 zbB!}UCW~65d!Ainmz3ZF2i@z-KA+}*429*6KWvnljdU-GL9n=`TbZ(Rz5y-zmKA}q zi-e0K&r1ia5VB77$FZtyiyLm!p9;UeGrtkLXM6-1DJfavkQ^FZ-oPh>crnR4XotMN zJpZGQQXp_E`(dY+qWjTK#CyEC>DTvueqABFLbkXP=9@~GT1V7pHC0(7XVr8OQQsa3 z7Fr5iT=Nm;n@d>cy*vGcBz4;p5pW$&Qfd!Uny5c{k~3cm|8efldDZ@0aYlFB%RDFA zeCJh&)?WQnWr`Y4BwZwI@@;mJu9{xag19$x`@A?F-^q!T@-T;^+pIWEhwsGOi_|G? z#7_4xC|iqlr&_A@tHmFfzUvt}A)#asF?>A$8j>t<3t=2-x3VrrQ$V zvT`T=s*6Q8J`uoOcT3rUsqfo!hx95L3Or#{|CKj75!_34q=BkvBu#4zq7H5Kj$Gbz z(qLX0u=*kA;sbWL&`8k;p+WmMYmbh7pIQ0bnoQFtxfjQCFhE6S> z!ir^Y%}%wRWa|6oOiVzFUbd+{a2U%izD$3VI1{O_(B;a5Q*_yulxBZZcet>^Zui}4GE>ORQO397_} z@07ZfbTIVd=pGn*wA36F9vY?EnjM6v=Uv6a(p?8^(Ra~to90W7?NIz_QLf9@Vzk`P z6Dm5Z`D#<+mwQK+LC3JrTuv`~Wmgqyv8%HekjA6VdyvNZYw`Q%o9HHb80beG;PqbL zsA5Dro^#pQ*nlXHrj#TSdW?>@2m#hLVnAMfGex)pBO9I7nlqc1JMCEUO{uy8fuA@H z(2Ag^AJ_KudG3>oKn~Y?+rUU^dlo@7ZEfvaVmRunUT{Ohn=3<{JdL;Cpg9M#r~02< z?HgyE%%Gbsc#Fr!6oJV{tSQZWQP^Z}k=K`49?xs41s3y2j5!p&e0I8<=bz69a^_v- za+vxievL}gGA@;tY8C|a@zOMnD<&-LbZ;5YOISEPQkb<>u@Dck|I5B**;#M$`nO-8Gf<0# zDPVzdII?JwK5!zh`J20^4f`Ji2m!iCj2!Br{E#B7ls*d8SSD~dLeOwnA=%DwH=;bB zQ>oZYM^M3R8;2@-=V>1I{n-}jveyioc+i6!rqoPGTCRloN|-8;nTh^X3}t0yZas0? zYXrsaan!yKYA!s}XUb`&=iD*yt`E_ewH{ZUdzxIt6`?>lg-`E50igc@HT5Lp*BEWTlRa;{p8E3`;RT z1u|q#1tKjOc`DSdFYcA6X1cBGt)=EC6i^(Zht>EsI$it#{;bmY%cw~ zFAp~qL38AVqUZCC>cxQaD71HUZHH4F%_r1Q^}+LJy5}a zGa@5hII`x_$-1LDvy>!}&GVjl-^aEwTj9apQM6&Yw1(vYnJypPSCczc3AuI{kWN52 z+;41;5(BO1o)FLY;Q>J*@aC(Rd}vG!&9f&Yg~w1k08y0%!HIa`=}u+%7+Az3V~%+v zr7XEd=DE8V8mGgNOTh2n7EaBh*8sxR5=S{VFxODR@+sE=gk{K>q=14!ok9Hc?GZSr z{uK2rG2Vhye%I4VaVf zO{CI*$>S{oD92I}#;6qcfb*6F=13cG)?rfD#DtnefL&ir^9$jicb;B=6) zB)6>_sGEpC*ZnTmb1MdXz`hS^6QcItPC;AlsOxD5cUzK4rN>`D{0DQS)O0>KnH$^5 z`P9|-tvU+cUUWbq0l8e>&Ikp__KVxO!Ieo&v2k&n?)H#3Tx4LFN_1KrYpQieLDARd z9|=m(B3B5+;)}Jt^YCc_=%>5oGsv)cN>JwDEU}mMcIhi_oZsr>uiG~G3c={k(N@H+LkIbq6Yn{_JCV6F|oNxR~-2ZY(_j=!wCwEHT{sjNv5^`6LsOXLAKmXN zCSXEdnOcV%i(TAVm2Hz^r-T%g7E7OHV`P2*`7SPv;+?s2TULL4y`+%V# z&dW7yJE4L<;B^uLowWUXzOu=5v@UfHS}fMs-q+X*0qDDPVG-O16Z=g}1to=W;-n~Z zK9*~%d-@TQ!Kit5&>sGjSQ;#I8?$^Rk};ApzozHJ~N6pU|j zFnWtfNxg%*?PO&G2@!k+)MX4x-+(Ddi*LmTW-J!BS0^tp2F_qD&pNH2Mf@*{eKYLr!@7v^4qbpq_FgOqX(C_Y^^8@? z{uF`o+y&>v=ZMS`dmGOj&#mh6*x&Ed0qSPh(nEmjuy8ma3u_1*iTTUCLj3&ixr8Tn zPvvlkKh|9xw3_$UO|WHUSKW==wQEN8gV-M)*Cd+H+%s9;fFx8TaLn@Xj2&-1&r-|Y z3x&#A^0(NFYL01d%)viPmRN#KV?>}Zx2N>W4?;c_tDFn)S!l0(;FgGsF_}D#=D{ZF za93Ev@mteBv2@6{C%(Yk@Ci&(!Fw9*U=*vAUet@ zD7@eIr-lrbym{Rl_ry!|jxEhPka59OWd5%1-d^s|fjGxZ)R%U`cD#ktD3DbmBDvE8 zQ`3v@YQhs(9U&vv5?0mEit(JdPmy#9Bfk(J^w>rZgzO8dd1BR{{ zrF?i;nEs%QBT~L246st5}cP<0XbtnZaL=2R|SB;da=NyHb zE9Y&4dMjYPJb!kN^Ao0Y-QHo(rDJiZ$U|-6zJU#yc_}Yqf#0On>!hq zjH;T%V`IlS0}YcGCltNw6*M?=n3X&Zlche_hB=ni24i&jn@!C-&U3u0V$JEfPj##W z`SCl#5XCtOiCPPQZwBpzBVw8)U)H?Azc@J|n7iQP2Vfu;Aq|}pl<#two3QW}wS4d# zb!g9tt%9mDbz~=6am)9Q3WMCS5XNLDzZgZUa~EDJ7cpDw>a`N%!f~<}C#Wo!mgYn1 zh;j99AjxH?-D;98!8o!&D-9JTV$b#P@FbPtA-M6P_wBT_P~KpE^Tv#h8_^EyzjE9l zy>(ea7PfQSNB$(>FxMu0{d!r=NS!fkx0b6MRvVH3UDGG|#c=c+pzCr1TO(-mHGTac zKPwAghns7ERcAi5TupQ6D$#zoVvoSx%Zrv(7*DXedjI5CARI32C^Sf+r@?sbiamSf z^$A`YB~a9YlSv-A_@V^`qGf6tI(tf>;@yB6&@2W0tc?m;!9=S$-F+WQq=fB<2~nds z+J(Hau(4Q%)}nP1g%RJx^IgAS(ILg7nn?L`WqdNy8b?2)5JOAfW_u^A&}z2=12Q^3 z=Uz{xP+iZC z(Oq4R1+oLJ(NQ_+$d4i!{*2+|3y9^}U4);$ay3n?1`SS)TpYPy9_9M;h|A|I*_IL) z0EDIN0Dj{qYP2g2>pwE4{E?9A6feIRDXa6rV(9Kgf@cP&sd)7FOxH(L6~5#8cGA+Q zgxR!RrsI9i!F3iO@hMpTQTr|pcoYyf@cf_E)V$X#4la*F(y~FS480~E z?+WcKZHIz3stc{}NpqZ~>4S0G1K#37v-HEO&lQrIQp^|h;bwrR>p8D@>UCq zt$Z!Cl2dT1rBGb>ugi=pQ8SU(YWha+lk3E#Ug(E6f3<1dwL8y3Ouvms=*Nv5DKk7` zG+8eZC8Zz^_J4b^cjNqHY3U&l>?HH7d@))Nr}p17X1DM4dC%<>T;40}PSESiw?c?D z&pc8l4Y}OSFhBa#KV2@o;waeFoz}qq%I+T!L;hb{p;Ps5t?-z52x8gc0jw(N=~NMO ze0zgAtKmc%U_pPQqLSQlh4=>qpi++Zw!Ct6L!d(nI4lbO4X4i;r~Ysei`MhaAKG-@ z*{XK<%w6F-{n#9=^uo)xBiBE2HpcrEEG+Io`YCuGrGS)!n21QaSi5De#Dmlf24mlF zu5so4&TEMfU;_AJlWmIN5vwr9a(fUhoAcc-rK0zqt0<7Pzlv0S)(VDmb1>2qq>xQ+ z40q5-qhpZvNvWx;zrEZ|xh(*_Eu#2ZK=!P`F|X}ZUP?aFU*)s3GV8pIgR`c|Zu+De zi`FwG_#IYOqGqNDc`X+rAk()l+Jc&ovH8Y3z*~+RBoztdP6&iNf>?n>1G|OMy68%I zbnJ>von~!}he7w*{yh*fmf}qKS+1`lN^*T|%|v?yn~;b|_o$^YG1__iF5zP$^hj!!KC7nLQVeIkCz0L_ zM4%fK1Y)zjy&(K4lX*zwOIMeJ&7t@*SaGPvBvOPq~M1c8&3E zJwWvVhbzwyavYVN>-#RFyzXb>H-t;*!I7<-qT}^X-fk4b z%Mf)DqhZs=1z+I{VPNJ6 z*6Jo%S}7Emn3}pxSV5~xTFydKlbY&hbu_UCG@q9^ToeUB1vq6$6lKs~)|$@#etD}4 ztpGtq;l5>pSdJ%Lce)cr{5Lk@HpY61d`b;J<0#bie`|GhzI%&r$cxcgli1tYG4PrI zv!kxgZO=>J@*m*)_bSoYn@$7UnPj2nZC&8A=Smn5O`Y)tjW8svM(hQmve+@vGvju7 z&8iBAEnc*>rb~em)+z)s_70m%_2+(uS8F|%FY6rd<5FGV^!433=iY(AEIF5tUPM*? z{3k?rR2_nB-<<2XdsZ#id#$&0Dc&5c@Xvedkcz!Ntw$~U`5kPYi~n@zo;lp0u<2e! zFWNvL5s*lv?;TL%Orp}K@=rpT4!31vAm-UKWt-#nTSV|*6zJ4>qa>@L)&o+qhc@v) zt=hOC66y||$dlKH6YzYC-^(a*04yUAhGN-`@y(S=qChp?)#)`Jr}>yN$XG~ST*v`l z3bYkIAw4env%4E8yHv=AI$^voU$B=2kT0J8@i;jY%fim`*(Uq_S3m8*mvt@%$?D8B3qPo`OTqylHV)+V@k>= zX+uP`>hFujSZ;P7C!!296VJ|0Ztyl`&@LZxW-LQER23=j{Hn31fp8WEd?WuXRhkooLv>Mv2(p*(Ns)@|N zP~{@soTnrrBxH8&^?aVmCmWF6LIk&qGkKP$*pOTp6rRXJC!$OrjQ2vtt_1fp-myYt!@2v67g%vNMgyg=7Q;s}+S4@_Y4{l)Q22$ImAZH^X$PK9`l5^E$qX zR-shYa{MJJI#g3(m_FzbNtBuMnDm-5))_Ho%g97C(ukt|>)>Q;liU1<+0LmeryQcu z0#4c+GTBp-pcP7&XU5PixoDkG82v$m!(k!-uY7`;&ZTT%L2=2!39_riZe}c;owv>{}?KA7b?kikldn^~b#Xy{hE=~0XdnLfz8zH}wG&;sw-8rQLk zZ5yh>g%e|r`Dn?Qt--pLSWAKR<`@D!5wlnZ%l*r}FAm+rxcIBW-^F!}juC~X_KUGj z+}nn5BYC$yH*Yd~mdPY`*260_g`r{!{-f?OcV3+PU*d^mH72i3%l+FyC#rcx4Ifdg8*7z~@BphMG zLvr}7kYzKX;WS9Sgc8H95#!0WOELa?`}{vf$<$JCcczMbz9ASDKDrDCsoEj~nAslV;7;NhKsDeeUT|-kFOl$PH*9rmB2+x;~VUbo+VpaxxaN%eNSX zxRedyu45x)G(yylWFzGW&LSkkFGSem*!dyt+?N^iLw#5fh=G34BPir00;xa>8T;<| z5FPT5;|2zF#J?Vb?~M%|ilo2Ku*&}aE%3}8<>uc{yz~bz^7nzoaUb>X$FESpd;EQ{ oH8NoT{n#HZIS}RVld?u}f~lnPx0UZOZhxd8t0Ge(_3GXK09>r+*#H0l literal 0 HcmV?d00001 From a7c67f615bb95e1aa0c6d956c790013e04f3ad99 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 17:19:05 -0700 Subject: [PATCH 40/41] fix the flaky selftest, and the go/no-go verdict it was masking CI: check_proxy_attribution compared calls the CLIENT confirmed against rows the PROXY logged. On 3.10 urlopen can raise on a keep-alive connection after the proxy has already handled and recorded the call, so sent undercounted, the log did not, and a networking hiccup was reported as cross-attribution -- red CI for the opposite of the defect under test. Assert attribution directly instead: no foreign keys, and each trial's attributed count bounded by what was actually sent to it. 5/5 clean locally. The matrix now says why it holds 3.10, since nothing declared it: it is the oldest CPython still getting security fixes and the suite uses no 3.11+ syntax. Keeping it is what surfaced this race at all. probe.py: the same pass-rate defect as suitedata, in the surface that prints the verdict. It matched adapter faults on status 'fail' when a ceiling hit records 'ungradeable', so it printed '0 harness' for a run with three killed trials -- and divided by all five, so cli-cli-13057 read 40% and was marked KEEP inside the band when its gradeable trials were 2 of 2. Now 6 of 24, agreeing with the registered analysis. One is_ungradeable() in suitedata, imported by probe, so the three surfaces cannot drift apart again. --- .github/workflows/ci.yml | 11 ++++++++ docs/VALIDATION-120.md | 56 +++++++++++++++++++++++++++++++++++--- src/adherence/probe.py | 27 ++++++++++++++---- src/adherence/selftest.py | 47 ++++++++++++++++++++++---------- src/adherence/suitedata.py | 6 ++-- 5 files changed, 120 insertions(+), 27 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32fd920..62a64a6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,17 @@ jobs: strategy: fail-fast: false matrix: + # Floor and ceiling, deliberately. 3.10 is the oldest CPython still + # receiving security fixes and what older LTS distros ship, so it is + # the realistic worst case for someone running this harness on the + # box they already have; 3.14 is what the reference runs use. The + # suite is stdlib-only and uses no 3.11+ syntax, so the floor costs + # nothing to hold. + # + # Keep both. The one failure this matrix has caught was a race in + # the proxy-attribution selftest that is wrong on every version -- + # 3.10's http.client keep-alive behaviour just made it likely enough + # to see. A narrower matrix would have hidden it. python-version: ["3.10", "3.14"] steps: diff --git a/docs/VALIDATION-120.md b/docs/VALIDATION-120.md index 5303317..41781ad 100644 --- a/docs/VALIDATION-120.md +++ b/docs/VALIDATION-120.md @@ -189,7 +189,16 @@ a project. The 2,700 s ceiling was not the problem — the scenario was.* ## 5. Defects found by this grid The grid's other job is to break the instrument before the experiment does. -Three defects surfaced, all fixed. +Four defects surfaced, all fixed. + +**Three of them were the same defect in three different surfaces**: the viewer +(§5.1), the runner's verdict (§5.4), and — already correct — the registered +analysis. Each computed a pass rate by dividing over every trial, counting +harness faults as model failures. The registered analysis had always applied +the exclusion, so the disagreement was silent until someone compared them. + +There is now one `is_ungradeable()` predicate in `suitedata`, imported by the +others. One definition, so the surfaces cannot drift apart again. ### 5.1 The viewer scored harness faults as model failures — and it moved a scenario in-band @@ -235,7 +244,45 @@ so §2's count is unaffected; dropping it makes the cli tier 1 of 14. The fix is in the tree and `mkscenarios` now refuses such tasks at extraction, so a re-run would not produce them. -### 5.4 A sharp edge left in place +### 5.4 The go/no-go verdict itself was wrong — a third surface, same defect + +`probe.py` prints the fixture's verdict at the end of every run. The raw +transcript of this grid is preserved at +[`VALIDATION-120-make-probe-sh.txt`](VALIDATION-120-make-probe-sh.txt), and it +ends: + +``` +cli-cli-13057 40% 5 KEEP +... +7 of 24 tasks land in [0.25, 0.80] + 16 ceiling · 1 floor · 0 harness + +VERDICT: proceed with thin margin (7 usable). +``` + +Two defects, compounding: + +1. The adapter check reports a ceiling hit as `ungradeable`, not `fail`, and + the harness counter matched on `"fail"`. It printed **`0 harness`** for a + run in which three trials were killed at 2,700 s. +2. The rate divided by all five trials, so those three counted as model + failures — `cli-cli-13057` read **40%** and was marked **KEEP**, landing + inside the band, when its gradeable trials were 2 of 2 and it belongs + outside. + +Corrected, the same command now prints: + +``` +cli-cli-13057 100% 2 ceiling — drop +6 of 24 tasks land in [0.25, 0.80] +``` + +This was the worst of the three places to hold the defect, because it is the +one that renders a decision rather than a number. The headline in §2 is **6**; +the transcript's **7** is preserved unedited as the record of what the +instrument said before it was fixed. + +### 5.5 A sharp edge left in place `status: "ungradeable"` is used both for *"this check could not run"* and for informational skips such as `cli.extra_surface`. Across the grid there are 174 @@ -305,8 +352,9 @@ instrument is honest about it.* **Open before the experiment can run:** -1. Drop `cli-cli-13523` and `cli-cli-13057`; re-extract with the current - `mkscenarios`. +1. Drop `cli-cli-13523` (grader hole) and `cli-cli-13057` (unusable on two + axes); re-extract with the current `mkscenarios`. `probe.py` now agrees — + it marks both for dropping without being told. 2. Materialize arms `a0`, `a2`–`a5` and re-run `floors` for the bytes-per-token agreement check. 3. Decide whether to run on the unit-graded subset only. The registration diff --git a/src/adherence/probe.py b/src/adherence/probe.py index 8622f63..e9666be 100644 --- a/src/adherence/probe.py +++ b/src/adherence/probe.py @@ -18,6 +18,8 @@ import sys from collections import defaultdict +from adherence.suitedata import is_ungradeable + BAND = (0.25, 0.80) MIN_USABLE = 6 # registered stopping rule in docs/EVAL.md @@ -42,12 +44,25 @@ def main() -> int: keep, ceiling, floor, broken = [], [], [], [] for sid, rs in sorted(by.items()): - rate = sum(1 for r in rs if r["all_pass"]) / len(rs) - adapter_fail = sum(1 for r in rs - if any(c["name"] == "adapter" and c["status"] == "fail" - for c in r["checks"])) - row = (sid, rate, len(rs), adapter_fail) - if adapter_fail == len(rs): + # Two defects lived here, and together they kept a dead scenario. + # + # The adapter check reports a ceiling hit as `ungradeable`, not + # `fail`, so matching on "fail" counted zero harness faults for a + # run that had three -- the summary printed "0 harness" while three + # trials had been killed at 2700s. + # + # And the rate divided by every trial, so those three counted as + # model failures: cli-cli-13057 read 40% (2 of 5) and landed inside + # the band, when its gradeable trials were 2 of 2 and it belongs + # outside. The registration is explicit -- "harness faults are not + # model failures" -- and this is the surface that prints the go/no-go + # verdict, so it was the worst of the three places to get it wrong. + broken_n = sum(1 for r in rs if is_ungradeable(r)) + graded = [r for r in rs if not is_ungradeable(r)] + rate = (sum(1 for r in graded if r["all_pass"]) / len(graded) + if graded else 0.0) + row = (sid, rate, len(graded), broken_n) + if not graded: broken.append(row) elif rate > BAND[1]: ceiling.append(row) diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index 9fff70d..74a9b2a 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -836,24 +836,43 @@ def fire(run_id, n): rows = [_json.loads(x) for x in log.read_text().splitlines() if x.strip()] groups = _M.split_by_mark(rows) - if sum(sent.values()) < 6: - problems.append(f"only {sum(sent.values())} of 10 requests " - f"completed; the proxy is not serving") - for rid, want in sent.items(): - key = _M.trial_key(rid) + + # The invariant is "no call lands in the wrong bucket", NOT "exactly + # N requests succeeded". Those came apart on 3.10, where the client + # can raise on a keep-alive connection AFTER the proxy has already + # handled and logged the call: `sent` undercounts, the log does not, + # and comparing them reported a networking hiccup as + # cross-attribution -- a red CI run for the opposite of the defect + # under test. Assert attribution directly instead. + want = {a: 4, b: 6} + expected = {_M.trial_key(k): k for k in want} + if len(rows) < 6: + problems.append(f"only {len(rows)} of 10 calls reached the proxy; " + f"it is not serving") + for key in groups: + if key not in expected: + problems.append( + f"{key}: calls attributed to a trial that never ran. " + f"Concurrent trials cross-attributed, which is what the " + f"single global mark did and the whole point of the run id") + for key, rid in expected.items(): got = len(groups.get(key, [])) - if got != want: + if got < sent[rid]: + problems.append( + f"{key}: {sent[rid]} call(s) the client confirmed but only " + f"{got} attributed -- calls are being lost or misfiled") + if got > want[rid]: problems.append( - f"{key}: {want} call(s) succeeded but {got} were " - f"attributed to it. Concurrent trials cross-attributed, " - f"which is what the single global mark did and the " - f"whole point of the run id") - first = _M.trial_key("s01|a1|0|aaa") + f"{key}: {got} calls attributed but only {want[rid]} were " + f"ever sent to it; it is absorbing another trial's traffic") + first = _M.trial_key(a) tot = _M.proxy_totals(groups.get(first, [])) - if tot["tok_in_billed"] != 100 * sent.get("s01|a1|0|aaa", 0): + # Tied to what the proxy recorded, not to what the client confirmed: + # the question here is whether usage survives attribution. + if tot["tok_in_billed"] != 100 * len(groups.get(first, [])): problems.append(f"tok_in_billed {tot['tok_in_billed']} does not " - f"match {sent.get('s01|a1|0|aaa', 0)} calls x 100 " - f"-- usage is not surviving attribution") + f"match {len(groups.get(first, []))} attributed " + f"calls x 100 -- usage is not surviving attribution") if seen_paths != {"/v1/chat/completions"}: problems.append(f"upstream saw {seen_paths}; the routing prefix " f"must be stripped, or the proxy is altering " diff --git a/src/adherence/suitedata.py b/src/adherence/suitedata.py index 4f39612..acdf44a 100644 --- a/src/adherence/suitedata.py +++ b/src/adherence/suitedata.py @@ -103,7 +103,7 @@ def newest_mtime(paths=None): # ---------- cells ---------- -def _ungradeable(row) -> bool: +def is_ungradeable(row) -> bool: """Did the harness fail to produce something judgeable? One definition, used by both the `ung` column and the pass rate, so a @@ -176,7 +176,7 @@ def load_cells(paths=None, pattern=None): # disagreed about whether that scenario could discriminate at all. # A viewer that can move a scenario in or out of band is not a # display bug. - gradeable = [r for r in rs if not _ungradeable(r)] + gradeable = [r for r in rs if not is_ungradeable(r)] passes = [1.0 if r["all_pass"] else 0.0 for r in gradeable] fails = sorted({c["name"] for r in rs for c in r["checks"] if c["status"] == "fail"}) @@ -236,7 +236,7 @@ def load_cells(paths=None, pattern=None): for r in rs]), "subagent_tok": _med([(r["metrics"] or {}).get("subagent_tok_in", 0) for r in rs]), - "ungradeable": sum(1 for r in rs if _ungradeable(r)), + "ungradeable": sum(1 for r in rs if is_ungradeable(r)), }) cells.sort(key=lambda c: (c["arm"], c["scenario"])) if pattern: From 34f2dc1af990dfe3464d5092f61d4cb7c090efd9 Mon Sep 17 00:00:00 2001 From: TGPSKI Date: Tue, 4 Aug 2026 17:22:24 -0700 Subject: [PATCH 41/41] selftest: wait for the proxy log to settle instead of racing it The remaining 3.10 failure was the other side of the same race. The proxy writes its log row AFTER the response is on the wire (proxy._pump_body), so a client that has read its body can be milliseconds ahead of the recorder: 6 calls confirmed, 5 rows on disk, reported as 'calls are being lost or misfiled'. That ordering is fine in production -- recording after responding keeps latency off the critical path, and the log is for post-hoc analysis. It is the test that has to stop asserting through it. Bounded wait for the expected row count, then assert attribution as before; a genuine loss still fails after the timeout. --- src/adherence/selftest.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/adherence/selftest.py b/src/adherence/selftest.py index 74a9b2a..d37cea3 100755 --- a/src/adherence/selftest.py +++ b/src/adherence/selftest.py @@ -834,12 +834,25 @@ def fire(run_id, n): for t in ts: t.join() - rows = [_json.loads(x) for x in log.read_text().splitlines() if x.strip()] + # The proxy writes its log row AFTER the response is on the wire + # (see proxy._pump_body), so a client that has already read its body + # can be a few milliseconds ahead of the recorder. Wait for the log + # to settle instead of racing it: this is write latency, not + # attribution, and asserting straight through it is what made CI + # flaky on the slower runner. + deadline = time.time() + 5.0 + rows = [] + while True: + rows = [_json.loads(x) for x in log.read_text().splitlines() + if x.strip()] + if len(rows) >= sum(sent.values()) or time.time() > deadline: + break + time.sleep(0.05) groups = _M.split_by_mark(rows) # The invariant is "no call lands in the wrong bucket", NOT "exactly # N requests succeeded". Those came apart on 3.10, where the client - # can raise on a keep-alive connection AFTER the proxy has already + # can also raise on a keep-alive connection AFTER the proxy has # handled and logged the call: `sent` undercounts, the log does not, # and comparing them reported a networking hiccup as # cross-attribution -- a red CI run for the opposite of the defect