hanoman 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hanoman",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Orchestrator + dashboard workflow docs-driven untuk sesi Claude Code / Codex",
5
5
  "type": "module",
6
6
  "repository": {
@@ -0,0 +1,58 @@
1
+ -- SPEC-384 · ADR-0092 · cabut error monitoring (SPEC-249/254/269/271/276/296) dan cross-audit
2
+ -- (SPEC-337). Pemantauan error produksi pindah ke Uptrace; data di bawah ini tak punya pembaca
3
+ -- lagi. DESTRUKTIF & TAK BISA DIBATALKAN.
4
+ --
5
+ -- Byte source-map hidup di HANOMAN_UPLOAD_DIR dengan nama opaque `<uuid>.map` — DIREKTORI YANG
6
+ -- SAMA dengan lampiran tiket. Migration SQL tak bisa menyentuh filesystem, jadi pembersihannya
7
+ -- adalah langkah runbook manual yang dijalankan SEBELUM migration ini: baca
8
+ -- `SELECT storageKey FROM SourceMapArtifact` lalu hapus tepat berkas-berkas itu (JANGAN direktorinya
9
+ -- — lampiran tiket ikut hilang). Lihat internal/docs/operations/production.md. Melewatkannya hanya
10
+ -- menyisakan byte inert.
11
+
12
+ -- `defer_foreign_keys` wajib berpasangan dengan `foreign_keys=OFF` di sini: Spec & Ticket memegang
13
+ -- FK ke "Project", dan rebuild di bawah menjatuhkan tabel itu sebelum penggantinya bernama sama.
14
+ -- Idiom yang sama dipakai migration SPEC-408.
15
+ PRAGMA foreign_keys=OFF;
16
+ PRAGMA defer_foreign_keys=ON;
17
+
18
+ -- 1. Tabel. ErrorEvent dulu (FK → ErrorGroup).
19
+ DROP TABLE IF EXISTS "ErrorEvent";
20
+ DROP TABLE IF EXISTS "SourceMapArtifact";
21
+ DROP TABLE IF EXISTS "ErrorGroup";
22
+ DROP TABLE IF EXISTS "ProjectLink";
23
+
24
+ -- 2. Project kehilangan kolom DSN. Table rebuild (pola Prisma untuk SQLite), bukan DROP COLUMN:
25
+ -- berkas DB ini bisa dibuka SQLite versi mana pun yang dibawa instalasi npm pengguna.
26
+ CREATE TABLE "new_Project" (
27
+ "id" TEXT NOT NULL PRIMARY KEY,
28
+ "name" TEXT NOT NULL,
29
+ "desc" TEXT NOT NULL,
30
+ "kind" TEXT NOT NULL,
31
+ "repoDir" TEXT,
32
+ "gitRemote" TEXT,
33
+ "stack" TEXT NOT NULL DEFAULT '',
34
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
35
+ "version" INTEGER NOT NULL DEFAULT 0,
36
+ "updatedAt" DATETIME NOT NULL,
37
+ "helpEnabled" BOOLEAN NOT NULL DEFAULT false,
38
+ "schedulerOptIn" BOOLEAN NOT NULL DEFAULT false,
39
+ "leadOptIn" BOOLEAN NOT NULL DEFAULT false
40
+ );
41
+ INSERT INTO "new_Project" ("id","name","desc","kind","repoDir","gitRemote","stack","createdAt","version","updatedAt","helpEnabled","schedulerOptIn","leadOptIn")
42
+ SELECT "id","name","desc","kind","repoDir","gitRemote","stack","createdAt","version","updatedAt","helpEnabled","schedulerOptIn","leadOptIn" FROM "Project";
43
+ DROP TABLE "Project";
44
+ ALTER TABLE "new_Project" RENAME TO "Project";
45
+
46
+ -- 3. Baris yang nilainya tak lagi sah menurut zod. Dibiarkan hidup, ia menggagalkan pembacaan
47
+ -- daftar notifikasi / backlog dengan galat parse — bukan dengan pesan yang berguna.
48
+ DELETE FROM "Notification" WHERE "type" = 'error';
49
+ -- Spec bersumber cross-audit DINORMALKAN, bukan dihapus: backlog item-nya pekerjaan nyata dengan
50
+ -- branch & dokumen; yang hilang cuma label asalnya.
51
+ UPDATE "Spec" SET "source" = 'audit' WHERE "source" = 'cross-audit';
52
+ DELETE FROM "SyncLog" WHERE "entity" = 'errorGroup';
53
+ DELETE FROM "SyncOutbox" WHERE "entity" = 'errorGroup';
54
+ DELETE FROM "SyncConflict" WHERE "entity" = 'errorGroup';
55
+ DELETE FROM "SchedulerQueueItem" WHERE "source" = 'errors';
56
+
57
+ PRAGMA foreign_keys=ON;
58
+ PRAGMA defer_foreign_keys=OFF;
@@ -18,35 +18,11 @@ model Project {
18
18
  createdAt DateTime @default(now())
19
19
  version Int @default(0) // SPEC-213 · version-stamp sync (ADR-0045)
20
20
  updatedAt DateTime @updatedAt
21
- ingestKeyHash String? // SPEC-249 · sha256(ingest key) hex; null = monitoring off. TAK PERNAH ke client.
22
- ingestKeyPrefix String? // SPEC-249 · ~12-16 char awal key untuk hint UI (bukan rahasia)
23
21
  helpEnabled Boolean @default(false) // SPEC-253 · opt-in Help Center publik
24
22
  schedulerOptIn Boolean @default(false) // SPEC-294 · ADR-0072 · opt-in scheduler otonom (LOCAL — tak masuk FIELDS sync)
25
23
  leadOptIn Boolean @default(false) // SPEC-409 · ADR-0091 · opt-in hanoman-lead (LOCAL — cermin schedulerOptIn)
26
24
  specs Spec[]
27
- errorGroups ErrorGroup[]
28
25
  tickets Ticket[]
29
- sourceMaps SourceMapArtifact[] // SPEC-276 · source-map ter-upload per release (symbolication)
30
- linksOut ProjectLink[] @relation("ProjectLinkFrom") // SPEC-337 · project ini bergantung pada …
31
- linksIn ProjectLink[] @relation("ProjectLinkTo") // SPEC-337 · … yang bergantung pada project ini
32
- }
33
-
34
- // SPEC-337 · ADR-0075 · relasi integrasi/dependency BERARAH antar project: from BERGANTUNG PADA to.
35
- // LOCAL-only (tak masuk SYNCED): id cuid + unique pasangan bertabrakan saat upsert-by-id lintas device.
36
- // onUpdate: Cascade → rename project (ADR-0064) merambat gratis; tak ada ref longgar baru.
37
- model ProjectLink {
38
- id String @id @default(cuid())
39
- fromProjectId String
40
- toProjectId String
41
- kind String // api | sdk | data | event | lainnya (zLinkKind)
42
- note String @default("") // bentuk integrasinya — disalin apa adanya ke prompt sesi audit lintas
43
- createdAt DateTime @default(now())
44
- updatedAt DateTime @updatedAt
45
- from Project @relation("ProjectLinkFrom", fields: [fromProjectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
46
- to Project @relation("ProjectLinkTo", fields: [toProjectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
47
-
48
- @@unique([fromProjectId, toProjectId])
49
- @@index([toProjectId])
50
26
  }
51
27
 
52
28
  model Spec {
@@ -310,7 +286,7 @@ model SchedulerQueueItem {
310
286
  id String @id @default(cuid())
311
287
  specId String @unique
312
288
  projectId String
313
- source String // backlog | errors | triase (asal checker)
289
+ source String // backlog | triase (asal checker) — SPEC-384 · `errors` dicabut (ADR-0092)
314
290
  priority String // tinggi | sedang | rendah (urutan drain)
315
291
  status String @default("queued") // queued | launched | done | failed
316
292
  sessionId String?
@@ -327,7 +303,7 @@ model SchedulerQueueItem {
327
303
  //
328
304
  // LOCAL-ONLY (tak disync, cermin SessionHistory/SchedulerQueueItem): barisnya menunjuk sesi tmux &
329
305
  // worktree di MESIN INI — menyiarkannya ke hub akan mengirim rujukan yang tak ada di sana. Tanpa
330
- // `version`/notifySynced. Tak ada FK ke Project: sesi VPS/cross-audit memakai projectId sintetis
306
+ // `version`/notifySynced. Tak ada FK ke Project: sesi VPS memakai projectId sintetis
331
307
  // (konvensi yang sama dipakai SessionResult & SessionHistory).
332
308
  model LeadDecision {
333
309
  id String @id @default(cuid())
@@ -361,68 +337,8 @@ model RuntimeConfig {
361
337
  updatedAt DateTime @updatedAt
362
338
  }
363
339
 
364
- // SPEC-249 · ADR-0060 · grup error per project (fingerprint dedup). SPEC-268/ADR-0066: agregat
365
- // grup kini tersync (version-stamp); ErrorEvent mentah tetap server-local (tak disync).
366
- model ErrorGroup {
367
- id String @id @default(cuid())
368
- projectId String
369
- fingerprint String
370
- type String
371
- message String
372
- sampleStack String?
373
- sampleFrames Json? // SPEC-276 · ADR-0070 · frame mentah sample (disymbolikasi saat display)
374
- release String? // SPEC-276 · ADR-0070 · release terakhir (korelasi build + surface di UI)
375
- environment String
376
- status String @default("new") // new | escalated | resolved
377
- count Int @default(0)
378
- firstSeenAt DateTime @default(now())
379
- lastSeenAt DateTime @default(now())
380
- specId String?
381
- createdAt DateTime @default(now())
382
- updatedAt DateTime @updatedAt
383
- version Int @default(0) // SPEC-268 · version-stamp sync (ADR-0066)
384
- project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
385
- events ErrorEvent[]
386
-
387
- @@unique([projectId, fingerprint])
388
- @@index([projectId, lastSeenAt])
389
- }
390
-
391
- // SPEC-249 · ADR-0060 · kejadian error mentah, dipangkas retensi (cap per grup + umur).
392
- model ErrorEvent {
393
- id String @id @default(cuid())
394
- groupId String
395
- projectId String
396
- type String
397
- message String
398
- stack String?
399
- frames Json? // SPEC-276 · ADR-0070 · frame terstruktur mentah dari SDK
400
- environment String
401
- release String?
402
- context Json?
403
- receivedAt DateTime @default(now())
404
- group ErrorGroup @relation(fields: [groupId], references: [id], onDelete: Cascade)
405
-
406
- @@index([groupId, receivedAt])
407
- @@index([projectId, receivedAt])
408
- }
409
340
 
410
- // SPEC-276 · ADR-0070 · source-map ter-upload per release untuk symbolication. Byte map di
411
- // HANOMAN_UPLOAD_DIR (server-local, TAK disync — cermin TicketAttachment biner & ErrorEvent).
412
- model SourceMapArtifact {
413
- id String @id @default(cuid())
414
- projectId String
415
- release String
416
- filename String // basename artifact hasil-build (mis. index-4f3a2b.js) yang dipetakan map ini
417
- debugId String?
418
- storageKey String // berkas opaque (uuid.map) di upload dir
419
- size Int
420
- createdAt DateTime @default(now())
421
- project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
422
341
 
423
- @@unique([projectId, release, filename])
424
- @@index([projectId, release])
425
- }
426
342
 
427
343
  // SPEC-253 · ADR-0062 · tiket keluhan Help Center. SPEC-268/ADR-0066: metadata tiket kini tersync
428
344
  // (version-stamp); lampiran (TicketAttachment, file biner) tetap server-local (tak disync).
@@ -437,7 +353,7 @@ model Ticket {
437
353
  status String @default("new") // new | accepted | rejected (zTicketStatus)
438
354
  accessKeyHash String @unique // sha256(kunci opaque) — lookup cek status. Plaintext hanya sekali.
439
355
  shareToken String? @unique // SPEC-293 · token bagikan link status publik (hnm_shr_…); operator → pelapor
440
- specId String? // soft-link Spec hasil promosi (cermin ErrorGroup.specId)
356
+ specId String? // soft-link Spec hasil promosi
441
357
  createdAt DateTime @default(now())
442
358
  updatedAt DateTime @updatedAt
443
359
  version Int @default(0) // SPEC-268 · version-stamp sync (ADR-0066)
@@ -452,7 +368,7 @@ model Ticket {
452
368
  model TicketAttachment {
453
369
  id String @id @default(cuid())
454
370
  ticketId String
455
- projectId String // denormal — isolasi & query murah (pola ErrorEvent.projectId)
371
+ projectId String // denormal — isolasi & query murah
456
372
  filename String // nama asli tersanitasi (display saja)
457
373
  mimeType String // image/png | image/jpeg | image/webp
458
374
  size Int