docs(spec): WS7 — יישור 01/02/03/04/06 + gap-audit; ווידוא סגירת 7 דליפות עיצוב-מחדש (#207) #359

Merged
chaim merged 2 commits from worktree-agent-a3dd49d429baa5308 into main 2026-06-30 12:22:39 +00:00
Owner

מה ולמה

WS7 של יוזמת עיצוב-מחדש זרימת-העבודה (#207, תוכנית groovy-doodling-token) דרש סגירת 7 דליפות ידועות תוך-כדי. ביקורת חוצת-קוד אימתה שכל ה-7 כבר נסגרו במחזורים קודמים (FU-1/4/5/6/7 + גלי-IA), אך הספ נשא תיאורי-"הפרה ידועה" מיושנים. ה-PR מיישר את הספ למצב-הקוד בפועל ומאמת כל סגירה בבדיקה. אין כאן GAP/FU חדש ואין מסלול-קוד חדש — זו ביקורת-יישור, לא פתרון-מחדש (G2).

7 הדליפות → סטטוס (כולן סגורות/מגודרות, כל אחת עם בדיקה)

# דליפה invariant/FU סגירה (קוד) בדיקה
1 הלכות חוצות-קורפוס (#56) GAP-10/FU-4 (INV-RET1/G5) cl.source_kind ב-halacha_filters (db.py:7516,7519) test_precedent_corpus_isolation.py
2 backlog-הלכות בלתי-נראה GAP-14/FU-5 (G10) health halacha_backlog (app.py:2352-2364) + extraction_status/halachot_pending health-endpoint
3 אין eval-harness GAP-11/FU-5 (G8) scripts/eval_retrieval.py (P/R/MRR/nDCG מול gold-set+baseline) eval_retrieval.py --self-test → ALL PASS
4 שער-ייצוא לא hard-block GAP-15/FU-6 (INV-EX3) export_docx בודק qa_run_exists+get_critical_qa_failures לפני exporter (drafting.py:462-494) test_export_qa_gate.py
5 מטא במסלול-פנימי GAP-02/FU-1 (INV-ING3) מסלול קנוני ingest.ingest_document מתזמן metadata+halacha יחד (ingest.py:233-234) test_unified_ingest.py
6 DOCX זוחל למקור-אמת GAP-17/FU-7 (INV-EX1) active_draft_path=אנקור בלבד; drift בדגל cases.blocks_stale (V22) חוזה+דגל (שארית health-check low-pri)
7 cache-invalidation ב-UI GAP-33/FU-10 qc.invalidateQueries על מוטציות (web-ui/src/lib/api/*.ts) TanStack Query

תיאום עם משימות-אחות

  • 02-data-model + 04-analysis-writing — נוספו הערות-מצביע בלבד (additive) להרחבות בבעלות אחרות: is_primary/doc_category (#200), summarize_party_claims (#202), analyze_protocol (#203). לא נגעתי בשורות-הסכמה/הכלים שהן מחזיקות.
  • block-schema.md — עריכות טיוטת-ביניים/תבנית (WS5) נדחו ל-#204/#205; אין דליפה שנוגעת ב-block-schema.

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

  • נוגע / מקיים:
    • G2 (מקור-אמת יחיד / אין מסלול מקביל) — כל סגירות-הדליפות מרחיבות את המסלול הקנוני, לא יוצרות מסלול שני (מטא במסלול-פנימי דרך ingest.ingest_document; DOCX=נגזר; סיכום-מנהלים=תצוגה-נגזרת).
    • G8 (איכות-אחזור נמדדת) — eval harness קיים ומאומת (INV-RET4).
    • G10 (שערים אנושיים = invariant) — שני שערים אנושיים הפכו נראים/קשיחים: backlog-הלכות (נראות) + שער-ייצוא (hard-block בקוד).
    • INV-ING3 — תיזמון מטא+הלכות א��יד לכל סוג-intake (לא מותנה-מסלול).
    • INV-EX1 — DOCX נתון-נגזר; active_draft_path אנקור-revision בלבד; drift בדגל blocks_stale.
    • #56 / INV-RET1 / G5 — הפרדת-קורפוס נאכפת גם בענף-ההלכות (source_kind).
    • G11 (תוכן-משפטי) — לא נגוע.

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

  • קראתי את docs/spec/00-constitution.md + ספ-התחום הרלוונטי (01/02/03/04/06) לפני הכתיבה
  • השינוי לא יוצר מסלול מקביל ליכולת קיימת (G2) ולא מתקן תסמין בקריאה (G1)
  • לא הוספתי מגע-Paperclip מחוץ ל-Platform Port (G12) — שינוי docs בלבד
  • אין בליעה שקטה של שגיאות — שינוי docs בלבד
  • בדקתי מול docs/spec/gap-audit.md — יישרתי ל-FU הקיימים (FU-1/4/5/6/7/10), לא פתרתי מחדש; הוספתי סעיף-ווידוא
  • בדיקות עוברות (19/19 בדיקות-הדליפות; eval_retrieval.py --self-test ALL PASS)
  • לא data-migration

אימות

  • pytest tests/test_export_qa_gate.py tests/test_precedent_corpus_isolation.py tests/test_unified_ingest.py19 passed
  • scripts/eval_retrieval.py --self-testALL PASS
  • diff = docs-only (6 קבצי-ספ); tasks.json לא נגוע

🤖 Generated with Claude Code

## מה ולמה WS7 של יוזמת עיצוב-מחדש זרימת-העבודה (#207, תוכנית `groovy-doodling-token`) דרש סגירת **7 דליפות ידועות** תוך-כדי. ביקורת חוצת-קוד אימתה ש**כל ה-7 כבר נסגרו במחזורים קודמים** (FU-1/4/5/6/7 + גלי-IA), אך הספ נשא תיאורי-"הפרה ידועה" מיושנים. ה-PR **מיישר את הספ למצב-הקוד בפועל** ומאמת כל סגירה בבדיקה. **אין כאן GAP/FU חדש ואין מסלול-קוד חדש — זו ביקורת-יישור, לא פתרון-מחדש (G2).** ### 7 הדליפות → סטטוס (כולן סגורות/מגודרות, כל אחת עם בדיקה) | # | דליפה | invariant/FU | סגירה (קוד) | בדיקה | |---|-------|--------------|-------------|-------| | 1 | הלכות חוצות-קורפוס (#56) | GAP-10/FU-4 (INV-RET1/G5) | `cl.source_kind` ב-`halacha_filters` (`db.py:7516,7519`) | `test_precedent_corpus_isolation.py` | | 2 | backlog-הלכות בלתי-נראה | GAP-14/FU-5 (G10) | health `halacha_backlog` (`app.py:2352-2364`) + `extraction_status`/`halachot_pending` | health-endpoint | | 3 | אין eval-harness | GAP-11/FU-5 (G8) | `scripts/eval_retrieval.py` (P/R/MRR/nDCG מול gold-set+baseline) | `eval_retrieval.py --self-test` → ALL PASS | | 4 | שער-ייצוא לא hard-block | GAP-15/FU-6 (INV-EX3) | `export_docx` בודק `qa_run_exists`+`get_critical_qa_failures` לפני exporter (`drafting.py:462-494`) | `test_export_qa_gate.py` | | 5 | מטא במסלול-פנימי | GAP-02/FU-1 (INV-ING3) | מסלול קנוני `ingest.ingest_document` מתזמן metadata+halacha יחד (`ingest.py:233-234`) | `test_unified_ingest.py` | | 6 | DOCX זוחל למקור-אמת | GAP-17/FU-7 (INV-EX1) | `active_draft_path`=אנקור בלבד; drift בדגל `cases.blocks_stale` (V22) | חוזה+דגל (שארית health-check low-pri) | | 7 | cache-invalidation ב-UI | GAP-33/FU-10 | `qc.invalidateQueries` על מוטציות (`web-ui/src/lib/api/*.ts`) | TanStack Query | ### תיאום עם משימות-אחות - **02-data-model** + **04-analysis-writing** — נוספו **הערות-מצביע בלבד** (additive) להרחבות בבעלות אחרות: `is_primary`/`doc_category` (#200), `summarize_party_claims` (#202), `analyze_protocol` (#203). לא נגעתי בשורות-הסכמה/הכלים שהן מחזיקות. - **block-schema.md** — עריכות טיוטת-ביניים/תבנית (WS5) **נדחו ל-#204/#205**; אין דליפה שנוגעת ב-block-schema. ## Invariants — הצהרה (חובה) - **נוגע / מקיים:** - **G2 (מקור-אמת יחיד / אין מסלול מקביל)** — כל סגירות-הדליפות **מרחיבות את המסלול הקנוני**, לא יוצרות מסלול שני (מטא במסלול-פנימי דרך `ingest.ingest_document`; DOCX=נגזר; סיכום-מנהלים=תצוגה-נגזרת). - **G8 (איכות-אחזור נמדדת)** — eval harness קיים ומאומת (INV-RET4). - **G10 (שערים אנושיים = invariant)** — שני שערים אנושיים הפכו נראים/קשיחים: backlog-הלכות (נראות) + שער-ייצוא (hard-block בקוד). - **INV-ING3** — תיזמון מטא+הלכות א��יד לכל סוג-intake (לא מותנה-מסלול). - **INV-EX1** — DOCX נתון-נגזר; `active_draft_path` אנקור-revision בלבד; drift בדגל `blocks_stale`. - **#56 / INV-RET1 / G5** — הפרדת-קורפוס נאכפת גם בענף-ההלכות (`source_kind`). - **G11 (תוכן-משפטי)** — לא נגוע. ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי את `docs/spec/00-constitution.md` + ספ-התחום הרלוונטי (01/02/03/04/06) לפני הכתיבה - [x] השינוי **לא** יוצר מסלול מקביל ליכולת קיימת (G2) ולא מתקן תסמין בקריאה (G1) - [x] **לא** הוספתי מגע-Paperclip מחוץ ל-Platform Port (G12) — שינוי docs בלבד - [x] אין בליעה שקטה של שגיאות — שינוי docs בלבד - [x] בדקתי מול `docs/spec/gap-audit.md` — יישרתי ל-FU הקיימים (FU-1/4/5/6/7/10), לא פתרתי מחדש; הוספתי סעיף-ווידוא - [x] בדיקות עוברות (19/19 בדיקות-הדליפות; `eval_retrieval.py --self-test` ALL PASS) - [x] לא data-migration ## אימות - `pytest tests/test_export_qa_gate.py tests/test_precedent_corpus_isolation.py tests/test_unified_ingest.py` → **19 passed** - `scripts/eval_retrieval.py --self-test` → **ALL PASS** - diff = docs-only (6 קבצי-ספ); `tasks.json` לא נגוע 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-30 11:23:29 +00:00
docs(spec): WS7 — reconcile 01/02/03/04/06 + gap-audit; verify 7 workflow-redesign leaks closed (#207)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 3s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
9ef0547997
WS7 of the workflow-redesign initiative required closing 7 known leaks along
the way. Cross-code audit verified ALL 7 were already closed in prior cycles
(FU-1/4/5/6/7 + IA waves); the spec still carried stale "known violation" text.
This PR aligns the spec to actual code state and verifies each closure with a
test. No new code path created — this is a spec-alignment audit, not a re-solve.

7 leaks → status (all closed/gated, each with a test):
1. cross-corpus halachot (#56, GAP-10/FU-4) — cl.source_kind in halacha_filters
   (db.py:7516,7519); test_precedent_corpus_isolation.py
2. invisible halacha backlog (GAP-14/FU-5) — health halacha_backlog
   (app.py:2352-2364) + extraction_status/halachot_pending
3. no eval harness (GAP-11/FU-5, G8) — scripts/eval_retrieval.py
   (P/R/MRR/nDCG vs gold-set+baseline); --self-test ALL PASS
4. export gate not hard-block (GAP-15/FU-6, INV-EX3) — export_docx checks
   qa_run_exists + get_critical_qa_failures before exporter (drafting.py:462-494);
   test_export_qa_gate.py
5. metadata on internal path (GAP-02/FU-1, INV-ING3) — unified ingest.ingest_document
   queues metadata+halacha together (ingest.py:233-234); test_unified_ingest.py
6. DOCX creep to source-of-truth (GAP-17/FU-7, INV-EX1) — active_draft_path is
   revision-anchor only; drift caught by cases.blocks_stale flag (V22)
7. UI cache-invalidation (GAP-33/FU-10) — qc.invalidateQueries on mutations

Also added forward-pointer notes for the workflow-redesign additions owned by
sibling tasks (02 documents is_primary/doc_category → #200; 04 re-analysis /
summarize_party_claims / analyze_protocol → #200/#202/#203), kept additive to
avoid line conflicts. block-schema.md interim/template edits deferred to #204/#205.

Invariants: maintains G2 (single source of truth, no parallel path — all leak
closures extend the canonical path), G8 (eval harness now exists), G10 (human
gates visible: halacha backlog + hard export gate), INV-ING3 (unified metadata
queue), INV-EX1 (DOCX is derived; blocks_stale drift flag), INV-RET1/G5 (#56
cross-corpus halacha isolation).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim added 1 commit 2026-06-30 12:21:13 +00:00
Merge remote-tracking branch 'origin/main' into rebase-359
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
6f60dc7a14
# Conflicts:
#	docs/spec/04-analysis-writing.md
chaim merged commit c68f3e004e into main 2026-06-30 12:22:39 +00:00
chaim deleted branch worktree-agent-a3dd49d429baa5308 2026-06-30 12:22:39 +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#359