diff --git a/shared/lockdown/l0_guard.hexa b/shared/lockdown/l0_guard.hexa index c82a6099..0095b076 100644 --- a/shared/lockdown/l0_guard.hexa +++ b/shared/lockdown/l0_guard.hexa @@ -191,6 +191,41 @@ fn cmd_verify(project, repo) { if fp { println(" PASS force_push_blocked"); pass = pass + 1 } else { println(" FAIL force_push_blocked"); fail = fail + 1 } if dl { println(" PASS branch_delete_blocked"); pass = pass + 1 } else { println(" FAIL branch_delete_blocked"); fail = fail + 1 } + // 4. L0 .hexa 파일 파싱 가능성 (phantom 차단) + // M1_l0_strict — airgenome rebuild v2 진입의 핵심. + // "파일 존재" 만 검증하면 dead code 가 L0 자격 유지하는 상태가 발생. + // 각 .hexa L0 파일을 hexa 로 실행, "Parse error" 출력 0건 = PASS. + // 부수 효과: 파일이 top-level 에서 무거운 작업을 하면 매 verify 마다 실행됨. + // 완화: env gating (CORE_SELF_TEST=1 등) 권장. + println("") + println("── 4. L0 .hexa 파일 파싱 가능성 ──") + if paths_str != "" { + let plines = paths_str.split("\n") + let mut k = 0 + while k < len(plines) { + let p = plines[k].trim() + if p != "" { + let n = len(p) + if n >= 5 { + let suffix_check = exec("echo '" + p + "' | grep -c '\\.hexa$'").trim() + if suffix_check == "1" { + let abs = root + "/" + p + let perr_count = exec(HEXA + " '" + abs + "' 2>&1 < /dev/null | grep -c 'Parse error'").trim() + let pe = to_int(perr_count) + if pe == 0 { + println(" PASS parse: " + p) + pass = pass + 1 + } else { + println(" FAIL parse: " + p + " (" + to_string(pe) + " parse errors)") + fail = fail + 1 + } + } + } + } + k = k + 1 + } + } + println("") println("═══ 결과: " + to_string(pass) + " PASS / " + to_string(fail) + " FAIL ═══") if fail == 0 {