docs(#946): Tiers 2+3 honesty sweep — live exclusions re-grounded, selector/CLI docs un-understated, counts re-derived - #968
Conversation
… on what the code actually does
- wcet.rs CEIL rationale: the priced I64Rotl/I64Rotr fixed-ABI wrappers emit a
4-register PUSH {R0-R3} (0xB40F), so the 5 cyc/halfword ceiling holds EXACTLY
(1+4), not 'with margin' as claimed; the 'only priced 16-bit PUSH/POP is
I64Popcnt's 3-register' audit sentence corrected too (claims.yaml comment
updated alongside — no check loosened, constant unchanged)
- validator_pattern.rs: i64 div/rem are NOT an __aeabi_ldivmod library call —
the encoder expands them inline with a 64-iteration loop; the exclusion is
re-justified on the true ground (looped expansion, no straight-line sequence
to symbolically execute). Same false claim fixed at its three arm_semantics.rs
echo sites
- static_data_addr.rs: AArch64 N/A reason updated — it HAS bounds-checked
load/store (#865); N/A because it ships no data section and refuses active
data segments loudly (#851)
- alloc_validator.rs (RV): 'every op_dest==None op is control-flow/system/
label/call' omitted stores (Sb/Sh/Sw); conclusion survives because stores
write no register — argument now states that
- selector.rs (RV): live_regs 'alloc_temp must never hand out' now names the
exhaustion path that returns temps[0] behind the alloc_exhausted loud decline
Issue #946 Tier 2.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
… what ships - aarch64 selector header: the 'deliberately still declined' hand list named call_indirect, float rounding, f32/f64 load/store, i64→float converts and the trapping i64 truncations — all with shipped lowerings in the same file. Deleted the hand list in favor of the mechanically-derived complement (the cross-backend op-parity oracle) it already cited; kept the two contract facts (active-data-segment refusal #851, #865 bounds default) - aarch64 select_typed_cf: 'loop/if/br_table declined by name' predates VCR-A64-CF-001 (v0.55) — all three lower, value-carrying frames included - RV selector header: br_table (#882) and cross-function calls (#871) moved out of the out-of-scope list they shipped past - instruction_selector: 'the 40 Rocq-proved rules' → 50, enumeration replaced by a pointer at sel_dsl::RULES (the single source, manifest-gated 1:1) - alloc_vfp_temp/alloc_vfp_dtemp: 'phase 1 has no VFP spilling' predates #881 — the backend catches both exhaustion Errs and retries with spilling; docs and user-visible strings updated, retry-trigger substrings kept verbatim ('VFP register file exhausted' / 'VFP D-register file exhausted') - --shadow-stack-size layout doc: the shrink surgery is implemented and test-gated (shadow_stack_shrink_383.rs), not 'silicon-gated, honest Err' Issue #946 Tier 3 (code-doc half). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
…the API session limit Committed by the hub coordinator so the work survives the interruption. NOT reviewed and NOT complete: the lane stopped mid-task, so this is a restore point, not a claim that anything is verified. The lane resumes from here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…eleted, phantom symbol fixed - CLAUDE.md: VCR-WASM-001 line was 'phases 1+2, 19 ops, 49 Qed' — actual is phases 1-3, i32 (19) + i64 (22) ops, 104 Qed (WasmCertBridge.v, re-derived) - coq/STATUS.md per-file table re-derived (sums EXACTLY to the CI-gated 592/2 headline now): ArmSemantics 8→14, VcrSelRules 42→52 (+ '40 rule theorems'→50), VcrSelExpansion.v (29 Qed) and the four definition-only .v files added, Total 585/3→592/2, '48 Qed (pilot+rules)'→57, footnote (42)→(52) - VcrSelRules.v header: '40 covered ops'/'40 Qed divergence gate' → 50 (comment-only; no proof text touched) - CorrectnessI32.v header: '29 Qed' → '29 theorems + 2 helper lemmas — 31 Qed' (comment-only) - feature_matrix.md.tmpl: WasmCert row said i32-only while carrying the i32+i64 count → 'i32 (19 ops) + i64 (22 ops)'; FEATURE_MATRIX.md regenerated via --emit-status (status.json byte-identical) - docs/status/PROJECT_STATUS.md: ~16 months stale and pinned by nothing (291 vs 592 Qed, 16 vs 18 crates, Z3-as-default, 'no bulk/multi-memory') — hand restatement DELETED in favor of a pointer stub at the generated/ pinned sources of truth (the v0.57 North-Star-portal rule) - POC_ACHIEVEMENTS.md: 'R0-R12' allocatable → R0-R8 per the Verus spec (contracts.rs spec_is_allocatable) - gale-integration.yaml: cites 'map_operator' — git log -S shows the symbol never existed; the decoder function is convert_operator README.md 'op-level-only residual' (issue line 59): already resolved by the #963 North Star portal rewrite — no change needed. Issue #946 Tier 3 (doc-file half). claim_check: 43/43. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
Automated review for PR #968pulseengine/synth: Verdict: 💬 Comment Summary: The changes in the Findings: 0 mechanical (rivet) · 1 from local AI model. Findings (1):
Generated by a local AI model and post-validated against a strict JSON contract. Each finding includes the verbatim line being criticised — verify by reading the file at the cited location. Reviewed at |
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Tiers 2 and 3 of the #946 doc-honesty sweep: every load-bearing comment/doc claim audited against the source it describes, corrected where the code moved past it, and each corrected premise re-verified against the source (per the #967 lesson — no scanner-generated claim taken at face value).
Per-item table
wcet.rsCEIL rationalePUSH {R0-R3}(0xB40F,arm_encoder.rs:8386) → 1+4 = 5, EXACT, zero marginclaims.yamlcomment updated alongside (comment-only — no check loosened, constant unchanged)validator_pattern.rs+ 3arm_semantics.rsecho sites__aeabi_ldivmodlibrary callarm_encoder.rs:354); no__aeabi_ldivmodexists anywhere in the treestatic_data_addr.rsAArch64 N/A reasonalloc_validator.rs(RV) soundness noteop_dest==Noneop is control-flow/system/label/call"selector.rs(RV)live_regsnotetemps[0]behind thealloc_exhaustedloud declineselect_typed_cfselector.rs:1679/1779/1802)instruction_selector.rssel_dsl::RULES, manifest-gated 1:1alloc_vfp_temp/alloc_vfp_dtemparm_backend.rs:710-711match sites re-verified, no cross-match)--shadow-stack-sizelayout docshadow_stack_shrink_383.rs)grep -c 'Qed\.' WasmCertBridge.v= 104)coq/STATUS.mdper-file tableVcrSelRules.vheaderCorrectnessI32.vheaderfeature_matrix.md.tmplWasmCert rowFEATURE_MATRIX.mdregenerated via--emit-status(status.jsonbyte-identical)docs/status/PROJECT_STATUS.mdPOC_ACHIEVEMENTS.mdcontracts.rsspec_is_allocatable)gale-integration.yamlmap_operatorgit log -S); the decoder function isconvert_operator(wasm_decoder.rs:1904)Verification
python3 scripts/claim_check.py claims.yaml→ 43/43 claims hold (re-run after mergingorigin/mainateea92e11, post-fix(#944): verified machine-readable origins for compiler-introduced object branches — the 9 were never unattributed, the real 33 now are attributed #967)bazel test //coq:verify_proofs→ RUN LOCALLY, 2/2 PASSED (//coq:rocq_proofs+//coq:vcr_sel_rules_coverage) — the.vedits are comment-only, but the suite was executed, not assumedcargo fmt --checkclean;cargo check -p synth-synthesis -p synth-cli --features riscvclean (covers the only non-comment code change: the two VFP exhaustion message strings)"VFP register file exhausted"/"VFP D-register file exhausted"verified verbatim in the new strings, and verified not to cross-match each otherCloses the Tier 2 + Tier 3 halves of #946.
🤖 Generated with Claude Code
https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L