feat(ops): מעבר-אדפטר בטוח לכל סוכן ← כל אדפטר (any→any) — סוגר FU-8a #247

Merged
chaim merged 1 commits from worktree-adapter-migrate into main 2026-06-13 11:36:56 +00:00
Owner

הקשר

נגמרו טוקני-Claude ונעשה ניסיון להעביר את ה-CEO מ-claude_local ל-gemini_local דרך
ה-dropdown הגולמי — הסוכן קרס מיד. שורש-הכשל אומת על-פני שלושה צירים:

  1. העברת-הוראותgemini_local/deepseek_local מדביקים את תוכן קובץ-ההוראות כ-arg
    (gemini --prompt, hermes chat -q); ערך שמתחיל ב---- (כל קבצי-claude שלנו) נקרא כדגל →
    Not enough arguments following: prompt → קריסה תוך ~2ש'. claude_local מעביר נתיב-קובץ ולכן חסין.
  2. מודל↔provideradapter_config.model חייב להתאים למשפחת-האדפטר (claude-/gemini-/deepseek-).
  3. כלים~/.gemini/settings.json excludeTools הוא גלובלי לכל סוכני-gemini ומסיר כלי-כתיבה (case_update...).

בנוסף, שינוי חברה-אחת מפר INV-MC1 (הסנכרון מדלג על adapter mismatch → drift שקט).

מה ה-PR עושה

מנגנון data-driven אחד שמעביר כל סוכן ← כל אדפטר, בשתי החברות יחד, הפיך, עם שער-preflight
שמסרב מעבר לא-בטוח (סוגר את פער FU-8a — "אין שער-ולידציה למעבר-אדפטר").

  • scripts/adapter_profiles.py — רישום-פרופילי-אדפטר (מקור-אמת יחיד ל-3 הצירים; אדפטר חדש = רשומה אחת).
  • scripts/migrate_agent_adapter.py — מנוע --check/--apply/--revert/--verify:
    • גורס frontmatter לעותק נגזר .claude/agents/.generated/<name>.nofm.md ל-content_arg adapters (הקנוני נשאר עם --- ל-claude — G2, בלי כפילות-ידנית).
    • --relax-tools משחרר את ה-conflict מ-excludeTools הגלובלי, עם שחזור-מדויק.
    • snapshot ל-data/adapter-migration-state.json--revert מחזיר למצב-המקור המדויק (כולל ה-empty-model של ה-mirror).
    • PATCH דרך /api/agents/{id} (שימוש-חוזר ב-call_patch מ-sync_agents_across_companies.py) — לא DB.
  • .gitignore + scripts/SCRIPTS.md.

בדיקות

  • --verify → 9 סוכנים תקינים (כולל אימות ש-gemini-critique/hermes לא פותחים ב---).
  • --check CEO→gemini → מציג nofm-path + model + tool-conflict (case_update, extract_appraiser_facts); provider-guard תופס מודל לא-תואם (exit≠0).
  • בדיקות-לוגיקה טהורות: strip-frontmatter (פותח ב-#, חסין-flag), canonical↔nofm, recompute של excludeTools.
  • טרם נבדק חי (apply→revert על סוכן): דורש PAPERCLIP_BOARD_API_KEY ומוטציה על הפלטפורמה החיה.

Invariants

  • G2 — רישום + קובץ-הוראות-קנוני יחיד; גרסת-gemini נגזרת, לא מסלול-כפול.
  • G12 — מגע-Paperclip דרך PATCH-API (המעטפת), לא DB ישיר; כלי שכבת-SHELL כמו ה-sync הקיים.
  • INV-MC1 — שתי החברות מועברות יחד; --verify מסמן א-סימטריה.
  • סוגר FU-8a.

🤖 Generated with Claude Code

## הקשר נגמרו טוקני-Claude ונעשה ניסיון להעביר את ה-CEO מ-`claude_local` ל-`gemini_local` דרך ה-dropdown הגולמי — הסוכן **קרס מיד**. שורש-הכשל אומת על-פני שלושה צירים: 1. **העברת-הוראות** — `gemini_local`/`deepseek_local` מדביקים את **תוכן** קובץ-ההוראות כ-arg (`gemini --prompt`, `hermes chat -q`); ערך שמתחיל ב-`---` (כל קבצי-claude שלנו) נקרא כדגל → `Not enough arguments following: prompt` → קריסה תוך ~2ש'. `claude_local` מעביר **נתיב-קובץ** ולכן חסין. 2. **מודל↔provider** — `adapter_config.model` חייב להתאים למשפחת-האדפטר (claude-/gemini-/deepseek-). 3. **כלים** — `~/.gemini/settings.json` `excludeTools` הוא **גלובלי** לכל סוכני-gemini ומסיר כלי-כתיבה (`case_update`...). בנוסף, שינוי חברה-אחת מפר **INV-MC1** (הסנכרון מדלג על adapter mismatch → drift שקט). ## מה ה-PR עושה מנגנון data-driven אחד שמעביר **כל סוכן ← כל אדפטר**, **בשתי החברות יחד**, הפיך, עם שער-preflight שמסרב מעבר לא-בטוח (סוגר את פער **FU-8a** — "אין שער-ולידציה למעבר-אדפטר"). - **`scripts/adapter_profiles.py`** — רישום-פרופילי-אדפטר (מקור-אמת יחיד ל-3 הצירים; אדפטר חדש = רשומה אחת). - **`scripts/migrate_agent_adapter.py`** — מנוע `--check`/`--apply`/`--revert`/`--verify`: - גורס frontmatter לעותק נגזר `.claude/agents/.generated/<name>.nofm.md` ל-content_arg adapters (הקנוני נשאר עם `---` ל-claude — G2, בלי כפילות-ידנית). - `--relax-tools` משחרר את ה-conflict מ-excludeTools הגלובלי, עם שחזור-מדויק. - snapshot ל-`data/adapter-migration-state.json` → `--revert` מחזיר למצב-המקור המדויק (כולל ה-empty-model של ה-mirror). - PATCH דרך `/api/agents/{id}` (שימוש-חוזר ב-`call_patch` מ-`sync_agents_across_companies.py`) — **לא** DB. - **`.gitignore`** + **`scripts/SCRIPTS.md`**. ## בדיקות - `--verify` → 9 סוכנים תקינים (כולל אימות ש-gemini-critique/hermes לא פותחים ב-`--`). - `--check` CEO→gemini → מציג nofm-path + model + tool-conflict (case_update, extract_appraiser_facts); provider-guard תופס מודל לא-תואם (exit≠0). - בדיקות-לוגיקה טהורות: strip-frontmatter (פותח ב-`#`, חסין-flag), canonical↔nofm, recompute של excludeTools. - **טרם נבדק חי** (apply→revert על סוכן): דורש `PAPERCLIP_BOARD_API_KEY` ומוטציה על הפלטפורמה החיה. ## Invariants - **G2** — רישום + קובץ-הוראות-קנוני יחיד; גרסת-gemini נגזרת, לא מסלול-כפול. - **G12** — מגע-Paperclip דרך PATCH-API (המעטפת), לא DB ישיר; כלי שכבת-SHELL כמו ה-sync הקיים. - **INV-MC1** — שתי החברות מועברות יחד; `--verify` מסמן א-סימטריה. - סוגר **FU-8a**. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-13 11:28:54 +00:00
הקשר: החלפת adapter_type ב-dropdown הגולמי של Paperclip מקריסה את הסוכן מיד —
content_arg adapters (gemini_local/deepseek_local) שוברים את ה-frontmatter המוביל `---`
(yargs/arg-parser קורא אותו כדגל → "Not enough arguments following: prompt"), המודל
חייב להתאים ל-provider, ו-excludeTools של gemini גלובלי לכל הסוכנים. בנוסף — שינוי
חברה-אחת מפר את INV-MC1 (סנכרון מדלג על adapter mismatch → drift שקט).

הכלי מיישב את 3 צירי-הכשל data-driven, מעביר בשתי החברות יחד, הפיך מדויק, ומסרב
מעבר לא-בטוח ב-preflight (סוגר את פער FU-8a "אין שער-ולידציה למעבר-אדפטר").

- scripts/adapter_profiles.py — רישום-פרופילי-אדפטר (מקור-אמת יחיד; אדפטר חדש = רשומה אחת)
- scripts/migrate_agent_adapter.py — --check/--apply/--revert/--verify; frontmatter→.nofm.md
  נגזר, sidecar לשחזור, --relax-tools ל-excludeTools, PATCH דרך /api/agents/{id} (לא DB)
- .gitignore + scripts/SCRIPTS.md

נבדק: --verify (9 סוכנים תקינים), --check (CEO→gemini מציג nofm+model+tool-conflict;
provider-guard תופס מודל לא-תואם, exit≠0), ובדיקות-לוגיקה טהורות (strip/canonical/recompute).

Invariants: מקיים G2 (רישום+קובץ-קנוני יחיד, גרסת-gemini נגזרת), G12 (PATCH-API דרך
המעטפת, לא DB), INV-MC1 (שתי חברות יחד). סוגר FU-8a.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chaim merged commit b9e4c1fde4 into main 2026-06-13 11:36:56 +00:00
chaim deleted branch worktree-adapter-migrate 2026-06-13 11:36:57 +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#247