ל-`issue.status` כותב לגיטימי אחד בפלאגין: הג'וב `sync-case-status`
(`ctx.jobs.register("sync-case-status", …)` ב-`src/worker.ts`). עד היום
האכיפה הייתה code-review בלבד — וזה בדיוק מה שאפשר את הבאג של legal-ai
#446 (flip-flop `done → in_progress`), כותב שני שנכנס בלי שאיש שם לב.
`scripts/int9-guard.mjs` — Node ESM חסר-תלויות. טוקנייזר תו-תו
(מחרוזות/תבניות עם `${}` מקונן/הערות/רגקס-ליטרלים) בונה מסכת "קוד רגיל",
ומעליה: כל `jobs.register("sync-case-status", …)` מגדיר **טווח-תווים מותר**
(איזון-סוגריים), וכל `issues.update(…)` שרשימת-הארגומנטים שלו מכילה את
המזהה `status` חייב לשבת בתוכו.
הגרעיניות היא טווח-קוד ולא רשימת-קבצים (הדפוס של `leak_guard.py` ב-legal-ai)
במכוון: הקריאה המותרת היחידה וכל קריאה עתידית אסורה יושבות באותו
`worker.ts`. הטווח נגזר מהמבנה האמיתי, ולכן שורד מעבר של הג'וב לקובץ אחר —
ושינוי שם-הג'וב מפיל את השער בקול במקום לפתוח חור שקט.
חריגה מכוונת: `// noqa: INT9 — <נימוק>`. `noqa: INT9` בלי נימוק הוא הפרה
בעצמו — אין השתקה שקטה. כשל-פענוח (סוגר שלא נסגר) מפיל את השער ולא נבלע.
`--self-test` מריץ 5 פיקסצ'רים (`scripts/fixtures/int9/`, מחוץ ל-`src/`
בכוונה) ומאמת ספירת-הפרות מדויקת — הוכחה שהשער נושך.
**ללא חיווט-CI.** ה-runner היחיד על nautilus רשום בהיקף-repo ל-`legal-ai`
בלבד (`action_runner.repo_id = 6`), ולכן job של הריפו הזה לא נאסף לעולם
(נמדד: ריצה 3200 / job 3250 תקוע ב-`queued`, `started_at: 1970-01-01`).
קובץ ה-workflow יושב ב-PR נפרד וחסום, כדי שלא ייכנס ל-`main` שער שמייצר
check תקוע-לנצח בכל PR עתידי. עד אז: `npm run int9:guard` /
`npm run int9:guard:self-test`.
מגבלה מוצהרת: תיל-מעידה סטטי, לא הוכחה — `issues.update(id, patch)` שבו
אובייקט-העדכון נבנה במקום אחר אינו נתפס.
Refs ezer-mishpati/legal-ai#618
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
33 lines
912 B
JSON
33 lines
912 B
JSON
{
|
|
"name": "@marcusgroup/plugin-legal-ai",
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"main": "dist/worker.js",
|
|
"paperclipPlugin": {
|
|
"manifest": "dist/manifest.js"
|
|
},
|
|
"scripts": {
|
|
"build": "tsc && node esbuild.ui.config.mjs",
|
|
"build:worker": "tsc",
|
|
"build:ui": "node esbuild.ui.config.mjs",
|
|
"dev": "paperclip-plugin-dev-server",
|
|
"format": "biome format --write src/",
|
|
"format:check": "biome format src/",
|
|
"biome": "biome check src/",
|
|
"biome:fix": "biome check --write src/",
|
|
"int9:guard": "node scripts/int9-guard.mjs",
|
|
"int9:guard:self-test": "node scripts/int9-guard.mjs --self-test"
|
|
},
|
|
"dependencies": {
|
|
"@paperclipai/plugin-sdk": "^2026.722.0",
|
|
"react": "^19.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@biomejs/biome": "2.4.11",
|
|
"@types/node": "^25.5.0",
|
|
"@types/react": "^19.0.0",
|
|
"esbuild": "^0.28.0",
|
|
"typescript": "^6.0.2"
|
|
}
|
|
}
|