Skip to content

batch: land #248, #251, #250, #249, #247, #243 - #262

Merged
88plug merged 28 commits into
mainfrom
claude/converge-r1
Oct 30, 2026
Merged

88plug merged 28 commits into
mainfrom
claude/converge-r1

Conversation

@88plug

@88plug 88plug commented Oct 30, 2026

Copy link
Copy Markdown
Owner

Lands six reviewed PRs in one merge, with one CI run for all of them. Each constituent is merged with --no-ff, so its commits keep their own history.

Order: code and infra first, then docs, then ledger results.

Integration changes made in the batch:

Local checks on the batch head: every suite in .github/workflows/ci.yml that runs without extra tooling, the simulated hardware matrix, the agent examples, tests/claims_check.sh and tests/ledger_drift_check.py.

88plug added 28 commits October 29, 2026 12:34
H54q had no runner, and amendment Q1 asks for one before its first hold. This adds it.

- arm.sh gains an item mode, which hold.sh turns on for row q. Each arm answers its GSM8K items 16 in flight, using H54a's chat and grader. Every finished request is written as it lands. No request starts after an item stop 90 s before the hold's deadline. An item's first error re-asks it once; a second error counts as wrong.
- When the server stops answering, the arm is failed and the run of errors is discarded.
- OVQ, OVB and Lg apply the manifests H54a's scored runs applied, byte for byte. R and Vi derive from H54a's recorded B1g render.
- qcampaign.sh plans each of the three holds from the records so far.
- h54.py score-q pairs items 0-199 and bootstraps OVQ - R and OVB - OVQ (10,000 resamples, seed 1).
- The tests cover the renders, the record rules, the plan, the client against fakes and a local stub server, and the verdicts.
…ecord around the holds

Neither step is part of H54q's protocol or score. verify hashes every weight file the arms load against the pre-registration's sha256 list and OVQ's manifest, under the bench lock. frontdoor records that both SGLang serving pairs still answer through Dynamo :8100, with each pair's request counter rising.
…s the fix

integrations/eas/overlay.py decides, per row of integrations/eas/overlay.json
and at one EAS commit, whether a k3s/k3d patch is skipped (not needed on this
cluster), dropped because upstream merged it (git apply -R --check), dropped
because upstream fixed it another way (a probe matches and the knob the
generator writes is still there), applied (first variant whose git apply
--check passes), or a STOP that names the upstream change that moved the hunk
and says to regenerate. Every decision prints as `fact -> choice [source]`,
with --explain giving permalinks. Decisions read the commit through a scratch
index, so they do not change once the overlay is applied; --apply writes the
working tree only when nothing STOPs, and a re-run is a no-op.

Patches are looked up in integrations/eas/patches, then in the upstream
drafts, so the drafts stay the only copy. The one new patch is the
release-1.2 form of 0006, where the EnvoyProxy task is still in
roles/envoy_gateway/tasks/install.yaml.

tests/eas_test.sh (section overlay) runs it on synthetic git repos built from
byte-identical copies of the EAS files the patches touch, at main 97f6157
and release-1.2 5c27fb3. apply-check.sh gains --overlay, which checks the
recorded decisions on a real clone and prints them for branch tips and open
EAS PRs #50, #52 and #61.
… on the load gate

The two holds left of H57d's cap ran on 2026-10-29 from c4407a2, as amendments R1 and R2
register them: H57d's revisions downloaded again and checked against the committed
weights.sha256, the drafter rebuilt to H57d's Q4_0 (8eb21d5b...), a discarded wiring smoke, then
holds 1 and 2 under ~/k3dgpu-bench.lock in their registered orders. All six arm runs were
measured and the affinity check passed.

score-p reads both rows INCONCLUSIVE: the load gate's foreign P-core load spread is 2.97 CPU-s/s
(> 2.0), Od 0.45 against the llama.cpp arms' 3.1-3.4. Not gated: Ld-mtp-u/Ld-mtp 1.108 (95% CI
1.072-1.142), faster in both holds; Ld-mtp-u/Od 1.369 (1.345-1.396).

Disclosed deviation: Od ran without the P-core balloon (cpuset 0-15,17-31, request 1 CPU). arm.sh
calls k3d-gpu agent manifest without K3D_GPU_CLUSTER, and since #183 that call names the context
k3d-gpu, which a hold's kubeconfig lacks, so the manifest saw no hybrid node.

Records under bench/h57d/results/2026-10-29 (re-scoring them reproduces verdict.json); the
technical report's counts move to 30 INCONCLUSIVE and 17 PENDING.
F3 is one scored run of `k3d-gpu eas up --agent-toolkit` on a fresh, default
k3d-gpu cluster on the i9-13900T at the "main" profile pins (EAS 97f6157,
enterprise-inference 3e8a244, EAT release-2.0.0 036b662). It grades the printed
auto-choices and overlay decisions against a fixed table, the install's
PLAY RECAPs, a Ready wait, `eas check` through the EAS gateway, a secret scan
over logs and sampled argv, and `eas down`. The row is PENDING; the run waits
for the eas CLI and the eat-up.sh release-1.1.0 move to reach main.
…emory as read

Od's memory limit and agent-fit differ between the holds (36Gi and cpu 6x131072 in hold 1, 39Gi
and cpu 7x131072 in hold 2), since the fit sizes them from MemAvailable at render time; the run
section quoted hold 1's only. Its serving arguments, image, graph.pbtxt and cpuset are the same in
both holds, so the pooled records stay one treatment. qwen35-9b holds 13,530 MiB of GPU 1 as
nvidia-smi reads it (13.2 GiB), not 13.5 GiB.

Rebased onto main after H52b's run: the technical report now counts 17 REFUTED, 30 INCONCLUSIVE
and 17 PENDING, and its status line names the H57dp run.
New page docs/intel/eas.md (in the nav under Integrations) documents
`k3d-gpu eas`: what "full EAS" covers, the commands, every automatic choice
with the fact it reads and a permalink to the upstream line behind it, the
refusals, the patch overlay with its expected decisions for the main and
v1.2.0-rc.1 profiles, the pins and how to move them, EAT's hardware and
inotify minimums against what `eas up` does on a smaller host, the known
issues, and the limits (Xeon CPU path only; Arc and Gaudi stay with
`k3d-gpu agent up`; ERAG refused until an enterprise-inference vLLM-XPU
runtime exists).

docs/intel/upstream-eat.md gets a second 2026-10-29 re-read and a new SHA
table: EAS main 97f6157 still passes every patch and the series; on
v1.2.0-rc.1 (5c27fb3) 0005 and 0006 fail, which the overlay's second 0006
variant covers; open EAS PRs #50 and #52 break 0006 and #61 breaks 0002,
0004 and 0005. It lists the source findings for a k3d BYO install of EAT
2.0 and says Gate 2 covered platform and inference only, so EAT 2.0 on k3d
stays unverified until F3 runs.

docs/platforms.md, docs/intel.md, README.md and the upstream pack README
now name the two paths: eat-up.sh on EAT release-1.1.0 for EAT 1.x, and
`k3d-gpu eas up --agent-toolkit` for EAT 2.0, with F3 PENDING.
tests/eas_test.sh gains a config section, next to the overlay section, that runs
integrations/eas/eas-config.py on nineteen golden fixtures under
tests/fixtures/eas/config. Each fixture is a facts.json and an args line, and the
expected k3d-gpu-overrides.yaml, global_config.edit.yaml, models.edit.yaml,
repos.<layer>.yaml and choices.txt must come out byte for byte. Refusal cases
must exit 3, print the expected reasons and write nothing.

The fixtures cover:
- the desktop (hybrid, baked balloons, no AMX, Arc GPU, 125 GiB, 32 CPUs)
- a Xeon with AMX and no NRI policy, and a Gaudi box
- ServiceLB disabled, k3d-gpu's own agent-sandbox, and EAT 1.x namespaces
- rootless Docker, NRI off, and a host where no model fits
- the erag layer, the v1.2.0-rc.1 profile, and the inference layer
- --model overrides, including one fit rejects
- a re-run over EAS's own Helm releases with custom CIDRs
- stock k3s, Istio's default, and unknown CNI layouts
- fit failing for one candidate

The balloons and NFD DaemonSet metadata, the k3s.io/node-args format and the
containerd CNI bin_dirs come from a live k3d-gpu v1.37.1 node. The k3d-gpu
balloons DaemonSet carries the chart's Helm labels as well as the k3s addon
annotation, so ownership is read from the annotation.

The section also checks that the generator needs only the Python standard
library, that floating refs and malformed facts exit 2, and that a refusal or
a second run leaves no stale output. It checks that --explain prints
permalinks, that every citable source is a permalink at a full commit SHA, and
the pins.json shape.

It fails now (5 passed, 30 failed): the generator and pins.json do not exist
yet. The overlay section is unchanged and passes.
…ream SHAs

integrations/eas/eas-config.py turns read-only facts about a k3d-gpu cluster
into what Intel's Enterprise AI Solutions installer (es_auto_installer.sh,
existing_kubernetes mode) needs:
- ansible extra vars, passed last so they win
- the existing_kubernetes key for global_config.yaml
- edits to models.yaml, the file model-manager reads
- the layer manifest's revs, as commit SHAs
- one line per choice: "<fact> -> <choice> [<source>]"

Each source is a permalink at the tree it was read from: EAS 97f6157, EI
3e8a244, EAT 036b662, k3s v1.37.1+k3s1 356c025, vLLM v0.28.0 2cf0a69, and this
repo's Gate 2 probe records. --explain prints the permalinks. The generator is
pure (no cluster access) and uses only the Python standard library. Strings are
quoted, while booleans and lists keep their YAML types, because ansible-core
2.19 rejects a quoted "false" in a conditional. The facts schema is in the
docstring for the part that gathers them.

Choices:
- istio_platform from containerd's CNI bin_dirs: k3d for k3d-gpu's node image,
  which needs overlay 0002.
- metallb_enabled false while ServiceLB is on.
- kubernetes_cpu_policy best-effort when a k3s-addon balloons DaemonSet is
  present, Docker is rootless or containerd NRI is off. Otherwise nri-balloons,
  flagged as needing overlay 0003. Overlay.py makes that decision from this
  policy.
- nfd_enabled false next to k3d-gpu's NFD.
- require_amx from the AMXBF16 label.
- The k3s CIDRs.
- kata off on a bring-your-own cluster.
- kubernetes_accelerator cpu, with a note to serve any GPU or Gaudi through
  k3d-gpu agent up.

On the agent-toolkit layer:
- agent_sandbox_enabled.
- The model: EAT's default when the node has the 131 GiB EAT documents and
  k3d-gpu fit agrees, else the first documented 64 GiB fallback that fits,
  else none. --model overrides the pick.
- The KV cache from fit, but only below the catalog's value. The catalog's
  memory is the pod's limit, and fit sizes against the host.

Refusals exit 3 and leave nothing in --out:
- ServiceLB disabled
- EAT 1.x namespaces
- k3d-gpu's own agent-sandbox, or any version other than EAT's v0.5.0
- a CNI layout no Istio profile matches
- the erag layer: ERAG's Intel GPU flavour is experimental, and EI has no
  vllm-xpu runtime
Floating refs exit 2: only a pins profile or a full SHA is accepted.

integrations/eas/pins.json (k3d-gpu.eas-pins/v1, checked 2026-10-29) holds flat
rows {profile, name, repo, ref, sha, date, source}:
- profile main: EAS main 97f6157, EI main 3e8a244, and EAT release-2.0.0
  036b662, the same tree as the agentic-toolkit-migration branch EAS main names
- profile v1.2.0-rc.1: EAS 5c27fb3, EI release-1.1 170eb3a and EAT 036b662, as
  in the release notes
- the bastion tools: kubectl v1.37.2, helm v3.22.1, yq v4.54.1, kubernetes.core
  6.3.0, ansible 12.3.0, kubernetes 35.0.0, jsonpatch 1.38, jmespath 1.1.0, and
  ubuntu:24.04 by digest
Every head was re-read with git ls-remote and gh api before this commit.

A mutation pass of 19 mutants over the generator is killed by the config
section. Both sections pass (220 checks).
Three of F3's INCONCLUSIVE conditions always also meet a REFUTED one: step 3
stopped at 100 min while pods are still pulling exits non-zero, a registry or
Hugging Face error fails the step it happens in, and a run where no model fits
cannot pass `eas check`. Without a rule the grader could pick either verdict
after the fact. The added precedence paragraph, written before any F3 step,
grades such a consequence INCONCLUSIVE and every other REFUTED condition,
a choice or overlay decision that differs from the table included, REFUTED.
The prediction and every condition are unchanged.
…tes to source

Read against EAS 97f6157, enterprise-inference 3e8a244, EAT 036b662, ERAG
319eb46 and Envoy Gateway v1.7.1:

- LiteLLM and Langfuse are not part of a plain inference install. EI enables
  them only with auth_type litellm_vkey (components.yaml L42-L53) and defaults
  to jwt (config.yaml L44), which is how Gate 2 probe 5 reached its model;
  EAT's layer config sets litellm_vkey (config.yaml L24). The layer table,
  `eas check`, the curl line and the secrets note now say LiteLLM comes with
  --agent-toolkit.
- No Service is named eg-gateway. eg-gateway is the Gateway; EAS sets no
  Service name, so Envoy Gateway names the proxy Service envoy-<ns>-<name>-<hash>
  (resource_provider.go L299-L304). Step 5 reads the Gateway's status.addresses.
- ERAG's default flavour, chatqna, is a Xeon (CPU) deployment
  (deployment/README.md L3), so the missing EI vllm-xpu runtime only blocks its
  experimental Intel GPU flavour. The docs now say ERAG is not wired in yet and
  is the follow-up on the same CPU path, instead of refusing it for the GPU
  reason; README no longer says the three layers are all EAS ships on Xeon.
- The --skip-models row: EI's seeded config already has
  llm_services_deploy_models false, and with --agent-toolkit the chat model and
  the Qwen3Guard guard deploy whatever that key says (llm_services
  install.yaml L143-L161). The row and the `--` example now use
  llm_services_autodeploy_models [] and say the guard model stays.
- The installer runs ensure_sudo before every install and adds
  --ask-become-pass without passwordless sudo (es_auto_installer.sh L866-L875,
  L1179, L1423); the Limits note names it for the CLI part's bastion.
- Smaller fixes: #61's 0005 is skipped because it is docs, not because of the
  node count; the pod CIDR fallback only matters once LiteLLM admits the pod
  network (OpenShell); k3d-gpu owns the balloons policy on a hybrid or
  multi-NUMA host.
…and the checks

Three holds on crescent under amendments Q1 and Q2, plus one discarded wiring smoke. Each arm's turn has items.jsonl (one row per finished request), q.json, status.json, deploy.yaml, server.log and its readiness files. Each hold has reproduce.txt, pre.txt, post.txt, serving.jsonl and hold.log. The campaign has plan-hold1-3.txt, not-run.txt and score-q.json. The weight check and the before and after front-door records are included. Kubeconfigs are left out, and logs over 20 kB are gzipped.
…s the bf16 quality, the base-model IR is not worse

H54q ran to its pre-registered protocol (amendment Q1, runner amendment Q2) in 3 of its 3 holds. R, OVQ, OVB and Lg answered all of GSM8K items 0-199, with no errored item. Correct of 200: R (bf16 QAT, vLLM CPU v0.32.0) 194, OVQ 191, OVB 192, Lg 193.

- OVQ - R is -0.015 (95% CI -0.035 to 0.000). Its lower bound clears the -0.05 margin.
- OVB - OVQ is +0.005 (CI -0.015 to +0.025). It is neither below 0 nor above it.
- Only one SUPPORTED bound holds and no REFUTED bound does, so the row reads INCONCLUSIVE. That is the verdict it predicted most likely.
- Vi was not deliverable: vLLM v0.32.0 cannot load the AutoRound MoE checkpoint.

