[Phase 16] S5 — Verification truth: three states, not a success bit
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 12/100
Direzione di ricerca
Start with the planned section at docs/roadmap/phase-16-trust-surface-hardening.md lines 416-447, then read verify_annex_iv_artifact and verify_integrity and how _io_safety._read_capped_json is used. The work adds checks['strong_layer_ran'], an opt-in --require-strong-layer flag, and a .sha256 sidecar written by forgelm export. Done means the five exit criteria hold, including the exit-6 tamper round trip, with a reproducer that fails before the fix.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Roadmap · Phase 16, step S5 · size L · 3 unit(s) · planned in
docs/roadmap/phase-16-trust-surface-hardening.md:416-447
Summary
Three verifiers project a three-valued reality (verified / unverified / invalid) onto a two-valued valid plus an exit code, so "no strong layer ran" shares a success bit with "every strong layer passed". The exporter never writes a .sha256 sidecar for GGUF and gguf is in no dependency group, so a magic-only valid=true is the default outcome for ForgeLM's own artefacts. The writer half (CLI-03): export records its hash under exported_artifacts, a key the verifier never reads — it fails closed, a round-trip-integrity defect rather than a false pass.
Units
| Unit | Tracked by (October 2026 review) |
|---|---|
F-W20260729-TRUST-04 |
#83 · #84 · #85 · #446 · #566 · #573 · #598 · #599 |
F-W20260729-TRUST-05 |
#164 · #328 · #364 · #558 · #658 |
F-W20260729-CLI-03 |
#84 · #86 · #567 · #621 · #652 · #766 |
Decisions this step executes
- C-3 —
verify-ggufmagic-only verdict: opt-in--require-strong-layer; the default flip waits for the next MAJOR (tracked as a deferred issue). - C-4 —
forgelm exportwrites the.sha256sidecar its docs already claim.
Plan
- Add
checks['strong_layer_ran']and the opt-in--require-strong-layerflag. - Make
forgelm exportwrite the GGUF sidecar, so the strong layer is present by default. - Also owned by this step (deferral row
F-W20260729-VERIFY-UNCAPPED-READ): route the two unboundedjson.loadreads inverify_annex_iv_artifactandverify_integritythrough_io_safety._read_capped_json, so a deeply nested payload cannot end inRecursionError.
Exit criteria
- A 4-byte
b"GGUF"file with no parser and no sidecar does not report an unqualified success. - Hash-less Annex IV and pipeline roots do not return exit 0 by default, while any legacy override still reports
verified: false. - An export → tamper → verify round trip exits 6 on a flipped byte.
- The existing 1-vs-6 split is preserved exactly and stays structural (typed fields, never
reasonprose); the per-stageUNVERIFIEDbehaviour is asserted unchanged. - Both verifiers parse operator-supplied JSON through the capped reader.
How to deliver
- One root-cause family, committed on its own; then an Opus review round and a Sonnet review round, each with verified findings fixed and committed before the next step begins.
- A reproducer that is red before the fix and green after; the full gauntlet from
CLAUDE.mdpasses under./.venv/bin/python. - Every English documentation edit ships with its Turkish mirror in the same commit; a new or renamed audit event gets its EN and TR catalog rows in the same PR.
- A step that grows a deferred module carries its
budget_historyjustification in the same diff; a widened guard rolls out non-strict first, then flips. - Commit bodies cite
Absorbs F-W20260729-…; the CHANGELOG[Unreleased]section gets an entry only for a change a user or library consumer can observe (decision C-20).
Planned in docs/roadmap/phase-16-trust-surface-hardening.md (read at f94595f). Unit IDs (F-W20260729-…) come from the 2026-07-29/30 full-project review; the issue numbers next to them are the October 2026 review's records of the same defects.
- Lingua principale
- Python
- Stelle
- 9
- Fork
- 1
- Merge medio
- 4h 3m
- PR unite (30g)
- 3
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di HodeTech/ForgeLM
-
area: dev-tooling bug severity: low source: roadmap wave: 4
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
area: site bug good first issue severity: low source: review-2026-09 wave: 4
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
documentation good first issue severity: medium source: review-2026-09 wave: 3
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
documentation good first issue severity: low source: review-2026-09 wave: 4
Difficoltà 1/5 1-3 ore Idoneità per principianti 80/100
-
documentation severity: medium source: review-2026-09 wave: 3
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Tutte le issue di HodeTech/ForgeLM
Issue simili
-
area: desktop area: website priority: P2 type: feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
appandflow/stim#3411 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 88/100
baptistehamon/lsapy#185 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
PolicyEngine/policyengine-us#10073 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
syedhamidali/radarx#277 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Arekkazu/sgpmp-backend#549 ·
I maintainer di solito rispondono entro 1 giorno