3.8 kB 50 lines
e68889be
⋯
persona/audits/opus_audit_phase3_prep_v4.md
download raw history
at main Markdown

opus audit — phase 3 prep v4 (read-only verification of v3 fixes) #

verdict: PASS — all 1 major + 3 minor fixes from opus_audit_phase3_prep_v3.md verified. no files edited besides this report.

1. PRE_TOOL_HYPOTHESIS_CLAUSE_RE (major) — PASS #

scripts/prepare_phase3_sft_data.py L83 is now [^?:.!?\n]*?(?:,\s*(?:since|because|as|then)\b\s+|\s+\b(?:because|since)\b\s+|:\s+)(.+)$. bare as and so that are gone; as only fires after a comma; because/since are \b-bounded.

probed directly via apply_speech_act_surgery(text, has_following_tool_call=True). the hypothesis regex does not match any of these and the whole sentence strips to '':

  • Let me check whether this was the cause.
  • Let me look at the alias table.
  • Let me read what the config has to say.
  • Let me run the build as root.
  • Let me check the logs as well.
  • Let me verify the alias works.
  • extra: I'll check what the log has to say., Let me check if it was cached so that we know.

real hypotheses are kept (group 1 → output):

  • ...because the cache may be stale. → the cache may be stale.
  • ...since the port changed. → the port changed.
  • Let me test this hypothesis: the lock is never released. → the lock is never released.
  • ...cache, then rebuild the index. → rebuild the index.
  • ...logs, as the daemon crashed. / ..., since it was flaky. → kept clause

trailing path matches too: Patched it. Let me verify the alias works. → patched it.; Here is the fix. Let me check whether this was the cause. → here is the fix.. falsifier (a split in the middle of a word on was/alias/has/as root/as well): not triggered.

2. CHOICE_FORK_QUESTION_RE — PASS #

the negative lookahead (?!(?:not|anything else|something else|would you|do you|should i|shall i|wait|skip|leave it)\b) after or works:

  • stripped (not a fork → solicitation removed): Want me to push it or not?, Shall I keep it or not?, Do you want me to apply it, or would you rather I wait?, Should I apply the patch or would you rather review first?
  • kept (real fork): Want me to write it in Rust or Go?, Do you want to keep or migrate?, Should I keep or migrate the old table?

3a. inline code emoji protection — PASS #

L369 splits on (`[^`\n]+`) and skips odd indices. Run `print('🚀')` to test 🚀 nice. → run `print('🚀')` to test nice. (1 stripped). Shipped 🚀 (◕‿◕✿) `a 🎉 b` and ```x='🔥'``` ok ✨ → kaomoji, inline 🎉, fenced 🔥 all preserved; 2 prose emoji stripped. inline code case is also kept as-is (not lowercased).

3b. phase3_lora_and_transplant.py L93 comment — PASS #

reads (96 trunk writers + 96 router gates = 192 tensors). matches the regex for 48 hybrid trunk layers: 1 residual writer (ssm_out xor attn_output/attn_out) + ffn_down_shexp = 96, and ffn_gate_inp + ffn_gate_inp_shexp = 96. blk.48 (MTP) is correctly excluded. (i didn't check this against a real GGUF tensor list; i only checked the regex arithmetic.)

4. self-tests with python3 -B — PASS #

script exit output
scripts/prepare_phase3_sft_data.py --self-test 0 self-test: PASS
scripts/phase3_lora_and_transplant.py --self-test 0 self-test: PASS (C Q2_0 golden compiled + ran)
scripts/slice_qwen4exp_gguf.py --self-test 0 self-test: PASS

glob("**/__pycache__") was empty before and after the runs (and after my own importlib probes with sys.dont_write_bytecode=True).

remaining issues #

none blocking. one nit: an opener whose only content is a hypothesis is reduced to that clause in lowercase without a subject (the cache may be stale.). that's intended per M2 and fine for SFT.