hanoman 0.1.9 → 0.1.10

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.9",
3
+ "version": "0.1.10",
4
4
  "description": "Orchestrator + dashboard workflow docs-driven untuk sesi Claude Code / Codex",
5
5
  "type": "module",
6
6
  "repository": {
@@ -0,0 +1,31 @@
1
+ -- SPEC-471 · ADR-0095 · cermin issue GitHub sebagai record lokal (pola Ticket, ADR-0062).
2
+ --
3
+ -- Tabel baru → `CREATE TABLE` polos; tak ada redefinisi tabel.
4
+ -- `id` deterministik "<projectId>:<owner>/<repo>#<number>" ditulis aplikasi, bukan default DB —
5
+ -- itulah yang mencegah dua mesin melahirkan dua baris untuk issue yang sama.
6
+ -- `specId` sengaja TANPA FOREIGN KEY, cermin Ticket.specId: changefeed bisa memancarkan
7
+ -- GithubIssue sebelum Spec-nya mendarat (kelas SPEC-382), dan FK akan menolaknya.
8
+ CREATE TABLE "GithubIssue" (
9
+ "id" TEXT NOT NULL PRIMARY KEY,
10
+ "projectId" TEXT NOT NULL,
11
+ "repoSlug" TEXT NOT NULL,
12
+ "number" INTEGER NOT NULL,
13
+ "title" TEXT NOT NULL,
14
+ "body" TEXT NOT NULL,
15
+ "authorLogin" TEXT NOT NULL,
16
+ "labels" JSONB NOT NULL,
17
+ "url" TEXT NOT NULL,
18
+ "issueState" TEXT NOT NULL,
19
+ "status" TEXT NOT NULL DEFAULT 'new',
20
+ "specId" TEXT,
21
+ "issueCreatedAt" DATETIME NOT NULL,
22
+ "issueUpdatedAt" DATETIME NOT NULL,
23
+ "pulledAt" DATETIME NOT NULL,
24
+ "version" INTEGER NOT NULL DEFAULT 0,
25
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
26
+ "updatedAt" DATETIME NOT NULL,
27
+ CONSTRAINT "GithubIssue_projectId_fkey" FOREIGN KEY ("projectId")
28
+ REFERENCES "Project" ("id") ON DELETE CASCADE ON UPDATE CASCADE
29
+ );
30
+
31
+ CREATE INDEX "GithubIssue_projectId_status_idx" ON "GithubIssue" ("projectId", "status");
@@ -24,6 +24,7 @@ model Project {
24
24
  specs Spec[]
25
25
  tickets Ticket[]
26
26
  customAgents CustomAgent[] // SPEC-450 · ADR-0094 · custom agent milik project ini
27
+ githubIssues GithubIssue[] // SPEC-471 · ADR-0095 · cermin issue repo GitHub project ini
27
28
  }
28
29
 
29
30
  model Spec {
@@ -91,6 +92,38 @@ model CustomAgent {
91
92
  @@index([projectId])
92
93
  }
93
94
 
95
+ // SPEC-471 · ADR-0095 · cermin issue GitHub sebagai record lokal, pola Ticket (ADR-0062).
96
+ // `id` DETERMINISTIK "<projectId>:<owner>/<repo>#<number>" ditulis aplikasi, bukan default DB —
97
+ // alasan yang sama dengan CustomAgent (ADR-0094): dua mesin yang menarik repo yang sama harus
98
+ // bertemu sebagai SATU baris di changefeed, bukan dua yang saling menelan. `projectId` ikut di
99
+ // dalam id karena dua project hanoman boleh menunjuk repo yang sama.
100
+ //
101
+ // `specId` sengaja TANPA FK (cermin Ticket.specId): changefeed bisa memancarkan GithubIssue
102
+ // sebelum Spec-nya mendarat (kelas SPEC-382) dan FK akan menolaknya.
103
+ model GithubIssue {
104
+ id String @id
105
+ projectId String
106
+ repoSlug String // "owner/repo"
107
+ number Int
108
+ title String
109
+ body String
110
+ authorLogin String
111
+ labels Json // string[]
112
+ url String
113
+ issueState String // open | closed — keadaan DI GITHUB saat ditarik
114
+ status String @default("new") // new | accepted | rejected (zGithubIssueStatus)
115
+ specId String? // soft-link Spec hasil promosi
116
+ issueCreatedAt DateTime
117
+ issueUpdatedAt DateTime
118
+ pulledAt DateTime
119
+ version Int @default(0) // SPEC-471 · version-stamp sync (ADR-0045)
120
+ createdAt DateTime @default(now())
121
+ updatedAt DateTime @updatedAt
122
+ project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
123
+
124
+ @@index([projectId, status])
125
+ }
126
+
94
127
  model Setting {
95
128
  id Int @id @default(1)
96
129
  data Json