[Phase 16] S5 — Verification truth: three states, not a success bit
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 12/100
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 9
- Forks
- 1
- Merge medio
- 7 h 42 min
- PR fusionados (30 d)
- 4
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de HodeTech/ForgeLM
-
area: dev-tooling bug severity: low source: roadmap wave: 4
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
area: site bug good first issue severity: low source: review-2026-09 wave: 4
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
documentation good first issue severity: medium source: review-2026-09 wave: 3
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
documentation good first issue severity: low source: review-2026-09 wave: 4
Dificultad 1/5 1-3 horas Aptitud para principiantes 80/100
-
documentation severity: medium source: review-2026-09 wave: 3
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Todos los issues de HodeTech/ForgeLM
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
huggingface/smolagents#2976 ·
Los mantenedores suelen responder en 1 día
-
pulp-cli 0.41 break username password auth in older configs (cert and key present but empty)Abiertobug Triage-Needed
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
FuRongJun-1999/dsh-memory#170 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
pgvector/pgvector-python#163 ·
-
[开源推荐] 打拼音就出篆书的输入法,附古文字创作小工具Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
521xueweihan/HelloGitHub#3940 ·