Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"otzaria"
],
"is_fork": true,
"size_kb": 2710160,
"has_wiki": true,
"homepage": "http://www.otzaria.org/",
"languages": {
"C": 3146,
"C++": 81160,
"Dart": 14454457,
"HTML": 1304,
"Ruby": 3158,
"CMake": 21499,
"Shell": 6335,
"Swift": 9331,
"Kotlin": 3137,
"Python": 9250,
"Batchfile": 353,
"Inno Setup": 118155,
"PowerShell": 25323,
"Objective-C": 38
},
"pushed_at": "2026-07-27T20:18:44Z",
"created_at": "2025-06-11T23:45:14Z",
"owner_type": "Organization",
"updated_at": "2026-07-27T20:19:35Z",
"description": "A modern app that brings the jewish library to every device",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "dev",
"license_spdx_raw": "NOASSERTION",
"primary_language": "Dart",
"significant_languages": [
"Dart"
]
},
"owner": {
"blog": null,
"name": null,
"type": "Organization",
"login": "Otzaria",
"company": null,
"location": "Israel",
"followers": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/242871121?v=4",
"created_at": "2025-11-09T00:14:15Z",
"is_verified": null,
"public_repos": 28,
"account_age_days": 261
},
"license": {
"state": "custom",
"spdx_id": null,
"raw_spdx": "NOASSERTION",
"file_present": true,
"scorecard_found": true,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "0.9.95+699",
"kind": "patch",
"published_at": "2026-07-01T19:19:34Z"
},
{
"tag": "0.9.94+686",
"kind": "patch",
"published_at": "2026-06-12T14:14:07Z"
},
{
"tag": "0.9.94+683",
"kind": "patch",
"published_at": "2026-06-12T05:48:53Z"
},
{
"tag": "0.9.93+674",
"kind": "patch",
"published_at": "2026-05-26T07:24:22Z"
},
{
"tag": "0.9.92+631",
"kind": "patch",
"published_at": "2026-05-18T20:14:07Z"
},
{
"tag": "0.9.92+628",
"kind": "patch",
"published_at": "2026-05-18T13:46:15Z"
},
{
"tag": "0.9.91+622",
"kind": "patch",
"published_at": "2026-05-02T20:46:52Z"
},
{
"tag": "0.9.90+608",
"kind": "patch",
"published_at": "2026-04-25T23:21:51Z"
},
{
"tag": "0.9.90+605",
"kind": "patch",
"published_at": "2026-04-23T22:48:13Z"
},
{
"tag": "0.9.90+602",
"kind": "patch",
"published_at": "2026-04-19T12:56:52Z"
},
{
"tag": "0.9.88+586",
"kind": "patch",
"published_at": "2026-03-30T02:50:22Z"
},
{
"tag": "0.9.87+585",
"kind": "patch",
"published_at": "2026-03-29T22:52:55Z"
},
{
"tag": "0.9.86+583",
"kind": "patch",
"published_at": "2026-03-22T22:30:59Z"
},
{
"tag": "0.9.85+581",
"kind": "patch",
"published_at": "2026-03-16T21:56:42Z"
},
{
"tag": "0.9.74+571",
"kind": "patch",
"published_at": "2026-03-04T11:38:04Z"
},
{
"tag": "0.9.74+570",
"kind": "patch",
"published_at": "2026-03-02T01:29:08Z"
},
{
"tag": "0.9.74+569",
"kind": "patch",
"published_at": "2026-02-27T06:03:51Z"
},
{
"tag": "0.9.74+568",
"kind": "patch",
"published_at": "2026-02-25T22:39:10Z"
},
{
"tag": "0.9.74+567",
"kind": "patch",
"published_at": "2026-02-25T19:12:46Z"
},
{
"tag": "0.9.74+566",
"kind": "patch",
"published_at": "2026-02-21T21:13:48Z"
},
{
"tag": "0.9.74+565",
"kind": "patch",
"published_at": "2026-02-21T20:50:36Z"
},
{
"tag": "0.9.74+564",
"kind": "patch",
"published_at": "2026-02-20T13:36:47Z"
},
{
"tag": "0.9.74+563",
"kind": "patch",
"published_at": "2026-02-20T05:51:39Z"
},
{
"tag": "0.9.74+562",
"kind": "patch",
"published_at": "2026-02-20T04:08:56Z"
},
{
"tag": "0.9.74+561",
"kind": "patch",
"published_at": "2026-02-20T00:47:01Z"
},
{
"tag": "0.9.74+560",
"kind": "patch",
"published_at": "2026-02-19T23:43:33Z"
},
{
"tag": "0.9.74+559",
"kind": "patch",
"published_at": "2026-02-19T22:44:34Z"
},
{
"tag": "0.9.74+558",
"kind": "patch",
"published_at": "2026-02-19T22:09:36Z"
},
{
"tag": "0.9.74+557",
"kind": "patch",
"published_at": "2026-02-19T20:48:03Z"
},
{
"tag": "0.9.74+556",
"kind": "patch",
"published_at": "2026-02-19T20:10:07Z"
},
{
"tag": "0.9.74+555",
"kind": "patch",
"published_at": "2026-02-19T19:20:19Z"
},
{
"tag": "0.9.74+554",
"kind": "patch",
"published_at": "2026-02-19T13:32:39Z"
},
{
"tag": "0.9.74+553",
"kind": "patch",
"published_at": "2026-02-19T10:04:27Z"
},
{
"tag": "0.9.74+552",
"kind": "patch",
"published_at": "2026-02-19T09:08:32Z"
},
{
"tag": "0.9.74+551",
"kind": "patch",
"published_at": "2026-02-18T21:00:26Z"
},
{
"tag": "0.9.74+550",
"kind": "patch",
"published_at": "2026-02-18T18:55:27Z"
},
{
"tag": "0.9.74+549",
"kind": "patch",
"published_at": "2026-02-18T18:21:22Z"
},
{
"tag": "0.9.74+548",
"kind": "patch",
"published_at": "2026-02-18T14:45:57Z"
},
{
"tag": "0.9.74+547",
"kind": "patch",
"published_at": "2026-02-18T14:00:17Z"
},
{
"tag": "0.9.74+546",
"kind": "patch",
"published_at": "2026-02-17T12:12:07Z"
},
{
"tag": "0.9.74+545",
"kind": "patch",
"published_at": "2026-02-17T02:19:54Z"
},
{
"tag": "0.9.74+544",
"kind": "patch",
"published_at": "2026-02-17T01:59:00Z"
},
{
"tag": "0.9.74+543",
"kind": "patch",
"published_at": "2026-02-16T13:02:05Z"
},
{
"tag": "0.9.74+542",
"kind": "patch",
"published_at": "2026-02-15T21:53:00Z"
},
{
"tag": "0.9.74+541",
"kind": "patch",
"published_at": "2026-02-15T19:57:21Z"
},
{
"tag": "0.9.74+540",
"kind": "patch",
"published_at": "2026-02-15T19:48:20Z"
},
{
"tag": "0.9.74+539",
"kind": "patch",
"published_at": "2026-02-15T14:01:24Z"
},
{
"tag": "0.9.74+538",
"kind": "patch",
"published_at": "2026-02-15T00:49:34Z"
},
{
"tag": "0.9.74+537",
"kind": "patch",
"published_at": "2026-02-14T23:14:18Z"
},
{
"tag": "0.9.74+536",
"kind": "patch",
"published_at": "2026-02-14T22:35:26Z"
},
{
"tag": "0.9.74+535",
"kind": "patch",
"published_at": "2026-02-13T13:02:44Z"
},
{
"tag": "0.9.74+534",
"kind": "patch",
"published_at": "2026-02-13T10:43:28Z"
},
{
"tag": "0.9.74+533",
"kind": "patch",
"published_at": "2026-02-12T23:11:02Z"
},
{
"tag": "0.9.74+531",
"kind": "patch",
"published_at": "2026-02-12T22:01:10Z"
},
{
"tag": "0.9.74+532",
"kind": "patch",
"published_at": "2026-02-12T21:57:32Z"
},
{
"tag": "0.9.74+530",
"kind": "patch",
"published_at": "2026-02-12T20:29:39Z"
},
{
"tag": "0.9.74+529",
"kind": "patch",
"published_at": "2026-02-12T19:11:33Z"
},
{
"tag": "0.9.74+528",
"kind": "patch",
"published_at": "2026-02-12T16:01:16Z"
},
{
"tag": "0.9.74+525",
"kind": "patch",
"published_at": "2026-02-12T08:59:05Z"
},
{
"tag": "0.9.74+524",
"kind": "patch",
"published_at": "2026-02-12T01:21:27Z"
},
{
"tag": "0.9.74+522",
"kind": "patch",
"published_at": "2026-02-12T00:26:35Z"
},
{
"tag": "0.9.74+521",
"kind": "patch",
"published_at": "2026-02-12T00:02:44Z"
},
{
"tag": "0.9.74+520",
"kind": "patch",
"published_at": "2026-02-11T22:44:51Z"
},
{
"tag": "0.9.74+519",
"kind": "patch",
"published_at": "2026-02-11T22:22:24Z"
},
{
"tag": "0.9.74+513",
"kind": "patch",
"published_at": "2026-01-31T16:47:09Z"
},
{
"tag": "0.9.74+511",
"kind": "patch",
"published_at": "2026-01-27T22:44:27Z"
},
{
"tag": "0.9.74+510",
"kind": "patch",
"published_at": "2026-01-27T21:50:37Z"
},
{
"tag": "0.9.74+509",
"kind": "patch",
"published_at": "2026-01-26T08:24:24Z"
},
{
"tag": "0.9.74+508",
"kind": "patch",
"published_at": "2026-01-25T12:39:22Z"
},
{
"tag": "0.9.74+507",
"kind": "patch",
"published_at": "2026-01-18T08:03:35Z"
},
{
"tag": "0.9.74+506",
"kind": "patch",
"published_at": "2026-01-15T22:15:18Z"
},
{
"tag": "0.9.74+505",
"kind": "patch",
"published_at": "2026-01-15T18:28:05Z"
},
{
"tag": "0.9.74+504",
"kind": "patch",
"published_at": "2026-01-14T23:11:19Z"
},
{
"tag": "0.9.74+503",
"kind": "patch",
"published_at": "2026-01-14T13:19:15Z"
},
{
"tag": "0.9.74+502",
"kind": "patch",
"published_at": "2026-01-13T19:02:35Z"
},
{
"tag": "0.9.74+501",
"kind": "patch",
"published_at": "2026-01-13T13:06:39Z"
},
{
"tag": "0.9.74+500",
"kind": "patch",
"published_at": "2026-01-12T22:54:20Z"
},
{
"tag": "0.9.74+499",
"kind": "patch",
"published_at": "2026-01-12T18:51:24Z"
},
{
"tag": "0.9.74+498",
"kind": "patch",
"published_at": "2026-01-12T13:28:55Z"
},
{
"tag": "0.9.74+495",
"kind": "patch",
"published_at": "2026-01-11T20:57:19Z"
},
{
"tag": "0.9.74+494",
"kind": "patch",
"published_at": "2026-01-11T13:10:09Z"
},
{
"tag": "0.9.74+492",
"kind": "patch",
"published_at": "2026-01-11T12:09:48Z"
},
{
"tag": "0.9.72+491",
"kind": "patch",
"published_at": "2026-01-11T10:39:58Z"
},
{
"tag": "0.9.72+490",
"kind": "patch",
"published_at": "2026-01-11T10:26:02Z"
},
{
"tag": "0.9.74+488",
"kind": "patch",
"published_at": "2026-01-10T22:37:28Z"
},
{
"tag": "0.9.74+487",
"kind": "patch",
"published_at": "2026-01-10T17:43:58Z"
},
{
"tag": "0.9.74+486",
"kind": "patch",
"published_at": "2026-01-09T12:11:48Z"
},
{
"tag": "0.9.72+485",
"kind": "patch",
"published_at": "2026-01-09T08:10:29Z"
},
{
"tag": "0.9.74+484",
"kind": "patch",
"published_at": "2026-01-08T22:11:10Z"
},
{
"tag": "0.9.72+483",
"kind": "patch",
"published_at": "2026-01-08T19:36:30Z"
},
{
"tag": "0.9.74+482",
"kind": "patch",
"published_at": "2026-01-08T19:31:42Z"
},
{
"tag": "0.9.74+478",
"kind": "patch",
"published_at": "2026-01-08T18:09:39Z"
},
{
"tag": "0.9.74+477",
"kind": "patch",
"published_at": "2026-01-08T16:59:19Z"
},
{
"tag": "0.9.74+476",
"kind": "patch",
"published_at": "2026-01-08T16:44:48Z"
},
{
"tag": "0.9.74+475",
"kind": "patch",
"published_at": "2026-01-08T13:10:17Z"
},
{
"tag": "0.9.74+474",
"kind": "patch",
"published_at": "2026-01-07T19:45:09Z"
},
{
"tag": "0.9.74+473",
"kind": "patch",
"published_at": "2026-01-06T15:05:03Z"
},
{
"tag": "0.9.74+472",
"kind": "patch",
"published_at": "2026-01-06T14:37:22Z"
},
{
"tag": "0.9.74+460",
"kind": "patch",
"published_at": "2026-01-06T07:24:21Z"
},
{
"tag": "0.9.74+459",
"kind": "patch",
"published_at": "2026-01-05T22:37:44Z"
}
],
"recent_commits": [
{
"oid": "4e76c7ff44e7ab09727a007f0ebccf8b9a41139b",
"body": "…ording\n\nתיקון: קיצור מותאם אישית שהוקלט בפריסת מקלדת לא-לטינית לא עבד",
"is_bot": false,
"headline": "Merge pull request #648 from Nathaniel-260/fix/shortcut-non-latin-rec…",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T20:18:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7097aba5c5e76cfa2cd34d71863f29dfdb6c5a6e",
"body": "הקלטת הקיצור שמרה את event.logicalKey, שבפריסה עברית הוא התו המקומי\n('כ' עבור מקש F), ולכן נשמר 'ctrl+shift+כ'. הזיהוי משווה physicalKey\n(f255de211) ולא מכיר מקש בשם 'כ' — כך שהקיצור לא נתפס באף פריסה.\nרגרסיה מגרסה 0.9.91: עד אז גם הזיהוי השווה keyLabel והקיצור כן עבד.\n\nההקלטה מנרמלת כעת מקש אות לאו\n[…]\nה\nלבדיקה. בנוסף, ניקוי חד-פעמי בעליית האפליקציה מוחק קיצורים שמורים\nשהמקש שלהם אינו מוכר, כך שהפעולה חוזרת לקיצור ברירת המחדל שעובד.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: קיצור מותאם אישית שהוקלט בפריסת מקלדת לא-לטינית לא עבד",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T20:18:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "76d3cf862608abb7d02d4195ba1c6db4515d20b1",
"body": "תיקון: פופאפ החיפוש נפתח באיטיות בספרייה גדולה",
"is_bot": false,
"headline": "Merge pull request #647 from Nathaniel-260/perf/search-dialog-scope-tree",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T20:15:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dc5469f877b68fefb89fb72e9eed4c842bea9680",
"body": null,
"is_bot": false,
"headline": "תיקון: טעינה יעילה של תפריט היקף החיפוש",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T18:52:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0087890522afaa2db30179c79fbbdefce5611087",
"body": null,
"is_bot": false,
"headline": "תיקון: קיבוע תצוגה מקדימה בתפריט הקשר",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T18:44:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7beb86eae83a2207bfeec99ff348243f8ee3112e",
"body": "הכוונה \"ספרי יסוד\" מיוצגת ממילא ב-facet ממדי (/base), והתווית עבורה\nנגזרת ממנו בעלות אפס. החישוב שניסה לזהות אותה בדיעבד מרשימת ספרים\nדרש את עץ הספרייה המלא — 315ms על 20,000 ספרים ו-783ms על 50,000 —\nוגם נדחה לאחר הפריים הראשון הוא חסם את חוט ה-UI מיד אחרי שהחלון נצבע.\n\nהחישוב הוסר, ואיתו ה-postFra\n[…]\nיסוד.\n\nנוסף טסט שמודד את הפתיחה הראשונה בסשן על ספרייה טרייה בלי מטמון\nמחומם, כולל הפריים שאחרי הפתיחה. הוא מודד 503ms בגרסה הקודמת.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תווית היקף החיפוש נגזרת מה-facet הממדי, בלי לסרוק את הספרייה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T18:14:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "970f7964677fc553e969c760925764c5916fc860",
"body": "ביצועים: מניעת ניקוי-HTML וגיבוב חוזרים בכל פריים גלילה",
"is_bot": false,
"headline": "Merge pull request #646 from Nathaniel-260/perf/reader-section-sync-gate",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T18:11:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97386e8bfa6e63cb53e444e1b69d26ce13c12edc",
"body": "מעקב תוכן הקטעים לתוספים הריץ בכל פריים, לכל שורה נראית, שני ניקויי HTML\nושני גיבובי sha256 — גם כשהטקסט זהה לפריים הקודם, וגם כשאין תוספים\nמותקנים כלל. זו הייתה העלות הדומיננטית בגלילה.\n\nReaderSectionSyncGate משווה את הקלט לפני הניקוי ומדלג כשלא השתנה דבר.\nנמדד על בראשית: 2,618 -> 34 מיקרו-שניות לח\n[…]\nר כשנוסף או\nמוסר highlight, כך שעיגון מחדש ממשיך לרוץ. תקרת השער קטנה מזו של הטראקר\nכדי שקו-הבסיס לא ייעלם בעוד הקטע מסומן כמסונכרן.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ביצועים: מניעת ניקוי-HTML וגיבוב חוזרים בכל פריים גלילה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T18:06:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "73e065371c5d50daf756ce864fae0b70d4660c09",
"body": "תיקון: כותרות DOCX לא זוהו בקבצים עם styleId מספרי",
"is_bot": false,
"headline": "Merge pull request #645 from Nathaniel-260/fix/docx-heading-detection",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T18:02:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a2b218d34a0fd6952f2e940b0ccac6b646999fb1",
"body": null,
"is_bot": false,
"headline": "תיקון: outlineLvl לא חוקי אינו חוסם כותרת",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T18:01:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "116b884d1d0f2123b75729380c8d24eb28eaf3fc",
"body": "סגנון בשם \"Heading 1 Draft\" עם `w:outlineLvl w:val=\"9\"` הומר ל-<h1> אף\nש-9 פירושו במפורש שאין לפסקה רמת מתאר. `outlineLvl` הוא המידע האמין\nוהשם רק פרוקסי, ולכן סדר הקדימות התהפך: outlineLvl מפורש קודם, ושם\nהסגנון (וירושת basedOn) הם גיבוי רק בהיעדרו.\n\nאותה היפוך קדימות הוחל על הפסקה עצמה: `w:outline\n[…]\nטסטים חדשים: outlineLvl=9 מול שם דמוי-כותרת, outlineLvl תקף מול רמה\nאחרת בשם, outlineLvl פגום שאינו חוסם את הגיבוי, ושני מקרי הפסקה.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון סקירה: outlineLvl מפורש גובר על שם הסגנון",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T17:58:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "211414599939acdc97947b96486145cbf6a93267",
"body": "סגנון מותאם המבוסס על Heading1 יורש ממנו את ה-outlineLvl ואין לו משלו,\nולכן לא זוהה — והספר נפתח שוב בלי תוכן עניינים. `_extractHeadingStyles`\nאוספת עכשיו את הגדרות הסגנונות ואז פותרת את הרמה רקורסיבית דרך basedOn,\nעם מטמון וסט מעקב שמונע לולאה בשרשרת מעגלית.\n\noutlineLvl מפורש עוצר את הירושה — כולל \n[…]\nבית ורב-שלבית, דחיית רמת האב ע\"י outlineLvl\nמפורש, ירושה עם outlineLvl=9, שרשרת מעגלית, basedOn על סגנון חסר,\nו-basedOn על סגנון תו.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון סקירה: פתרון שרשרת w:basedOn בזיהוי סגנונות כותרת",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T17:58:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6b0153defbbf81a5215e48e5eeb3bded8f933725",
"body": "`w:pStyle w:val` הוא מזהה הסגנון (styleId) ולא שמו. Word בעברית וקבצים\nשהומרו מ-HTML שומרים styleId מספרי (\"1\"/\"2\"/\"3\"), בעוד שהשם (\"heading 2\")\nו-`w:outlineLvl` יושבים רק ב-word/styles.xml — ולכן כל הכותרות פוספסו\nוהספר נפתח בלי תוכן עניינים.\n\nנוספה `_extractHeadingStyles` שבונה מפת styleId ← רמת כ\n[…]\nת\nהסגנון, שם סגנון בודד היה הופך את כל הפסקאות שלו לכותרות.\n\nגרסת הממיר הועלתה 8→9 כדי לפסול את המטמון ולהמיר מחדש ספרים שכבר נפתחו.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: כותרות DOCX לא זוהו בקבצים עם styleId מספרי",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T17:58:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "80fbf57680643d9018564c539af1a17b3c54fce5",
"body": "הספרייה מתחילה ריקה ומוחלפת בסיום הטעינה. תזמון בניית העץ ב-initState\nבלבד החמיץ את המעבר: _library עדיין null באותו רגע, וכשהספרייה הגיעה\nהמטמון אופס בלי שאיש יתזמן בנייה מחדש. לכן צ׳יפ של היקף שמור המכיל\nספרי יסוד נתקע על \"כל הספרים\" עד שהמשתמש פתח את התפריט.\n\nהתזמון עבר ל-build, שם הוא מכסה גם את המעבר ספרייה-ריקה → ספרייה-נטענת\nוגם שינוי בחירה. דגל מונע תזמון כפול, והתנאי על _treeCache מונע לופ.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: תווית היקף החיפוש נתקעה כשהספרייה נטענת אחרי בניית הווידג'ט",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T17:18:06Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "474de421e98d47213209aa7ca421298adcbb5006",
"body": "ותיקון נתיבים בקבצי הסוכנים",
"is_bot": false,
"headline": "לוח שנה: אירועים לפי סדר, ולא לפי שם עברי",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T17:01:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1e28b17ff888895cd5b34ed8c479c5aedaf8f5c9",
"body": "ציטוט הלינקר (link-anchor-range) קיבל קו תחתון מפורש בשני מסלולי\nהרינדור; נשאר רק צבע הנושא כסימון.\n\nתצוגת הכתובת העדיפה את כתובת ה-TOC לפי ניקוד היוריסטי, ולכן ספר\nשה-TOC שלו נעצר בפרק איבד את הרמה העמוקה שבכתובת השורה (\"משנה אבות,\nפרק א\" במקום \"משנה אבות א, ג\"). כשהכתובות עוגנות באותו ספר, כתובת\nעמוקה יותר מנצחת.",
"is_bot": false,
"headline": "תיקון: קו תחתון בציטוטי הלינקר וכתובת חלקית בתצוגה המקדימה",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T16:53:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79ff3118e46e8fb063a63db8edb055cabec5b5c5",
"body": "כשהבחירה מצומצמת, תווית הצ׳יפ (\"כל הספרים\"/\"ספרי יסוד\") דורשת את עץ\nהספרייה. במקום לחסום את פתיחת החלון או להציג תווית גנרית, העץ נבנה\nב-postFrameCallback: החלון מוצג מיד והתווית מתייצבת מיד אחריו.\n\nהבנייה עצמה עולה 108ms על ספרייה של 7,000 ספרים ו-315ms על 20,000,\nוהיא נדרשת פעם אחת בסשן ורק כשיש בחירה מצומצמת.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תווית היקף החיפוש: בניית העץ נדחית לאחר הפריים הראשון",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T16:48:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6554cf8092c13d909da7f82a69033080a6f29bbe",
"body": "תפריט היקף החיפוש בנה מחדש את כל עץ הספרייה וסיווג את כל ספרי היסוד\nבכל build — כולל בפתיחת הדיאלוג, כשהתפריט עוד סגור ואף אחד לא צריך\nאת המידע. טעינת מזהי ספרי היסוד מוסיפה setState, ולכן המחיר שולם\nפעמיים בכל פתיחה.\n\nמדידה על ספרייה של 20,000 ספרים: 1300-2480ms לפני, 267-343ms אחרי,\nוללא תלות בגוד\n[…]\nהות אובייקט הספרייה\n- העץ וסיווג ספרי היסוד מחושבים רק כשהתפריט נפתח בפועל\n- תווית הצ׳יפ נבדקת פר-facet נבחר במקום מסיווג כל הספרייה\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: פופאפ החיפוש נפתח באיטיות בספרייה גדולה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T16:18:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "adf6a1788a6c70bb61d7aa561ed14dc9edff03a6",
"body": "…filter\n\nתיקון: צ׳יפי סינון המפרשים לפי סוג לא סיננו כלום",
"is_bot": false,
"headline": "Merge pull request #644 from Nathaniel-260/fix/commentary-type-chips-…",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T13:45:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "599c9f2517b905e76926f3e188abaf4461fa9c0e",
"body": null,
"is_bot": false,
"headline": "תיקון: מטמון מפת סוגי מפרשים",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T13:44:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b31bebe3d391ee30ce6bc2a778b1d3cdde3ba83",
"body": "mapEquals השווה את ה-Set-ים בזהות, ומאחר שהמפה נבנית מחדש בכל build\nהוא תמיד החזיר false ו-_update (שישה מעברי סינון) רץ בכל rebuild.\n\nבנוסף, פאנל הבחירה בכרטיסיית המפרשים עטוף כעת ב-ValueListenableBuilder\nבמקום setState ידני, כדי שההורה יהיה מנוי לנוטיפייר כשאר הצרכנים.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקוני סקירת QA: השוואה עמוקה למפת הסוגים ומנוי לנוטיפייר",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T13:37:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "979cc2b49f2ab88bd1950a3e1ec13dfc1d126745",
"body": "עד כה צ׳יפ סוג סינן רק את המפרשים המוצגים, בעוד צ׳יפ דור צמצם גם את\nרשימת הבחירה — אסימטריה שהקשתה למצוא את המפרשים מהסוג הנבחר.\nCommentatorsSelectionPanel מקבל כעת commentatorsByType ומצמצם לפיו.\n\nטסטים: 43 חדשים (הלוגיקה המשותפת, בחירה חיצונית, צמצום הרשימה),\nבנוסף ל-32 הקיימים שממשיכים לעבור.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "צ׳יפ סוג מצמצם גם את רשימת המפרשים, וטסטים לסינון לפי סוג",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T13:37:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2bf7a14fd539f94d76b62f6c8ed6c38eac4c810c",
"body": "הצ׳יפים היו מחווטים רק לפאנל הפנימי של CommentaryListBase, אך בכרטיסיית\nהמפרשים onFilterOpenRequested מפנה את הבחירה ללשונית צדדית שבונה פאנל\nנפרד — ושם הצ׳יפים לא הוצגו כלל. לחיצה עליהם לא עשתה כלום.\n\nהלוגיקה חולצה ל-CommentaryTypeFilter המשותף, והבחירה עברה ל-\nCommentaryTypeSelection שההורה יכול להחזיק, כדי שהצ׳יפים והרשימה\nהמסוננת יוכלו לחיות במסכים שונים בלי לשכפל את החישוב.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: צ׳יפי סינון המפרשים לפי סוג לא סיננו בכרטיסיית המפרשים",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T13:37:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "955f0f8d17079e707c31351cc3104aac70ac59f5",
"body": "…bold-face\n\nתיקון: כותרת נשלפת מקובץ בולד נפרד ונראית כגופן אחר מהגוף",
"is_bot": false,
"headline": "Merge pull request #640 from Nathaniel-260/fix/heading-font-separate-…",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T13:37:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8eb7e7b761b07d4b9caa6cd5478258bb52b018dc",
"body": null,
"is_bot": false,
"headline": "תיקון: כותרות h4-h6 בתצוגה המקדימה",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T13:26:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "776c78ab20accf8591fedd5436e5a177c8c955a9",
"body": "הכלל שיושם ב-SmartTextWidget חסר בשני מסלולי HtmlWidget נוספים:\nדיאלוג הגרסאות לא העביר customStylesBuilder כלל, והתצוגה המקדימה\nבעורך קובעת 'bold' מפורשות — כך שהעורך הבטיח כותרת מודגשת בעוד הספר\nמציג אותה רגילה.\n\nהלוגיקה חולצה ל-AppFonts.headingFontWeightOverride כמקור אמת יחיד,\nושלושת המסלולים קו\n[…]\nh6, גופנים עם ומבלי\nface בולד נפרד, גופן מערכת, שמירת גודל הכותרת, ותגים שאינם כותרת.\nאומת שהיא נכשלת (7 טסטים) כשמנטרלים את התיקון.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "כותרות: איחוד כלל הבולד וכיסויו בדיאלוג הגרסאות ובתצוגה המקדימה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T11:43:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "de79142720937d4b9f5f17404a6a93828796726f",
"body": "fwfh נותן לכל <h1>-<h6> font-weight:bold כברירת מחדל. במשפחה שבה הבולד\nהוא קובץ נפרד (פרנק-רוהל, או גופן מערכת שנטען לו face אחי), הכותרת\nנשלפה מקובץ אחר מהגוף — שני ציורי אות באותו מסך. בולט במיוחד בתצוגה\nרציפה, שבה הכותרת עוברת ב-fwfh והפסקה במנוע Text.rich.\n\nAppFonts.hasSeparateBoldFace מזהה את ה\n[…]\nנו קיים בפרויקט (תמה + שני דיאלוגים).\n\nהערה: 'normal' אינו נתמך ב-fontWeightTryParse של fwfh — רק מספר או\n'bold' — ולכן מוזרק '400'.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: כותרת נשלפת מקובץ בולד נפרד ונראית כגופן אחר מהגוף",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T11:41:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ecd233beeff9c20038481fc5c030d6dbb0527242",
"body": "בחירה מרובה של כרטיסיות וסגירה קבוצתית (Ctrl/Cmd/Shift+לחיצה)",
"is_bot": false,
"headline": "Merge pull request #633 from palmoni5/dev",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T11:26:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b1fcdc21b82469040a5f59c048542cb631fe7c8",
"body": null,
"is_bot": false,
"headline": "תיקון: סדרור שמירת היסטוריה",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T11:06:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2cec871aadf3e0faaf52af4420e610966769950f",
"body": "מימוש בקשת פורום 1992: Ctrl/Cmd+לחיצה מצרפת כרטיסיות לבחירה\n(כולל הפעילה), Shift+לחיצה בוחרת טווח, והקבוצה נסגרת יחד דרך\nה-X, לחצן אמצעי, תפריט ההקשר או קיצור סגירת הכרטיסיה.\n\nהבחירה מנוהלת ב-TabsState כדי שגם קיצור המקלדת יכיר אותה,\nמנורמלת בכל שינוי ברשימת הטאבים (סגירה/החלפה/side-by-side),\nוההיסטוריה נשמרת באירוע קבוצתי אחד למניעת דריסת שמירות מקביליות.",
"is_bot": false,
"headline": "בחירה מרובה של כרטיסיות וסגירה קבוצתית (Ctrl/Cmd/Shift+לחיצה)",
"author_name": "palmoni5",
"author_login": "palmoni5",
"committed_at": "2026-07-27T11:01:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44e75a20676a1b5a8f22d685ef4c4f2291defa65",
"body": "…lash\n\nתיקון: תוסף מוצמד לסרגל הניווט הבליח עם סרגל הלשוניות",
"is_bot": false,
"headline": "Merge pull request #632 from Nathaniel-260/fix/pinned-plugin-tabbar-f…",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T11:00:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6ae0e53361c8162d0725f46c0311c32fc76fcd7",
"body": "משתמש שלחץ על תוסף לפני שמסך הכלים נבנה, וניווט מיד למסך אחר, מצא את\nהתוסף הישן נפתח בכניסה הבאה לכלים - בניגוד לפעולה האחרונה שלו.\n\ncancelPendingNavRailPluginOnNavigation מבטל את הבקשה בכל ניווט שאינו\nScreen.more, באותו דפוס של cancelPendingTabContentFocus שלידו.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: בקשת פתיחת תוסף יתומה נשארה וייפתחה בכניסה הבאה לכלים",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T10:55:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e5af11b2b5c85b5771c83799e08b7e6cc26c9513",
"body": "הצריכה ב-BlocListener רצה לפני הבלוק שבודק שהתוסף המוסתר עדיין\npinnedToNavRail, ולכן תוסף שנפתח בדיפ-לינק ואינו מוצמד נסגר מיד.\nהועברה לאחריו.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: בלוק תחזוקת התוסף המוסתר ביטל את הבקשה שזה עתה הוחלה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T10:55:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "aecd333a3bdefbede9f51445a860f5024ab83a67",
"body": "- הבקשה נצרכת רק כשהתוספים טעונים, ונשמרת עד ה-BlocListener אחרת.\n קודם היא נזרקה כשה-bloc לא היה מוכן, והפתיחה נפלה למסלול הנדחה.\n- deep link לתוסף עובר דרך אותו מנגנון, כך שגם הוא אינו מבליח.\n- _prereqsResolved הוחלף בבדיקת הסביבה עצמה: הדגל הסטטי לא התאפס\n ב-restart בתוך התהליך, וגרם ל-WebView להיבנות בלי סביבה.\n- הבקשה מאופסת ב-resetRuntimeStateForAppRestart.\n- הסתרת הסרגל מותנית באותו קריטריון כמו openPluginTransiently.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון הערות סקירה: צריכת הבקשה, deep link ואיפוס ב-restart",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T10:55:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cf81438ccdef7715555aa7efdabf90ef257f15d6",
"body": "main_window_screen קורא לה בעזיבת מסך העיון, אך ההגדרה ב-FocusRepository\nלא נכללה בקומיט הקודם - מה ששבר את הקומפילציה של הענף.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: הוספת cancelPendingTabContentFocus החסרה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T10:55:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f5170dc57b4c9222be15ce89ae612dc283ec893a",
"body": "התיקון הקודם פעל רק כשמסך הכלים כבר בנוי. במעבר מ\"עיון\" הוא נבנה\nעצלן, ולכן moreScreenKey.currentState היה null והמסלול הנדחה רץ\nב-retries של 50ms - נמדד 2.3 שניות שבהן הוצג הכלי הראשון עם הסרגל.\n\nבקשת פתיחה ממתינה נרשמת כעת לפני הניווט ונצרכת ב-didChangeDependencies\nשל מסך הכלים, כך שהבנייה הראשונה\n[…]\nbPage החזיר SizedBox.shrink בזמן בדיקת תנאי הקדם של\nWebView2 - פריים ריק שחשף את מסך הכלים מאחוריו. הבדיקה מדולגת כשהסביבה\nכבר אותחלה ב-pre-warm.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: התוסף המוצמד הבליח גם בפתיחה הראשונה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T10:55:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e4c09e62eb197b536e3fc0e2f566f346d4ccd714",
"body": "הניווט למסך הכלים נשלח לפני בחירת התוסף, והבחירה נדחתה\nל-addPostFrameCallback עם retry של 50ms. מכיוון שהמעבר מונפש 300ms,\nכל האנימציה הוצגה עם הכלי הקודם וסרגל הלשוניות גלוי.\n\nהבחירה מוקדמת כעת לניווט כשהמסך בנוי והתוספים טעונים. המסלול הנדחה\nנשאר לכלים מובנים, לתוסף חסום במצב מנותק ולמצבים שטרם מוכנים - שם\nהקדמה הייתה מציגה הודעת שגיאה על המסך הקודם או כלי שגוי בלי סרגל.\nאותו תיקון הוחל גם על deep link לתוסף.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: תוסף מוצמד לסרגל הניווט הבליח עם סרגל הלשוניות",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-27T10:53:38Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ae865e6b95da2dc3e0a0681701a0ee0e40db53a5",
"body": "תיקוני באגים",
"is_bot": false,
"headline": "Merge pull request #639 from Otzaria/ypl",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T10:51:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3a7a74eddb0c794035f118cbd50540a0738631d",
"body": null,
"is_bot": false,
"headline": "הסתר פיסוק: \"&thinsp\" מוצג כטקסט ליד פסק בתנ\"ך",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T10:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed5ca35647011f6123d992c15d80626578f5facc",
"body": null,
"is_bot": false,
"headline": "הערות סקירה, והוספת טסטים",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-27T09:08:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a2b2fb3742e8e982afc0fda06e7dfbc23073fa7",
"body": "החיבור של הסימון הפעיל נמחק בטעות ב-b849c9eb1 — קומיט שעסק בפופאפים במסך\nהספרייה, וכשה-LinkPreviewOverlay עבר ריפקטור נמחק איתו הקוד שהסתמך על\nonDismissed. מאז הפרמטר activeIndex, המחלקה link-anchor-active והטיפול בה\nבשני מסלולי הרינדור היו קוד מת. הקישור מוחזר בשני המסכים, והפעם אל פתיחת\nהחלונית בר\n[…]\nג ה-linkStyle במצב הפעיל גרר קו תחתון של קישור\nואז ביטל אותו, ואיתו את קו-התחתון שהוא סימנו המבחין של וריאנט 5; המצב הפעיל\nבונה עכשיו על סגנון הווריאנט ולוקח מה-linkStyle רק את הצבע, כמו ב-HtmlWidget.",
"is_bot": false,
"headline": "הדגשת סמן-האות שחלונית התצוגה שלו פתוחה",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T22:12:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "289a74d7eaede8aa19e78e366017ed702636c10a",
"body": "מיפוי הווריאנטים היה משוכפל בין המסלולים, ולכן הקריאה הרציפה מעולם לא יישמה\nאותו — כל המפרשים קיבלו שם סמן-אות זהה, בלי ההבחנה שהוא נועד לתת. המיפוי עובר\nלמקור אמת יחיד (link_anchor_variants) ששני המסלולים מתרגמים ממנו, ל-CSS\nול-TextStyle בהתאמה. בדרך הוסרה גם נטייה שנכפתה על הסמן בקריאה רציפה ומחקה\n[…]\n. מאחר שכל טקסט בסוגריים\nנעטף ב-small והמסלול נבחר לפי ה-markup שבשורה, שתי שורות שכנות באותו ספר —\nאחת עם קישור ואחת בלי — הציגו את הסוגריים בגדלים שונים. שלושת המסלולים\nמתלכדים עכשיו על אותם קבועים.",
"is_bot": false,
"headline": "עקביות רינדור בין המסלולים: וריאנטי הסמנים ויחסי הגדלים",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T21:22:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e66f25bf5e783de79d25db2981373f106033ac3c",
"body": "עוגן-טווח קיבל את הווריאנט הטיפוגרפי שנועד לסמני-האות של המפרשים, כשהמפתח\nשלו הוא ספר היעד המצוטט — כך שאותו ציטוט יצא בכתב רש\"י, מודגש-נטוי או רגיל\nלפי המסכת שאליה הוא מפנה. הווריאנט מוסר מהטווחים ונשאר בסמני-האות בלבד,\nוהציטוט מוצג בגופן הטקסט הסובב עם קו תחתון בצבע הנושא — כמו שהוא כבר מוצג\nבקריאה רציפה, בפאנל המפרשים ובקישורי inline-link.",
"is_bot": false,
"headline": "ציטוטי הלינקר בגוף הטקסט: עיצוב אחיד במקום וריאנט לפי ספר היעד",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T20:29:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4393310324300705effb043a2fafa1a38ffbf47",
"body": "_acronymTailIsTitleWords דרש התאמה מדויקת בין הזנב של ראש-התיבות לטוקני\nהכותרת, בעוד _getRemainingTokens ו-_prioritizeByTitleCoverage כבר סלחניים\nלאות-חיבור. אי-הסימטריה גרמה לספר בודד להיעדר ממשפחה שלמה של תוצאות:\n\"ברכת אברהם משנה\" החזיר 5 מ-6 (חסר \"שופר וסוכה ולולב\" — ראש-התיבות כותב\n\"סוכה\" מול \"ו\n[…]\n\n\nנמדד מול seforim.db על 274 שאילתות מושפעות: 4 משתפרות, אפס ספרים נעלמו,\nואפס ספרים עברו מחיפוש-TOC לתוצאת-ספר (כלומר אף תוצאה פנימית לא נחסמה).\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "איתור: אות-חיבור בכותרת נבלעת גם בזנב ראש-התיבות",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T18:49:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "600e5b03e1096a768e82aa2adddc6b29ede1597e",
"body": "\"רמב\"ם ברכת כהנים\" לא מצא את \"משנה תורה, הלכות תפילה וברכת כהנים\" —\nהכלל שהתעלם מ-ה' הידיעה בכותרת לא כלל את ו' החיבור, ולכן \"ברכת\" נשאר\nטוקן לחיפוש כותרות פנימיות ולא נמצאה לו התאמה.\n\nשני המקרים אוחדו ל-_withoutLeadingConjunction. ו' נבלעת רק כשהטוקן אינו\nהראשון בכותרת — בפתיחה היא חלק מהשם (\"ויקרא\n[…]\n המכוון.\n\nנמדד מול seforim.db: 256 מ-275 שאילתות מהצורה \"ראש-תיבות + מילה בלי ו'\"\nתוקנו, ואפס מקרים שבהם תוצאת-ספר מחליפה ערך TOC שהיה נמצא קודם.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "איתור: ו' החיבור בכותרת נחשבת חלק משם הספר",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T18:37:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4fac81dc6fc4e41900fcca78368d6f60ee898ba9",
"body": "מאז שהחבילה flutter_inappwebview_windows נמשכת מהפורק, ה-WebView מגשר את\nהפוקוס של פלאטר לפוקוס הנייטיבי: אובדן פוקוס בצד פלאטר מריץ\ndocument.activeElement.blur() בתוך הדף. בגרסה שב-pub.dev הגשר היה ריק,\nולכן אובדן כזה לא הזיק.\n\n_contentFocusNode הוא צומת Focus אב שעוטף את ה-WebView של התוסף, ו-hasF\n[…]\nי-נראה. עוטפים את מאחז הרקע ב-ExcludeFocus.\n\nהשורש עצמו מתוקן בפורק (הגשר הוחזר ל-no-op); שני השינויים כאן נכונים בכל\nמקרה ומונעים את החזרת הבאג.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: לא ניתן היה להקליד בתוך תוסף",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T18:32:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2a8daf556471205ed51c4a055bdde421cff21f35",
"body": "PrivilegesRequired=lowest הפך את GetDataDir לתלוי-מצב, ולכן יעד החילוץ עבר\nל-AppData בעוד האפליקציה המשיכה לקרוא מ-ProgramData:\n\n- system_install.marker נמחק בכל מצב שאינו התקנת מנהל. בלי זה מסמן מהתקנת\n מנהל קודמת שורד, ו-AppPaths.detectInstallMode ממשיך להחזיר systemWide.\n- CreateBooksPage מכבד א\n[…]\nן לבדיקה\n(בפרודקשן זהה — ה-override תמיד null).\n\nטסטים: 25 אינוריאנטות על שני קובצי ה-iss, ועוד 9 על זיהוי מצב ההתקנה\nו-libraryRootOf ב-AppPaths.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "מתקין: הספרייה נשארת במקומה במעבר בין התקנת מנהל להתקנת משתמש",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T18:23:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c4ec8884abb7334bba3c5361d62ea23b6867f98",
"body": "כמו `רמבם תפילה`, https://otzaria.org/forum/post/28482",
"is_bot": false,
"headline": "איתור: תיקון באג בו דירוג 4 נדחה שלא בצדק",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T18:19:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aab6e1a56e0171fa831f9f0f4f96777a303cc96f",
"body": "כמו ב'חברותא'",
"is_bot": false,
"headline": "פופאפ להערות מבוססות מספרים בתוך הספר",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T10:51:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d11fd1072053babbd9692575bfdc73e9996306e",
"body": null,
"is_bot": false,
"headline": "תוספים מוצמדים: הכותרת עם שם התוסף, במקום כותרת 'כלים'",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T10:51:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "239330e321dc736abe1b71f3a291cc18a90545b0",
"body": null,
"is_bot": false,
"headline": "macos: תיקונים למסך מלא",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T09:00:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dbfdd2c679f51403d69869ecb7e8a910d16b17e4",
"body": "Route native-only imports (dart:ffi, win32, sqlite3, zstd) through\nconditional-import seams instead of pulling them into shared code.\nNo behavioral change on existing targets.\n\nRemaining blockers:\n- seforim_library_updater needs the same treatment upstream; for now it\n resolves through an uncommitted local path override.\n- Startup still touches dart:io unconditionally (error-log setup,\n AppPaths), so non-io targets link but do not boot.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: isolate native bindings behind platform seams",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T07:11:07Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f2abdff16d760a44c98cbce4f6397a6893690a43",
"body": "והסרת וקיצור הערות מיותרות",
"is_bot": false,
"headline": "שדרוג חבילות",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T04:48:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51cb3e8a2bf557268036b3f892bc0e479a58e88b",
"body": null,
"is_bot": false,
"headline": "עדכון חבילות ותלויות",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T04:29:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5db079ec4424d8ad1b9742b431edc6c889575201",
"body": "…-nikud-options\n\nתיקון: שינוי מיון איבד את אפשרויות הניקוד והעלים את תוצאות התנ\"ך",
"is_bot": false,
"headline": "Merge pull request #631 from Nathaniel-260/fix/search-rerun-preserves…",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T01:06:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c56ba7a4e6bfd1bec311feb6aaa82f0a7ae753ef",
"body": "ששת הפרמטרים המתקדמים פר-מילה (customSpacing, alternativeWords,\nsearchOptions ושלושת מקביליהם השליליים) חיים על אירוע UpdateSearchQuery\nבלבד ואינם ב-state. כל חיפוש-מחדש פנימי שלח אירוע חשוף\nadd(UpdateSearchQuery(state.searchQuery)) והשמיט אותם בשקט.\n\nמכיוון ש-searchOptions נושא את מפתחות \"ניקוד\"/\"ט\n[…]\nים שנשלחו מה-UI\n- tantivy_full_text_search משלים את הפרמטרים השליליים בשחזור טאב\n- הגנת isClosed לפני add ברקע, שמנעה StateError בסגירת טאב חיפוש\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: שינוי מיון איבד את אפשרויות הניקוד והעלים את תוצאות התנ\"ך",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-26T01:00:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "04b168b568eb1808f9f00920673232fadf485614",
"body": "העתקה ללא ירידת שורות: טסטים ותיקונים",
"is_bot": false,
"headline": "Merge pull request #630 from Otzaria/ypl",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T01:00:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f59d474555189c926be0cb7b360be28d2d80197",
"body": null,
"is_bot": false,
"headline": "תיקון הטסטים, קיצור הערות קוד",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T00:54:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4886405e924aa2871032fa32a1864a598fbc4734",
"body": null,
"is_bot": false,
"headline": "העתקה ללא ירידת שורות: טסטים ותיקונים",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T00:54:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21046916a80f51b7e6d8c59ce407aad695f844e4",
"body": "סינון קישורים לפי סוג ודור בפאנל הקישורים",
"is_bot": false,
"headline": "Merge pull request #622 from Nathaniel-260/pr/link-type-filter",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T00:53:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86028e3b15a1b04d973e3070274cd3867b3ab098",
"body": "הצ׳יפ \"על <הספר הפתוח>\" נשמר כמפתח קבוע ON_BOOK, ולכן מי שבחר \"על בבא\nבתרא\" קיבל בפתיחת ברכות סינון \"על ברכות\" — פעולה אחרת לגמרי, בלי שביקש.\nהמפתח נשלל מהשמירה להגדרות (וגם מהטעינה, לניקוי ערך שנשמר בגרסה קודמת);\nבספר הפתוח עצמו הסינון ממשיך לעבוד מהמצב.\n\nצ׳יפ מותאם (chipBuilder) היה עטוף ב-Gesture\n[…]\nר\" לא נחשף לקורא מסך. הוא עטוף כעת ב-InkWell עם\nSemantics(button/selected) ו-MergeSemantics, כך שהתווית והמצב מוקראים\nכפריט אחד. העיצוב לא השתנה.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון הערות סקירה: ON_BOOK אינו נשמר, וצ׳יפים נגישים למקלדת",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "aa9f5fbe98e0d0f8c8b20b88b765a7e19c47c7b9",
"body": "שני צירי הסינון תפסו שתי שורות נפרדות וגזלו גובה מהמסך. עכשיו הם באותה\nשורה: דורות מימין, סוגי קישור משמאל, חצי-חצי קבוע עם קו אנכי במרכז.\nההפרדה היא בקו ובמיקום ולא בגוון רקע, ולכן AppSurfaces.linkTypeChipsRow /\nlinkEraChipsRow נמחקו.\n\nצ׳יפי סוגי המפרשים הוסרו מלשונית \"מפרשים\" ועברו לפאנל \"בחירת מפ\n[…]\nיג את ציר הדורות בלבד.\n\nהצ׳יפים הוקטנו מעט (גופן 10, ריפוד צר יותר, visualDensity compact)\nוהרווח ביניהם צומצם, כדי שייכנסו יותר צ׳יפים בכל שורה.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "צ׳יפי הסינון בשורה אחת, ואיחוד לפאנל בחירת המפרשים",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d77e8028315819570d35dfe586b75e91b30c5561",
"body": "צ׳יפ סוג נעלם במעבר לקטע שאין בו קישור מסוגו, וחזר בקטע הבא. גרוע\nמכך — הבחירה בצ׳יפ שנעלם נחשבה בחירה שאין לה צ׳יפ קיים, ולכן הסינון\nהתבטל בשקט והוצגו כל המפרשים.\n\nהסיבה: הצ׳יפים נבנו מקישורי הקטע הנראה (linksByLine של האינדקסים\nהנוכחיים) בעוד שבפאנל הקישורים הם נבנים מכל קישורי חלון הקריאה. מקור\nה\n[…]\nת הרשימה\" הופרד לפי index1 במקום לפי הפרדה\nמלאכותית בין links ל-linksByLine: התצוגה מסננת את state.links לפי\nindex1, ולא קוראת מ-linksByLine כלל.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "צ׳יפי הסוגים בפאנל המפרשים נבנים מכל חלון הקריאה",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fd9d15fd19645b6793191ee82da179cda9348c36",
"body": "ESSAY (connection_type id 17) חסר תווית משמעותית לקורא. בלי מיזוג הוא\nהיה מקבל צ׳יפ נפרד עם התווית הגולמית \"ESSAY\" אם יתווספו לו קישורים\nב-DB. ממופה ל-OTHER כמו NONE, ולכן נספר תחת 'לא מסווג'.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "מיזוג ESSAY ל'לא מסווג' במקום צ׳יפ נפרד",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a899cde33a8a17d27fd3396e0cd17b4d66d4b333",
"body": "הקבוע נכתב עם S בעוד ה-DB וה-enum מגדירים SIFREI_MITZVOT עם Z. כתוצאה\nמכך קישורי \"ספרי מצוות\" הוצגו עם התווית הגולמית באנגלית במקום \"ספרי\nמצוות\", והצ׳יפ נפל לסוף הרשימה במקום למקומו הייעודי. הטסטים החמיצו זאת\nכי הזינו בעצמם את האיות השגוי.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון שם סוג הקישור: SIFREI_MITSVOT ← SIFREI_MITZVOT",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a26c3ee992eae5369250c5912353f401244d7cb3",
"body": "פאנל המפרשים הציג יחד פירוש, תרגום, מדרש ופרשנות ללא הבחנה. נוספה\nשורת צ׳יפים לסינון לפי סוג, בעיצוב ובשפה של שורת הסוגים שבפאנל\nהקישורים.\n\nהצ׳יפים נבנים דינמית מסוגי המפרשים שקיימים בקטע לאחר סינון לפי שם\nמפרש, כך שסוג שכל מפרשיו מוסתרים אינו מקבל צ׳יפ. בחירה ריקה מציגה\nהכל, וכמה צ׳יפים נבחרים הם א\n[…]\nר צ׳יפ יחיד אם הוא נבחר, אחרת הסינון היה נשאר\n פעיל ללא דרך לבטלו\n- הודעה כשהסינון מסתיר את כל המפרשים\n- EXPLICATION ממוזג ל-ELUCIDATION: לשניהם התווית 'ביאור', ובלי מיזוג\n היו נבנים שני צ׳יפים זהים",
"is_bot": false,
"headline": "סינון מפרשים לפי סוג בפאנל המפרשים",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "535551eff2c817366e053c81ce6592052ab83581",
"body": "שורת הצ׳יפים פוצלה לשתיים לפי ציר המיון: סוגי קישור (עין משפט,\nמסורת הש״ס וכו׳) בשורה אחת, ודורות (ראשונים, אחרונים וכו׳) בשנייה,\nכל אחת בגוון רקע משלה. קודם לכן שני הצירים היו מעורבבים בשורה אחת\nולא היה ניכר שאלו שתי דרכי מיון שונות.\n\nכל שורה מחילה את הדלתא שלה על הבחירה השמורה בתחום הציר שלה בלבד,\n[…]\nכל הקישורים, וכשהחיפוש אינו מוצא — קודם\n הוצג מסך ריק ללא הסבר\n- תוקנה הערה שטענה שסינון אינו יכול לרוקן את הרשימה: הצ׳יפים נבנים\n מקישורי חלון הקריאה בעוד הרשימה מוצגת מהקטע הנראה, ולכן הוא כן יכול",
"is_bot": false,
"headline": "בידול צירי הסינון בפאנל הקישורים והודעות מצב ריק",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e1e10242d2188583e2443ee439df6e2f37e9a300",
"body": "שורת צ׳יפים בפאנל הקישורים של תצוגת הטקסט, במקביל לסינון המפרשים.\n\nסוג קישור בעל תווית משמעותית מקבל צ׳יפ משלו (עין משפט, מסורת הש״ס,\nציטוט וכו׳). סוגים שתוויתם חסרת מידע (עיון, לא מסווג, נושא קרוב,\nאוטומטי) מקובצים לפי דור מחבר ספר היעד, כך שקישור לבראשית מופיע תחת\n\"תורה שבכתב\" במקום להיבלע ב\"לא מס\n[…]\nת לכל 28 סוגי הקישור, לפי הניסוח של ספריא ואוצריא\n- בחירה עם מפתחות שאינם בצ׳יפים הנוכחיים נחשבת ריקה במקום להסתיר הכל\n- לחיצה על צ׳יפ מחילה דלתא על הבחירה השמורה, ולא מוחקת מפתחות שאינם\n בקטע הנוכחי",
"is_bot": false,
"headline": "סינון קישורים לפי סוג ודור בפאנל הקישורים",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-26T00:53:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "27a29da6f706e1ae0e122c0ace02ffb2c10691e8",
"body": "…state-clean\n\nתיקון: העברת כרטיסייה טענה את הספר מחדש (כבד במיוחד ב-PDF)",
"is_bot": false,
"headline": "Merge pull request #629 from Nathaniel-260/fix/tab-reorder-preserves-…",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T23:06:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c41cde538de352de0beaf5853ba8d82499d46ff0",
"body": null,
"is_bot": false,
"headline": "ניקוי סגנון לתיקון גרירת כרטיסיות",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T23:04:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30ef0259ba17d52215c4f886ce7b8513c9b4f6dc",
"body": "לפי סקירה: SliverChildListDelegate ממפה ילדים מחדש לפי ה-key של הילד\nהישיר, ולכן מפתח מקומי מספיק. GlobalKey נדרש להעברת State בין *הורים\nשונים* — כאן ההעברה היא בין אינדקסים של אותו PageView.\n\nהוסרו: _tabViewKeys, _viewKeyFor, _pruneTabViewKeys וה-assert הנלווה.\nהשינוי ב-lib עומד כעת על 4 שורות אפק\n[…]\nת צומצמו מ-680 ל-448 שורות (12 בדיקות → 5 ליבה + 2 רגרסיה),\nעם הערות קצרות. שמור האימות ההופכי: הבדיקה השלילית נכשלת ללא key\nועוברת עם ObjectKey.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: ObjectKey במקום GlobalKey מנוהל ידנית",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-25T21:51:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "270d16a9b4158410c187b06879ba6ad514ef5d05",
"body": "תוספים: הסרת תוספים מוצמדים מכלים",
"is_bot": false,
"headline": "Merge pull request #628 from Otzaria/ypl",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:15:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "10a77928d43da9022470172e3d58d643e94a4f9e",
"body": null,
"is_bot": false,
"headline": "עדכון חבילות",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e8f18161694fbe9e497fc4de4a829b4883752a44",
"body": null,
"is_bot": false,
"headline": "קבצי PDF: מטא-דאטה מהdb",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0bd65107c21ae7a099aa00bfc2036a2240e596f",
"body": null,
"is_bot": false,
"headline": "תיקון הערות סקירה 2",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78850739b3d5a656bf67baa996f4f0245369f60e",
"body": "תיקון לקומיט 21281d3b4",
"is_bot": false,
"headline": "תיקון הערות סקירה",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "81f028efd03232dbea43dd8141ed043e13345564",
"body": null,
"is_bot": false,
"headline": "תוספים: הסתרת הסרגל העליון לתוסף מוצמד",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c895ddc6675a5e099c541c5b4c038f21158f64a5",
"body": "הקומיט הקודם (fa76db6) הפריד רק את ההגדרות הכלליות לכותרת המשנה, אך\nאפשרויות המילה הפר-מיליות נשארו מוטמעות בכותרת ונראו כחלק מהשאילתה —\nבולט במיוחד באפשרויות מתקדמות (תרגום ארמי, ראשי תיבות...) שאין להן קיצור\nולכן נשפך שמן המלא.\n\n- buildSearchTitleSegments: חילוץ פירמוט הכותרת לרשימת מקטעים מסומני\n\n[…]\n כשאין אפשרויות מוצגת הכותרת הרגילה (ref)\n\nבדיקות: buildSearchTitleSegments (מבנה מקטעים + זהות ל-ref), וחיווי העיצוב\nבכותרת בחלונית ההיסטוריה.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "היסטוריה: אפשרויות המילה בכותרת החיפוש בגופן קטן ובגוון הנושא",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "35fe090264c5ea27044d9172d45fa009300f8b39",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "קישורים: סמני עוגן-מילה בצבע הנושא (primary) במקום צבע טקסט",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4d56abd3e5d1e0c07ba05635df38fb641f914536",
"body": "עטיפת טקסט התיאור ב-Flexible כדי שיצטמצם ויספוג את שבריר הפיקסל\nבמקום לגלוש מה-Column.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון גלישת sub-pixel בכרטיס הספר בספרייה",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "000abac2f174ef1284a91989aa0b24534c80950e",
"body": "קישורי ה-inline ועוגני-המילה ממופים למיקומי התווים של הנוסח הראשי, ולכן\nמוצגים במקומות שגויים בגוף הטקסט של מהדורה חלופית. חוסמים את הזרקתם לגוף\nהטקסט (בתצוגה הרציפה ובצורת הדף); קישורי המפרשים ממשיכים להיטען ולהופיע\nבחלונית ללא שינוי.",
"is_bot": false,
"headline": "קישורים: הסתרת קישורים מגוף הטקסט בגרסאות חלופיות",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65eec468158579c9561508cd9e08922dcda4621e",
"body": "במקום `אין תוצאות` שהיה עד עכשיו",
"is_bot": false,
"headline": "חיפוש: הודעת שגיאה ברורה בהגעה למגבלות המנוע",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "881c94c343aa82911934ecc7cf62a45c4caa7780",
"body": null,
"is_bot": false,
"headline": "חביצוע חיפוש על ידי לחיצה על סמל החיפוש",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee2c09b62c77792660168ae506015e7570af4e2f",
"body": null,
"is_bot": false,
"headline": "קישורים: הצגה גם במצב הסתר פיסוק",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86fb052a73b95684f98b2d74df0a68e9ab443694",
"body": null,
"is_bot": false,
"headline": "תוספים: הסרת תוספם מוצמדים מכלים",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-25T21:14:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e6cdf63623d16f4767680d8b7c76e58334e03547",
"body": "בדיקה על ה-ReadingScreen האמיתי מעל TabsBloc אמיתי ואירועי MoveTab\nאמיתיים, במקום PageView משוחזר. הקריטריון: identical() על מופע ה-State\nשל מסך הטאב — ב-PDF זה בדיוק ההבדל בין \"המסמך נשאר פתוח\" לבין\n\"dispose סוגר אותו ו-initState טוען מחדש מהדיסק\".\n\nאומת שהבדיקה תופסת את הבאג ולא מאמתת את עצמה: הסר\n[…]\nwidget test (pdfrx נייטיב, דיסק,\nBookmarkBloc, TourCubit); הבדיקה משתמשת ב-PdfCommentatorsTab שעובר באותו\n_buildTabView עם אותו פרופיל keepAlive.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "בדיקות QA להעברת כרטיסייה + assert נגד מופע טאב כפול",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-25T21:09:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "837358dc78df4eccc3ea04d1374f714247692bf6",
"body": "גרירת טאב בשורת הטאבים הרסה את ה-State של הטאבים שזזו — ב-PDF זה סגר\nאת המסמך ופתח אותו מחדש מהדיסק. הכשל פגע גם בטאבים שהמשתמש לא נגע בהם:\nגרירת הטאב הראשון לסוף הרסה גם את הטאב שזז בעקבותיו.\n\nהשורש: PageView מזהה ילדים לפי *מיקום* ולא לפי מפתח. ValueKey(tab) על\nהילד לא הספיק — בהזזה כל המיקומים זז\n[…]\n רצות על Stack במקום על PageView;\nהבדיקה החדשה רצה על PageView אמיתי עם AutomaticKeepAliveClientMixin,\nכפי שעושים PdfBookScreen ו-TextBookScreen.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "תיקון: העברת כרטיסייה טענה את הספר מחדש (כבד במיוחד ב-PDF)",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-25T20:35:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c27ac02b85ede4b3ec0e84d278bb24ef6bb9e465",
"body": "הסרת כתיבת links אל seforim.db, הסרת קוד מת",
"is_bot": false,
"headline": "Merge pull request #623 from Otzaria/ypl",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T10:52:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48294d4716ff123534bf020deb5f0e75e19a59c2",
"body": "P2 — מחיקת תיקייה לא סוגרת עוד את חיבור ה-RO ל-seforim.db: הוסרו\nprepareForWrite/restoreAfterWrite מ-runDeleteFolderFromDbInIsolate ומהקורא,\nמכיוון שהמחיקה פותחת את seforim.db read-only וכותבת רק ל-user_books.db.\n\nP2 — נסגר נתיב legacy שיכל לכתוב ל-seforim.db: userBooksRepository הפך\nלחובה ב-getInst\n[…]\nרש.\n\nP3 — הוסר addedLinks מ-FileSyncResult, ממיפוי ה-worker ומהודעות ה-UI/לוג\n(תמיד היה 0 אחרי הסרת ה-links), ותוקנו הערות שתיארו סנכרון links.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "סנכרון: ניקוי שאריות אחרי הסרת ה-links (תגובה ל-review)",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T07:46:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "02a463fe4d57c90e4429f66d083f8da85688ed2b",
"body": "בעקבות הפיכת seforim.db ל-read-only מוחלט ב-runtime, שלושה מנגנוני כתיבה\nנותרו ללא אף קורא:\n\n- deleteBookByFilePath (file_sync_service) — שריד מ-GitHub-sync ישן.\n- optimizeDatabase (VACUUM) — לא נקרא בשום מקום.\n- withWritableSession + _runWritableSession + _writeChain — מנגנון ה-RW\n הזמני; היחיד שק\n[…]\n: היא ממתינה כעת\nל-gate בלבד, ללא שרשרת ה-write שכבר אינה קיימת.\n\nטסטי ה-withWritableSession הוסרו; טסטי ה-gout וה-journal-normalization נשמרו.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "הסרת קוד מת שכתב ל-seforim.db (מנגנוני RW ללא קוראים)",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T07:23:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1c4272335c49ef2ecddb09826203895a19bacaf6",
"body": "תיקיית libraryPath/links היא שריד מהספרייה מבוססת-הקבצים ואינה נוצרת עוד\nבארכיטקטורה מבוססת-ה-DB. שלב הסנכרון שסרק אותה היה הכותב היחיד ל-seforim.db\nב-runtime. הוסר לגמרי:\n\n- שלב ה-links ב-background_db_sync_worker + _hasPendingLinkFiles.\n- סריקת תיקיית links ב-file_sync_service + פרמטר syncLinks.\n-\n[…]\n הגנרטור לבניית DB חדש (לא נוגע ב-seforim.db\nהמותקן). ייבוא \"דורות וקישורים\" של המשתמש עצמאי (UserContentImporter →\nuser_books.db) ואינו מושפע.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "סנכרון: הסרת שלב ה-links שכתב ל-seforim.db — ה-DB הראשי read-only מוחלט",
"author_name": "Y-PLONI",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T07:23:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4f166fcf6a8bf846567d9609ffee9e949ae17bae",
"body": null,
"is_bot": false,
"headline": "dart format",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T04:41:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afb4e2dfdb983dff46cc755bac3c534aa53ae060",
"body": "לעזי רש\"י: הצגת הלעז מתחת לפירוש רש\"י",
"is_bot": false,
"headline": "Merge pull request #617 from Nathaniel-260/laaz-commentary",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T04:28:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df27e132f2f4b6252eea1f6da77de103b63dfa18",
"body": null,
"is_bot": false,
"headline": "לעזי רש״י: טעינת קישורים מהמסד הרשמי בלבד",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T03:44:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "18c018541c936b8def217a872893db9cb31ca416",
"body": "הסרת מנגנון חיפוש הלעז לפי כתיב (תפריט לחיצה ימנית, אינדקס תעתיק, התאמת כתיב), שהוחלף בהצגת הלעז לפי קישורי ה-DB מתחת לרש\"י. תשתית טעינת הלעז והפירוק נשמרה לשימוש הפיצ'ר החדש.",
"is_bot": false,
"headline": "לעזי רש\"י: הסרת חיפוש הכתיב בלחיצה ימנית",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-24T03:39:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b916a531f13c8c9069f13dfc8e25ad6ab1a02428",
"body": "הלעז מ\"אוצר לעזי רש\"י\" מוצג כבלוק קטן מתחת לשורת הרש\"י שאליה הוא\nמקושר, בכל תצוגות המפרשים: רשימה, משולב, מפוצל, טאב, צורת הדף\n(פאנל וטורים), PDF וחלונית הקישורים. ההתאמה לפי קישורי ה-DB\nהקיימים (שורת רש\"י → ערך לעז), בלי התאמת כתיב ובלי אינדקס בזיכרון:\nשאילתה נקודתית שנבנית פעם אחת. התצוגה מציגה שם-לעז + תרגום עברי\nבלבד, בגודל פרופורציונלי לטקסט המפרש. ספר לעז חסר → נעדר בשקט.",
"is_bot": false,
"headline": "לעזי רש\"י: הצגת הלעז מתחת לפירוש רש\"י",
"author_name": "נתנאל_26",
"author_login": "Nathaniel-260",
"committed_at": "2026-07-24T03:39:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b6cbdb411eb9673410fe7094733ffc4be228154",
"body": "ספרייה: מסכתות הבבלי מוצגות פעם אחת ונפתחות לפי הגדרת הפורמט",
"is_bot": false,
"headline": "Merge pull request #616 from palmoni5/dev",
"author_name": "Y-Ploni",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T03:37:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26d05b165fe1140492bb44e6371397aecba6043c",
"body": null,
"is_bot": false,
"headline": "תלמוד בבלי: עדכון התקנות קיימות ללא סימון גרסה",
"author_name": "ypl",
"author_login": "Y-PLONI",
"committed_at": "2026-07-24T03:36:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e004845214ec3327aac6b710441e345349456ba",
"body": "…וזרות\n\n- הסימון והבדיקה עברו מתג ה-release ל-sha256 של הנכס: תגי otzaria-library\n מתחלפים כמעט יומית עם אותו קובץ, וכל תג חדש גרר הורדת ~440MB מיותרת.\n סימון-תג קיים ממופה ל-digest דרך releases/tags בלי הורדה כשהתוכן זהה.\n- איתור ה-release: אם הנכס חסר ב-latest (למשל release של fordb) נסרקת רשימת\n ה-releases עמוד אחר עמוד עד שנמצא; ההתקנה הראשונית משתמשת באותו איתור,\n מאמתת sha256 ומחתימה digest. כשהנכס לא קיים כלל — דילוג במקום כתובת שבורה,\n ובדיקת העדכון תשלים את ההתקנה כשיפורסם.",
"is_bot": false,
"headline": "תלמוד בבלי: זיהוי לפי digest ואיתור release עם עימוד — סוף להורדות הח…",
"author_name": "palmoni5",
"author_login": "palmoni5",
"committed_at": "2026-07-24T03:24:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4f79e4d5d6ad93a67f6f4adf186e2087442c86a",
"body": null,
"is_bot": false,
"headline": "דיאלוג גרסאות: רינדור הערות המהדורה כ-HTML עם קישורים לחיצים",
"author_name": "palmoni5",
"author_login": "palmoni5",
"committed_at": "2026-07-24T03:24:34Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 4053,
"latest_release_at": "2026-07-01T19:19:34Z",
"latest_release_tag": "0.9.95+699",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 52,
"days_since_latest_release": 26,
"mean_days_between_releases": 8.1
},
"community": {
"has_readme": false,
"has_license": false,
"has_description": false,
"has_contributing": false,
"health_percentage": null,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 52,
"stars": 49,
"watchers": 4,
"fork_history": {
"days": [
{
"date": "2025-09-26",
"count": 1
},
{
"date": "2025-10-10",
"count": 1
},
{
"date": "2025-10-15",
"count": 2
},
{
"date": "2025-10-23",
"count": 1
},
{
"date": "2025-11-01",
"count": 1
},
{
"date": "2025-11-02",
"count": 1
},
{
"date": "2025-11-05",
"count": 1
},
{
"date": "2025-11-09",
"count": 1
},
{
"date": "2025-11-12",
"count": 1
},
{
"date": "2025-11-14",
"count": 1
},
{
"date": "2025-12-11",
"count": 1
},
{
"date": "2025-12-21",
"count": 1
},
{
"date": "2026-01-13",
"count": 3
},
{
"date": "2026-01-15",
"count": 1
},
{
"date": "2026-01-16",
"count": 1
},
{
"date": "2026-01-20",
"count": 1
},
{
"date": "2026-01-21",
"count": 1
},
{
"date": "2026-02-05",
"count": 1
},
{
"date": "2026-02-08",
"count": 1
},
{
"date": "2026-02-20",
"count": 2
},
{
"date": "2026-03-08",
"count": 1
},
{
"date": "2026-03-15",
"count": 1
},
{
"date": "2026-03-18",
"count": 1
},
{
"date": "2026-03-29",
"count": 1
},
{
"date": "2026-04-06",
"count": 1
},
{
"date": "2026-04-12",
"count": 3
},
{
"date": "2026-04-14",
"count": 1
},
{
"date": "2026-04-22",
"count": 1
},
{
"date": "2026-04-24",
"count": 2
},
{
"date": "2026-04-26",
"count": 1
},
{
"date": "2026-05-04",
"count": 1
},
{
"date": "2026-05-09",
"count": 1
},
{
"date": "2026-05-12",
"count": 1
},
{
"date": "2026-05-15",
"count": 1
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-06-23",
"count": 1
},
{
"date": "2026-06-30",
"count": 1
},
{
"date": "2026-07-10",
"count": 1
},
{
"date": "2026-07-12",
"count": 1
},
{
"date": "2026-07-13",
"count": 1
},
{
"date": "2026-07-16",
"count": 1
},
{
"date": "2026-07-17",
"count": 1
},
{
"date": "2026-07-19",
"count": 1
},
{
"date": "2026-07-21",
"count": 1
},
{
"date": "2026-07-25",
"count": 1
}
],
"complete": true,
"collected": 52,
"total_forks": 52
},
"star_history": null,
"open_issues_and_prs": 11
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"example"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"android/app/build.gradle",
"android/build.gradle"
],
"largest_source_bytes": 588429,
"source_files_sampled": 1274,
"oversized_source_files": 31,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 37494
},
"dependencies": {
"manifests": [
"android/build.gradle"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"maven"
],
"dependencies": [],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 3,
"merged_prs": 288,
"open_issues": 8,
"closed_ratio": 0.965,
"closed_issues": 223,
"closed_unmerged_prs": 134
},
"bus_factor": 2,
"bot_contributors": 2,
"top_contributors": [
{
"type": "User",
"login": "Y-PLONI",
"commits": 1707,
"avatar_url": "https://avatars.githubusercontent.com/u/116633732?v=4"
},
{
"type": "User",
"login": "palmoni5",
"commits": 867,
"avatar_url": "https://avatars.githubusercontent.com/u/216508796?v=4"
},
{
"type": "User",
"login": "Sivan22",
"commits": 359,
"avatar_url": "https://avatars.githubusercontent.com/u/89018301?v=4"
},
{
"type": "User",
"login": "gwngdwl",
"commits": 217,
"avatar_url": "https://avatars.githubusercontent.com/u/218164475?v=4"
},
{
"type": "User",
"login": "YOSEFTT",
"commits": 135,
"avatar_url": "https://avatars.githubusercontent.com/u/166497965?v=4"
},
{
"type": "User",
"login": "mosh-dvd",
"commits": 92,
"avatar_url": "https://avatars.githubusercontent.com/u/159475042?v=4"
},
{
"type": "User",
"login": "rachelGrayover",
"commits": 68,
"avatar_url": "https://avatars.githubusercontent.com/u/16652826?v=4"
},
{
"type": "User",
"login": "Nathaniel-260",
"commits": 62,
"avatar_url": "https://avatars.githubusercontent.com/u/217926105?v=4"
},
{
"type": "User",
"login": "mmichaelush",
"commits": 61,
"avatar_url": "https://avatars.githubusercontent.com/u/104845712?v=4"
},
{
"type": "User",
"login": "userbot000",
"commits": 50,
"avatar_url": "https://avatars.githubusercontent.com/u/239331320?v=4"
}
],
"contributors_sampled": 27,
"top_contributor_share": 0.455
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"Build Windows EXE Only no release.yaml",
"build-and-announce.yml",
"deploy-google-play.yml",
"flutter_tests.yml",
"wiki-edit-log.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 8,
"reason": "6 out of 7 merged PRs checked by a CI test -- score normalized to 8",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 7,
"reason": "Found 7/10 approved changesets -- score normalized to 7",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 0,
"reason": "dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 9,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "4e76c7ff44e7ab09727a007f0ebccf8b9a41139b",
"ran_at": "2026-07-28T04:52:15Z",
"aggregate_score": 3.4,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-27T20:18:45Z",
"oldest_open_prs": [
{
"number": 652,
"created_at": "2026-07-27T21:17:28Z",
"last_comment_at": "2026-07-27T21:51:08Z",
"last_comment_author": "Nathaniel-260"
},
{
"number": 653,
"created_at": "2026-07-27T22:21:57Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 654,
"created_at": "2026-07-27T23:24:22Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-27T20:18:44Z",
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 593,
"created_at": "2026-07-18T20:03:19Z",
"last_comment_at": "2026-07-25T18:40:40Z",
"last_comment_author": "palmoni5"
},
{
"number": 635,
"created_at": "2026-07-26T12:05:52Z",
"last_comment_at": "2026-07-27T20:30:11Z",
"last_comment_author": "palmoni5"
},
{
"number": 642,
"created_at": "2026-07-27T12:00:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 649,
"created_at": "2026-07-27T20:21:04Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 650,
"created_at": "2026-07-27T20:36:43Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 651,
"created_at": "2026-07-27T20:59:06Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 655,
"created_at": "2026-07-27T23:27:21Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 656,
"created_at": "2026-07-28T02:56:47Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/Otzaria/otzaria",
"host": "github.com",
"name": "otzaria",
"owner": "Otzaria"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"security": 33,
"vitality": 96,
"community": 32,
"governance": 63,
"engineering": 62
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 96,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"commits_last_year": 4053,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 52
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "52/52 weeks with commits",
"points": 36,
"status": "met",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 52
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "4053 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 4053
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 100,
"latest_release_tag": "0.9.95+699",
"releases_from_tags": false,
"days_since_latest_release": 26,
"mean_days_between_releases": 8.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 26 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 26
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~8.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 8.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 32,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"forks": 52,
"stars": 49,
"watchers": 4,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "49 stars",
"points": 27.3,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 49
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "52 forks",
"points": 14.2,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 52
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "4 watchers",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 4
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 19,
"inputs": {
"has_readme": false,
"has_license": false,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "license file present, not a recognized license",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "license_custom",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 63,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 27,
"top_contributor_share": 0.455
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 46% of commits",
"points": 12.3,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 46
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "27 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 27
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"merged_prs": 288,
"open_issues": 8,
"closed_issues": 223,
"issue_closed_ratio": 0.965,
"closed_unmerged_prs": 134
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "96% of issues closed",
"points": 45.1,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 96
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "288/422 decided PRs merged",
"points": 26.1,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 288,
"decided": 422
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 7/10 approved changesets -- score normalized to 7",
"points": 10.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"followers": 10,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "Otzaria",
"public_repos": 28,
"account_age_days": 261
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "10 followers of Otzaria",
"points": 7.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 10,
"login": "Otzaria"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "28 public repos, account ~0 yr old",
"points": 12.1,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 28
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 62,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "5 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 5
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "6 out of 7 merged PRs checked by a CI test -- score normalized to 8",
"points": 16,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"topics": [
"otzaria"
],
"has_wiki": true,
"homepage": "http://www.otzaria.org/",
"has_readme": false,
"has_docs_dir": true,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "http://www.otzaria.org/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "1 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 1
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 33,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 33,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.4
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "6 out of 7 merged PRs checked by a CI test -- score normalized to 8",
"points": 2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 7/10 approved changesets -- score normalized to 7",
"points": 5.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "dangerous workflow patterns detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 5
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 68,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "good",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.69,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 37494
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "69 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 36.8,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 69,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.4,
"toolchain_manifests": [
"android/app/build.gradle",
"android/build.gradle"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "android/app/build.gradle, android/build.gradle (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "android/app/build.gradle, android/build.gradle"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Dart (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Dart"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "40 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 40,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "Dart",
"largest_source_bytes": 588429,
"source_files_sampled": 1274,
"oversized_source_files": 31
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Dart (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Dart"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "31/1274 source files over 60KB",
"points": 53.7,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1274,
"oversized": 31
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"Community profile unavailable",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-28T04:52:41.205082Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/Otzaria/otzaria.svg",
"full_name": "Otzaria/otzaria",
"license_state": "custom",
"license_spdx": null
}