feat(calibration): style-clean recommend_effort (anti-primary) + confidence + --rerank (#213) #377

Merged
chaim merged 1 commits from worktree-agent-ae80f93f2f0f100cb into main 2026-06-30 19:02:09 +00:00
Owner

מה ולמה

יעד-העל הוא רכישת-הסגנון של דפנה (לכתוב כמוה). עד היום recommend_effort ב-scripts/calibrate_effort.py דירג efforts לפי המפתח המרוכב (distance, anti_pattern_total, change_percent) — כש-distance ראשי. אבל distance בולע את change_percent, ש(לפי 07-learning §0.7 וההערה בדוח עצמו) "מערבב סגנון עם שלמות-תוכן" — נשלט על-ידי אי-התאמת-תוכן (המודל לא יכול לדעת עובדות-תיק) → רעש לסגנון. הסיגנל הנקי-לסגנון הוא anti_pattern_total (ספירת הפרות-כללי-סגנון של דפנה). היו"ר אישר את ה-re-weighting.

מה משתנה (#213):

  • recommend_effort מדרג לפי anti_pattern_total ראשי (↑ פחות הפרות = טוב יותר) → golden_ratio_deviation_pp משני (סגנון-מבני; None=הגרוע) → distance tiebreak קלוש בלבד. change_percent הוצא מהדירוג — נשאר בדוח כהקשר בלבד.
  • דגל confidence ("clear"/"weak"): בחירה שההובלה-ב-anti שלה מעל הרץ-המשני קטנה מ-epsilon = max(0.5, 0.20·spread) מסומנת ⚠️ weak (within-noise) — כך שבחירה בתוך-הרעש (כמו ה-"low" הוודאי-בטעות של block-zayin) לעולם לא מוצגת כוודאית. מוצג כעמודת-confidence בטבלת-ההמלצה.
  • --rerank <report.json>: מדרג-מחדש דוח-כיול שמור תחת המפתח החדש — ללא LLM, ללא DB — מדפיס טבלה + כותב *-reranked.md. מאפשר לדרג-מחדש את ריצת-8-הסופיים של היום בלי לייצר מחדש.
  • recommend_effort נשאר פונקציה-טהורה משותפת אחת, בשימוש-חוזר ע"י scripts/calibrate_block_yod.py (G2). שני ה---self-test עוברים.
  • הערת-ספ (07-learning §0.7) + scripts/SCRIPTS.md עודכנו.

תוצאת re-rank לריצת-8-הסופיים (offline)

block section current old pick new pick confidence
block-vav background medium low low clear
block-zayin claims high low xhigh ⬅︎ ⚠️ weak (within-noise)
block-yod-alef summary high low xhigh ⬅︎ ⚠️ weak (within-noise)
  • block-vav נשאר low ו-clear (anti 1.57 מוביל ב-0.72 ≥ ε=0.6).
  • block-zayin / block-yod-alef — ה-"low" הוודאי הישן נחשף כ-weak (כל ה-efforts ב-anti ~4 / 3.6, הובלה≈0 — בתוך-הרעש); ה-pick הנומינלי עבר ל-xhigh אך מסומן weak.

Invariants — הצהרה (חובה)

  • נוגע / מקיים: G8 (דירוג-אמפירי style-clean — anti ראשי, change% רעש-תוכן הוצא מהדירוג) · G2 (פונקציית-recommend_effort יחידה משותפת, שימוש-חוזר ע"י harness בלוק-י — אין מסלול-מדד מקביל) · INV-LRN5 (סיגנל-סגנון-בלבד; change% מדווח-לא-מדורג).

צ'קליסט — פרוטוקול כתיבת-קוד

  • קראתי את docs/spec/00-constitution.md (G8/G2) + docs/spec/07-learning.md §0.7 לפני הכתיבה
  • השינוי לא יוצר מסלול מקביל (G2 — אותה recommend_effort/style_distance) ולא מתקן תסמין בקריאה (G1)
  • לא הוספתי מגע-Paperclip מחוץ ל-Platform Port (G12) — סקריפט-כיול בלבד
  • אין בליעה שקטה — --rerank מחזיר 2 ל-file-not-found
  • בדקתי מול gap-audit.md — לא נגעתי ב-GAP/FU ממופה
  • בדיקות עוברות — --self-test של שני הסקריפטים = ALL PASS
  • אין data-migration

אימות

mcp-server/.venv/bin/python scripts/calibrate_effort.py --self-test     → ALL PASS
mcp-server/.venv/bin/python scripts/calibrate_block_yod.py --self-test  → ALL PASS
mcp-server/.venv/bin/python scripts/calibrate_effort.py --rerank \
    data/eval/effort-calibration-20260630T155054Z.json                 → טבלת-rerank (לעיל), offline

🤖 Generated with Claude Code

## מה ולמה יעד-העל הוא **רכישת-הסגנון של דפנה** (לכתוב כמוה). עד היום `recommend_effort` ב-`scripts/calibrate_effort.py` דירג efforts לפי המפתח המרוכב `(distance, anti_pattern_total, change_percent)` — כש-`distance` ראשי. אבל `distance` בולע את `change_percent`, ש(לפי 07-learning §0.7 וההערה בדוח עצמו) "מערבב סגנון עם שלמות-תוכן" — נשלט על-ידי אי-התאמת-**תוכן** (המודל לא יכול לדעת עובדות-תיק) → **רעש** לסגנון. הסיגנל הנקי-לסגנון הוא `anti_pattern_total` (ספירת הפרות-כללי-סגנון של דפנה). היו"ר אישר את ה-re-weighting. **מה משתנה (#213):** - `recommend_effort` מדרג לפי `anti_pattern_total` **ראשי** (↑ פחות הפרות = טוב יותר) → `golden_ratio_deviation_pp` **משני** (סגנון-מבני; `None`=הגרוע) → `distance` **tiebreak קלוש בלבד**. `change_percent` **הוצא מהדירוג** — נשאר בדוח כהקשר בלבד. - **דגל confidence** (`"clear"`/`"weak"`): בחירה שההובלה-ב-`anti` שלה מעל הרץ-המשני קטנה מ-epsilon = `max(0.5, 0.20·spread)` מסומנת **⚠️ weak (within-noise)** — כך שבחירה בתוך-הרעש (כמו ה-"low" הוודאי-בטעות של block-zayin) לעולם לא מוצגת כוודאית. מוצג כעמודת-confidence בטבלת-ההמלצה. - **`--rerank <report.json>`**: מדרג-מחדש דוח-כיול שמור תחת המפתח החדש — **ללא LLM, ללא DB** — מדפיס טבלה + כותב `*-reranked.md`. מאפשר לדרג-מחדש את ריצת-8-הסופיים של היום בלי לייצר מחדש. - `recommend_effort` נשאר פונקציה-טהורה משותפת אחת, בשימוש-חוזר ע"י `scripts/calibrate_block_yod.py` (G2). שני ה-`--self-test` עוברים. - הערת-ספ (07-learning §0.7) + `scripts/SCRIPTS.md` עודכנו. ### תוצאת re-rank לריצת-8-הסופיים (offline) | block | section | current | old pick | new pick | confidence | |---|---|---|---|---|---| | block-vav | background | medium | low | **low** | clear | | block-zayin | claims | high | low | **xhigh** ⬅︎ | ⚠️ weak (within-noise) | | block-yod-alef | summary | high | low | **xhigh** ⬅︎ | ⚠️ weak (within-noise) | - **block-vav** נשאר `low` ו-**clear** (anti 1.57 מוביל ב-0.72 ≥ ε=0.6). - **block-zayin / block-yod-alef** — ה-"low" הוודאי הישן נחשף כ-**weak** (כל ה-efforts ב-anti ~4 / 3.6, הובלה≈0 — בתוך-הרעש); ה-pick הנומינלי עבר ל-`xhigh` אך מסומן weak. ## Invariants — הצהרה (חובה) - **נוגע / מקיים:** **G8** (דירוג-אמפירי style-clean — anti ראשי, change% רעש-תוכן הוצא מהדירוג) · **G2** (פונקציית-`recommend_effort` יחידה משותפת, שימוש-חוזר ע"י harness בלוק-י — אין מסלול-מדד מקביל) · **INV-LRN5** (סיגנל-סגנון-בלבד; change% מדווח-לא-מדורג). ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי את `docs/spec/00-constitution.md` (G8/G2) + `docs/spec/07-learning.md` §0.7 לפני הכתיבה - [x] השינוי **לא** יוצר מסלול מקביל (G2 — אותה `recommend_effort`/`style_distance`) ולא מתקן תסמין בקריאה (G1) - [x] **לא** הוספתי מגע-Paperclip מחוץ ל-Platform Port (G12) — סקריפט-כיול בלבד - [x] אין בליעה שקטה — `--rerank` מחזיר 2 ל-file-not-found - [x] בדקתי מול `gap-audit.md` — לא נגעתי ב-GAP/FU ממופה - [x] בדיקות עוברות — `--self-test` של שני הסקריפטים = ALL PASS - [x] אין data-migration ## אימות ``` mcp-server/.venv/bin/python scripts/calibrate_effort.py --self-test → ALL PASS mcp-server/.venv/bin/python scripts/calibrate_block_yod.py --self-test → ALL PASS mcp-server/.venv/bin/python scripts/calibrate_effort.py --rerank \ data/eval/effort-calibration-20260630T155054Z.json → טבלת-rerank (לעיל), offline ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-30 19:01:36 +00:00
feat(calibration): style-clean recommend_effort (anti-primary) + confidence + --rerank (#213)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
c7156b575e
Make the effort-calibration recommendation style-clean (style acquisition is
the goal — write like chair Dafna Tamir):

- recommend_effort ranks by anti_pattern_total (PRIMARY, the clean style-rule
  violation count) → golden_ratio_deviation_pp (SECONDARY, structural-style,
  None=worst) → distance (faint final tiebreak). change_percent is EXCLUDED from
  the ranking (it mixes style with content-completeness per 07-learning §0.7 —
  noise for STYLE) and kept in the report as context only.
- Add a confidence flag ("clear"/"weak"): a pick whose anti-pattern lead over the
  runner-up is within noise (margin < epsilon = max(0.5, 0.20·spread)) is flagged
  ⚠️ weak, so an over-claimed pick (the old confident block-zayin "low") is never
  shown as confident. Rendered as a confidence column in the report.
- Add --rerank <report.json>: re-apply the new key to a saved calibration JSON
  offline (NO LLM, NO DB), print + write *-reranked.md. Re-ranks today's 8-final
  run without regenerating.
- recommend_effort stays a single shared pure function reused by
  scripts/calibrate_block_yod.py (G2); both --self-test suites pass.
- Spec note added (07-learning §0.7) + SCRIPTS.md updated.

Invariants: G8 (style-clean empirical ranking), G2 (single shared recommend_effort,
reused by the block-yod harness — no parallel metric path), INV-LRN5 (style-only
signal; change% reported-not-ranked).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit abff00faec into main 2026-06-30 19:02:09 +00:00
chaim deleted branch worktree-agent-ae80f93f2f0f100cb 2026-06-30 19:02:09 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#377