Skip to content

#3712 row A2: the Q4_K universe is read from each file's tensor header (apr tensors --json), never a *Q4_K* filename glob; the judge recomputes membership #3763

Closed as not planned

Description

@noahgift

#3712 row A2 (owner aprender-62, approved by the cop 2026-09-21): the Q4_K universe is read from each file's tensor header, not from its filename. Stacked on #3738 (row B1), which is stacked on #3721 (row A).

The requirement (the #3712 issue author's done_when 1 clarification, quoted verbatim)

done_when 1 clarified (issue author, cop aprender-04, 2026-09-21 18:15Z), after aprender-c3 asked whether …-q4k.apr (no underscore) counts as Q4_K. Under the operator's rule ("tests are dervived from surface and SHACL enforced … it is hand coded not derived", #3745), filename is not evidence of quantization. A file is in the Q4_K universe iff its header says so: the dominant weight-tensor dtype read by apr's own header reader (GGUF file_type / per-tensor ggml types; APR tensor dtypes) is Q4_K, with Q4_K_M/Q4_K_S included. A *Q4_K* filename glob is refused as the universe definition. Every candidate model file on the host (*.gguf, *.apr) is read, and the receipt lists each file with its measured dominant dtype, so a mislabelled file is visible both ways: a q4k name holding fp16 is excluded, and an unlabelled file holding Q4_K is included.

Design, as approved by the cop

  • Candidates. Every *.gguf / *.apr under the ladder's model dirs is a candidate, selected by extension only. The patterns glob (*q4_k* / *q4k*) is removed, and a ladder that still declares one is refused.
  • Membership. A file is in the universe when Q4_K is a most-frequent dtype among its tensors of two or more dimensions. Ties count as members, since including too much is the strict side.
  • Reader. The dtypes come from apr tensors --json, apr's per-tensor header reader. It reads GGUF (IQ4_XS included) and APR. apr inspect --json is unusable for this: its quantization field reported Q6_K for a Q4_K_M file, None for every .apr, and it fails outright on IQ4_XS. That defect is filed separately and is not fixed here.
  • Receipt. It lists every candidate with its dtype histogram. The judge recomputes membership from the histogram:
    • a Q4_K-header file missing from the inventory is a FAIL (excluded by name);
    • a non-Q4_K file in the inventory is a FAIL (included by name);
    • an unreadable candidate is a named FAIL.
  • GPU. The header read runs through a no-GPU wrapper (CUDA_VISIBLE_DEVICES= empty), not the fleet GPU lock, so a held lock can't stall the inventory.

Measured on lambda (apr tensors --json, tensors of two or more dimensions, by count):

file dtype counts member?
Qwen3.5-0.8B-Q4_K_M.gguf Q4_K 98, Q5_K 36, Q8_0 36, F32 18, Q6_K 17 yes
qwen2.5-coder-1.5b-instruct-q4k.apr q4_k 169, q6_k 29 yes
qwen2.5-coder-1.5b-instruct-st.apr all f32 no

By bytes, that same Q4_K_M file is Q6_K, which is why bytes is the wrong measure.

Activity

  1. added this to the 0.71.0 milestone on Sep 23, 2026
  2. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    milestone → 0.71.0 per docs/roadmaps/milestone-triage-2026-09-23.md (#4024), operator approval 2026-09-23 (relayed by aprender-cf). Reason: Q4_K universe from the tensor header: the ladder universe (#3994, with #3846)

  3. noahgift commented on Sep 25, 2026

    @noahgift
    MemberAuthor

    Parked by APR-EPIC-001: over S1 budget (rank 53/163). Reopen = pull. Applied by aprender-d1: claude+agy both said close, apr shadow row recorded (handoff/close-quorum-2026-09-25.json).

  4. modified the milestones: 0.71.0, backlog on Sep 25, 2026
  5. added
    parkedClosed over epic budget (APR-EPIC-001 rule 5). Reopen = pull.
    on Sep 25, 2026
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 priorityparkedClosed over epic budget (APR-EPIC-001 rule 5). Reopen = pull.

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions