Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions atom/compass/design/08_validation_protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,15 @@ at *collection* time, via `rocminfo` reached on import, so pytest cannot even bu
list, plus 1 that collects cleanly and then fails at run time on a pinned-host allocation
(`hipHostMalloc failed: 100`). That numerator is non-plugin, so its denominator must be too —
quoting 29 against 189 is the defect `16` L4 fixes and it is not repeated here. **At the
whole-suite denominator the figure is at least 32 of 189**, because `tests/plugin/` is not
whole-suite denominator the figure is at least 34 of 189**, because `tests/plugin/` is not
purely a packaging problem: collecting it alone at `236abfd9a`, and again at `fada7424e`, in `xiaobizh_n18_cpu` gives
`153 tests collected, 7 errors in 1.45s`, rc=2, and those 7 decompose as **3 `rocminfo`**
`153 tests collected, 7 errors`, rc=2, and those 7 decompose as **3 `rocminfo`**
(`test_gdn_target_verify_batched_equiv.py`, `test_rtpllm_forward_context_semantics.py`,
`test_vllm_deepseek_v4_proxy_state_arena_layout.py`), **1 `ModuleNotFoundError: No module
named 'sglang'`**, and **3 `ImportError: cannot import name 'fused_gdn_gating' from
'atom.model_ops.attention_gdn' (unknown location)`** — a module left half-initialised by the
first three, not a fourth cause. 29 + 3 = 32 is a floor: the other 23 plugin files collect
first three, not a fourth cause. With the 2 tier files the table below names, which reach
`rocminfo` run alone at `fada7424e` too, 29 + 2 + 3 = 34 is a floor: the other 23 plugin files collect
here and are never run, so nothing is measured about what they would touch.
`tests/plugin/`'s 30 files at `fada7424e` are dropped whole because the tier targets ATOM and sglang
and vllm are in neither image — the measured reason for 27 of them, not for all 30. The
Expand All @@ -62,7 +63,7 @@ saying those three need the driver is stale.
| `test_prefill_scheduler.py`, `test_scheduler_partial_prefill_tail.py` | CPU | chunked prefill boundaries |
| `test_block_manager.py`, `test_block_pool.py` | CPU | the block accounting D13 relies on running unmodified |
| `test_prefix_cache_accuracy.py` | **neither** | nothing. It holds **no test function at all** — it is an `argparse` script that drives a live server on `localhost:8000`, and `pytest` reports `no tests ran` for it in both containers. The prefix-cache behaviour doc `03` declares correct-by-construction is not covered by this file. |
| `test_prefill_prefix_vs_native.py` | **GPU only** | the prefix-cache behaviour doc `03` declares correct-by-construction. It module-skips on the CPU tier ("needs a real GPU") and gives 4 passed in the GPU container, so the prefix-cache row is GPU-tier evidence and nothing else. |
| `test_prefill_prefix_vs_native.py` | **GPU only** | the prefix-cache behaviour doc `03` declares correct-by-construction. It module-skips on the CPU tier ("needs a real GPU") and gives 4 passed in the GPU container (`xiaobizh_n18`, one card, at `cb684287f`), so the prefix-cache row is GPU-tier evidence and nothing else. |
| `test_scheduled_batch_marshal.py` | CPU | the IPC payloads the clock protocol annotates around |
| `test_block_table_marshal.py` | **GPU only** | the block-table half of those same payloads — excluded at collection time, so the CPU tier does not see it |
| `test_kv_connector_scheduler.py` | **neither** | the connector factory doc `01` D6 registers a simulated connector into — except that it runs nothing in either tier: `1 skipped`, because ATOM #690 split `kv_transfer_engine` into `moriio` and the test's imports were never updated. |
Expand Down
7 changes: 3 additions & 4 deletions atom/compass/design/16_execution_plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,9 @@ joined two real numbers wrongly: the 28 counts `rocminfo` across the *whole* sui
`PYTHONPATH` asserted to resolve `atom` under that root and pytest's own exit status
captured before any pipe. The 4030 at `105ca4197` is **3956 ATOM tests + 74 `tests/compass/` tests**,
stated as its parts because a single total cannot show which half moved (principle 7). The
3956 is the same gate at the base, `042aad97d`, which has no `tests/compass/`. The
file count moves 128 → 130 and the test count 3956 → 4030 because `105ca4197` adds
`tests/compass/test_cpu_gate_exclude.py` and `tests/compass/test_gate_gpu_surplus.py`; the
P0.2 readings above are the same suite without them. **4005** was the same gate at
3956 is P0.1's control, `042aad97d` with P0.1's `scripts/compass/` copied in and, like the
P0.2 readings above, no `tests/compass/`; `105ca4197` adds `tests/compass/test_cpu_gate_exclude.py`
and `tests/compass/test_gate_gpu_surplus.py`, so the file count moves 128 → 130. **4005** was the same gate at
`3afcb4880`, with `tests/compass` at 49 tests. The 49 → 74
growth is two steps: `tests/compass/test_cpu_gate_exclude.py` parametrises one case per
entry of `gpu_gate_triggers.txt`, and correcting that file's derivation took it from 13
Expand Down
17 changes: 9 additions & 8 deletions scripts/compass/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@ figure is stale by construction between one task and the next, and it has twice
been taken as a control by a task that then read the intervening tasks' tests as a
surplus of its own. **A control is measured, not read**: run `gate_cpu.sh` on the
integration head your branch forked from, in the same container, and state both
figures beside their commits. The CPU row below does not name the commit it ran
on, which is the omission that let it pass for current; the same gate on
figures beside their commits. The CPU row below once named no commit, which is
the omission that let it pass for current; the same gate on
`68ef4f329` measured **4380 passed, 149 skipped, 3 xfailed, rc=0** — node 18,
container `xiaobizh_n18_cpu`, 2026-09-22, 36.2 s of pytest inside 43.0 s of wall.

Expand All @@ -110,7 +110,7 @@ with a non-zero rc and no ±1.

| Tier | Result | Measured |
|---|---|---|
| CPU gate | **4030 passed, 0 failed**, 149 skipped, 3 xfailed, rc=0, **identical in every run on 2026-09-21, the clock 25.4-31.7 s of pytest inside 31.1-37.8 s of wall (`time` real) — a measured spread, not a bound** — decomposing as **3956 ATOM + 74 `tests/compass`** | node 18, container `xiaobizh_n18_cpu`, 2026-09-21, **commit not recorded**, against a `git archive` snapshot with `PYTHONPATH` asserted and pytest's own rc captured before any pipe |
| CPU gate, at `105ca4197` | **4030 passed, 0 failed**, 149 skipped, 3 xfailed, rc=0 — decomposing as **3956 ATOM + 74 `tests/compass`**; the 3956 is PR #6's control, `042aad97d` with PR #6's `scripts/compass/` copied in, since `042aad97d` has none. Six runs at `d737f15e7` and `7ff80cc4b`, before PR #6's restack, read the same counts and **25.6-30.8 s of pytest inside 31.6-36.9 s of wall (`time` real) — a measured spread, not a bound** (`8c0ee374f`) | `105ca4197`, PR #6's head, landed as `4c16792d9` (same tree) — PR #6's gate table; node 18, container `xiaobizh_n18_cpu`, 2026-09-21, against a `git archive` snapshot with `PYTHONPATH` asserted and pytest's own rc captured before any pipe |
| CPU gate, same tier, at `186d12829` | **4501 passed, 0 failed**, 149 skipped, 3 xfailed, rc=0 — three runs, identical, 28.8-34.4 s of pytest inside 35-40 s of wall. The **4030** above and the **4380** in the paragraph above are this same gate at earlier trees; all three are history, and this one will be too | `186d12829` — the commit this branch forks from, which is its merge-base with the integration head, **read 2026-09-21T19:21Z**, node 18's own clock — node 18, container `xiaobizh_n18_cpu`, `git archive` snapshot staged by `snapshot.sh`, `PYTHONPATH` asserted, pytest's own rc captured before any pipe |
| GPU superset (`--ignore=tests/plugin`) | **4779 passed, 5 failed**, 0 errors, 105 skipped, 3 xfailed, **72.6 s**; two runs, byte-identical failing sets | `fe9ea043c`, node 18, container `xiaobizh_n18`, `HIP_VISIBLE_DEVICES=1`, 2026-09-20, torch **2.10.0+rocm7.2.4.git3d3aa833**, `torch.version.hip` **7.2.53211**, ROCm release **7.2.4**, AITER **v0.1.21.dev0-49-gf4e7c7509** (`git describe`) |
| `ruff check .` | 1003 errors, 640 fixable — the gate is *no new* error, not zero | `83daf636d` |
Expand All @@ -122,11 +122,12 @@ it is this directory.** `tests/compass/test_cpu_gate_exclude.py` parametrises
one case each, so regenerating that file changes the pass count by exactly the
change in the number of entries. The readings in circulation are the same gate
under different exclusion lists and a different `tests/compass`, not discrepancies:
**3925** at 32 exclusions; **3956** is the ATOM-only half; **3988** with
`tests/compass` at 32; **4005** with it at 49; **4022** with it at 66 — 49 plus the 17
extra trigger paths the corrected derivation below produces — and **4030** with it at 74,
the 8 cases `test_gate_gpu_surplus.py` adds. The
exclusion list went 32 → 29 because `test_dp_metadata.py`, `test_dp_sync_layout.py`
**3925** at `83daf636d`, 32 exclusions and no `tests/compass`; **3956** is the
ATOM-only half, at `042aad97d` above, and 3925 + 31; **4005** at `3afcb4880`, with
`tests/compass` at 49; **4022** at `71d2a1ac2`, with it at 66 — 49 plus the 17 extra
trigger paths the corrected derivation below produces — and **4030** at `105ca4197`,
with it at 74, the 8 cases `test_gate_gpu_surplus.py` adds. The exclusion list went
32 → 29, adding those 31, because `test_dp_metadata.py`, `test_dp_sync_layout.py`
and `test_forward_mode.py` were re-measured **CPU-green**.

**The five GPU failures are four ULP comparisons and one bitwise check** — not
Expand Down