Chaim
14ab7b0cae
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
feat(learning): lesson synthesis — merge overlapping lessons into richer super-lessons (#158 / INV-LRN8)
הפתרון-האמיתי לחיתוך-השקט limit=15 (#157): במקום ערימת לקחים גולמיים חופפים, ממזגים
לקחי-סגנון דומים ל"לקח-על" אחד עשיר ומוכלל — הסט שזורם לכותב קטֵן ומשתבח (Authorial
Style Profiling). מחקה את סינתזת-הקנוני (V41/INV-LRN6) על אותה טבלה (G2, אין מאגר-מקביל).
מנגנון (services/lesson_synthesis.py, מסלול-יחיד):
- אשכול greedy לפי cosine (LESSON_SYNTH_CLUSTER_THRESHOLD) בתוך shard practice_area+category.
- מיזוג ע"י claude_session מעוגן-מקור (INV-AH, סגנון-בלבד INV-LRN5, abstain) + שער-drift
(cosine מול centroid ≥ LESSON_SYNTH_DRIFT_FLOOR).
- לקח-על נכתב source='synthesis' + synthesized_from; המקורות→review_status='superseded'.
- שער מדורג-הפיך (הכרעת-יו"ר): מקורות approved → לקח-על approved (זורם), veto-יו"ר משחזר
את המקורות (db.revert_lesson_synthesis, מחובר ל-PATCH lessons).
- idempotency: lookup-cosine מול synthesis קיים לפני INSERT.
נגזרות: SCHEMA_V46 (embedding vector(1024) + synthesized_from + ivfflat); כלי-MCP
lesson_synthesize_pending; scripts/backfill_lesson_synthesis.py (--dry-run/--apply, audit CSV);
config LESSON_SYNTH_*; spec INV-LRN8; SCRIPTS.md.
get_recent_decision_lessons ללא שינוי — superseded יוצא (מסנן approved), synthesis נכנס.
UI badges (synthesis/superseded) נדחים לשער-העיצוב (מוגנים ב-fallback, ללא קריסה).
בדיקות: py_compile ✓ · leak-guard G12 ✓ · smoke-test טהור לאשכול/cosine/centroid ✓.
אימות functional מלא (dry-run מול DB+voyage+claude CLI) — בהוסט אחרי-deploy, כמו V41.
Invariants: G2 (מסלול-יחיד, אותה טבלה), INV-AH (עיגון+drift), INV-LRN1/G10 (שער מדורג-הפיך),
INV-LRN5 (סגנון-בלבד), INV-LRN8 (חדש). depends-on #157/#159.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 22:24:42 +00:00
..
2026-05-10 05:58:52 +00:00
2026-06-10 09:52:35 +00:00
2026-06-17 10:45:33 +00:00
2026-06-17 10:45:33 +00:00
2026-06-17 10:45:14 +00:00
2026-06-12 07:25:54 +00:00
2026-05-27 10:06:22 +00:00
2026-04-14 15:28:16 +00:00
2026-06-17 17:25:08 +00:00
2026-06-19 10:57:48 +00:00
2026-06-17 09:47:13 +00:00
2026-05-03 20:04:33 +00:00
2026-06-15 09:06:12 +00:00
2026-05-26 08:34:40 +00:00
2026-06-28 22:24:42 +00:00
2026-06-08 06:53:31 +00:00
2026-05-26 11:26:52 +00:00
2026-06-06 19:45:43 +00:00
2026-06-14 13:46:26 +00:00
2026-06-20 13:55:00 +00:00
2026-06-15 04:17:07 +00:00
2026-06-28 21:57:38 +00:00
2026-04-03 10:21:47 +00:00
2026-04-09 16:45:49 +00:00
2026-06-20 13:55:00 +00:00
2026-06-06 19:55:45 +00:00
2026-06-14 09:58:45 +00:00
2026-06-20 16:04:04 +00:00
2026-05-26 11:26:52 +00:00
2026-06-20 11:36:38 +00:00
2026-04-16 18:49:10 +00:00
2026-06-19 14:21:27 +00:00
2026-06-08 11:59:21 +00:00
2026-04-16 18:49:30 +00:00
2026-06-15 08:56:34 +00:00
2026-06-08 08:57:23 +00:00
2026-06-08 08:57:23 +00:00
2026-06-15 04:11:43 +00:00
2026-06-08 08:57:23 +00:00
2026-05-31 14:58:13 +00:00
2026-05-31 14:58:13 +00:00
2026-06-27 12:49:32 +00:00
2026-06-12 10:31:56 +00:00
2026-06-28 21:56:36 +00:00
2026-06-15 03:21:10 +00:00
2026-05-04 17:47:05 +00:00
2026-05-31 08:57:42 +00:00
2026-05-31 14:12:45 +00:00
2026-06-07 18:18:41 +00:00
2026-06-07 20:12:58 +00:00
2026-06-11 16:13:24 +00:00
2026-06-19 05:37:07 +00:00
2026-06-15 04:21:15 +00:00
2026-06-06 19:55:45 +00:00
2026-06-19 11:17:05 +00:00
2026-06-08 05:01:03 +00:00
2026-06-12 07:19:48 +00:00
2026-06-12 06:59:34 +00:00
2026-06-07 18:18:41 +00:00
2026-06-08 08:07:45 +00:00
2026-06-07 20:33:18 +00:00
2026-06-27 12:49:32 +00:00
2026-06-10 09:40:42 +00:00
2026-06-07 21:04:44 +00:00
2026-06-07 20:31:53 +00:00
2026-06-07 21:04:44 +00:00
2026-06-13 08:08:19 +00:00
2026-06-13 08:08:19 +00:00
2026-06-13 08:08:19 +00:00
2026-06-08 05:13:49 +00:00
2026-06-07 19:43:53 +00:00
2026-06-13 11:28:16 +00:00
2026-06-11 17:48:38 +00:00
2026-06-06 15:34:49 +00:00
2026-05-26 11:26:52 +00:00
2026-05-03 19:24:52 +00:00
2026-06-11 16:50:50 +00:00
2026-06-06 19:45:43 +00:00
2026-04-14 15:55:55 +00:00
2026-06-27 12:49:32 +00:00
2026-05-04 17:25:45 +00:00
2026-05-26 09:34:23 +00:00
2026-06-07 19:43:53 +00:00
2026-06-03 07:55:42 +00:00
2026-06-15 04:03:21 +00:00
2026-06-15 04:21:15 +00:00
2026-05-03 16:43:48 +00:00
2026-06-28 10:19:24 +00:00
2026-04-03 10:21:47 +00:00
2026-04-16 18:49:30 +00:00
2026-06-28 22:24:42 +00:00
2026-06-10 09:40:42 +00:00
2026-06-11 19:57:12 +00:00
2026-06-28 21:45:56 +00:00
2026-05-31 11:14:44 +00:00
2026-05-04 17:25:45 +00:00
2026-05-30 11:26:19 +00:00
2026-05-26 09:17:33 +00:00
2026-05-03 18:43:41 +00:00
2026-05-03 18:43:41 +00:00
2026-05-03 18:43:41 +00:00
2026-05-03 18:43:41 +00:00
2026-05-03 18:43:41 +00:00