kanbo-cli 0.1.0
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/LICENSE +21 -0
- package/README.md +79 -0
- package/dist/better-sqlite3-fU3G4xnX.cjs +2254 -0
- package/dist/better-sqlite3-fU3G4xnX.cjs.map +1 -0
- package/dist/cli.cjs +42949 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/dist-Cd6wg8pp.cjs +942 -0
- package/dist/dist-Cd6wg8pp.cjs.map +1 -0
- package/dist/drizzle-postgres/0000_board.sql +135 -0
- package/dist/drizzle-postgres/0001_history_order.sql +2 -0
- package/dist/drizzle-postgres/0002_issue_pull_requests.sql +16 -0
- package/dist/drizzle-postgres/0003_milestone_start_date.sql +1 -0
- package/dist/drizzle-postgres/0004_status_entry_rules.sql +1 -0
- package/dist/drizzle-postgres/0005_run_external_session_ref.sql +1 -0
- package/dist/drizzle-postgres/README.md +61 -0
- package/dist/drizzle-postgres/meta/0000_snapshot.json +1078 -0
- package/dist/drizzle-postgres/meta/0001_snapshot.json +1090 -0
- package/dist/drizzle-postgres/meta/0002_snapshot.json +1239 -0
- package/dist/drizzle-postgres/meta/0003_snapshot.json +1245 -0
- package/dist/drizzle-postgres/meta/0004_snapshot.json +1251 -0
- package/dist/drizzle-postgres/meta/0005_snapshot.json +1257 -0
- package/dist/drizzle-postgres/meta/_journal.json +48 -0
- package/dist/drizzle-sqlite/0000_board.sql +133 -0
- package/dist/drizzle-sqlite/0001_issue_pull_requests.sql +15 -0
- package/dist/drizzle-sqlite/0002_milestone_start_date.sql +1 -0
- package/dist/drizzle-sqlite/0003_status_entry_rules.sql +1 -0
- package/dist/drizzle-sqlite/0004_run_external_session_ref.sql +1 -0
- package/dist/drizzle-sqlite/README.md +67 -0
- package/dist/drizzle-sqlite/meta/0000_snapshot.json +946 -0
- package/dist/drizzle-sqlite/meta/0001_snapshot.json +1054 -0
- package/dist/drizzle-sqlite/meta/0002_snapshot.json +1061 -0
- package/dist/drizzle-sqlite/meta/0003_snapshot.json +1068 -0
- package/dist/drizzle-sqlite/meta/0004_snapshot.json +1075 -0
- package/dist/drizzle-sqlite/meta/_journal.json +41 -0
- package/dist/lib/board-store-B16YarvX.d.mts +281 -0
- package/dist/lib/board-store-BHHo_ZlR.d.cts +281 -0
- package/dist/lib/index.cjs +340 -0
- package/dist/lib/index.cjs.map +1 -0
- package/dist/lib/index.d.cts +1608 -0
- package/dist/lib/index.d.mts +1608 -0
- package/dist/lib/index.mjs +284 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/manifest-C0EcwwgO.mjs +7866 -0
- package/dist/lib/manifest-C0EcwwgO.mjs.map +1 -0
- package/dist/lib/manifest-CpZOcB_6.cjs +8272 -0
- package/dist/lib/manifest-CpZOcB_6.cjs.map +1 -0
- package/dist/lib/mcp/index.cjs +184 -0
- package/dist/lib/mcp/index.cjs.map +1 -0
- package/dist/lib/mcp/index.d.cts +346 -0
- package/dist/lib/mcp/index.d.mts +346 -0
- package/dist/lib/mcp/index.mjs +173 -0
- package/dist/lib/mcp/index.mjs.map +1 -0
- package/dist/lib/migrate-BhYi9cXw.mjs +656 -0
- package/dist/lib/migrate-BhYi9cXw.mjs.map +1 -0
- package/dist/lib/migrate-DnMjTCvu.cjs +709 -0
- package/dist/lib/migrate-DnMjTCvu.cjs.map +1 -0
- package/dist/lib/migrations-path-CZxVOgeD.cjs +109 -0
- package/dist/lib/migrations-path-CZxVOgeD.cjs.map +1 -0
- package/dist/lib/migrations-path-Ciwan537.mjs +80 -0
- package/dist/lib/migrations-path-Ciwan537.mjs.map +1 -0
- package/dist/lib/postgres/index.cjs +56 -0
- package/dist/lib/postgres/index.cjs.map +1 -0
- package/dist/lib/postgres/index.d.cts +3403 -0
- package/dist/lib/postgres/index.d.mts +3403 -0
- package/dist/lib/postgres/index.mjs +35 -0
- package/dist/lib/postgres/index.mjs.map +1 -0
- package/dist/lib/roles.sql-B9rt-x4o.cjs +1033 -0
- package/dist/lib/roles.sql-B9rt-x4o.cjs.map +1 -0
- package/dist/lib/roles.sql-CvyCGt38.mjs +920 -0
- package/dist/lib/roles.sql-CvyCGt38.mjs.map +1 -0
- package/dist/lib/schema-epoch-ZyumVL_A.d.cts +16 -0
- package/dist/lib/schema-epoch-ZyumVL_A.d.mts +16 -0
- package/dist/lib/schema-fsHqNAip.d.cts +3612 -0
- package/dist/lib/schema-fsHqNAip.d.mts +3612 -0
- package/dist/lib/sqlite/index.cjs +23 -0
- package/dist/lib/sqlite/index.d.cts +175 -0
- package/dist/lib/sqlite/index.d.mts +175 -0
- package/dist/lib/sqlite/index.mjs +4 -0
- package/dist/lib/sqlite/schema.cjs +266 -0
- package/dist/lib/sqlite/schema.cjs.map +1 -0
- package/dist/lib/sqlite/schema.d.cts +2 -0
- package/dist/lib/sqlite/schema.d.mts +2 -0
- package/dist/lib/sqlite/schema.mjs +256 -0
- package/dist/lib/sqlite/schema.mjs.map +1 -0
- package/dist/lib/tool-names-9cmCn0gP.d.cts +112 -0
- package/dist/lib/tool-names-Dxg1UTUl.d.mts +112 -0
- package/dist/page/board.css +477 -0
- package/dist/page/board.js +2 -0
- package/drizzle-postgres/0000_board.sql +135 -0
- package/drizzle-postgres/0001_history_order.sql +2 -0
- package/drizzle-postgres/0002_issue_pull_requests.sql +16 -0
- package/drizzle-postgres/0003_milestone_start_date.sql +1 -0
- package/drizzle-postgres/0004_status_entry_rules.sql +1 -0
- package/drizzle-postgres/0005_run_external_session_ref.sql +1 -0
- package/drizzle-postgres/README.md +61 -0
- package/drizzle-postgres/meta/0000_snapshot.json +1078 -0
- package/drizzle-postgres/meta/0001_snapshot.json +1090 -0
- package/drizzle-postgres/meta/0002_snapshot.json +1239 -0
- package/drizzle-postgres/meta/0003_snapshot.json +1245 -0
- package/drizzle-postgres/meta/0004_snapshot.json +1251 -0
- package/drizzle-postgres/meta/0005_snapshot.json +1257 -0
- package/drizzle-postgres/meta/_journal.json +48 -0
- package/drizzle-sqlite/0000_board.sql +133 -0
- package/drizzle-sqlite/0001_issue_pull_requests.sql +15 -0
- package/drizzle-sqlite/0002_milestone_start_date.sql +1 -0
- package/drizzle-sqlite/0003_status_entry_rules.sql +1 -0
- package/drizzle-sqlite/0004_run_external_session_ref.sql +1 -0
- package/drizzle-sqlite/README.md +67 -0
- package/drizzle-sqlite/meta/0000_snapshot.json +946 -0
- package/drizzle-sqlite/meta/0001_snapshot.json +1054 -0
- package/drizzle-sqlite/meta/0002_snapshot.json +1061 -0
- package/drizzle-sqlite/meta/0003_snapshot.json +1068 -0
- package/drizzle-sqlite/meta/0004_snapshot.json +1075 -0
- package/drizzle-sqlite/meta/_journal.json +41 -0
- package/package.json +147 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "7",
|
|
3
|
+
"dialect": "postgresql",
|
|
4
|
+
"entries": [
|
|
5
|
+
{
|
|
6
|
+
"idx": 0,
|
|
7
|
+
"version": "7",
|
|
8
|
+
"when": 1790077635921,
|
|
9
|
+
"tag": "0000_board",
|
|
10
|
+
"breakpoints": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"idx": 1,
|
|
14
|
+
"version": "7",
|
|
15
|
+
"when": 1790112642551,
|
|
16
|
+
"tag": "0001_history_order",
|
|
17
|
+
"breakpoints": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"idx": 2,
|
|
21
|
+
"version": "7",
|
|
22
|
+
"when": 1790227027724,
|
|
23
|
+
"tag": "0002_issue_pull_requests",
|
|
24
|
+
"breakpoints": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"idx": 3,
|
|
28
|
+
"version": "7",
|
|
29
|
+
"when": 1790244865401,
|
|
30
|
+
"tag": "0003_milestone_start_date",
|
|
31
|
+
"breakpoints": true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"idx": 4,
|
|
35
|
+
"version": "7",
|
|
36
|
+
"when": 1790255382146,
|
|
37
|
+
"tag": "0004_status_entry_rules",
|
|
38
|
+
"breakpoints": true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"idx": 5,
|
|
42
|
+
"version": "7",
|
|
43
|
+
"when": 1790266707460,
|
|
44
|
+
"tag": "0005_run_external_session_ref",
|
|
45
|
+
"breakpoints": true
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
CREATE TABLE `issue_comments` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`issue_id` text NOT NULL,
|
|
4
|
+
`content` text NOT NULL,
|
|
5
|
+
`author_kind` text DEFAULT 'user' NOT NULL,
|
|
6
|
+
`author_id` text,
|
|
7
|
+
`source_chat_session_id` text,
|
|
8
|
+
`agent_activity_id` text,
|
|
9
|
+
`dedupe_key` text,
|
|
10
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
11
|
+
FOREIGN KEY (`issue_id`) REFERENCES `issues`(`id`) ON UPDATE no action ON DELETE cascade
|
|
12
|
+
);
|
|
13
|
+
--> statement-breakpoint
|
|
14
|
+
CREATE INDEX `issue_comments_issue_id_idx` ON `issue_comments` (`issue_id`);--> statement-breakpoint
|
|
15
|
+
CREATE UNIQUE INDEX `issue_comments_issue_dedupe_idx` ON `issue_comments` (`issue_id`,`dedupe_key`);--> statement-breakpoint
|
|
16
|
+
CREATE TABLE `issue_field_changes` (
|
|
17
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
18
|
+
`issue_id` text NOT NULL,
|
|
19
|
+
`field` text NOT NULL,
|
|
20
|
+
`from_value` text,
|
|
21
|
+
`to_value` text,
|
|
22
|
+
`actor_kind` text DEFAULT 'user' NOT NULL,
|
|
23
|
+
`actor_id` text,
|
|
24
|
+
`source_chat_session_id` text,
|
|
25
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
26
|
+
FOREIGN KEY (`issue_id`) REFERENCES `issues`(`id`) ON UPDATE no action ON DELETE cascade
|
|
27
|
+
);
|
|
28
|
+
--> statement-breakpoint
|
|
29
|
+
CREATE INDEX `issue_field_changes_issue_id_idx` ON `issue_field_changes` (`issue_id`);--> statement-breakpoint
|
|
30
|
+
CREATE TABLE `issue_milestones` (
|
|
31
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
32
|
+
`workspace_id` text NOT NULL,
|
|
33
|
+
`title` text NOT NULL,
|
|
34
|
+
`description` text,
|
|
35
|
+
`due_date` integer,
|
|
36
|
+
`status` text DEFAULT 'open' NOT NULL,
|
|
37
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
38
|
+
`updated_at` integer DEFAULT (unixepoch()) NOT NULL
|
|
39
|
+
);
|
|
40
|
+
--> statement-breakpoint
|
|
41
|
+
CREATE INDEX `issue_milestones_workspace_id_idx` ON `issue_milestones` (`workspace_id`);--> statement-breakpoint
|
|
42
|
+
CREATE TABLE `issue_relations` (
|
|
43
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
44
|
+
`source_issue_id` text NOT NULL,
|
|
45
|
+
`target_issue_id` text NOT NULL,
|
|
46
|
+
`type` text NOT NULL,
|
|
47
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
48
|
+
FOREIGN KEY (`source_issue_id`) REFERENCES `issues`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
49
|
+
FOREIGN KEY (`target_issue_id`) REFERENCES `issues`(`id`) ON UPDATE no action ON DELETE cascade
|
|
50
|
+
);
|
|
51
|
+
--> statement-breakpoint
|
|
52
|
+
CREATE INDEX `issue_relations_source_issue_id_idx` ON `issue_relations` (`source_issue_id`);--> statement-breakpoint
|
|
53
|
+
CREATE INDEX `issue_relations_target_issue_id_idx` ON `issue_relations` (`target_issue_id`);--> statement-breakpoint
|
|
54
|
+
CREATE UNIQUE INDEX `issue_relations_pair_type_unique` ON `issue_relations` (`source_issue_id`,`target_issue_id`,`type`);--> statement-breakpoint
|
|
55
|
+
CREATE TABLE `issue_runs` (
|
|
56
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
57
|
+
`issue_id` text NOT NULL,
|
|
58
|
+
`launched_by_kind` text DEFAULT 'user' NOT NULL,
|
|
59
|
+
`launched_by_id` text,
|
|
60
|
+
`agent_id` text,
|
|
61
|
+
`agent_name` text NOT NULL,
|
|
62
|
+
`host` text,
|
|
63
|
+
`execution_mode` text DEFAULT 'worktree' NOT NULL,
|
|
64
|
+
`branch` text,
|
|
65
|
+
`worktree_path` text,
|
|
66
|
+
`state` text DEFAULT 'running' NOT NULL,
|
|
67
|
+
`chat_session_id` text,
|
|
68
|
+
`started_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
69
|
+
`ended_at` integer,
|
|
70
|
+
FOREIGN KEY (`issue_id`) REFERENCES `issues`(`id`) ON UPDATE no action ON DELETE cascade
|
|
71
|
+
);
|
|
72
|
+
--> statement-breakpoint
|
|
73
|
+
CREATE INDEX `issue_runs_issue_id_idx` ON `issue_runs` (`issue_id`);--> statement-breakpoint
|
|
74
|
+
CREATE INDEX `issue_runs_issue_state_idx` ON `issue_runs` (`issue_id`,`state`);--> statement-breakpoint
|
|
75
|
+
CREATE INDEX `issue_runs_chat_session_idx` ON `issue_runs` (`chat_session_id`);--> statement-breakpoint
|
|
76
|
+
CREATE TABLE `issue_statuses` (
|
|
77
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
78
|
+
`workspace_id` text NOT NULL,
|
|
79
|
+
`name` text NOT NULL,
|
|
80
|
+
`description` text,
|
|
81
|
+
`color` text,
|
|
82
|
+
`category` text DEFAULT 'unstarted' NOT NULL,
|
|
83
|
+
`order` integer DEFAULT 0 NOT NULL,
|
|
84
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL
|
|
85
|
+
);
|
|
86
|
+
--> statement-breakpoint
|
|
87
|
+
CREATE INDEX `issue_statuses_workspace_id_idx` ON `issue_statuses` (`workspace_id`);--> statement-breakpoint
|
|
88
|
+
CREATE UNIQUE INDEX `issue_statuses_workspace_name_unique` ON `issue_statuses` (`workspace_id`,`name`);--> statement-breakpoint
|
|
89
|
+
CREATE TABLE `issues` (
|
|
90
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
91
|
+
`workspace_id` text NOT NULL,
|
|
92
|
+
`number` integer NOT NULL,
|
|
93
|
+
`status_id` text,
|
|
94
|
+
`milestone_id` text,
|
|
95
|
+
`parent_issue_id` text,
|
|
96
|
+
`title` text NOT NULL,
|
|
97
|
+
`description` text,
|
|
98
|
+
`priority` text DEFAULT 'none' NOT NULL,
|
|
99
|
+
`labels` text DEFAULT '[]' NOT NULL,
|
|
100
|
+
`assignee_kind` text,
|
|
101
|
+
`assignee_id` text,
|
|
102
|
+
`due_date` integer,
|
|
103
|
+
`created_by_kind` text DEFAULT 'user' NOT NULL,
|
|
104
|
+
`created_by_id` text DEFAULT '__self__' NOT NULL,
|
|
105
|
+
`source_chat_session_id` text,
|
|
106
|
+
`delegate_agent_id` text,
|
|
107
|
+
`delegate_provider_target_id` text,
|
|
108
|
+
`context_refs` text DEFAULT '[]' NOT NULL,
|
|
109
|
+
`status_line` text,
|
|
110
|
+
`waiting_for` text,
|
|
111
|
+
`execution_mode` text DEFAULT 'worktree' NOT NULL,
|
|
112
|
+
`order` integer DEFAULT 0 NOT NULL,
|
|
113
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
114
|
+
`updated_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
115
|
+
FOREIGN KEY (`status_id`) REFERENCES `issue_statuses`(`id`) ON UPDATE no action ON DELETE set null,
|
|
116
|
+
FOREIGN KEY (`milestone_id`) REFERENCES `issue_milestones`(`id`) ON UPDATE no action ON DELETE set null,
|
|
117
|
+
FOREIGN KEY (`parent_issue_id`) REFERENCES `issues`(`id`) ON UPDATE no action ON DELETE set null
|
|
118
|
+
);
|
|
119
|
+
--> statement-breakpoint
|
|
120
|
+
CREATE INDEX `issues_workspace_id_idx` ON `issues` (`workspace_id`);--> statement-breakpoint
|
|
121
|
+
CREATE UNIQUE INDEX `issues_workspace_number_unique` ON `issues` (`workspace_id`,`number`);--> statement-breakpoint
|
|
122
|
+
CREATE INDEX `issues_status_id_idx` ON `issues` (`status_id`);--> statement-breakpoint
|
|
123
|
+
CREATE INDEX `issues_milestone_id_idx` ON `issues` (`milestone_id`);--> statement-breakpoint
|
|
124
|
+
CREATE INDEX `issues_parent_issue_id_idx` ON `issues` (`parent_issue_id`);--> statement-breakpoint
|
|
125
|
+
CREATE INDEX `issues_delegate_agent_id_idx` ON `issues` (`delegate_agent_id`);--> statement-breakpoint
|
|
126
|
+
CREATE INDEX `issues_delegate_provider_target_id_idx` ON `issues` (`delegate_provider_target_id`);--> statement-breakpoint
|
|
127
|
+
CREATE TABLE `kanban_meta` (
|
|
128
|
+
`key` text PRIMARY KEY NOT NULL,
|
|
129
|
+
`revision` integer DEFAULT 0 NOT NULL,
|
|
130
|
+
`updated_at` integer DEFAULT (unixepoch()) NOT NULL
|
|
131
|
+
);--> statement-breakpoint
|
|
132
|
+
INSERT OR IGNORE INTO `kanban_meta` (`key`, `revision`) VALUES ('board', 0);--> statement-breakpoint
|
|
133
|
+
INSERT OR IGNORE INTO `kanban_meta` (`key`, `revision`) VALUES ('schema_epoch', 1);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
CREATE TABLE `issue_pull_requests` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`issue_id` text NOT NULL,
|
|
4
|
+
`owner` text NOT NULL,
|
|
5
|
+
`repo` text NOT NULL,
|
|
6
|
+
`number` integer NOT NULL,
|
|
7
|
+
`url` text NOT NULL,
|
|
8
|
+
`created_by_kind` text NOT NULL,
|
|
9
|
+
`created_by_id` text,
|
|
10
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
11
|
+
FOREIGN KEY (`issue_id`) REFERENCES `issues`(`id`) ON UPDATE no action ON DELETE cascade
|
|
12
|
+
);
|
|
13
|
+
--> statement-breakpoint
|
|
14
|
+
CREATE UNIQUE INDEX `issue_pull_requests_issue_pr_unique` ON `issue_pull_requests` (`issue_id`,`owner`,`repo`,`number`);--> statement-breakpoint
|
|
15
|
+
CREATE INDEX `issue_pull_requests_pr_idx` ON `issue_pull_requests` (`owner`,`repo`,`number`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE `issue_milestones` ADD `start_date` integer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE `issue_statuses` ADD `entry_rules` text;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE `issue_runs` ADD `external_session_ref` text;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!-- Once this directory changes, update this README.md -->
|
|
2
|
+
|
|
3
|
+
# Board migrations for a board file of this package's own
|
|
4
|
+
|
|
5
|
+
The board schema for a SQLite file nobody but this package owns — the one a
|
|
6
|
+
project keeps beside its code. It is one of the chains that build the same
|
|
7
|
+
board (ruling 5-2):
|
|
8
|
+
|
|
9
|
+
| Where the board lives | Who migrates it | With what |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| a board file of a project's own | this package, through `migrateBoardFile` | **this folder** |
|
|
12
|
+
| an external Postgres | `kanbo migrate` (`migrateBoardDatabase`) | `drizzle-postgres/` |
|
|
13
|
+
| a host app's own database | the app, with its own migrations | the app's own chain |
|
|
14
|
+
|
|
15
|
+
**A change to the board is a migration in every chain, written together** — at
|
|
16
|
+
the same `BOARD_SCHEMA_EPOCH` — or a board stops being the same board when it
|
|
17
|
+
moves. An app that keeps the board in its own database re-exports
|
|
18
|
+
`kanbo/sqlite/schema` and generates its own migration from it. `src/postgres/schema.parity.test.ts` compares the two schemas the chains
|
|
19
|
+
are generated from, so a column added on one side alone fails there rather than
|
|
20
|
+
in somebody's database.
|
|
21
|
+
|
|
22
|
+
Generated with `npm run generate:sqlite` from
|
|
23
|
+
`src/sqlite/schema.ts`.
|
|
24
|
+
|
|
25
|
+
## Files
|
|
26
|
+
|
|
27
|
+
- **0000_board.sql**: the whole board at epoch 1 — eight tables, their indexes
|
|
28
|
+
and the foreign keys that point inside the board. There are no foreign keys
|
|
29
|
+
out of it: this file has no `workspaces`, `agents` or `provider_targets` to
|
|
30
|
+
point at (ruling 5-1). The two `INSERT OR IGNORE` statements at the end seed
|
|
31
|
+
`kanban_meta` with `board` revision `0` and `schema_epoch` `1` (the generation
|
|
32
|
+
`assertBoardSchema` demands). They are hand-written, because `drizzle-kit`
|
|
33
|
+
generates structure, not rows: regenerating this file drops them, and they
|
|
34
|
+
have to be put back.
|
|
35
|
+
- **0001_issue_pull_requests.sql**: `issue_pull_requests`, the pull requests a
|
|
36
|
+
card names (ruling 4-1) — a plain `CREATE TABLE` with its foreign key onto
|
|
37
|
+
`issues` (cascade), the unique `(issue_id, owner, repo, number)` and the
|
|
38
|
+
`(owner, repo, number)` index. The epoch stays 1: a file still at 0000 carries
|
|
39
|
+
the right stamp and lacks the table, which `assertBoardSchema` reports as
|
|
40
|
+
`missingAddedTables` until `kanbo migrate` has been run on it.
|
|
41
|
+
- **0002_milestone_start_date.sql**: `issue_milestones.start_date` (unix
|
|
42
|
+
seconds, nullable), the day a milestone read as a sprint begins (ruling
|
|
43
|
+
5x-3) — a plain `ADD COLUMN`. The epoch stays 1; a file still at 0001 reads as
|
|
44
|
+
`board_schema_outdated` (`missingColumns`) until `kanbo migrate` has run.
|
|
45
|
+
- **0003_status_entry_rules.sql**: `issue_statuses.entry_rules` (text, a JSON
|
|
46
|
+
array of `ENTRY_RULES`, nullable), what a card must satisfy before an agent
|
|
47
|
+
may put it in the column (ruling 6-1) — a plain `ADD COLUMN`; `null` asks for
|
|
48
|
+
nothing. The epoch stays 1; a file still at 0002 reads as
|
|
49
|
+
`board_schema_outdated` (`missingColumns`) until `kanbo migrate` has run.
|
|
50
|
+
- **0004_run_external_session_ref.sql**: `issue_runs.external_session_ref`
|
|
51
|
+
(text, nullable), where an external agent's own log of a run lives, once it
|
|
52
|
+
has said (ruling 7-1): `claude:<id>` (a Claude Code session id) or
|
|
53
|
+
`codex:<id>` (a Codex session id — the one in the rollout's `session_meta`); `null` while it never has — a plain
|
|
54
|
+
`ADD COLUMN`. The epoch stays 1; a file still at 0003 reads as
|
|
55
|
+
`board_schema_outdated` (`missingColumns`) until `kanbo migrate` has run.
|
|
56
|
+
- **meta/**: the drizzle journal and schema snapshots. JSON only, or
|
|
57
|
+
`drizzle-kit generate` fails to parse the directory.
|
|
58
|
+
|
|
59
|
+
Nothing here rebuilds a table, and nothing here ever should: `migrateBoardFile`
|
|
60
|
+
is drizzle's own migrator, in one pass with foreign keys left as the caller set
|
|
61
|
+
them. A rebuild would need a runner that turns foreign keys off around it, and
|
|
62
|
+
the only reason to have one is other tables that point at the board — of which
|
|
63
|
+
this file has none.
|
|
64
|
+
|
|
65
|
+
A second migration takes a name of its own — the package script carries
|
|
66
|
+
`--name board` for the first one — so it is
|
|
67
|
+
`npx drizzle-kit generate --config drizzle.sqlite.config.ts --name <what it does>`.
|