Skip to content

verify-gguf: fail closed by default when no strong layer ran (magic-only verdict) — deferred until the next MAJOR release #915

Open

Description

@cemililik

Deferred work · F-W20260729-TRUST-04-default · severity Medium · cost ~1 h · recorded in docs/roadmap/risks-and-decisions.md:259

Summary

Decision C-3 adds an opt-in --require-strong-layer (Phase 16 S5) and keeps a magic-only verdict at exit 0 by default, because flipping the default breaks the jq -e '.valid' recipe the manual recommends, which error-handling.md rule 3 makes a MAJOR change. This issue is the flip itself: a run in which neither the GGUF metadata parse nor a SHA-256 sidecar check happened must not exit 0 by default.

Condition or budget

The next MAJOR release, after Phase 16 S5 (#891) lands C-3 and C-4 — the exporter then writes the sidecar, so the strong layer is present by default and the flip is nearly free.

State today (re-checked 2026-10-09)

No --require-strong-layer flag exists yet, the exporter writes no .gguf.sha256, and a magic-only check still returns valid=True; the package is at 0.11.1rc1.

Related

#83 (magic-only acceptance; lists the non-zero exit only as an alternative) and #84 (the exporter writing the sidecar).

Acceptance criteria

  • With no strong layer, verify-gguf exits non-zero by default; the opt-out is documented and the release notes name the MAJOR change.
  • The row is removed from the deferral table and the CHANGELOG names its ID (the table's removal contract).

Recorded in docs/roadmap/risks-and-decisions.md (read at f94595f) and re-checked against the code on 2026-10-09. The row leaves that table only when the fix is on main, the CHANGELOG names its ID and any promised guard exists.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: verifyCode area: verifyblockedWaits for another issue (see Blocked by); set and removed automatically, never by handdeferredDeferred with a recorded condition: check that it holds before startingseverity: mediumReal defect with limited reach or a workaroundsource: roadmapPlanned or deferred work recorded in docs/roadmap/wave: 3Roadmap wave 3: medium severity, module sweeps

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions