Skip to content

G3.EX: 38 of 44 non-pass rows were classifier gaps, not defects — feature refusals need a re-run, not a skip #3182

Closed as not planned

Description

@noahgift

What the first full G3.EX sweep measured

981 example targets, timeout 120, on lambda-vector (x86_64, RTX 4090). Evidence: evidence/dogfood/0.67.0/examples.tsv.

class rows
pass 740
needs-data 168
needs-args 29
fail 23
timeout 21

The 44 fail + timeout rows were then re-run one at a time with their own required-features and their logs kept. That is what this ticket is about: of the 44, only 6 rows were genuine defects. The rest were the classifier answering a question it was not built to answer.

what the row actually was rows what the sweep called it
runs clean once the feature it names is enabled 9 fail
long-running by design (server, TUI, benchmark) 20 timeout
missing model/data, worded outside the regex 3 fail
missing CLI argument, worded outside the regex 3 fail
needs a TTY 1 fail
this box's glibc vs a prebuilt ort artifact 1 fail
a wall-clock perf gate failing under load 1 fail
genuine defect 6 fail

The three gaps, in order of how many rows they cost

1. A feature the example names at RUNTIME, not in required-features (9 rows). cuda_training_benchmark prints "This benchmark requires the 'cuda' feature" and exits 1; with --features cuda it exits 0. Same for cublas_fp8_7b_reproducer (cuda), compressed_kv and compressed_index (compression), semantic_embeddings (embeddings), tensor_example (tensor), showcase_shell (shell-autocomplete). The sweep already reads required-features from cargo metadata; these examples declare none and gate themselves in code instead.

The right behaviour is not a new skip class. It is a re-run: parse the feature the example names, run it again with that feature, and classify the SECOND run. A skip here would hide the case where the example is broken with its feature — which is exactly what gpu_info turned out to be (#3179).

2. No class for "runs until you stop it" (20 rows). api_server binds a listener and serves; pipeline_tui and calculator_tui are TUIs; buggy_server is a server; a dozen profile_*/bench_*/measure_* examples are benchmarks with no bound. Killing these after 120 s and calling it timeout — a class the skill defines as "a defect" — is wrong on all twenty. They need either a long-running class asserted from the target's own declaration (so it cannot be claimed post hoc by anything that happens to hang), or a smoke mode.

The distinction that must not be lost: a server that is still serving at 120 s is healthy; an inference example still on token 1 at 120 s is not. A class that cannot tell those apart is worse than no class.

3. NEEDS_ARGS_RE and NEEDS_DATA_RE are too tight (6 rows). ^(Usage|error: the following required arguments) misses --model-dir required (ssc_eval, ssc_preflight) and .nth(1).unwrap() on argv (check_layer4). [Mm]odel not found misses No model found. (qa_serve) and Failed to load transformer model (finetune_real).

The six genuine defects, for the record

example defect ticket
aprender-zram-core::gpu_info the crate's cuda feature has never compiled #3179
aprender-serve::debug_lm_head_direct hw_dp4a_q6k: workspace.q8_activation_buf not initialized #3178
aprender-serve::debug_q6k_controlled same panic, same site #3178
aprender-train::llama2-train reads a shipped config by a cwd-relative path (this sweep)
aprender-serve::performance_parity Q4_0 buffer length is not a multiple of the block size (this sweep)
aprender-compute::coop_gemm_bench did not build; already deleted on main by #3136 #3136

Why this is a ticket and not a silent widening

Widening a classifier until the red goes away is how a gate becomes theatre. Every class added here must cite the line that put the row in it — the skill already requires this for needs-hardware and needs-data — and the feature case must re-run rather than skip. PR #3163 (the needs-data class) is the template: a hermetic fixture in tests/fixtures/dogfood_examples/, a --selftest row per class, and a mutation row proving the class can still turn RED.

Done

--selftest carries a case row for each of: a runtime-feature refusal that passes on re-run, a runtime-feature refusal that still fails with the feature (must stay a defect), a declared long-running target, --model-dir required, and No model found. A full sweep on the release commit then reports genuine defects only, and the count matches a hand audit of its non-pass rows.

Activity

  1. added this to the 0.68.0 milestone on Sep 12, 2026
  2. added
    bugSomething isn't working
    P2Medium priority
    on Sep 12, 2026
  3. modified the milestones: 0.68.0, 0.70.0, 0.73.0 on Sep 16, 2026
  4. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    triage 2026-09-23 (aprender-dd, standing triage owner): milestoned to 0.70.0, theme Fast Train (CI, gates, pv, release tooling, hygiene); it moved out of backlog (the 2026-09-17 overflow bucket, not a release).

  5. added
    kind:codeWork is a code change (derived rule, #4159)
    on Sep 24, 2026
  6. modified the milestones: 0.70.0, backlog on Sep 24, 2026
  7. modified the milestones: backlog, 0.71.0 on Sep 25, 2026
  8. noahgift commented on Sep 26, 2026

    @noahgift
    MemberAuthor

    Addressed on branch PMAT-3560-r5-examples @ a6030b9 (#3560 R5). Examples now declare their class in [package.metadata.dogfood-examples]. There are three new classes: needs-net, needs-tty and long-running. Each declaration is a checked claim: a missing expect line is fail, exit 0 is pass, and a declaration naming no target or an unknown class is refused with exit 2. The selftest has a fixture per form and per refusal. Filtered nightly: https://github.com/paiml/aprender/actions/runs/36230807732 (attempt 2: 0 fail, 0 timeout).

  9. modified the milestones: 0.71.0, backlog on Oct 8, 2026
  10. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    merged into #5317 (master ticket for epic #4381; triage rule 7b, 2026-10-14). It is a checklist row there; reopen this issue when work on it starts or its PR opens.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium prioritybugSomething isn't workingkind:codeWork is a code change (derived rule, #4159)owner:la-0.71Owned by the 0.71 look-ahead slotsize:MK̂ 3-4 h

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions