fix(security+agents): GAP-57 fail-loud PAPERCLIP_DB_URL + FU-13 analyst tool alignment #61

Merged
chaim merged 1 commits from fix/gap57-creds-fu13-analyst-tools into main 2026-06-06 14:21:59 +00:00
Owner

מה ולמה

שני פריטים ממחזור-2, בטוחים להרצה במקביל לחילוץ פעיל (החילוץ רץ מקומית, ה-PR נוגע בקוד הקונטיינר + spec).

Invariants — הצהרה

  • GAP-57 / INV-ENV4 (G9, §6) — סוד לא חי כברירת-מחדל בקוד; היעדרו נכשל בקול (CWE-798).
  • FU-13 / INV-AG3 (G10, G2) — מפת-הרשאות-סוכן תואמת את ההוראות — לא חסר ולא עודף.

GAP-57 — אבטחה (fail-loud creds)

ה-default הקשיח postgresql://paperclip:paperclip@127.0.0.1:54329/paperclip הוסר מ-3 קבצי web/:

  • web/paperclip_api.py — נוסף require_paperclip_db_url() (resolver משותף, נכשל בקול; תואם את הדפוס הקיים של _build_headers על PAPERCLIP_BOARD_API_KEY).
  • web/paperclip_client.py + web/app.py (2 מופעים) — משתמשים בו במקום ה-default.

בטיחות ייצור: אומת ש-PAPERCLIP_DB_URL מוגדר ב-Coolify (is_runtime: true) — הקונטיינר יעלה כרגיל; misconfig עתידי ייכשל בקול במקום להתחבר ל-creds ידועים.

מחוץ לסקופ GAP-57: 2 מופעים בסקריפטים מקומיים (sync_agents_across_companies.py, sync_missing_agent_skills.py) — נשארים ל-FU-15 המלא (env/secrets + סביבה מקומית הוליסטית).

FU-13 — יישור הרשאות-סוכן (הכרעת "היבריד")

התברר שהפער שמופה ב-31.5 היה רחב מדי — יוחס לפי תיאור-תפקיד, לא לפי ההוראות בפועל:

  • legal-researcher — כבר מחזיק את כל הכלים (extract_references, precedent_extract_*). ה-spec היה מיושן.
  • legal-analyst — נוסף aggregate_claims_to_arguments (frontmatter + שלב 7 ב"שלב 1") — הכלי שמקבץ את הטענות שהוא עצמו חילץ לטיעונים משפטיים. קלט לבלוק ז/י.
  • extract_references / extract_internal_citationsמטלת-מחקר, שייכים ל-researcher, לא ל-analyst (שמאמת פסיקה דרך חיפוש). הוסרו מ"החסרים" (INV-AG3 "לא עודף").

עודכנו docs/spec/X4-agents.md (§2א, INV-AG3) ו-docs/spec/gap-audit.md (FU-13 , GAP-57 חלקי ב-FU-15).

הערה — אכיפת runtime: ה-frontmatter tools: הוא מפת-ההרשאה המוצהרת. כלי-ה-MCP נחשפים ע"י ה-MCP server לכל סוכן מחובר, כך שהפער היה הצהרתי (INV-AG3) ולא תפקודי — אין צורך ב-sync_agents_across_companies.py.

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

  • קראתי 00-constitution.md + ספ-תחום (X10 INV-ENV4, X4 INV-AG3) לפני הכתיבה
  • אין מסלול מקביל (G2) — resolver יחיד משותף; אין תיקון-בקריאה (G1)
  • אין בליעה שקטה — fail-loud מפורש (§6)
  • בדקתי מול gap-audit — מתאים ל-GAP-57/GAP-46, עדכנתי סטטוס
  • py_compile עבר על 3 קבצי web/; frontmatter YAML תקין

אימות

- py_compile: web/paperclip_api.py, paperclip_client.py, app.py → ✅
- grep "paperclip:paperclip" web/ → ∅ (אין יותר creds קשיחים)
- Coolify env PAPERCLIP_DB_URL → קיים (is_runtime)
- analyst frontmatter: aggregate_claims_to_arguments ✅ + שלב 7 ✅
- researcher: ללא שינוי (כבר תקין)
- diff נקי: 6 קבצים, אפס שינויים זרים

⚠️ מיזוג מפעיל deploy אוטומטי (push→main, נוגע ב-web/) — restart לקונטיינר ~2-4 דק'. החילוץ המקומי לא מושפע; ה-DB חיצוני.

🤖 Generated with Claude Code

