- עדכון טבלת מצב: כל המודלים מסונכרנים (instructions = DB) - החלפת טבלת בעיות בטבלת סטטוס תיקונים עם commit references - הוסף טבלת שינויים נוספים מהסשן - הערה: Skills CMPA=6 עיצוב מכוון, verify מאשר "0 need sync" Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
22 KiB
דו"ח Audit סוכנים — 2026-05-17
נוצר על-ידי 7 sub-agents מקבילים שחקרו כל סוכן בנפרד.
כיסוי: קבצי הנחיות, תצורת DB, skills, MCP tools, freshness, drift CMP↔CMPA.עדכון 2026-05-17: כל 12 הבעיות טופלו באותו יום. ראה סעיף "סטטוס תיקונים" למטה.
סיכום מנהלים
טבלת מצב כללית — לאחר תיקונים (2026-05-17)
| סוכן | מודל (instructions = DB) | Skills CMP | Skills CMPA | סטטוס |
|---|---|---|---|---|
| עוזר משפטי (CEO) | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| מנתח משפטי | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| חוקר תקדימים | claude-sonnet-4-6 ✅ | 9 | 6 | ✅ תקין |
| כותב החלטה | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| בודק איכות (QA) | claude-sonnet-4-6 ✅ | 9 | 6 | ✅ תקין |
| מייצא טיוטה | claude-sonnet-4-6 ✅ | 9 | 6 | ✅ תקין |
| מגיה מסמכים | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| מנהל ידע (Curator) | deepseek-v4-pro ✅ | 9 | 6 | ✅ תקין |
Skills CMPA=6 הוא עיצוב מכוון (6 shared-only skills). verify script מאשר "0 agents need sync".
סטטוס תיקונים — כל 12 הבעיות טופלו
| # | חומרה | סוכן | בעיה | סטטוס | commit |
|---|---|---|---|---|---|
| 1 | 🔴 | מייצא | טיוטה-V → טיוטה-v — דורס גרסאות |
✅ תוקן | a584dc3 |
| 2 | 🔴 | מייצא | case.status לא מעודכן ל-exported + case_update חסר מ-tools |
✅ תוקן | a584dc3 |
| 3 | 🔴 | חוקר | §ז (query log) חסר בתיק 8174-24 | ✅ תוקן | data (gitignored) |
| 4 | 🟠 | כולם | Skills asymmetry CMPA | ✅ לא נדרש — verify: "0 need sync" (עיצוב מכוון) | — |
| 5 | 🟠 | חוקר | search_internal_decisions לא מתועד |
✅ תוקן — tool + סעיף 2ב.2א | 35423ea |
| 6 | 🟠 | מייצא | נתיב legal-docx hardcoded ל-CMP UUID | ✅ תוקן → $PAPERCLIP_COMPANY_ID |
a584dc3 |
| 7 | 🟠 | CEO | Project ID + company UUID hardcoded | ✅ תוקן → דינמי מ-$PAPERCLIP_TASK_ID | 35423ea |
| 8 | 🟡 | רוב | Model drift instructions↔DB | ✅ תוקן + שודרג ל-opus-4-7 | 1608ea5, c3ce0e7 |
| 9 | 🟡 | QA | corpus_queries_logged: ידני או אוטומטי? | ✅ תוקן — הבהרה מפורשת: grep ידני | 1608ea5 |
| 10 | 🟡 | CEO | maxConcurrentRuns=NULL | ✅ לא נדרש — DB כבר maxConcurrentRuns=2 | — |
| 11 | 🟡 | מגיה | {issue-id} placeholder בקוד | ✅ תוקן → $PAPERCLIP_TASK_ID |
1608ea5 |
| 12 | 🟢 | מנהל ידע | ownership הצעות curator לא מוגדר | ✅ תוקן — הוסף ל-CLAUDE.md | 1608ea5 |
שינויים נוספים שבוצעו באותו סשן
| שינוי | קובץ | commit |
|---|---|---|
| weekly-feedback-job: כתיבה לקובץ בלבד, לא Paperclip comment | legal-ceo.md | ea0532b |
| try-catch על agents.invoke בפידבק שבועי | worker.ts | 73e37df |
| try-catch על http.fetch ב-stale-case-reminder | worker.ts | 73e37df |
| HEARTBEAT.md reference בראש legal-researcher.md | legal-researcher.md | 1608ea5 |
| search_internal_decisions הוסף ל-legal-researcher tools | legal-researcher.md | 35423ea |
| opus-4-6 → opus-4-7 ב-DB: CEO, מנתח, כותב, מגיה (16 סוכנים) | DB | c3ce0e7 |
ממצאים לפי סוכן
1. עוזר משפטי (CEO)
קובץ: .claude/agents/legal-ceo.md — 796 שורות, עודכן 2026-05-17
תצורה:
| חברה | ID | Model | Budget |
|---|---|---|---|
| CMP | 752cebdd-6748-4a04-aacd-c7ab0294ef33 |
claude-opus-4-6 | 1500¢ |
| CMPA | cdbfa8bc-3d61-41a4-a2e7-677ec7d34562 |
claude-opus-4-6 | 1500¢ |
routing conditions: user_commented, agent_completion, precedent_extraction_*, weekly-feedback-job, fallback→heartbeat רגיל
MCP tools מוזכרים (41): case_get/list/update, document_list, get_claims, get_chair_directions, record/list_chair_feedback, approve_direction, brainstorm_directions, search_case_documents, search_precedent_library, workflow_status, processing_status, get_metrics, validate_decision, set_outcome, export_docx, apply_user_edit, list_bookmarks, revise_draft, precedent_process_pending, extract_halachot/metadata, library_get/list, halacha_review, halachot_pending, extract_appraiser_facts, write_interim_draft, export_interim_draft
✅ תקין:
- Routing logic מלא ועדכני (כולל weekly-feedback-job שתוקן לאחרונה)
- Company filtering ברור (טבלה עם UUIDs וטווחי תיקים)
- Wakeup דרך API בלבד (לא DB ישיר) — מוגדר במפורש
- HEARTBEAT.md references נכונים (§0, §1, §1.7)
- weekly-feedback-job: כתיבה לקובץ בלבד, ללא issueId — נכון
⚠️ בעיות:
- 🟠 Model drift: instructions = claude-sonnet-4-6, DB = claude-opus-4-6
- 🟠 Hardcoded Project ID:
25c1b4a1-2c0e-4a2d-9938-8ae56ccda6f1(תיק 1130-25) — צריך להיות דינמי - 🟡 maxConcurrentRuns = NULL ב-DB (שאר הסוכנים = 1)
- 🟡 MCP startup race: הוראות מדברות על sleep+retry אבל לא כ-code אוטומטי
2. מנתח משפטי
קובץ: .claude/agents/legal-analyst.md — 498 שורות, עודכן 2026-05-04
תצורה:
| חברה | ID | Model | Budget |
|---|---|---|---|
| CMP | c26e9439-a88a-49dc-9e67-2262c95db65c |
claude-opus-4-6 | 1500¢ |
| CMPA | f70fd353-... |
claude-opus-4-6 | 1500¢ |
MCP tools (18): case_get/list/update, document_list/get_text, extract_claims, extract_appraiser_facts, get_claims, search_case_documents, search_decisions, search_precedent_library, precedent_library_get/list, halacha_review, halachot_pending, find_similar_cases, workflow_status, processing_status
Output artifacts: {case_dir}/documents/research/analysis-and-research.md
Query logging (§5ד/§7א): לרשום כל search_precedent_library, search_decisions, find_similar_cases כולל ניסיונות עם 0 תוצאות
✅ תקין:
- כל 18 כלי MCP מוזכרים ומיושמים
- סיווג claim_type ברור (claim/response/reply)
- Wakeup CEO בפורמט נכון
- reference files קיימים
⚠️ בעיות:
- 🟠 Model drift: instructions = claude-opus-4-7, DB = claude-opus-4-6
- 🟡 CMPA sync gap: עדכון אחרון CMPA = 2026-05-04 (13 ימים לפני CMP)
3. חוקר תקדימים
קובץ: .claude/agents/legal-researcher.md — 240 שורות, עודכן 2026-05-04
תצורה:
| חברה | ID | Model | Budget |
|---|---|---|---|
| CMP | 35022af0-0498-4c3d-90ca-b0ab9e987198 |
claude-sonnet-4-6 | 1500¢ |
| CMPA | 5dd06843-... |
claude-sonnet-4-6 | 1500¢ |
MCP tools (29): case_get/update, document_list/get_text, search_case_documents, search_decisions, find_similar_cases, extract_references, precedent_attach, precedent_list, precedent_search_library, search_precedent_library, library_get/list, extract_halachot/metadata, precedent_process_pending, halacha_review, halachot_pending, workflow_status
Output artifact: {case_dir}/documents/research/precedent-research.md
Query logging (§ז): חובה — כל query עם פילטרים, תוצאות, בחירה/דחייה, negative evidence
✅ תקין:
- שלושת הקורפוסים מוגדרים בבירור (פסיקה חיצונית / קאנון דפנה / ציטוטים ידניים)
- precedent_attach עם הוראות מלאות
- Wakeup CEO דינמי לפי חברה
⚠️ בעיות:
- 🔴 §ז חסר בתיק 8174-24 — 1 מתוך 3 תיקים בדיסק חסר את תיעוד השאילתות. QA אמור לחסום ייצוא.
- 🟠
search_internal_decisionsלא מתועד — הכלי ב-header אבל לא מוסבר בגוף ההנחיות. מתי להשתמש בו? - 🟠 Skills asymmetry CMPA — CMPA חסרה: legal-assistant, legal-decision, legal-docx, diagnose-why-work-stopped, appendix-expert-intern, terminal-bench-loop
- 🟡
daphna-precedent-network.mdעדכון אחרון 27 אפריל — עשוי להיות לפני תקדימים חדשים - 🟡 HEARTBEAT.md לא מוזכר בפירוש — אין link ישיר בתחילת ההנחיות
4. כותב החלטה
קובץ: .claude/agents/legal-writer.md — 410 שורות, עודכן 2026-05-04
תצורה:
| חברה | ID | Model | Budget |
|---|---|---|---|
| CMP | 7ed8686f-24bc-49a3-bc02-67ca15b895a9 |
claude-opus-4-6 | 1500¢ |
| CMPA | 99289cb1-... |
claude-opus-4-6 | 1500¢ |
Block range: ה-יא (5-11), כותב בסדר; א-ד (אוטומטי), יב (אוטומטי)
5 style docs לפני בלוק י (כולם קיימים):
docs/daphna-voice-fingerprint.md✅ (עודכן 10 מאי)docs/daphna-precedent-network.md✅ (עודכן 27 אפריל)docs/daphna-architecture-by-outcome.md✅ (עודכן 28 אפריל)docs/daphna-acceptance-architecture.md✅ (עודכן 28 אפריל)docs/voice-1130-25.md✅ (עודכן 26 אפריל)
MCP tools (18): case_get/update, document_list/get_text, get_claims, get_chair_directions, get_decision_template, get_block_context, save_block_content, write_block, search_decisions, search_precedent_library, library_get/list, search_case_documents, get_style_guide, halacha_review, workflow_status, apply_user_edit
✅ תקין:
- 4 statuses של get_chair_directions מוגדרים (missing/empty/partial/complete)
- Revision mode ברור (לא לשמור ב-DB בעריכה)
- 10 anti-patterns ברורים
- Company filtering נכון (CEO IDs שונים לפי חברה)
⚠️ בעיות:
- 🟠 Model drift: instructions = claude-opus-4-7, DB = claude-opus-4-6
- 🟡 חסר שלב 0 מפורש: בדיקת
issue.description(ההוראה הראשית מה-CEO)
5. בודק איכות (QA)
קובץ: .claude/agents/legal-qa.md — 219 שורות, עודכן 2026-05-04
תצורה:
| חברה | ID | Model | Budget |
|---|---|---|---|
| CMP | 1a5b229e-9220-4b13-940c-f8eb7285fc29 |
claude-sonnet-4-6 | 1500¢ |
| CMPA | 7191ff77-... |
claude-sonnet-4-6 | 1500¢ |
9 בדיקות (לא 8 — §7א הוא נפרד):
- שלמות מבנית — critical
- רקע ניטרלי — critical
- כיסוי טענות — critical
- משקלות — warning
- ללא כפילות — warning
- מספור רציף — warning 7א. שאילתות קורפוס (corpus_queries_logged) — critical blocker
- תאימות מתודולוגיה — critical
- קול דפנה — critical
Reference files (כולם קיימים):
docs/daphna-decision-tree.md✅ (521 שורות)docs/daphna-voice-fingerprint.md✅ (471 שורות)docs/daphna-architecture-by-outcome.md✅ (381 שורות)docs/daphna-acceptance-architecture.md✅ (640 שורות)docs/daphna-block-zayin-claims.md✅ (385 שורות)docs/daphna-precedent-network.md✅ (379 שורות)
✅ תקין:
- כל reference files קיימים ונגישים
- Company filtering מתועד (CEO IDs נכונים)
- Decision logic done/blocked מוגדרת
⚠️ בעיות:
- 🟡 בדיקה 7א לא ברורה — אוטומטית (validate_decision) או ידנית (grep בקובצי markdown)?
- 🟡 בדיקה 8 (קול דפנה) סובייקטיבית — חסרות דוגמאות anti-patterns מדידות
- 🟡 get_metrics() — אין ספי קבלה — מה מספר/אחוז שמוגדר כ-pass?
- 🟡 decision tree: אם רק בדיקות 4-6 (warning) נכשלו — done או blocked?
6. מייצא טיוטה (Exporter)
קובץ: .claude/agents/legal-exporter.md — 151 שורות, עודכן 2026-05-04
תצורה:
| חברה | ID | Model | Budget |
|---|---|---|---|
| CMP | d0dc703b-ca83-4883-bca7-c9449e8713cd |
claude-sonnet-4-6 | 1500¢ |
| CMPA | ada99a7d-... |
claude-sonnet-4-6 | 1500¢ |
MCP tools (8): export_docx, apply_user_edit, list_bookmarks, revise_draft, validate_decision, get_claims, get_block_context, workflow_status
✅ תקין:
- Git integration לכל ייצוא/עדכון
- validate_decision לפני export מוגדר
- active_draft detection (עריכה-*.docx) מוגדר
⚠️ בעיות:
- 🔴 Naming mismatch קריטי: הנחיות →
טיוטה-V{N}.docx(V גדולה); קודrevise_draft→טיוטה-v{N}.docx(v קטנה); בדיסק בפועל →טיוטה-v1.docx(v קטנה). הסוכן יחפש V גדולה ולא ימצא — יתחיל מ-v1 בכל הפעלה ויחליף קבצים קיימים! - 🔴 case.status לא מעודכן ל-
exported— אחרי export מצליח, הסטטוס נשארdrafted/reviewed; הסטטוסexportedקיים ב-DB schema ומוחרג מ-stale query - 🟠 legal-docx SKILL.md path hardcoded לCMP UUID — CMPA ייכשל בקריאת ה-SKILL.md
- נכון:
/home/chaim/.paperclip/instances/default/skills/42a7acd0-.../legal-docx/SKILL.md - חסר: דינמי לפי
$PAPERCLIP_COMPANY_ID
- נכון:
- 🟡 Heartbeat grace=60s — אם export DOCX > 60s, שני instances יתעוררו במקביל
- 🟡 File size validation — מוזכר בהנחיות אך לא מיושם בקוד
7. מגיה מסמכים (Proofreader)
קובץ: .claude/agents/legal-proofreader.md — 115 שורות, עודכן 2026-05-04
תצורה:
| חברה | ID | Model | Budget |
|---|---|---|---|
| CMP | 410c0167-27dc-485c-a51b-7aa8b9ff2217 |
claude-opus-4-6 | 1500¢ |
| CMPA | 17839fc6-... |
claude-opus-4-6 | 1500¢ |
OCR workflow — 5 שלבים: זיהוי → תיקון אוטומטי (abbreviations.json) → הגהה חכמה → שמירה → דיווח+סגירה
abbreviations.json: קיים ב-/home/chaim/legal-ai/data/abbreviations.json (2545 bytes, עודכן אפריל)
✅ תקין:
- abbreviations.json קיים
- Wakeup CEO דינמי לפי חברה
- חיוב סגירת issue
⚠️ בעיות:
- 🟠 Model drift: instructions = claude-opus-4-7, DB = claude-opus-4-6
- 🟡 MCP write support לתיקיות: לא אומת שה-tools תומכים בכתיבה ל-
documents/proofread/ - 🟡 Placeholder
{issue-id}בקוד: pc.sh calls משתמשות ב-literal{issue-id}— האם הסוכן מחליף עם$PAPERCLIP_TASK_ID? - 🟡
extraction_status = proofread: האם השדה קיים ב-MCP document schema?
8. מנהל ידע (Hermes Curator)
קובץ: .claude/agents/hermes-curator.md — 147 שורות, עודכן 2026-05-10
תצורה:
| חברה | ID | Adapter | Model | Budget |
|---|---|---|---|---|
| CMP | 60dce831-5c5b-4bae-bda9-5282d506f0dc |
deepseek_local | deepseek-v4-pro | 1500¢ |
| CMPA | d6f7c55d-570a-46b8-8d72-1286d07da0d8 |
deepseek_local | deepseek-v4-pro | 1500¢ |
Profiles: ~/.hermes/profiles/curator-cmp/ ✅ + curator-cmpa/ ✅ (שניהם קיימים)
Trigger: UI "סמן כסופי" → web/paperclip_client.py:pc_wake_curator_for_final() → sub-issue + wakeup
MCP tools (6): case_get, case_get_final_text, document_list, get_style_guide, precedent_library_list, search_internal_decisions, halacha_review
✅ תקין:
- deepseek_local מוגדר נכון בשתי החברות
- Profiles קיימים ועובדים (MEMORY.md מ-06/05 עם 5 ממצאים)
- Read-only design — לא מעדכן קבצים ישירות
- env vars נדרשים מתועדים
⚠️ בעיות:
- 🟢 לא מוגדר: מי מממש הצעות ל-SKILL.md/lessons.md שה-curator מציע ב-comments?
- 🟢 Hermes bias: DeepSeek V4-Pro עלול לפרש תוצאות בצורה סובייקטיבית — אין oversight layer
בעיות חוצות-סוכנים
1. Skills Asymmetry CMP vs CMPA (🟠 גבוה)
Skills ב-CMP (9):
- משותפים (6): paperclip, paperclip-converting-plans-to-tasks, paperclip-create-agent, paperclip-create-plugin, paperclip-dev, para-memory-files
- ייחודיים CMP (3+): legal-assistant, legal-decision, legal-docx, appendix-expert-intern, diagnose-why-work-stopped, terminal-bench-loop
Skills ב-CMPA (6): משותפים בלבד — חסרים כל ה-legal- skills*
השפעה: סוכני CMPA לא יכולים להשתמש ב-legal-decision skill (כתיבה), legal-assistant (ניתוח), legal-docx (DOCX). לא ברור אם זו החלטה מכוונת (CMPA עובד אחרת?) או gap בסנכרון.
פעולה: הרץ sync_agents_across_companies.py --verify עם PAPERCLIP_BOARD_API_KEY לבדיקה.
2. Model Version Drift (🟡 בינוני)
ב-DB כל הסוכנים רצים על claude-opus-4-6 או claude-sonnet-4-6, אבל קבצי הנחיות מציינים גרסאות שונות:
| סוכן | instructions מציין | DB רץ על |
|---|---|---|
| CEO | claude-sonnet-4-6 | claude-opus-4-6 |
| מנתח | claude-opus-4-7 | claude-opus-4-6 |
| כותב | claude-opus-4-7 | claude-opus-4-6 |
| מגיה | claude-opus-4-7 | claude-opus-4-6 |
| חוקר, QA, מייצא | claude-sonnet-4-6 | claude-sonnet-4-6 ✅ |
| מנהל ידע | deepseek-v4-pro | deepseek-v4-pro ✅ |
לא ברור: האם CEO/מנתח/כותב אמורים לרוץ על Opus (בחירה מכוונת לאיכות) ורק קבצי instructions לא עודכנו? או שה-DB צריך להתעדכן?
3. HEARTBEAT.md Reference (🟢 נמוך)
קובץ legal-researcher.md לא מפנה ל-HEARTBEAT.md בפירוש בתחילת הקובץ. שאר הסוכנים כן עושים זאת.
רשימת תיקונים לפי עדיפות
🔴 קריטי — לתקן לפני תיק הבא
-
legal-exporter.md+web/app.py/drafting.py: אחד הדברים:- תיקן הנחיות: שנה
טיוטה-V→טיוטה-v(v קטנה) בכל המקומות - ועוד: הוסף לקובץ הנחיות שלב: "אחרי export מוצלח — עדכן
case.status = 'exported'דרך MCP או API"
- תיקן הנחיות: שנה
-
תיק 8174-24 — §ז חסר: בדוק אם שלב המחקר הושלם. אם לא — הפעל חוקר מחדש לתיק זה.
🟠 גבוה — לתקן בשבוע הקרוב
-
Skills CMPA: הרץ:
PAPERCLIP_BOARD_API_KEY=$(mcp__infisical__get-secret \ --projectId 9a77b161-f70c-4dd3-9d67-b7ab850cef51 \ --environmentSlug nautilus --secretPath /paperclip --secretName BOARD_API_KEY) \ python ~/legal-ai/scripts/sync_agents_across_companies.py --verifyהחלט אם להוסיף legal-* skills ל-CMPA ואם כן — הרץ
--apply. -
legal-researcher.md: הוסף תת-סעיף עם הוראות ל-search_internal_decisions:- מתי להשתמש (החלטות פנימיות דפנה שלא בקורפוס הציבורי)
- מה ההבדל מ-
search_decisions
-
legal-exporter.md— נתיב legal-docx: שנה מ-hardcoded UUID ל-דינמי:אם $PAPERCLIP_COMPANY_ID = 42a7acd0... → CMP path אם $PAPERCLIP_COMPANY_ID = 8639e837... → CMPA path -
legal-ceo.md— Project ID: הסר את ה-hardcoded ID של 1130-25. החלף בהוראה: "השתמש ב-projects_listלקבלת project_id הנכון לפי חברה ולתיק".
🟡 בינוני — לתקן בחודש הקרוב
-
Model documentation: החלט על גרסאות מודל לכל סוכן ועדכן גם הנחיות גם DB. עדיף: שמור הנחיות כ-source of truth ועדכן DB דרך
sync_agents_across_companies.py --apply. -
legal-qa.md— הבהרת corpus_queries_logged: הוסף: "הבדיקה היא קריאתvalidate_decisionעםcheck_corpus_log=true/ או grep ידני בקובץanalysis-and-research.mdלסעיף ז". -
legal-ceo.md— maxConcurrentRuns: עדכן DB ל-maxConcurrentRuns=1 (או 2 אם CEO רוצה מקביליות מכוונת). -
legal-proofreader.md— {issue-id} placeholder: שנה ל-$PAPERCLIP_TASK_IDבאופן מפורש. -
legal-researcher.md— HEARTBEAT.md link: הוסף בשורה 1:> ראה גם: HEARTBEAT.md לחוקים הכלליים.
🟢 נמוך — future improvement
- מנהל ידע — ownership: הוסף ל-CLAUDE.md הנחיה: "Curator proposals ב-comments → חיים מאשר ידנית → commits ל-SKILL.md ו-lessons.md".
אימות (לאחר תיקונים)
# 1. שלוף API key
PAPERCLIP_BOARD_API_KEY=$(mcp__infisical__get-secret \
--projectId 9a77b161-f70c-4dd3-9d67-b7ab850cef51 \
--environmentSlug nautilus --secretPath /paperclip --secretName BOARD_API_KEY)
# 2. בדוק drift
python ~/legal-ai/scripts/sync_agents_across_companies.py --verify
# 3. בדוק freshness של הנחיות
python ~/legal-ai/scripts/sync_agents_across_companies.py --check-instructions
# 4. בדוק שסוכני CMPA עובדים עם skills נכונים
PGPASSWORD="paperclip" psql -h 127.0.0.1 -p 54329 -U paperclip -d paperclip -c "
SELECT a.name, array_agg(s.name ORDER BY s.name) as skills
FROM agents a
JOIN companies c ON a.company_id = c.id
LEFT JOIN agent_skills ask ON ask.agent_id = a.id
LEFT JOIN skills s ON ask.skill_id = s.id
WHERE c.name LIKE '%השבחה%' AND (a.is_deleted = false OR a.is_deleted IS NULL)
GROUP BY a.id ORDER BY a.name;
"