@autocode-cli/autocode 0.29.0 → 0.37.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/.output/nitro.json +1 -1
- package/.output/public/_i18n/Mqu2gZRD/en/messages.json +1 -0
- package/.output/public/_i18n/Mqu2gZRD/fr/messages.json +1 -0
- package/.output/public/_nuxt/-DEWfUYv.js +1 -0
- package/.output/public/_nuxt/{CGH8jYZ3.js → 0VxesDuV.js} +1 -1
- package/.output/public/_nuxt/{Cw9GjiQd.js → 3dDT4orS.js} +1 -1
- package/.output/public/_nuxt/{DJ68wI4q.js → B-L8_kPw.js} +1 -1
- package/.output/public/_nuxt/{WXFPFJGI.js → B6_0bWxd.js} +1 -1
- package/.output/public/_nuxt/B8IBFC6T.js +1 -0
- package/.output/public/_nuxt/{mhFvEihp.js → B9-SkqjX.js} +3 -3
- package/.output/public/_nuxt/{DwEf6snv.js → BBTritm-.js} +1 -1
- package/.output/public/_nuxt/{D2yqkPsk.js → BDW6A7V8.js} +1 -1
- package/.output/public/_nuxt/{CuMOMF74.js → BE1Ftxsu.js} +1 -1
- package/.output/public/_nuxt/BF5itqHW.js +10 -0
- package/.output/public/_nuxt/{c7taDBy4.js → BHpbNCa8.js} +1 -1
- package/.output/public/_nuxt/{CUrMRCov.js → BJGB6i4C.js} +1 -1
- package/.output/public/_nuxt/{ttDeS43_.js → BJnlSHzy.js} +1 -1
- package/.output/public/_nuxt/{Dnk-IiYT.js → BNr40Cyx.js} +1 -1
- package/.output/public/_nuxt/{CftWxl87.js → BP-5A3ad.js} +1 -1
- package/.output/public/_nuxt/{CvtJgrAC.js → BPSRe1xo.js} +1 -1
- package/.output/public/_nuxt/{DV1gbxJr.js → BatC3POU.js} +1 -1
- package/.output/public/_nuxt/{QO28866g.js → BcwrT42V.js} +1 -1
- package/.output/public/_nuxt/{MqYwBbea.js → BmfOZEEG.js} +1 -1
- package/.output/public/_nuxt/BqOlVwUK.js +1 -0
- package/.output/public/_nuxt/{CMirklGN.js → Bx15WLHx.js} +1 -1
- package/.output/public/_nuxt/{s3F7y6k3.js → C1Dh6gFG.js} +1 -1
- package/.output/public/_nuxt/{Bb4iE1RK.js → C1d_VCXk.js} +1 -1
- package/.output/public/_nuxt/{YFXx8Qjo.js → C3g32ML-.js} +1 -1
- package/.output/public/_nuxt/{BiTHsA5D.js → C819KIPL.js} +1 -1
- package/.output/public/_nuxt/{DMLkLSSr.js → CDRiuU72.js} +1 -1
- package/.output/public/_nuxt/{BWuiHx6Z.js → CH4xRPqk.js} +1 -1
- package/.output/public/_nuxt/{Qp3vP2w-.js → CHFxtqug.js} +1 -1
- package/.output/public/_nuxt/{BhOptLaB.js → CHQoxcLf.js} +1 -1
- package/.output/public/_nuxt/CKyM99yH.js +1 -0
- package/.output/public/_nuxt/{2aYBL_7i.js → CORW7tev.js} +1 -1
- package/.output/public/_nuxt/{5c4wy8Fe.js → CQakkP7y.js} +1 -1
- package/.output/public/_nuxt/{C1majTdt.js → CTidC4T0.js} +1 -1
- package/.output/public/_nuxt/CWELpXTp.js +1 -0
- package/.output/public/_nuxt/{C8ykELcI.js → CjND9Y9S.js} +1 -1
- package/.output/public/_nuxt/{eAMnPBdX.js → Cm1brjPJ.js} +1 -1
- package/.output/public/_nuxt/{DUT6s2Vc.js → CohKcwVk.js} +1 -1
- package/.output/public/_nuxt/CpaAmOT1.js +1 -0
- package/.output/public/_nuxt/{BKohRmb3.js → CqtB_OH7.js} +1 -1
- package/.output/public/_nuxt/{DBRrdiDg.js → CvEn06t8.js} +1 -1
- package/.output/public/_nuxt/{D0l9HWst.js → D3FsoLQm.js} +1 -1
- package/.output/public/_nuxt/{ZxHW_Wwi.js → D3uRvzsu.js} +1 -1
- package/.output/public/_nuxt/{c9kaG6Mb.js → D6s--CDK.js} +1 -1
- package/.output/public/_nuxt/{CFO65yNa.js → DL-48EFA.js} +1 -1
- package/.output/public/_nuxt/{a0ULJgSn.js → DPdNpAt1.js} +1 -1
- package/.output/public/_nuxt/DbKMezC2.js +1 -0
- package/.output/public/_nuxt/{W7VQVcj3.js → DjSp0ni5.js} +3 -3
- package/.output/public/_nuxt/{C9F9DISc.js → Dku8fc7v.js} +1 -1
- package/.output/public/_nuxt/{B-SoSAQ-.js → DorDSzHT.js} +1 -1
- package/.output/public/_nuxt/{CtihvsfH.js → DpJr9JIo.js} +1 -1
- package/.output/public/_nuxt/{DS8c6APr.js → DvdVpK92.js} +1 -1
- package/.output/public/_nuxt/{DfzafmDP.js → DyAfzMRU.js} +1 -1
- package/.output/public/_nuxt/{tqfMB__6.js → G3ENYyJJ.js} +1 -1
- package/.output/public/_nuxt/{BvR2cHrU.js → G3RO7xM_.js} +1 -1
- package/.output/public/_nuxt/{BsOUGgHX.js → Q3VbeUEc.js} +1 -1
- package/.output/public/_nuxt/{E037g09h.js → _Lx_e17m.js} +1 -1
- package/.output/public/_nuxt/{DEbgyyF-.js → _S9g-Cdv.js} +1 -1
- package/.output/public/_nuxt/{C_XYgaP4.js → _dIH-mlE.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/cbc2f99e-ecf0-446a-810b-808825114bc3.json +1 -0
- package/.output/public/_nuxt/{BrN48gj6.js → c0R8lEWK.js} +1 -1
- package/.output/public/_nuxt/cli.D68WAxVv.css +1 -0
- package/.output/public/_nuxt/{Dmbsi9xE.js → cm-fPQZs.js} +1 -1
- package/.output/public/_nuxt/{C2MG9-_i.js → hYe2UtEI.js} +1 -1
- package/.output/public/_nuxt/index.B4qqY6WX.css +1 -0
- package/.output/public/_nuxt/index.CPvzWVwd.css +1 -0
- package/.output/public/_nuxt/{Camk5F-_.js → mbPYOeR0.js} +1 -1
- package/.output/public/_nuxt/n-2mvXdi.js +1 -0
- package/.output/public/_nuxt/new.84MgEEsd.css +1 -0
- package/.output/public/_nuxt/prompt.CNw9EZnJ.css +1 -0
- package/.output/public/_nuxt/{CL8Pd5Up.js → qNJDhLpf.js} +1 -1
- package/.output/public/_nuxt/{CDsqJjO8.js → rFVztcxU.js} +1 -1
- package/.output/public/_nuxt/{BG7brVhY.js → up1a6xQr.js} +1 -1
- package/.output/public/_nuxt/x9aAWeiI.js +1 -0
- package/.output/public/_payload.json +1 -1
- package/.output/public/api/_openapi.json +1 -1
- package/.output/public/docs/api/_payload.json +1 -1
- package/.output/public/docs/api/index.html +8 -4
- package/.output/public/docs/cli/_payload.json +1 -1
- package/.output/public/docs/cli/index.html +13 -13
- package/.output/public/index.html +1 -1
- package/.output/server/chunks/_/en.mjs +16 -23
- package/.output/server/chunks/_/en.mjs.map +1 -1
- package/.output/server/chunks/_/fr.mjs +16 -23
- package/.output/server/chunks/_/fr.mjs.map +1 -1
- package/.output/server/chunks/build/LandingAutonomy-styles.Dvel3Juy.mjs +8 -0
- package/.output/server/chunks/build/LandingAutonomy-styles.Dvel3Juy.mjs.map +1 -0
- package/.output/server/chunks/build/LandingFooter-styles.CudcJSR4.mjs +8 -0
- package/.output/server/chunks/build/LandingFooter-styles.CudcJSR4.mjs.map +1 -0
- package/.output/server/chunks/build/LandingPipeline-styles.C8JPQYOV.mjs +8 -0
- package/.output/server/chunks/build/LandingPipeline-styles.C8JPQYOV.mjs.map +1 -0
- package/.output/server/chunks/build/{cli-CZwbcgW5.mjs → cli-S2geGQoF.mjs} +27 -14
- package/.output/server/chunks/build/cli-S2geGQoF.mjs.map +1 -0
- package/.output/server/chunks/build/cli-styles.BonhH80m.mjs +8 -0
- package/.output/server/chunks/build/cli-styles.BonhH80m.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{en-BwRtQJL1.mjs → en-nHmCjmd_.mjs} +17 -24
- package/.output/server/chunks/build/{en-BwRtQJL1.mjs.map → en-nHmCjmd_.mjs.map} +1 -1
- package/.output/server/chunks/build/{fr-BAbxj8tA.mjs → fr-7FZEU85C.mjs} +17 -24
- package/.output/server/chunks/build/{fr-BAbxj8tA.mjs.map → fr-7FZEU85C.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-CKZ58Ox2.mjs → index-BZJzUQ3B.mjs} +27 -17
- package/.output/server/chunks/build/index-BZJzUQ3B.mjs.map +1 -0
- package/.output/server/chunks/build/{index-3KvoAMZW.mjs → index-DYwGkPcJ.mjs} +92 -275
- package/.output/server/chunks/build/index-DYwGkPcJ.mjs.map +1 -0
- package/.output/server/chunks/build/index-styles.BP9liX_F.mjs +8 -0
- package/.output/server/chunks/build/index-styles.BP9liX_F.mjs.map +1 -0
- package/.output/server/chunks/build/{new-BI12IpeK.mjs → new-BqYiaSD7.mjs} +19 -19
- package/.output/server/chunks/build/{new-BI12IpeK.mjs.map → new-BqYiaSD7.mjs.map} +1 -1
- package/.output/server/chunks/build/new-styles.BPjkN6Iy.mjs +8 -0
- package/.output/server/chunks/build/new-styles.BPjkN6Iy.mjs.map +1 -0
- package/.output/server/chunks/build/{prompt-BjvwrM-J.mjs → prompt-D-xu1MtO.mjs} +41 -12
- package/.output/server/chunks/build/prompt-D-xu1MtO.mjs.map +1 -0
- package/.output/server/chunks/build/prompt-styles.Dvlc6Xra.mjs +8 -0
- package/.output/server/chunks/build/prompt-styles.Dvlc6Xra.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +9 -9
- package/.output/server/chunks/build/styles.mjs +29 -35
- package/.output/server/chunks/nitro/nitro.mjs +551 -521
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/.well-known/appspecific/_...path_.mjs +34 -0
- package/.output/server/chunks/routes/.well-known/appspecific/_...path_.mjs.map +1 -0
- package/.output/server/chunks/routes/api/issues/_id/history.get.mjs +3 -2
- package/.output/server/chunks/routes/api/issues/_id/history.get.mjs.map +1 -1
- package/.output/server/node_modules/.prisma/client/index.js +4 -3
- package/.output/server/node_modules/.prisma/client/package.json +1 -1
- package/.output/server/package.json +1 -1
- package/bin/autocode +188 -4
- package/package.json +5 -6
- package/prisma/migrations/20260104173538_init/migration.sql +142 -0
- package/prisma/migrations/20260104180000_pipeline_versioning/migration.sql +216 -0
- package/prisma/migrations/20260104190638_add_column_prompts/migration.sql +50 -0
- package/prisma/migrations/20260105120000_remove_column_prompts/migration.sql +3 -0
- package/prisma/migrations/20260105150000_normalize_pipeline_names/migration.sql +37 -0
- package/prisma/migrations/20260105170000_remove_slug_prefixes/migration.sql +16 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +185 -0
- package/templates/prompts/_transition-decision.en.md +41 -25
- package/templates/prompts/_transition-decision.fr.md +28 -11
- package/templates/prompts/design.en.md +31 -9
- package/templates/prompts/design.fr.md +31 -9
- package/templates/prompts/git-tag.en.md +47 -11
- package/templates/prompts/git-tag.fr.md +47 -11
- package/templates/prompts/in-progress.en.md +43 -9
- package/templates/prompts/in-progress.fr.md +44 -10
- package/templates/prompts/qualification.en.md +48 -17
- package/templates/prompts/qualification.fr.md +48 -17
- package/templates/prompts/retest-cypress.en.md +14 -3
- package/templates/prompts/retest-cypress.fr.md +14 -3
- package/templates/prompts/review-security.en.md +35 -6
- package/templates/prompts/review-security.fr.md +35 -6
- package/templates/prompts/specification.en.md +29 -7
- package/templates/prompts/specification.fr.md +29 -7
- package/templates/prompts/splitter.en.md +50 -28
- package/templates/prompts/splitter.fr.md +52 -31
- package/templates/prompts/testing-cypress.en.md +14 -4
- package/templates/prompts/testing-cypress.fr.md +14 -4
- package/templates/prompts/testing-integration.en.md +39 -3
- package/templates/prompts/testing-integration.fr.md +39 -3
- package/.output/public/_i18n/_RCBbyrF/en/messages.json +0 -1
- package/.output/public/_i18n/_RCBbyrF/fr/messages.json +0 -1
- package/.output/public/_nuxt/B-QzFHDD.js +0 -1
- package/.output/public/_nuxt/Bn3kTsBm.js +0 -1
- package/.output/public/_nuxt/C2Vs_J-1.js +0 -1
- package/.output/public/_nuxt/CDVPefsv.js +0 -1
- package/.output/public/_nuxt/CSk34z2H.js +0 -1
- package/.output/public/_nuxt/DPWzdJ4S.js +0 -1
- package/.output/public/_nuxt/DrzMcrms.js +0 -1
- package/.output/public/_nuxt/_bAHEawb.js +0 -1
- package/.output/public/_nuxt/b2LQmhwq.js +0 -1
- package/.output/public/_nuxt/builds/meta/4d6876ea-4c52-49d1-a9d5-07bb0648a85e.json +0 -1
- package/.output/public/_nuxt/cli.e1u7fwy6.css +0 -1
- package/.output/public/_nuxt/hWy-7Z1L.js +0 -10
- package/.output/public/_nuxt/index.COVdL_Kx.css +0 -1
- package/.output/public/_nuxt/index.Dndk3KN9.css +0 -1
- package/.output/public/_nuxt/new.BFERdqdm.css +0 -1
- package/.output/public/_nuxt/prompt.DZ0wdOji.css +0 -1
- package/.output/server/chunks/build/LandingArchitecture-styles.Don6ug3a.mjs +0 -8
- package/.output/server/chunks/build/LandingArchitecture-styles.Don6ug3a.mjs.map +0 -1
- package/.output/server/chunks/build/LandingAutonomy-styles.D9JJFMEO.mjs +0 -8
- package/.output/server/chunks/build/LandingAutonomy-styles.D9JJFMEO.mjs.map +0 -1
- package/.output/server/chunks/build/LandingDemo-styles.WY8VUN9P.mjs +0 -8
- package/.output/server/chunks/build/LandingDemo-styles.WY8VUN9P.mjs.map +0 -1
- package/.output/server/chunks/build/LandingFooter-styles.sSpn5cgM.mjs +0 -8
- package/.output/server/chunks/build/LandingFooter-styles.sSpn5cgM.mjs.map +0 -1
- package/.output/server/chunks/build/LandingPipeline-styles.CL96fyQR.mjs +0 -8
- package/.output/server/chunks/build/LandingPipeline-styles.CL96fyQR.mjs.map +0 -1
- package/.output/server/chunks/build/LandingRoadmap-styles.DX5EsTsx.mjs +0 -8
- package/.output/server/chunks/build/LandingRoadmap-styles.DX5EsTsx.mjs.map +0 -1
- package/.output/server/chunks/build/cli-CZwbcgW5.mjs.map +0 -1
- package/.output/server/chunks/build/cli-styles.CSdcLhw8.mjs +0 -8
- package/.output/server/chunks/build/cli-styles.CSdcLhw8.mjs.map +0 -1
- package/.output/server/chunks/build/index-3KvoAMZW.mjs.map +0 -1
- package/.output/server/chunks/build/index-CKZ58Ox2.mjs.map +0 -1
- package/.output/server/chunks/build/index-styles.BJ7kZO7q.mjs +0 -8
- package/.output/server/chunks/build/index-styles.BJ7kZO7q.mjs.map +0 -1
- package/.output/server/chunks/build/new-styles.Chk5u_6M.mjs +0 -8
- package/.output/server/chunks/build/new-styles.Chk5u_6M.mjs.map +0 -1
- package/.output/server/chunks/build/prompt-BjvwrM-J.mjs.map +0 -1
- package/.output/server/chunks/build/prompt-styles.DWfublIG.mjs +0 -8
- package/.output/server/chunks/build/prompt-styles.DWfublIG.mjs.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "pipelines" (
|
|
3
|
+
"name" TEXT NOT NULL PRIMARY KEY,
|
|
4
|
+
"version" TEXT NOT NULL DEFAULT '1.0.0',
|
|
5
|
+
"description" TEXT,
|
|
6
|
+
"active" BOOLEAN NOT NULL DEFAULT false,
|
|
7
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
8
|
+
"updated_at" DATETIME NOT NULL
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
-- CreateTable
|
|
12
|
+
CREATE TABLE "columns" (
|
|
13
|
+
"slug" TEXT NOT NULL PRIMARY KEY,
|
|
14
|
+
"name" TEXT NOT NULL,
|
|
15
|
+
"index" INTEGER NOT NULL,
|
|
16
|
+
"segment" TEXT NOT NULL,
|
|
17
|
+
"pipeline_name" TEXT NOT NULL,
|
|
18
|
+
CONSTRAINT "columns_pipeline_name_fkey" FOREIGN KEY ("pipeline_name") REFERENCES "pipelines" ("name") ON DELETE CASCADE ON UPDATE CASCADE
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
-- CreateTable
|
|
22
|
+
CREATE TABLE "issues" (
|
|
23
|
+
"key" TEXT NOT NULL PRIMARY KEY,
|
|
24
|
+
"title" TEXT NOT NULL,
|
|
25
|
+
"description" TEXT,
|
|
26
|
+
"priority" TEXT NOT NULL DEFAULT 'P2',
|
|
27
|
+
"semver" TEXT NOT NULL DEFAULT 'patch',
|
|
28
|
+
"labels" TEXT NOT NULL DEFAULT '[]',
|
|
29
|
+
"column_slug" TEXT NOT NULL,
|
|
30
|
+
"parent_key" TEXT,
|
|
31
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
32
|
+
"updated_at" DATETIME NOT NULL,
|
|
33
|
+
CONSTRAINT "issues_column_slug_fkey" FOREIGN KEY ("column_slug") REFERENCES "columns" ("slug") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
34
|
+
CONSTRAINT "issues_parent_key_fkey" FOREIGN KEY ("parent_key") REFERENCES "issues" ("key") ON DELETE SET NULL ON UPDATE CASCADE
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
-- CreateTable
|
|
38
|
+
CREATE TABLE "acceptance_criteria" (
|
|
39
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
40
|
+
"issue_key" TEXT NOT NULL,
|
|
41
|
+
"criterion" TEXT NOT NULL,
|
|
42
|
+
"position" INTEGER NOT NULL,
|
|
43
|
+
CONSTRAINT "acceptance_criteria_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
-- CreateTable
|
|
47
|
+
CREATE TABLE "issue_history" (
|
|
48
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
49
|
+
"issue_key" TEXT NOT NULL,
|
|
50
|
+
"at" DATETIME NOT NULL,
|
|
51
|
+
"action" TEXT NOT NULL,
|
|
52
|
+
"from_column" TEXT,
|
|
53
|
+
"to_column" TEXT NOT NULL,
|
|
54
|
+
"session_id" TEXT,
|
|
55
|
+
"changes" TEXT,
|
|
56
|
+
CONSTRAINT "issue_history_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
-- CreateTable
|
|
60
|
+
CREATE TABLE "execution_logs" (
|
|
61
|
+
"session_id" TEXT NOT NULL PRIMARY KEY,
|
|
62
|
+
"issue_key" TEXT NOT NULL,
|
|
63
|
+
"column_slug" TEXT NOT NULL,
|
|
64
|
+
"prompt" TEXT,
|
|
65
|
+
"terminal_log" TEXT,
|
|
66
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
67
|
+
CONSTRAINT "execution_logs_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues" ("key") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
68
|
+
CONSTRAINT "execution_logs_column_slug_fkey" FOREIGN KEY ("column_slug") REFERENCES "columns" ("slug") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
-- CreateTable
|
|
72
|
+
CREATE TABLE "comments" (
|
|
73
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
74
|
+
"issue_key" TEXT NOT NULL,
|
|
75
|
+
"content" TEXT NOT NULL,
|
|
76
|
+
"author" TEXT NOT NULL,
|
|
77
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
78
|
+
CONSTRAINT "comments_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
-- CreateTable
|
|
82
|
+
CREATE TABLE "attachments" (
|
|
83
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
84
|
+
"issue_key" TEXT NOT NULL,
|
|
85
|
+
"filename" TEXT NOT NULL,
|
|
86
|
+
"filepath" TEXT NOT NULL,
|
|
87
|
+
"mimetype" TEXT,
|
|
88
|
+
"size" INTEGER,
|
|
89
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
90
|
+
CONSTRAINT "attachments_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
-- CreateTable
|
|
94
|
+
CREATE TABLE "sequences" (
|
|
95
|
+
"name" TEXT NOT NULL PRIMARY KEY,
|
|
96
|
+
"current_value" INTEGER NOT NULL DEFAULT 0
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
-- CreateIndex
|
|
100
|
+
CREATE INDEX "columns_pipeline_name_idx" ON "columns"("pipeline_name");
|
|
101
|
+
|
|
102
|
+
-- CreateIndex
|
|
103
|
+
CREATE INDEX "columns_index_idx" ON "columns"("index");
|
|
104
|
+
|
|
105
|
+
-- CreateIndex
|
|
106
|
+
CREATE INDEX "issues_column_slug_idx" ON "issues"("column_slug");
|
|
107
|
+
|
|
108
|
+
-- CreateIndex
|
|
109
|
+
CREATE INDEX "issues_parent_key_idx" ON "issues"("parent_key");
|
|
110
|
+
|
|
111
|
+
-- CreateIndex
|
|
112
|
+
CREATE INDEX "issues_priority_idx" ON "issues"("priority");
|
|
113
|
+
|
|
114
|
+
-- CreateIndex
|
|
115
|
+
CREATE INDEX "issues_updated_at_idx" ON "issues"("updated_at" DESC);
|
|
116
|
+
|
|
117
|
+
-- CreateIndex
|
|
118
|
+
CREATE INDEX "acceptance_criteria_issue_key_idx" ON "acceptance_criteria"("issue_key");
|
|
119
|
+
|
|
120
|
+
-- CreateIndex
|
|
121
|
+
CREATE INDEX "issue_history_issue_key_idx" ON "issue_history"("issue_key");
|
|
122
|
+
|
|
123
|
+
-- CreateIndex
|
|
124
|
+
CREATE INDEX "issue_history_session_id_idx" ON "issue_history"("session_id");
|
|
125
|
+
|
|
126
|
+
-- CreateIndex
|
|
127
|
+
CREATE INDEX "issue_history_at_idx" ON "issue_history"("at" DESC);
|
|
128
|
+
|
|
129
|
+
-- CreateIndex
|
|
130
|
+
CREATE INDEX "execution_logs_issue_key_idx" ON "execution_logs"("issue_key");
|
|
131
|
+
|
|
132
|
+
-- CreateIndex
|
|
133
|
+
CREATE INDEX "execution_logs_column_slug_idx" ON "execution_logs"("column_slug");
|
|
134
|
+
|
|
135
|
+
-- CreateIndex
|
|
136
|
+
CREATE INDEX "comments_issue_key_idx" ON "comments"("issue_key");
|
|
137
|
+
|
|
138
|
+
-- CreateIndex
|
|
139
|
+
CREATE INDEX "comments_created_at_idx" ON "comments"("created_at" DESC);
|
|
140
|
+
|
|
141
|
+
-- CreateIndex
|
|
142
|
+
CREATE INDEX "attachments_issue_key_idx" ON "attachments"("issue_key");
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
-- Migration: Pipeline Versioning System
|
|
2
|
+
-- Cette migration transforme le système de pipelines en système versionné et immuable
|
|
3
|
+
|
|
4
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
5
|
+
-- ÉTAPE 1: Créer les nouvelles tables
|
|
6
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
7
|
+
|
|
8
|
+
-- Nouvelle table pipelines avec clé composite (name, version)
|
|
9
|
+
CREATE TABLE "pipelines_new" (
|
|
10
|
+
"name" TEXT NOT NULL,
|
|
11
|
+
"version" INTEGER NOT NULL DEFAULT 1,
|
|
12
|
+
"description" TEXT,
|
|
13
|
+
"active" BOOLEAN NOT NULL DEFAULT false,
|
|
14
|
+
"draft" BOOLEAN NOT NULL DEFAULT false,
|
|
15
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
16
|
+
"created_from_version" INTEGER,
|
|
17
|
+
PRIMARY KEY ("name", "version")
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- Nouvelle table columns avec ID auto-increment
|
|
21
|
+
CREATE TABLE "columns_new" (
|
|
22
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
23
|
+
"slug" TEXT NOT NULL,
|
|
24
|
+
"name" TEXT NOT NULL,
|
|
25
|
+
"index" INTEGER NOT NULL,
|
|
26
|
+
"segment" TEXT NOT NULL,
|
|
27
|
+
"pipeline_name" TEXT NOT NULL,
|
|
28
|
+
"pipeline_version" INTEGER NOT NULL DEFAULT 1,
|
|
29
|
+
CONSTRAINT "columns_pipeline_fkey" FOREIGN KEY ("pipeline_name", "pipeline_version") REFERENCES "pipelines_new" ("name", "version") ON DELETE CASCADE ON UPDATE CASCADE
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
33
|
+
-- ÉTAPE 2: Migrer les données pipelines (tous deviennent v1, verrouillés)
|
|
34
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
35
|
+
|
|
36
|
+
INSERT INTO "pipelines_new" ("name", "version", "description", "active", "draft", "created_at", "created_from_version")
|
|
37
|
+
SELECT "name", 1, "description", "active", false, "created_at", NULL
|
|
38
|
+
FROM "pipelines";
|
|
39
|
+
|
|
40
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
41
|
+
-- ÉTAPE 3: Migrer les colonnes (avec auto-increment ID)
|
|
42
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
43
|
+
|
|
44
|
+
INSERT INTO "columns_new" ("slug", "name", "index", "segment", "pipeline_name", "pipeline_version")
|
|
45
|
+
SELECT "slug", "name", "index", "segment", "pipeline_name", 1
|
|
46
|
+
FROM "columns";
|
|
47
|
+
|
|
48
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
49
|
+
-- ÉTAPE 4: Créer table temporaire de mapping slug -> id
|
|
50
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
51
|
+
|
|
52
|
+
CREATE TEMPORARY TABLE "column_slug_to_id" AS
|
|
53
|
+
SELECT "slug" as "old_slug", "id" as "new_id"
|
|
54
|
+
FROM "columns_new";
|
|
55
|
+
|
|
56
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
57
|
+
-- ÉTAPE 5: Recréer la table issues avec column_id
|
|
58
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
59
|
+
|
|
60
|
+
CREATE TABLE "issues_new" (
|
|
61
|
+
"key" TEXT NOT NULL PRIMARY KEY,
|
|
62
|
+
"title" TEXT NOT NULL,
|
|
63
|
+
"description" TEXT,
|
|
64
|
+
"priority" TEXT NOT NULL DEFAULT 'P2',
|
|
65
|
+
"semver" TEXT NOT NULL DEFAULT 'patch',
|
|
66
|
+
"labels" TEXT NOT NULL DEFAULT '[]',
|
|
67
|
+
"column_id" INTEGER NOT NULL,
|
|
68
|
+
"parent_key" TEXT,
|
|
69
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
70
|
+
"updated_at" DATETIME NOT NULL,
|
|
71
|
+
CONSTRAINT "issues_column_id_fkey" FOREIGN KEY ("column_id") REFERENCES "columns_new" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
72
|
+
CONSTRAINT "issues_parent_key_fkey" FOREIGN KEY ("parent_key") REFERENCES "issues_new" ("key") ON DELETE SET NULL ON UPDATE CASCADE
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
-- Migrer les issues en convertissant column_slug -> column_id
|
|
76
|
+
INSERT INTO "issues_new" ("key", "title", "description", "priority", "semver", "labels", "column_id", "parent_key", "created_at", "updated_at")
|
|
77
|
+
SELECT i."key", i."title", i."description", i."priority", i."semver", i."labels", m."new_id", i."parent_key", i."created_at", i."updated_at"
|
|
78
|
+
FROM "issues" i
|
|
79
|
+
JOIN "column_slug_to_id" m ON i."column_slug" = m."old_slug";
|
|
80
|
+
|
|
81
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
82
|
+
-- ÉTAPE 6: Recréer la table execution_logs avec column_id
|
|
83
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
84
|
+
|
|
85
|
+
CREATE TABLE "execution_logs_new" (
|
|
86
|
+
"session_id" TEXT NOT NULL PRIMARY KEY,
|
|
87
|
+
"issue_key" TEXT NOT NULL,
|
|
88
|
+
"column_id" INTEGER NOT NULL,
|
|
89
|
+
"prompt" TEXT,
|
|
90
|
+
"terminal_log" TEXT,
|
|
91
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
92
|
+
CONSTRAINT "execution_logs_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues_new" ("key") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
93
|
+
CONSTRAINT "execution_logs_column_id_fkey" FOREIGN KEY ("column_id") REFERENCES "columns_new" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
-- Migrer execution_logs en convertissant column_slug -> column_id
|
|
97
|
+
INSERT INTO "execution_logs_new" ("session_id", "issue_key", "column_id", "prompt", "terminal_log", "created_at")
|
|
98
|
+
SELECT e."session_id", e."issue_key", m."new_id", e."prompt", e."terminal_log", e."created_at"
|
|
99
|
+
FROM "execution_logs" e
|
|
100
|
+
JOIN "column_slug_to_id" m ON e."column_slug" = m."old_slug";
|
|
101
|
+
|
|
102
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
103
|
+
-- ÉTAPE 7: Recréer les tables dépendantes (acceptance_criteria reste lié à issues par key)
|
|
104
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
105
|
+
|
|
106
|
+
-- acceptance_criteria: Pas de changement de FK, juste recréer pour intégrité
|
|
107
|
+
CREATE TABLE "acceptance_criteria_new" (
|
|
108
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
109
|
+
"issue_key" TEXT NOT NULL,
|
|
110
|
+
"criterion" TEXT NOT NULL,
|
|
111
|
+
"position" INTEGER NOT NULL,
|
|
112
|
+
CONSTRAINT "acceptance_criteria_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues_new" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
INSERT INTO "acceptance_criteria_new" SELECT * FROM "acceptance_criteria";
|
|
116
|
+
|
|
117
|
+
-- issue_history: Pas de changement (from_column/to_column restent des strings pour historique)
|
|
118
|
+
CREATE TABLE "issue_history_new" (
|
|
119
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
120
|
+
"issue_key" TEXT NOT NULL,
|
|
121
|
+
"at" DATETIME NOT NULL,
|
|
122
|
+
"action" TEXT NOT NULL,
|
|
123
|
+
"from_column" TEXT,
|
|
124
|
+
"to_column" TEXT NOT NULL,
|
|
125
|
+
"session_id" TEXT,
|
|
126
|
+
"changes" TEXT,
|
|
127
|
+
CONSTRAINT "issue_history_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues_new" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
INSERT INTO "issue_history_new" SELECT * FROM "issue_history";
|
|
131
|
+
|
|
132
|
+
-- comments
|
|
133
|
+
CREATE TABLE "comments_new" (
|
|
134
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
135
|
+
"issue_key" TEXT NOT NULL,
|
|
136
|
+
"content" TEXT NOT NULL,
|
|
137
|
+
"author" TEXT NOT NULL,
|
|
138
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
139
|
+
CONSTRAINT "comments_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues_new" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
INSERT INTO "comments_new" SELECT * FROM "comments";
|
|
143
|
+
|
|
144
|
+
-- attachments
|
|
145
|
+
CREATE TABLE "attachments_new" (
|
|
146
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
147
|
+
"issue_key" TEXT NOT NULL,
|
|
148
|
+
"filename" TEXT NOT NULL,
|
|
149
|
+
"filepath" TEXT NOT NULL,
|
|
150
|
+
"mimetype" TEXT,
|
|
151
|
+
"size" INTEGER,
|
|
152
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
153
|
+
CONSTRAINT "attachments_issue_key_fkey" FOREIGN KEY ("issue_key") REFERENCES "issues_new" ("key") ON DELETE CASCADE ON UPDATE CASCADE
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
INSERT INTO "attachments_new" SELECT * FROM "attachments";
|
|
157
|
+
|
|
158
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
159
|
+
-- ÉTAPE 8: Supprimer les anciennes tables
|
|
160
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
161
|
+
|
|
162
|
+
DROP TABLE "attachments";
|
|
163
|
+
DROP TABLE "comments";
|
|
164
|
+
DROP TABLE "issue_history";
|
|
165
|
+
DROP TABLE "acceptance_criteria";
|
|
166
|
+
DROP TABLE "execution_logs";
|
|
167
|
+
DROP TABLE "issues";
|
|
168
|
+
DROP TABLE "columns";
|
|
169
|
+
DROP TABLE "pipelines";
|
|
170
|
+
|
|
171
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
172
|
+
-- ÉTAPE 9: Renommer les nouvelles tables
|
|
173
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
174
|
+
|
|
175
|
+
ALTER TABLE "pipelines_new" RENAME TO "pipelines";
|
|
176
|
+
ALTER TABLE "columns_new" RENAME TO "columns";
|
|
177
|
+
ALTER TABLE "issues_new" RENAME TO "issues";
|
|
178
|
+
ALTER TABLE "execution_logs_new" RENAME TO "execution_logs";
|
|
179
|
+
ALTER TABLE "acceptance_criteria_new" RENAME TO "acceptance_criteria";
|
|
180
|
+
ALTER TABLE "issue_history_new" RENAME TO "issue_history";
|
|
181
|
+
ALTER TABLE "comments_new" RENAME TO "comments";
|
|
182
|
+
ALTER TABLE "attachments_new" RENAME TO "attachments";
|
|
183
|
+
|
|
184
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
185
|
+
-- ÉTAPE 10: Créer les index
|
|
186
|
+
-- ═══════════════════════════════════════════════════════════════
|
|
187
|
+
|
|
188
|
+
-- Columns
|
|
189
|
+
CREATE UNIQUE INDEX "columns_pipeline_slug_unique" ON "columns"("pipeline_name", "pipeline_version", "slug");
|
|
190
|
+
CREATE INDEX "columns_pipeline_idx" ON "columns"("pipeline_name", "pipeline_version");
|
|
191
|
+
CREATE INDEX "columns_index_idx" ON "columns"("index");
|
|
192
|
+
|
|
193
|
+
-- Issues
|
|
194
|
+
CREATE INDEX "issues_column_id_idx" ON "issues"("column_id");
|
|
195
|
+
CREATE INDEX "issues_parent_key_idx" ON "issues"("parent_key");
|
|
196
|
+
CREATE INDEX "issues_priority_idx" ON "issues"("priority");
|
|
197
|
+
CREATE INDEX "issues_updated_at_idx" ON "issues"("updated_at" DESC);
|
|
198
|
+
|
|
199
|
+
-- Acceptance criteria
|
|
200
|
+
CREATE INDEX "acceptance_criteria_issue_key_idx" ON "acceptance_criteria"("issue_key");
|
|
201
|
+
|
|
202
|
+
-- Issue history
|
|
203
|
+
CREATE INDEX "issue_history_issue_key_idx" ON "issue_history"("issue_key");
|
|
204
|
+
CREATE INDEX "issue_history_session_id_idx" ON "issue_history"("session_id");
|
|
205
|
+
CREATE INDEX "issue_history_at_idx" ON "issue_history"("at" DESC);
|
|
206
|
+
|
|
207
|
+
-- Execution logs
|
|
208
|
+
CREATE INDEX "execution_logs_issue_key_idx" ON "execution_logs"("issue_key");
|
|
209
|
+
CREATE INDEX "execution_logs_column_id_idx" ON "execution_logs"("column_id");
|
|
210
|
+
|
|
211
|
+
-- Comments
|
|
212
|
+
CREATE INDEX "comments_issue_key_idx" ON "comments"("issue_key");
|
|
213
|
+
CREATE INDEX "comments_created_at_idx" ON "comments"("created_at" DESC);
|
|
214
|
+
|
|
215
|
+
-- Attachments
|
|
216
|
+
CREATE INDEX "attachments_issue_key_idx" ON "attachments"("issue_key");
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "column_prompts" (
|
|
3
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
4
|
+
"column_id" INTEGER NOT NULL,
|
|
5
|
+
"lang" TEXT NOT NULL,
|
|
6
|
+
"content" TEXT NOT NULL,
|
|
7
|
+
CONSTRAINT "column_prompts_column_id_fkey" FOREIGN KEY ("column_id") REFERENCES "columns" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
-- RedefineTables
|
|
11
|
+
PRAGMA defer_foreign_keys=ON;
|
|
12
|
+
PRAGMA foreign_keys=OFF;
|
|
13
|
+
CREATE TABLE "new_columns" (
|
|
14
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
15
|
+
"slug" TEXT NOT NULL,
|
|
16
|
+
"name" TEXT NOT NULL,
|
|
17
|
+
"index" INTEGER NOT NULL,
|
|
18
|
+
"segment" TEXT NOT NULL,
|
|
19
|
+
"pipeline_name" TEXT NOT NULL,
|
|
20
|
+
"pipeline_version" INTEGER NOT NULL,
|
|
21
|
+
CONSTRAINT "columns_pipeline_name_pipeline_version_fkey" FOREIGN KEY ("pipeline_name", "pipeline_version") REFERENCES "pipelines" ("name", "version") ON DELETE CASCADE ON UPDATE CASCADE
|
|
22
|
+
);
|
|
23
|
+
INSERT INTO "new_columns" ("id", "index", "name", "pipeline_name", "pipeline_version", "segment", "slug") SELECT "id", "index", "name", "pipeline_name", "pipeline_version", "segment", "slug" FROM "columns";
|
|
24
|
+
DROP TABLE "columns";
|
|
25
|
+
ALTER TABLE "new_columns" RENAME TO "columns";
|
|
26
|
+
CREATE INDEX "columns_pipeline_name_pipeline_version_idx" ON "columns"("pipeline_name", "pipeline_version");
|
|
27
|
+
CREATE INDEX "columns_index_idx" ON "columns"("index");
|
|
28
|
+
CREATE UNIQUE INDEX "columns_pipeline_name_pipeline_version_slug_key" ON "columns"("pipeline_name", "pipeline_version", "slug");
|
|
29
|
+
CREATE TABLE "new_pipelines" (
|
|
30
|
+
"name" TEXT NOT NULL,
|
|
31
|
+
"version" INTEGER NOT NULL,
|
|
32
|
+
"description" TEXT,
|
|
33
|
+
"active" BOOLEAN NOT NULL DEFAULT false,
|
|
34
|
+
"draft" BOOLEAN NOT NULL DEFAULT true,
|
|
35
|
+
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
36
|
+
"created_from_version" INTEGER,
|
|
37
|
+
|
|
38
|
+
PRIMARY KEY ("name", "version")
|
|
39
|
+
);
|
|
40
|
+
INSERT INTO "new_pipelines" ("active", "created_at", "created_from_version", "description", "draft", "name", "version") SELECT "active", "created_at", "created_from_version", "description", "draft", "name", "version" FROM "pipelines";
|
|
41
|
+
DROP TABLE "pipelines";
|
|
42
|
+
ALTER TABLE "new_pipelines" RENAME TO "pipelines";
|
|
43
|
+
PRAGMA foreign_keys=ON;
|
|
44
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
45
|
+
|
|
46
|
+
-- CreateIndex
|
|
47
|
+
CREATE INDEX "column_prompts_column_id_idx" ON "column_prompts"("column_id");
|
|
48
|
+
|
|
49
|
+
-- CreateIndex
|
|
50
|
+
CREATE UNIQUE INDEX "column_prompts_column_id_lang_key" ON "column_prompts"("column_id", "lang");
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- Normalize pipeline names to kebab-case
|
|
2
|
+
-- This migration updates existing pipeline names to use kebab-case format
|
|
3
|
+
-- to avoid case sensitivity and URL encoding issues
|
|
4
|
+
|
|
5
|
+
-- Disable foreign key constraints for the update
|
|
6
|
+
PRAGMA foreign_keys = OFF;
|
|
7
|
+
|
|
8
|
+
-- Update pipelines names (primary key)
|
|
9
|
+
UPDATE pipelines SET name = 'default' WHERE name = 'Default';
|
|
10
|
+
UPDATE pipelines SET name = 'nuxtjs' WHERE name = 'Nuxt.js';
|
|
11
|
+
UPDATE pipelines SET name = 'react' WHERE name = 'React';
|
|
12
|
+
UPDATE pipelines SET name = 'angular' WHERE name = 'Angular';
|
|
13
|
+
UPDATE pipelines SET name = 'vuejs' WHERE name = 'Vue.js';
|
|
14
|
+
UPDATE pipelines SET name = 'java-spring-boot' WHERE name = 'Java Spring Boot';
|
|
15
|
+
UPDATE pipelines SET name = 'python-django' WHERE name = 'Python Django';
|
|
16
|
+
UPDATE pipelines SET name = 'python-fastapi' WHERE name = 'Python FastAPI';
|
|
17
|
+
UPDATE pipelines SET name = 'php-symfony' WHERE name = 'PHP Symfony';
|
|
18
|
+
UPDATE pipelines SET name = 'php-laravel' WHERE name = 'PHP Laravel';
|
|
19
|
+
UPDATE pipelines SET name = 'go' WHERE name = 'Go';
|
|
20
|
+
UPDATE pipelines SET name = 'rust' WHERE name = 'Rust';
|
|
21
|
+
|
|
22
|
+
-- Update columns references (foreign key)
|
|
23
|
+
UPDATE columns SET pipeline_name = 'default' WHERE pipeline_name = 'Default';
|
|
24
|
+
UPDATE columns SET pipeline_name = 'nuxtjs' WHERE pipeline_name = 'Nuxt.js';
|
|
25
|
+
UPDATE columns SET pipeline_name = 'react' WHERE pipeline_name = 'React';
|
|
26
|
+
UPDATE columns SET pipeline_name = 'angular' WHERE pipeline_name = 'Angular';
|
|
27
|
+
UPDATE columns SET pipeline_name = 'vuejs' WHERE pipeline_name = 'Vue.js';
|
|
28
|
+
UPDATE columns SET pipeline_name = 'java-spring-boot' WHERE pipeline_name = 'Java Spring Boot';
|
|
29
|
+
UPDATE columns SET pipeline_name = 'python-django' WHERE pipeline_name = 'Python Django';
|
|
30
|
+
UPDATE columns SET pipeline_name = 'python-fastapi' WHERE pipeline_name = 'Python FastAPI';
|
|
31
|
+
UPDATE columns SET pipeline_name = 'php-symfony' WHERE pipeline_name = 'PHP Symfony';
|
|
32
|
+
UPDATE columns SET pipeline_name = 'php-laravel' WHERE pipeline_name = 'PHP Laravel';
|
|
33
|
+
UPDATE columns SET pipeline_name = 'go' WHERE pipeline_name = 'Go';
|
|
34
|
+
UPDATE columns SET pipeline_name = 'rust' WHERE pipeline_name = 'Rust';
|
|
35
|
+
|
|
36
|
+
-- Re-enable foreign key constraints
|
|
37
|
+
PRAGMA foreign_keys = ON;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- Migration: Remove numeric prefixes from column slugs
|
|
2
|
+
-- The order is now managed by the `index` field, making prefixes obsolete
|
|
3
|
+
|
|
4
|
+
-- Update column slugs: "00_backlog" -> "backlog", "02_splitter" -> "splitter"
|
|
5
|
+
UPDATE columns
|
|
6
|
+
SET slug = SUBSTR(slug, 4)
|
|
7
|
+
WHERE slug GLOB '[0-9][0-9]_*';
|
|
8
|
+
|
|
9
|
+
-- Update issue_history references if they store column slugs
|
|
10
|
+
UPDATE issue_history
|
|
11
|
+
SET from_column = SUBSTR(from_column, 4)
|
|
12
|
+
WHERE from_column GLOB '[0-9][0-9]_*';
|
|
13
|
+
|
|
14
|
+
UPDATE issue_history
|
|
15
|
+
SET to_column = SUBSTR(to_column, 4)
|
|
16
|
+
WHERE to_column GLOB '[0-9][0-9]_*';
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// AutoCode - Prisma Schema
|
|
2
|
+
// Base de données SQLite par projet
|
|
3
|
+
// VERSION 2.0 - Pipelines Versionnés & Immuables
|
|
4
|
+
|
|
5
|
+
// Support multiple platforms for CLI distribution:
|
|
6
|
+
// native (build platform), debian/rhel/alpine Linux, macOS Intel/ARM, Windows
|
|
7
|
+
generator client {
|
|
8
|
+
provider = "prisma-client-js"
|
|
9
|
+
binaryTargets = ["native", "debian-openssl-3.0.x", "rhel-openssl-3.0.x", "linux-musl-openssl-3.0.x", "darwin", "darwin-arm64", "windows"]
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
datasource db {
|
|
13
|
+
provider = "sqlite"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// ═══════════════════════════════════════════════════════════════
|
|
17
|
+
// PIPELINES & COLUMNS - VERSIONNÉS ET IMMUABLES
|
|
18
|
+
// ═══════════════════════════════════════════════════════════════
|
|
19
|
+
|
|
20
|
+
model Pipeline {
|
|
21
|
+
name String // Partie de la clé composite
|
|
22
|
+
version Int // v1, v2, v3... (pas semver)
|
|
23
|
+
description String?
|
|
24
|
+
active Boolean @default(false)
|
|
25
|
+
draft Boolean @default(true) // Brouillon éditable ou verrouillé
|
|
26
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
27
|
+
createdFromVersion Int? @map("created_from_version") // Version source du brouillon
|
|
28
|
+
|
|
29
|
+
columns Column[]
|
|
30
|
+
|
|
31
|
+
@@id([name, version]) // Clé composite: nom + version
|
|
32
|
+
@@map("pipelines")
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
model Column {
|
|
36
|
+
id Int @id @default(autoincrement()) // ID stable pour références
|
|
37
|
+
slug String // "backlog", "testing-unit" (slug lisible)
|
|
38
|
+
name String // "Backlog", "Testing Unit"
|
|
39
|
+
index Int // Position 0, 1, 2...
|
|
40
|
+
segment String // 'definition' | 'action' | 'finish'
|
|
41
|
+
pipelineName String @map("pipeline_name")
|
|
42
|
+
pipelineVersion Int @map("pipeline_version")
|
|
43
|
+
|
|
44
|
+
pipeline Pipeline @relation(fields: [pipelineName, pipelineVersion], references: [name, version], onDelete: Cascade)
|
|
45
|
+
issues Issue[]
|
|
46
|
+
executionLogs ExecutionLog[]
|
|
47
|
+
|
|
48
|
+
@@unique([pipelineName, pipelineVersion, slug]) // Slug unique par version de pipeline
|
|
49
|
+
@@index([pipelineName, pipelineVersion])
|
|
50
|
+
@@index([index])
|
|
51
|
+
@@map("columns")
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// ═══════════════════════════════════════════════════════════════
|
|
55
|
+
// ISSUES
|
|
56
|
+
// ═══════════════════════════════════════════════════════════════
|
|
57
|
+
|
|
58
|
+
model Issue {
|
|
59
|
+
key String @id // "AC-000001"
|
|
60
|
+
title String
|
|
61
|
+
description String? // Markdown
|
|
62
|
+
priority String @default("P2") // P0, P1, P2, P3
|
|
63
|
+
semver String @default("patch") // patch | minor | major
|
|
64
|
+
labels String @default("[]") // JSON array
|
|
65
|
+
lang String @default("fr") // 'fr' | 'en' - langue de l'utilisateur
|
|
66
|
+
columnId Int @map("column_id") // Référence stable par ID
|
|
67
|
+
parentKey String? @map("parent_key")
|
|
68
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
69
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
70
|
+
|
|
71
|
+
// Processing lock - prevents duplicate executions
|
|
72
|
+
processingColumnId Int? @map("processing_column_id")
|
|
73
|
+
processingStartedAt DateTime? @map("processing_started_at")
|
|
74
|
+
processingSessionId String? @map("processing_session_id")
|
|
75
|
+
|
|
76
|
+
column Column @relation(fields: [columnId], references: [id])
|
|
77
|
+
parent Issue? @relation("IssueHierarchy", fields: [parentKey], references: [key], onDelete: SetNull)
|
|
78
|
+
children Issue[] @relation("IssueHierarchy")
|
|
79
|
+
acceptanceCriteria AcceptanceCriterion[]
|
|
80
|
+
history IssueHistory[]
|
|
81
|
+
comments Comment[]
|
|
82
|
+
attachments Attachment[]
|
|
83
|
+
executionLogs ExecutionLog[]
|
|
84
|
+
|
|
85
|
+
@@index([columnId])
|
|
86
|
+
@@index([parentKey])
|
|
87
|
+
@@index([priority])
|
|
88
|
+
@@index([updatedAt(sort: Desc)])
|
|
89
|
+
@@map("issues")
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
model AcceptanceCriterion {
|
|
93
|
+
id Int @id @default(autoincrement())
|
|
94
|
+
issueKey String @map("issue_key")
|
|
95
|
+
criterion String
|
|
96
|
+
position Int
|
|
97
|
+
|
|
98
|
+
issue Issue @relation(fields: [issueKey], references: [key], onDelete: Cascade)
|
|
99
|
+
|
|
100
|
+
@@index([issueKey])
|
|
101
|
+
@@map("acceptance_criteria")
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ═══════════════════════════════════════════════════════════════
|
|
105
|
+
// HISTORY & EXECUTION
|
|
106
|
+
// ═══════════════════════════════════════════════════════════════
|
|
107
|
+
|
|
108
|
+
model IssueHistory {
|
|
109
|
+
id Int @id @default(autoincrement())
|
|
110
|
+
issueKey String @map("issue_key")
|
|
111
|
+
at DateTime
|
|
112
|
+
action String // 'created' | 'moved' | 'started' | 'forced' | 'edited' | 'blocked'
|
|
113
|
+
fromColumn String? @map("from_column") // Slug pour historique (texte)
|
|
114
|
+
toColumn String @map("to_column") // Slug pour historique (texte)
|
|
115
|
+
sessionId String? @map("session_id") // 8 chars hex
|
|
116
|
+
changes String? // JSON pour 'edited'
|
|
117
|
+
reason String? // Raison du blocage (pour action 'blocked')
|
|
118
|
+
|
|
119
|
+
issue Issue @relation(fields: [issueKey], references: [key], onDelete: Cascade)
|
|
120
|
+
|
|
121
|
+
@@index([issueKey])
|
|
122
|
+
@@index([sessionId])
|
|
123
|
+
@@index([at(sort: Desc)])
|
|
124
|
+
@@map("issue_history")
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
model ExecutionLog {
|
|
128
|
+
sessionId String @id @map("session_id") // 8 chars hex
|
|
129
|
+
issueKey String @map("issue_key")
|
|
130
|
+
columnId Int @map("column_id") // Référence par ID
|
|
131
|
+
prompt String? // Contenu du prompt
|
|
132
|
+
terminalLog String? @map("terminal_log") // Logs d'execution
|
|
133
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
134
|
+
|
|
135
|
+
issue Issue @relation(fields: [issueKey], references: [key], onDelete: Cascade)
|
|
136
|
+
column Column @relation(fields: [columnId], references: [id])
|
|
137
|
+
|
|
138
|
+
@@index([issueKey])
|
|
139
|
+
@@index([columnId])
|
|
140
|
+
@@map("execution_logs")
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// ═══════════════════════════════════════════════════════════════
|
|
144
|
+
// COMMENTS & ATTACHMENTS
|
|
145
|
+
// ═══════════════════════════════════════════════════════════════
|
|
146
|
+
|
|
147
|
+
model Comment {
|
|
148
|
+
id String @id // Timestamp Unix en ms
|
|
149
|
+
issueKey String @map("issue_key")
|
|
150
|
+
content String
|
|
151
|
+
author String
|
|
152
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
153
|
+
|
|
154
|
+
issue Issue @relation(fields: [issueKey], references: [key], onDelete: Cascade)
|
|
155
|
+
|
|
156
|
+
@@index([issueKey])
|
|
157
|
+
@@index([createdAt(sort: Desc)])
|
|
158
|
+
@@map("comments")
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
model Attachment {
|
|
162
|
+
id Int @id @default(autoincrement())
|
|
163
|
+
issueKey String @map("issue_key")
|
|
164
|
+
filename String // Nom original
|
|
165
|
+
filepath String // Chemin relatif sur disque
|
|
166
|
+
mimetype String?
|
|
167
|
+
size Int? // Bytes
|
|
168
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
169
|
+
|
|
170
|
+
issue Issue @relation(fields: [issueKey], references: [key], onDelete: Cascade)
|
|
171
|
+
|
|
172
|
+
@@index([issueKey])
|
|
173
|
+
@@map("attachments")
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// ═══════════════════════════════════════════════════════════════
|
|
177
|
+
// SEQUENCE (pour generation AC-XXXXXX)
|
|
178
|
+
// ═══════════════════════════════════════════════════════════════
|
|
179
|
+
|
|
180
|
+
model Sequence {
|
|
181
|
+
name String @id // 'issue_key'
|
|
182
|
+
currentValue Int @default(0) @map("current_value")
|
|
183
|
+
|
|
184
|
+
@@map("sequences")
|
|
185
|
+
}
|