This commit adds the row's verdict, a falsification-log entry and the run section with its Reproduce header. The technical report now counts 29 INCONCLUSIVE and 19 PENDING and gains an H54q row. docs/intel.md's H54q row is updated, and the README no longer says H54q has yet to measure the QAT conversion.
# Conflicts:
#	docs/intel/technical-report.md
F4 is H1b's user path on the i9-13900T after eat-up.sh moves from
release-1.0.3-hotfix to release-1.1.0: k3d-gpu up with the README's EAT
env, eat-up.sh, eat-up.sh model cpu-qwen3-1-7b, the readiness wait, then
eat-check.sh passing chat, a tool call and the sandbox's 385. Functional,
n = 1. It is written before any step runs, and no doc may call the
release-1.1.0 path verified until it is SUPPORTED.
eat-up.sh clones release-1.1.0 at 0c726f5, the latest EAT release
(2026-10-22), in place of release-1.0.3-hotfix at 0d3438d.

What the move needs, read from release-1.1.0's source:

- The guardrail. deploy-agentic-stack.sh sets DEPLOY_GUARDRAILS to "on"
  when it is sourced (line 195), and fresh-install.sh deploys the
  Qwen3Guard guardrail when it is on (line 419). Only main() reads
  deploy_guardrails from agentic-config.cfg (line 1138), and the sourced
  brownfield run skips main(), so the config key alone changes nothing.
  brownfield.sh now reads deploy_guardrails the way read_config_file
  reads every other toggle and exports DEPLOY_GUARDRAILS before sourcing;
  with no value, EAT's default stands.
- agentic-config.cfg writes release-1.1.0's new toggles out as off:
  deploy_guardrails, deploy_vllm_sr, deploy_openshell,
  deploy_kata_containers, deploy_ceph and rack_scale_mode.
- vllm-values.yaml pins vllm/vllm-openai-cpu v0.28.0, the tag
  release-1.1.0's xeon-values.yaml names, by its index digest
  sha256:197354e6...df9647 (Docker Hub, read 2026-10-29). images.lock
  follows.
- release-1.1.0 ships OpenShell, so the deploy_openshell=on refusal now
  says why it stops: OpenShell has not run on a k3d-gpu cluster.

tests/eat_test.sh checks the tag and commit, the six toggles as EAT's
read_config_file reads them, the guardrail hand-off (absent, on, off,
quotes, last assignment wins, the shipped config), the vLLM digest, the
refusal text, and that the gateway chart copy keeps release-1.1.0's
hybrid-router callback and customRouter switch. The release-1.1.0 path
has not run; it is ledger row F4.
…ified

integrations/eat/README.md: the pin and its pins table (EAT, bastion,
Helm, the vLLM CPU v0.28.0 digest, the gateway charts), the 1.1.0
gateway's hybrid router (a ConfigMap, no new image; the copies still
differ from EAT's charts only in the 11 image lines, rendered with Helm
v4.1.1 on 2026-10-29), blocker 11 (the guardrail on the brownfield
path), each older blocker and upstream note rechecked at 0c726f5, and
the observed end state labelled as the release-1.0.3-hotfix run.

docs/platforms.md, docs/intel.md and README.md: eat-up.sh deploys
release-1.1.0; the path is pre-registered as F4 and has not run; the
ledger rows that pinned EAT stock at 0d3438d use their own checkouts and
image tags, so the move changes none of them.
…1.1.0 turn it on

With no deploy_guardrails value in the config, release-1.1.0 deploys its
Qwen3Guard guardrail: deploy-agentic-stack.sh:195 defaults DEPLOY_GUARDRAILS
to on and brownfield.sh keeps that default. Every config written for
release-1.0.3-hotfix lacks the key, so an EAT_CONFIG carried over from the
previous pin would bring up the guardrail (a 2 CPU / 16Gi vLLM pod whose
image guardrail-values.yaml names by tag only, screening every gateway
request) while the docs say the guardrail is off.

eat-up.sh now stops before touching the cluster when the config gives
deploy_guardrails no value, read the way read_config_file reads it, and asks
for off or on. The shipped agentic-config.cfg sets it off, so F4's path is
unchanged. openshell_setting becomes cfg_value <cfg> <key> for both checks.

tests/eat_test.sh 3c covers a missing key, an empty value, a commented-out
line, another key that mentions it, last assignment wins, and off, on and a
quoted value passing.
… STOP names the change that broke the hunk

Three gaps in the auto-drop logic, each found with a synthetic tree on the
fixtures and each now a failing-then-passing case in tests/eas_test.sh:

- The 0006 Exists probe checked for the exact "" control-plane selector only
  in the file it matched, and only with an unquoted key. An Exists term in
  another file of roles/envoy_gateway, or a flow-style selector with a quoted
  key, gave drop-fixed while the EnvoyProxy kept the selector that matches no
  k3s node. A probe can now carry an `absent` regex that no file under its
  glob may match; 0006 uses it for the selector in any quoting, role-wide.
- The vars/k3s.yaml probe for the EAS #50 layout matched any
  _envoy_gateway_proxy_shape, including controlplane_daemonset, the shape that
  carries the exact "" selector. It now matches only another shape; a k3s
  entry that keeps controlplane_daemonset is still the STOP naming #50.
- A STOP named a `moved` hint whenever its regex matched anywhere, and
  otherwise the last commit on any of the patch's files. Once EAS #61 merges,
  every later 0002 STOP would have named #61. A hint now counts only when it
  watches a file whose hunks no variant applies (git apply --check
  --include), and the fallback names the last commit on those files.

The test helper that reads the decisions JSON now removes it before each
run. Before, a run that wrote no JSON left the previous run's decisions in
place, and two checks passed with --rev or kubelet-static broken outright.