## מה ולמה שני פריטים ממחזור-2, בטוחים להרצה במקביל לחילוץ פעיל (החילוץ רץ מקומית, ה-PR נוגע בקוד הקונטיינר + spec). ## Invariants — הצהרה - **GAP-57 / INV-ENV4 (G9, §6)** — סוד לא חי כברירת-מחדל בקוד; היעדרו נכשל בקול (CWE-798). - **FU-13 / INV-AG3 (G10, G2)** — מפת-הרשאות-סוכן תואמת את ההוראות — לא חסר ולא עודף. ## GAP-57 — אבטחה (fail-loud creds) ה-default הקשיח `postgresql://paperclip:paperclip@127.0.0.1:54329/paperclip` הוסר מ-3 קבצי `web/`: - `web/paperclip_api.py` — נוסף `require_paperclip_db_url()` (resolver משותף, נכשל בקול; תואם את הדפוס הקיים של `_build_headers` על `PAPERCLIP_BOARD_API_KEY`). - `web/paperclip_client.py` + `web/app.py` (2 מופעים) — משתמשים בו במקום ה-default. **בטיחות ייצור:** אומת ש-`PAPERCLIP_DB_URL` מוגדר ב-Coolify (`is_runtime: true`) — הקונטיינר יעלה כרגיל; misconfig עתידי ייכשל בקול במקום להתחבר ל-creds ידועים. **מחוץ לסקופ GAP-57:** 2 מופעים בסקריפטים מקומיים (`sync_agents_across_companies.py`, `sync_missing_agent_skills.py`) — נשארים ל-FU-15 המלא (env/secrets + סביבה מקומית הוליסטית). ## FU-13 — יישור הרשאות-סוכן (הכרעת "היבריד") התברר שהפער שמופה ב-31.5 היה רחב מדי — יוחס לפי *תיאור-תפקיד*, לא לפי ההוראות בפועל: - **legal-researcher** — כבר מחזיק את כל הכלים (`extract_references`, `precedent_extract_*`). ה-spec היה **מיושן**. ✅ - **legal-analyst** — נוסף `aggregate_claims_to_arguments` (frontmatter + שלב 7 ב"שלב 1") — הכלי שמקבץ את הטענות שהוא עצמו חילץ לטיעונים משפטיים. קלט לבלוק ז/י. - `extract_references` / `extract_internal_citations` — **מטלת-מחקר**, שייכים ל-researcher, **לא** ל-analyst (שמאמת פסיקה דרך חיפוש). הוסרו מ"החסרים" (INV-AG3 "לא עודף"). עודכנו `docs/spec/X4-agents.md` (§2א, INV-AG3) ו-`docs/spec/gap-audit.md` (FU-13 ✅, GAP-57 חלקי ב-FU-15). > **הערה — אכיפת runtime:** ה-frontmatter `tools:` הוא מפת-ההרשאה המוצהרת. כלי-ה-MCP נחשפים ע"י ה-MCP server לכל סוכן מחובר, כך שהפער היה **הצהרתי** (INV-AG3) ולא תפקודי — אין צורך ב-`sync_agents_across_companies.py`. ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי `00-constitution.md` + ספ-תחום (X10 INV-ENV4, X4 INV-AG3) לפני הכתיבה - [x] אין מסלול מקביל (G2) — resolver יחיד משותף; אין תיקון-בקריאה (G1) - [x] אין בליעה שקטה — fail-loud מפורש (§6) - [x] בדקתי מול gap-audit — מתאים ל-GAP-57/GAP-46, עדכנתי סטטוס - [x] py_compile עבר על 3 קבצי web/; frontmatter YAML תקין ## אימות ``` - py_compile: web/paperclip_api.py, paperclip_client.py, app.py → ✅ - grep "paperclip:paperclip" web/ → ∅ (אין יותר creds קשיחים) - Coolify env PAPERCLIP_DB_URL → קיים (is_runtime) - analyst frontmatter: aggregate_claims_to_arguments ✅ + שלב 7 ✅ - researcher: ללא שינוי (כבר תקין) - diff נקי: 6 קבצים, אפס שינויים זרים ``` ⚠️ **מיזוג מפעיל deploy אוטומטי** (push→main, נוגע ב-web/) — restart לקונטיינר ~2-4 דק'. החילוץ המקומי לא מושפע; ה-DB חיצוני. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-06 14:15:53 +00:00
GAP-57 (אבטחה, CWE-798 / INV-ENV4): ה-default הקשיח
postgresql://paperclip:paperclip@... הוסר מ-3 קבצי web/. נוסף resolver משותף
require_paperclip_db_url() ב-paperclip_api.py שנכשל בקול אם PAPERCLIP_DB_URL לא
מוגדר — במקום ליפול בשקט ל-creds ידועים. Coolify מגדיר את המשתנה (אומת), אז
הייצור לא נפגע. (2 מופעים בסקריפטים מקומיים נותרו ל-FU-15 המלא.)

FU-13 (INV-AG3, GAP-46): יישור הרשאות-סוכן. התברר שהפער שמופה ב-31.5 היה רחב
מדי — יוחס לפי תיאור-תפקיד, לא ההוראות בפועל. הכרעת-יו"ר "היבריד":
- legal-analyst: נוסף aggregate_claims_to_arguments (frontmatter + שלב 7) — הכלי
  שמקבץ את הטענות שהוא חילץ לטיעונים משפטיים.
- extract_references/extract_internal_citations הם מטלת-researcher (שכבר מחזיק
  אותם), לא analyst — הוסרו מרשימת "החסרים".
- legal-researcher: כבר היה תקין; ה-spec היה מיושן.
עודכנו X4-agents.md (§2א, INV-AG3) ו-gap-audit.md (FU-13 , FU-15 חלקי).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 67a3d9a9b0 into main 2026-06-06 14:21:59 +00:00
chaim deleted branch fix/gap57-creds-fu13-analyst-tools 2026-06-06 14:21:59 +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#61