feat(spec): חיבור ספ-המערכת למסלול-הכתיבה האינטראקטיבי (אכיפה 3-שכבתית) #59

Merged
chaim merged 1 commits from feat/spec-enforcement-interactive into main 2026-06-06 13:29:30 +00:00
Owner

מה ולמה

הספ הפורמלי (docs/spec/, חוקה + G1–G11) שהוקם בשבוע 30.5–3.6 חובר לסוכני Paperclip דרך INV-AG1 (HEARTBEAT.md §"קריאת-ספ" + קבצי-סוכן) — אבל לא למסלול שבו רוב הקוד נכתב בפועל: הסשן האינטראקטיבי של Claude Code (chaim + Claude). אומת: legal-ai/CLAUDE.md הכיל אפס הפניות ל-docs/spec/, ולא היה hook אוכף.

PR זה סוגר את הפער לפני מחזור-2 (FU-9..15), שהוא כולו כתיבת-קוד — אחרת נחזור לכשל-השורש שהספ בא לייבש (מסלולים מקבילים מתפצלים, G2).

Invariants — הצהרה

  • מקיים: INV-AG1 (קריאת-ספ לפני פעולה) — מרחיב אותו מסוכני-Paperclip גם למסלול האינטראקטיבי. תומך עקיפה של G2 (אין מסלול מקביל) / G1 / כלל-הנדסה §6 ע"י ניתוב כל כתיבת-קוד דרך הספ. מסמכים בלבד + hook + תבנית — אין שינוי קוד-מוצר, אין נגיעה ב-GAP/FU קיים.

שלוש שכבות אכיפה (החלטת היו"ר: ההדוקה ביותר)

  1. תיעודCLAUDE.md §"פרוטוקול כתיבת-קוד — קודם הספ" + 3 שורות docs/spec/ בטבלת-הייחוס (חסרו לגמרי).
  2. hookscripts/spec-guard.sh (PreToolUse על Edit|Write|MultiEdit, רשום ב-.claude/settings.json). מזריק תזכורת additionalContext בכל נגיעה בקובץ-קוד (web/, mcp-server/, web-ui/src/, scripts/, adapters/). non-blocking, dedup פעם-בסשן, מחריג .md/docs//tests//artifacts.
  3. PR.gitea/PULL_REQUEST_TEMPLATE.md עם סעיף-חובה "Invariants" + צ'קליסט פרוטוקול (התבנית הזו).

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

  • קראתי את docs/spec/00-constitution.md + ספ-התחום (X4-agents) לפני הכתיבה
  • השינוי לא יוצר מסלול מקביל (G2) — להפך, מאחד את הניתוב-לספ; לא תיקון-בקריאה (G1)
  • אין בליעה שקטה — ה-hook fail-safe (בלי jq/file_path → exit 0 שקט, לא חוסם עבודה)
  • בדקתי מול gap-audit.md — לא נוגע ב-GAP/FU ממופה (זו תשתית-אכיפה מעל הספ)
  • לא נדרשות בדיקות אוטומטיות; אומת ידנית (למטה)
  • לא data-migration

אימות

1. תיעוד:   grep docs/spec/constitution/§פרוטוקול ב-CLAUDE.md → 10 hits + הסעיף בשורה 67 ✅
2. settings: jq empty .claude/settings.json + settings.local.json → שניהם valid (permissions נשמרו) ✅
3. hook:     web/app.py → מזריק additionalContext תקין · dedup בסשן · docs/.md/Bash → שקט (5/5) ✅
4. PR tmpl:  .gitea/PULL_REQUEST_TEMPLATE.md עם סעיף Invariants ✅
5. SCRIPTS:  scripts/SCRIPTS.md מתעד spec-guard.sh ✅
6. רגרסיה:   HEARTBEAT.md §"קריאת-ספ" ללא שינוי — INV-AG1 על הסוכנים שלם ✅

AGENTS.md: לא נכלל — תקן חוצה-כלים; chaim עובד ב-Claude Code, לכן CLAUDE.md הוא הקובץ הנכון. נשקול אם ייכנס Cursor/Codex.

🤖 Generated with Claude Code

## מה ולמה הספ הפורמלי (`docs/spec/`, חוקה + G1–G11) שהוקם בשבוע 30.5–3.6 חובר ל**סוכני Paperclip** דרך INV-AG1 (HEARTBEAT.md §"קריאת-ספ" + קבצי-סוכן) — אבל **לא** למסלול שבו רוב הקוד נכתב בפועל: **הסשן האינטראקטיבי של Claude Code (chaim + Claude)**. אומת: `legal-ai/CLAUDE.md` הכיל אפס הפניות ל-`docs/spec/`, ולא היה hook אוכף. PR זה סוגר את הפער **לפני מחזור-2** (FU-9..15), שהוא כולו כתיבת-קוד — אחרת נחזור לכשל-השורש שהספ בא לייבש (מסלולים מקבילים מתפצלים, G2). ## Invariants — הצהרה - **מקיים:** **INV-AG1** (קריאת-ספ לפני פעולה) — מרחיב אותו מסוכני-Paperclip גם למסלול האינטראקטיבי. תומך עקיפה של **G2** (אין מסלול מקביל) / **G1** / כלל-הנדסה §6 ע"י ניתוב כל כתיבת-קוד דרך הספ. מסמכים בלבד + hook + תבנית — **אין שינוי קוד-מוצר**, אין נגיעה ב-GAP/FU קיים. ## שלוש שכבות אכיפה (החלטת היו"ר: ההדוקה ביותר) 1. **תיעוד** — `CLAUDE.md` §"פרוטוקול כתיבת-קוד — קודם הספ" + 3 שורות `docs/spec/` בטבלת-הייחוס (חסרו לגמרי). 2. **hook** — `scripts/spec-guard.sh` (PreToolUse על `Edit|Write|MultiEdit`, רשום ב-`.claude/settings.json`). מזריק תזכורת `additionalContext` בכל נגיעה בקובץ-קוד (`web/`, `mcp-server/`, `web-ui/src/`, `scripts/`, `adapters/`). non-blocking, dedup פעם-בסשן, מחריג `.md`/`docs/`/`tests/`/artifacts. 3. **PR** — `.gitea/PULL_REQUEST_TEMPLATE.md` עם סעיף-חובה "Invariants" + צ'קליסט פרוטוקול (התבנית הזו). ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי את `docs/spec/00-constitution.md` + ספ-התחום (X4-agents) לפני הכתיבה - [x] השינוי **לא** יוצר מסלול מקביל (G2) — להפך, מאחד את הניתוב-לספ; לא תיקון-בקריאה (G1) - [x] אין בליעה שקטה — ה-hook fail-safe (בלי jq/file_path → exit 0 שקט, לא חוסם עבודה) - [x] בדקתי מול `gap-audit.md` — לא נוגע ב-GAP/FU ממופה (זו תשתית-אכיפה מעל הספ) - [x] לא נדרשות בדיקות אוטומטיות; אומת ידנית (למטה) - [x] לא data-migration ## אימות ``` 1. תיעוד: grep docs/spec/constitution/§פרוטוקול ב-CLAUDE.md → 10 hits + הסעיף בשורה 67 ✅ 2. settings: jq empty .claude/settings.json + settings.local.json → שניהם valid (permissions נשמרו) ✅ 3. hook: web/app.py → מזריק additionalContext תקין · dedup בסשן · docs/.md/Bash → שקט (5/5) ✅ 4. PR tmpl: .gitea/PULL_REQUEST_TEMPLATE.md עם סעיף Invariants ✅ 5. SCRIPTS: scripts/SCRIPTS.md מתעד spec-guard.sh ✅ 6. רגרסיה: HEARTBEAT.md §"קריאת-ספ" ללא שינוי — INV-AG1 על הסוכנים שלם ✅ ``` > **AGENTS.md:** לא נכלל — תקן חוצה-כלים; chaim עובד ב-Claude Code, לכן `CLAUDE.md` הוא הקובץ הנכון. נשקול אם ייכנס Cursor/Codex. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-06 13:29:18 +00:00
הספ (docs/spec/, G1–G11) חובר לסוכני Paperclip דרך INV-AG1 אבל לא למסלול
שבו רוב הקוד נכתב בפועל — הסשן האינטראקטיבי של Claude Code. סוגר את הפער
לפני מחזור-2 (FU-9..15), שהוא כולו כתיבת-קוד.

שלוש שכבות אכיפה:
1. תיעוד — CLAUDE.md §"פרוטוקול כתיבת-קוד" + docs/spec בטבלת-הייחוס
2. hook — scripts/spec-guard.sh (PreToolUse על Edit/Write/MultiEdit, רשום
   ב-.claude/settings.json) מזכיר פעם-בסשן בכל נגיעה בקובץ-קוד; non-blocking
3. PR — .gitea/PULL_REQUEST_TEMPLATE.md עם סעיף-חובה "Invariants"

המקבילה האינטראקטיבית ל-INV-AG1 שכבר אוכף על הסוכנים (HEARTBEAT §"קריאת-ספ").

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit fdeed8a045 into main 2026-06-06 13:29:30 +00:00
chaim deleted branch feat/spec-enforcement-interactive 2026-06-06 13:29:31 +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#59