Decisions are unchanged at both pins (main 97f6157, release-1.2 5c27fb3) and
at every open EAS pull request head, checked on a fresh clone.
fit sizes the KV cache for its own context, the --max-model-len in its flags
(32768 at most). The generator takes only VLLM_CPU_KVCACHE_SPACE from fit, and
EI's catalog sets no --max-model-len for qwen2-5-coder-14b, qwen2-5-coder-7b or
llama-3-1-8b, so vLLM serves the model's own context. Llama-3.1-8B-Instruct's is
131072 tokens (max_position_embeddings), which at 128 KiB a token needs 16 GiB of
KV cache for one request. vLLM v0.28.0 sets the KV cache from
VLLM_CPU_KVCACHE_SPACE (vllm/platforms/cpu.py#L165-L169 at 2cf0a69) and will not
start when one request at max_model_len does not fit it
(vllm/v1/core/kv_cache_utils.py#L747-L767). The fit-missing and rootless-docker
goldens pick llama-3-1-8b with an 8 GiB KV cache, which vLLM refuses.

The four goldens that lower the KV cache now also carry fit's --max-model-len,
as args_append on the model's entry in models.edit.yaml, with a choice line
citing vLLM's check. The config section checks that every lowered KV cache has
one, that the value comes from fit (16384 in a mutated fit document), and that a
fit document with a KV cache and no --max-model-len exits 2.

EI's NFD role skips the install only when it finds a Helm release named
node-feature-discovery (roles/nfd/tasks/install.yaml#L15-L25 at 3e8a244). NFD's
own docs install it as release nfd in the same namespace
(docs/deployment/helm.md#L41 at kubernetes-sigs/node-feature-discovery
b8c0974). The generator called any Helm release EI's own and kept
nfd_enabled: true, so EI would install a second NFD next to it. The new check
expects nfd_enabled: false for release nfd.

Config section: 116 passed, 20 failed, each on these cases. The overlay section
passes (87).
… only by name

When k3d-gpu fit lowers a model's VLLM_CPU_KVCACHE_SPACE below the catalog's
40 GiB, the generator now also writes the --max-model-len fit sized that cache
for, as args_append on the model's entry in models.edit.yaml, with a choice
line citing vLLM's check (vllm/v1/core/kv_cache_utils.py#L747-L767 at
2cf0a69). Without it EI's catalog, which sets no --max-model-len for these
models, leaves vLLM on the model's own context: 131072 tokens for
Llama-3.1-8B-Instruct, 16 GiB of KV cache for one request, so an 8 GiB cache
from fit stops vLLM v0.28.0 at startup. A fit document with a KV cache and no
--max-model-len is malformed input (exit 2): fit's vLLM CPU flags always carry
both (console/fit.py _flags).

nfd_enabled stays true only when the NFD DaemonSet belongs to the Helm release
node-feature-discovery, the one name EI's NFD role checks before it installs
(roles/nfd/tasks/install.yaml#L15-L25 at 3e8a244). NFD from a Helm release of
another name, such as nfd from NFD's own docs, now gets nfd_enabled: false, as
k3d-gpu's baked NFD does.

The docstring states how models.edit.yaml merges: defaults merge, entries match
by name, env merges and args_append goes after the catalog's args.

tests/eas_test.sh: 223 passed (overlay 87, config 136). ci_wiring_test.sh 70,
eat_test.sh 64 and image_pins_test.sh 43 pass; claims_check.sh is clean and
ledger_drift_check.py agrees; shellcheck v0.11.0 is clean.
… 200 items in H54q

Re-grading every arm's 200 items from the raw records (h54.q_state over
hold1/R, hold1/OVQ, hold2/OVB, hold2/Lg and H54a's imported items 0-49)
finds that items 85, 119 and 187 defeated all four arms. Item 182 did not:
OVB answered it (hold2/OVB/items.jsonl, idx 182, ok true, gold 23).

The row's result text and the run section said R, OVQ, OVB and Lg answered
all 200 items in holds 1 and 2. Only R did; OVQ, OVB and Lg answered items
50-199 there, and their items 0-49 are H54a's records (Q1 item 2), as the
method column, the What ran table and the Disclosed bullet already state.

No count, test, CI, prediction or verdict changes.
# Conflicts:
#	EXPERIMENTS.md
#	README.md
#	docs/intel.md
#	docs/platforms.md
# Conflicts:
#	docs/intel/technical-report.md
Comment thread integrations/eas/eas-config.py Dismissed
Comment thread integrations/eas/eas-config.py Dismissed
@88plug
88plug merged commit 6659ace into main Oct 30, 2026
79 checks passed
88plug added a commit that referenced this pull request Oct 30, 2026
A ledger line listed only the rows whose ledger sections name its path, so a
runner another row runs or imports turned historical when its own rows finished
while the reusing row was still PENDING. #262 landed the H57dp and H57de
verdicts and bench/h57d/** went historical while wildct's H57w rows still run
it through bench/wildct/row.sh; the guard then refused #268's H57d amendment R2
edit of bench/h57d/arm.sh as a historical edit.

A scan of every ledger runner's code for the bench/ paths it calls found the
reuses, and each line now lists the reusing rows and their amendment prefix:
bench/h57d (the H57w rows; h57d.py also H59), bench/h54/h54.py with its tests
and GSM8K items (H59, H60), bench/prefill-guard's cpufreq.sh and prompt.txt
(H55), crescent's serving.py (the cross-host rows, H60, H59),
bench/xhost/fetch_models.py (the wildct rows), bench/load (the desktop,
crescent and cross-host rows and H59w) and bench/shared-prefix (H59). The rest
of each tree keeps its own rows, and the H57dp and H57de records get their own
historical line now that the H57d tree is an arm again.

tests/pin_classes_test.py checks each reuse: the reusing file still names the
path, the path's line lists the row, and the path is an arm while the row is
PENDING.
88plug added a commit that referenced this pull request Oct 30, 2026
The base branch claude/eas-eas-config landed on main in #262. The one conflict was
the header comment of tests/eat_test.sh, which now lists both the EAS mode checks from
this branch and main's deploy_guardrails refusal.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants