Skip to content

NNV_CONV_TRUST_FP32: clean 0/1 toggle + ship-policy docs (competition behavior unchanged) - #444

Merged
ttj merged 2 commits into
masterfrom
ttj/conv-trust-fp32-toggle
Jun 28, 2026
Merged

ttj merged 2 commits into
masterfrom
ttj/conv-trust-fp32-toggle

Conversation

@ttj

@ttj ttj commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Ship the conv FP32-screen unsat-emit ON (Taylor's call), made configurable + documented

Competition behavior is UNCHANGEDvnncomp2026_env.sh sets NNV_CONV_TRUST_FP32=1 → ON, exactly as before. This PR adds configurability + documentation for post-competition exploration.

Configurability (footgun fix)

NNV_CONV_TRUST_FP32 was read as ~isempty(getenv(...)) — so =0 did not disable it (any non-empty value, including the literal string '0', counted as ON; I hit this during the overnight gold-gate). Now a clean i_envon() boolean:

  • =1 / true / on / yes → ON
  • =0 / anything-else / unset → OFF → the sound FP64 double-confirm

Verified: i_envon: '1'→1, '0'→0, unset→0, 'true'→1, ' 1 '→1, 'foo'→0; MATLAB static analyzer clean.

Documentation

CONV_TRUST_FP32_POLICY.md: what the policy does, the α,β-CROWN / NeuralSAT-equivalent soundness basis, the 0-false-robust gold-set validation + the overnight FP64 double-oracle verification of the 5 thin-margin cases, what rides on it (≈80 breadth-points of cifar/tinyimagenet unsats), the toggle, and the post-competition exploration paths (sound-FP32 emit, FP64-only, matmul measured-δ). Plus an inline env-file comment.

🤖 Generated with Claude Code

…mpetition behavior UNCHANGED)

Decision (Taylor): SHIP with the FP32 conv-screen unsat-emit ON for the competition (governs ~80
breadth-pts of cifar/tinyimagenet unsats; the FP64 reconfirm is too slow at the 100s budget). To make
it explorable post-competition:
- CONFIGURABILITY: replace the ~isempty(getenv(...)) footgun (where  did NOT disable -- any
  non-empty value counted as ON) with a clean i_envon() boolean: =1/true/on -> ON, =0/unset -> OFF
  (-> the sound FP64 double-confirm). Competition env sets =1 -> behavior IDENTICAL. Verified:
  i_envon('1')=1, ('0')=0, (unset)=0, ('true')=1, (' 1 ')=1, ('foo')=0; static analyzer clean.
- DOCUMENTATION: CONV_TRUST_FP32_POLICY.md (what it does, the αβ-CROWN/NeuralSAT-equivalent soundness
  basis, the 0-false-robust gold-set validation + the overnight FP64 double-oracle on the 5 thin-margin
  cases, what rides on it, the toggle, and the post-competition paths: sound-FP32 emit, FP64-only,
  matmul measured-δ). Plus an inline env-file comment.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015S5FFjy7MeJdSSovzjC6yw
Copilot AI review requested due to automatic review settings June 28, 2026 13:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR makes the NNV_CONV_TRUST_FP32 environment flag a true boolean toggle (so =0 actually disables it) and adds documentation describing the intended “ship” policy and rationale for emitting conv unsat from the FP32 GPU screen, while keeping competition defaults unchanged via vnncomp2026_env.sh.

Changes:

  • Replace the previous ~isempty(getenv(...)) gating for NNV_CONV_TRUST_FP32 with a truthy-token parser (i_envon()).
  • Add/expand documentation describing the conv FP32 trust policy and how to toggle it.
  • Update the VNN-COMP 2026 env script comments to reflect the policy and the fixed toggle semantics.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
code/nnv/examples/Submission/VNN_COMP2026/vnncomp2026_env.sh Adds ship-policy and toggle-semantics commentary while preserving NNV_CONV_TRUST_FP32=1 competition default.
code/nnv/examples/Submission/VNN_COMP2026/run_vnncomp_instance.m Introduces i_envon() and uses it to interpret NNV_CONV_TRUST_FP32 as a clean boolean toggle.
code/nnv/examples/Submission/VNN_COMP2026/CONV_TRUST_FP32_POLICY.md Adds a policy doc explaining what the FP32 trust path does, why it’s being shipped, what depends on it, and how to configure it.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

% unset) OFF -> straight to the sound FP64-double confirm. (Was ~isempty(), a footgun where
% `=0` did NOT disable -- any non-empty value counted as ON. See CONV_TRUST_FP32_POLICY.md.)
useScreen = ~isequal(getenv('NNV_CONV_GPU_SCREEN'), '0') || i_envon('NNV_CONV_TRUST_FP32');
soundEmit = ~isempty(getenv('NNV_SOUND_FP32_TIGHT')); % sound-FP32 fast-emit attempt enabled
Comment on lines +22 to +24
- **Overnight defense-in-depth (2026-06-28):** the 5 thin-margin cifar resnet_large recoveries
(idx 496/4385/5308/4757/8589) were independently **FP64 double-oracle confirmed** robust (unsat via
3/7/15/9/175-node double; `status-repo/research/cifar_fp64_goldgate_2026-06-27/`).
Comment on lines +47 to +49
blocker is that the worst-case Higham γ_n widening is too loose on the wide-conv matmul; the
**matmul measured-δ** (running-error analysis) is the lever to make it tight (see
`status-repo/memory conv-sound-emit-diagnosis`, SUPERVISED-only, −150-sensitive).
…HT + NNV_CONV_NO_STAR (same footgun); reword external status-repo refs

- NNV_SOUND_FP32_TIGHT and NNV_CONV_NO_STAR also used ~isempty(getenv(...)) so =0 wouldn't disable;
  now clean i_envon() toggles (competition sets =1 -> unchanged). NNV_PHASE_LOG/DEBUG left as-is
  (those are path-SET checks, not booleans).
- CONV_TRUST_FP32_POLICY.md: clarified the status-repo/ paths are in the team's SEPARATE internal
  status-tracking repo, not this nnv repo (dangling-ref note).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015S5FFjy7MeJdSSovzjC6yw
@ttj
ttj merged commit 148a43f into master Jun 28, 2026
18 checks passed
@ttj
ttj deleted the ttj/conv-trust-fp32-toggle branch June 28, 2026 19:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants