Record jcode benchmark repair guidance
ober
532c7db9e30beb58efc66e31319fd4babd942d0b
--- a/data/anti-patterns.sexp +++ b/data/anti-patterns.sexp @@ -4572,4 +4572,25 @@ "Do not shadow real dependencies or alter the verifier environment") ("tools" "write-scope" "JCODE_READ_ROOTS" "jerboa_module_exports" "jerboa_function_signature" "verify" - "git_diff"))) + "git_diff")) + (("advice" + . + "Launch benchmark cohorts with --no-expert in every jcode verified command, verify every jcode command.txt contains --no-expert, then scan logs/traces/command files for expert markers. Discard and rerun any contaminated result.") + ("avoid" + . + "Do not count a jcode benchmark result if the run omitted --no-expert or any artifact shows expert escalation. That measures the configured expert model, not the selected candidate model.") + ("id" . "jcode-benchmark-expert-contamination") + ("kinds" "test" "docs") + ("pattern" + . + "escalating-to-expert|expert-result|expert fallback|<expert/>") + ("severity" . "high") + ("tags" "jcode" "benchmark" "no-expert" "expert-escalation" + "kratistos") + ("title" + . + "Jcode Benchmarks Must Not Use Expert Escalation") + ("tools" + "rg" + "kratistos policy tests" + "command.txt artifact scan"))) --- a/data/error-fixes.sexp +++ b/data/error-fixes.sexp @@ -2792,4 +2792,32 @@ ("pattern" . "invalid bound variable \\(lambda \\(app\\).*with-qt-app|invalid bound variable.*in \\(let.*dynamic-wind") - ("type" . "macro-usage"))) + ("type" . "macro-usage")) + (("code_example" + . + "(qt-on-timeout! timer\n (lambda ()\n (tick!)\n (qt-paint-widget-update! canvas)))") + ("explanation" + . + "The `(jerboa-qt qt)` API exports the paint-widget-specific update procedure, not the generic widget update aliases many Qt wrappers use.") + ("fix" + . + "For jerboa-qt paint widgets, request repaint with `(qt-paint-widget-update! canvas)`. Do not use guessed generic names such as `qt-widget-update!` or `qt-widget-update`.") + ("id" . "qt-paint-widget-update-unbound") + ("pattern" + . + "variable qt-widget-update!? is not bound|qt-widget-update!?[^\\n]*not bound") + ("type" . "module-api")) + (("code_example" + . + ";; wrong: py cannot see dy in the same let\n(let ((dy 1)\n (py (+ y dy)))\n py)\n\n;; right\n(let* ((dy 1)\n (py (+ y dy)))\n py)") + ("explanation" + . + "Jerboa follows Scheme `let` semantics: bindings in the same `let` are simultaneous, so a later RHS cannot reference an earlier local from that same binding list.") + ("fix" + . + "If the unbound name is a local that was introduced earlier in the same `let`, change that binding group to `let*` or split it into nested lets. Plain `let` evaluates all right-hand sides before any local names are bound.") + ("id" . "dependent-let-binding-unbound") + ("pattern" + . + "variable [A-Za-z0-9_+*!?<>=$%&/.-]+ is not bound") + ("type" . "binding")))