Some checks failed
jouleclaw fabrics / cuda (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 32s
jouleclaw fabrics / vulkan (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 31s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 12s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Failing after 1m3s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 1m58s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Successful in 4m14s
jouleclaw fabrics / metal (macOS, Apple GPU) (pull_request) Has been cancelled
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Has been cancelled
Of the 286, 175 were one mistake repeated: `Model` was wrapped in `Arc<RwLock<Model>>` and these files, never having been compiled, kept passing `&self.model` where `&Model` was wanted. 169 call sites in 10 files now deref the read guard, which is the idiom those same files already use elsewhere (`self.model.read().get_weight(..)`). Five stragglers were the same shape on a local rather than a field. The sixth was a real boundary: parler_tts held `Arc<RwLock<Model>>` and called `T5Encoder::new`, which takes `Arc<Model>`, as do its three other callers. Two facts decided that one rather than guesswork. The conventions split 22 files on `Arc<Model>` against 16 on `Arc<RwLock<Model>>`, so the lock-free form is the majority, not the exception -- changing T5Encoder would have dragged three working callers toward the minority. And **no file ever takes a write lock through it**: not one `model.write()` in any of the 16. The lock guards read-only access. So parler_tts drops it and matches its callee. That leaves the same simplification available across the other 15: an `Arc<RwLock<Model>>` nobody writes through, and ~147 `&*self.model.read()` derefs that exist only to satisfy it. Collapsing them to `Arc<Model>` would delete both. Not done here -- the current state is correct, only over-synchronised, and finishing the error count comes first. errors 286 -> 111, with E0308 gone entirely. Default build unchanged at 0 errors and the same 29 warnings, 44 tests still passing. What remains is mostly not drift but absence: 53 E0425 for things that do not exist (27 of them the shader kernels `PHASE27_OPS`, `MATVEC`, `MATMUL_Q8_0`, and ~20 `gpu_ops` helpers named `<op>_on`), 27 E0716 lifetime errors, 11 E0599 missing methods. Co-Authored-By: Claude Opus 5 <[email protected]>
29 lines
1.2 KiB
Shell
Executable file
29 lines
1.2 KiB
Shell
Executable file
#!/bin/bash
|
|
cd "$(dirname "$0")"
|
|
python3 - <<'PY'
|
|
import json, collections, re
|
|
pairs=collections.Counter(); labels=collections.Counter(); names=collections.Counter()
|
|
for line in open('/tmp/m2.json'):
|
|
try: m=json.loads(line)
|
|
except Exception: continue
|
|
if m.get('reason')!='compiler-message': continue
|
|
msg=m.get('message') or {}
|
|
if msg.get('level')!='error': continue
|
|
code=(msg.get('code') or {}).get('code') or '?'
|
|
for sp in (msg.get('spans') or []):
|
|
lbl=sp.get('label') or ''
|
|
if code=='E0308' and lbl:
|
|
mm=re.search(r'expected `?([^`,]+)`?,?\s*found `?([^`]+)`?', lbl)
|
|
if mm: pairs[(mm.group(1).strip()[:30], mm.group(2).strip()[:30])]+=1
|
|
else: labels[lbl[:60]]+=1
|
|
if code=='E0425':
|
|
mm=re.match(r"cannot find (?:value|function) `([^`]+)`", msg.get('message',''))
|
|
if mm: names[mm.group(1)]+=1
|
|
print(" === E0308 expected -> found (from span labels) ===")
|
|
for (e,f),n in pairs.most_common(14): print(f" {n:4} expected {e:30} found {f}")
|
|
if labels:
|
|
print(" --- E0308 labels that did not parse ---")
|
|
for l,n in labels.most_common(6): print(f" {n:4} {l}")
|
|
print("\n === E0425 missing names ===")
|
|
for n_,c in names.most_common(14): print(f" {c:4} {n_}")
|
|
PY
|