@kky42/pievo-server 2.0.4 → 2.2.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.
Files changed (80) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/LoopView-BTXoqfzM.js +59 -0
  3. package/.output/public/assets/{Modal-B3xpEtcf.js → Modal-Ba36NAkv.js} +1 -1
  4. package/.output/public/assets/{SignIn-9vsaKv_p.js → SignIn-Cc1zxGnA.js} +1 -1
  5. package/.output/public/assets/app-D1cij_NJ.css +2 -0
  6. package/.output/public/assets/{artifactView-BV-yQVrj.js → artifactView-Cd5wWPil.js} +1 -1
  7. package/.output/public/assets/index-BGM1XGY0.js +12 -0
  8. package/.output/public/assets/{invite._token-C891oGkK.js → invite._token-CUCNcN89.js} +1 -1
  9. package/.output/public/assets/{lifecycleUi-C3k2MlX8.js → lifecycleUi-CMFw5Nlj.js} +1 -1
  10. package/.output/public/assets/{loopApi-C_Dtw-nL.js → loopApi-CT1mMhlb.js} +1 -1
  11. package/.output/public/assets/loops._loopId-CrSSvSVl.js +4 -0
  12. package/.output/public/assets/loops._loopId_.runs._runId-B5Qacloe.js +3 -0
  13. package/.output/public/assets/{notifyFns-BaukhLAg.js → notifyFns-CYiZT7CK.js} +1 -1
  14. package/.output/public/assets/{preload-helper--VCqDT5m.js → preload-helper-DFkkpP6W.js} +1 -1
  15. package/.output/public/assets/{routes-BS4N7Lnf.js → routes-B6Kg4mFC.js} +1 -1
  16. package/.output/public/assets/{t._teamId-DSYlMX_v.js → t._teamId-Cmm4xdKj.js} +1 -1
  17. package/.output/server/_libs/d3-shape.mjs +130 -1
  18. package/.output/server/_libs/react-is.mjs +48 -0
  19. package/.output/server/_libs/recharts+victory-vendor.mjs +2210 -782
  20. package/.output/server/_ssr/{DashboardView-CQdjYy03.mjs → DashboardView-0yoKh8Em.mjs} +6 -6
  21. package/.output/server/_ssr/{LoopPlaybook-C86vJIjZ.mjs → LoopPlaybook-uq_sFfgU.mjs} +2 -2
  22. package/.output/server/_ssr/{LoopView-cDyjmf1B.mjs → LoopView-BlOY-jfJ.mjs} +416 -222
  23. package/.output/server/_ssr/{SignIn-BQQiD3Ss.mjs → SignIn-C4fSJl_j.mjs} +2 -2
  24. package/.output/server/_ssr/{adapters-N4-yQ1vK.mjs → adapters-RReIIwAx.mjs} +2 -2
  25. package/.output/server/_ssr/{artifactFiles-Dl1EaUtJ.mjs → artifactFiles-C8PQKN6V.mjs} +3 -3
  26. package/.output/server/_ssr/{artifactView-DX4P3Krh.mjs → artifactView-iuPsp5aa.mjs} +2 -2
  27. package/.output/server/_ssr/artifacts-B_F6vSih.mjs +2 -0
  28. package/.output/server/_ssr/{auth-CbAfO4Ne.mjs → auth-Sie6sQHF.mjs} +9 -9
  29. package/.output/server/_ssr/{boot-BZ-YyUiD.mjs → boot-akwC2sQg.mjs} +393 -331
  30. package/.output/server/_ssr/boot-pVS0wjd0.mjs +2 -0
  31. package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-B67XLJZt.mjs → bun-sqlite-dialect-BW9W1_Ps-CLY8cORt.mjs} +2 -2
  32. package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-nff_yHzH.mjs → d1-sqlite-dialect-BLC8LXE6-CRsXQNRe.mjs} +2 -2
  33. package/.output/server/_ssr/db-Bdm9PFZF.mjs +2 -0
  34. package/.output/server/_ssr/{dist-BGjVt6NE.mjs → dist-Cc_x6bBb.mjs} +2 -2
  35. package/.output/server/_ssr/{factory-DNeo3vVt.mjs → factory-CDwHL_zY.mjs} +2 -2
  36. package/.output/server/_ssr/{invite._token-z3PzCMzb.mjs → invite._token-BE_QUAVb.mjs} +4 -4
  37. package/.output/server/_ssr/{invite._token-Bipap1cl.mjs → invite._token-C7GjrJxr.mjs} +5 -5
  38. package/.output/server/_ssr/{kysely-adapter-C1ww7PKr.mjs → kysely-adapter-zflsyYBA.mjs} +1 -1
  39. package/.output/server/_ssr/{lifecycleUi-5jMhxINb.mjs → lifecycleUi-Djb44Aj3.mjs} +4 -4
  40. package/.output/server/_ssr/logger-tfiliKTi.mjs +2 -0
  41. package/.output/server/_ssr/{loopApi-7MTSs6hy.mjs → loopApi-8_KgBapr.mjs} +6 -2
  42. package/.output/server/_ssr/{loopApi-JzGGZZp2.mjs → loopApi-JzmqWENY.mjs} +25 -15
  43. package/.output/server/_ssr/{loops._loopId-DFkyTJR3.mjs → loops._loopId-D-aCCtrX.mjs} +12 -17
  44. package/.output/server/_ssr/{loops._loopId-CJxQ0EG4.mjs → loops._loopId-DZ-FjscA.mjs} +4 -4
  45. package/.output/server/_ssr/{loops._loopId_.runs._runId-lTigSOmT.mjs → loops._loopId_.runs._runId-Dk1QY49p.mjs} +4 -4
  46. package/.output/server/_ssr/{loops._loopId_.runs._runId-DkG-ZCD1.mjs → loops._loopId_.runs._runId-rBHW41dx.mjs} +14 -14
  47. package/.output/server/_ssr/{machineFns-Dda8-rBY.mjs → machineFns-CoqLRLRh.mjs} +3 -3
  48. package/.output/server/_ssr/{node-sqlite-dialect-BS2OAFJh.mjs → node-sqlite-dialect-dmrazfbM.mjs} +2 -2
  49. package/.output/server/_ssr/{notifyFns-C9N0QLe3.mjs → notifyFns-CH7-bcmd.mjs} +3 -3
  50. package/.output/server/_ssr/{notifyFns-C6eyIFZE.mjs → notifyFns-DXMbgYu2.mjs} +5 -5
  51. package/.output/server/_ssr/{router-DIfoLu1r.mjs → router-BFPzSTFx.mjs} +34 -33
  52. package/.output/server/_ssr/{routes-bWgX0tRE.mjs → routes-DebVUmCS.mjs} +5 -5
  53. package/.output/server/_ssr/{routes-DYJB0rKC.mjs → routes-dQCBLTxY.mjs} +5 -5
  54. package/.output/server/_ssr/runDiff-qA1C8R_L.mjs +2 -0
  55. package/.output/server/_ssr/ssr.mjs +52 -48
  56. package/.output/server/_ssr/store-DWUdkIq2.mjs +2 -0
  57. package/.output/server/_ssr/{t._teamId-C_KZZ4Xh.mjs → t._teamId-BqOUF-0J.mjs} +5 -5
  58. package/.output/server/_ssr/{t._teamId-B_ieXBNF.mjs → t._teamId-BzWy4Ft2.mjs} +5 -5
  59. package/.output/server/_ssr/{teamFns-O3ZmtZL2.mjs → teamFns-BcnGMC-g.mjs} +3 -3
  60. package/.output/server/_ssr/{teamFns-BBIbatdZ.mjs → teamFns-bm82twd5.mjs} +2 -2
  61. package/.output/server/_ssr/tokens-DG8z1GIg.mjs +2 -0
  62. package/.output/server/{_tanstack-start-manifest_v-DKnfwHZr.mjs → _tanstack-start-manifest_v-COr27bxK.mjs} +19 -19
  63. package/.output/server/drizzle/0016_plural_machine_runs.sql +4 -0
  64. package/.output/server/drizzle/meta/_journal.json +7 -0
  65. package/.output/server/index.mjs +96 -96
  66. package/drizzle/0016_plural_machine_runs.sql +4 -0
  67. package/drizzle/meta/_journal.json +7 -0
  68. package/package.json +1 -1
  69. package/.output/public/assets/LoopView-Pbp2YtUu.js +0 -55
  70. package/.output/public/assets/app-CStTBRt2.css +0 -2
  71. package/.output/public/assets/index-49hAH0gP.js +0 -12
  72. package/.output/public/assets/loops._loopId-DD4fKGMu.js +0 -4
  73. package/.output/public/assets/loops._loopId_.runs._runId-DoPcCQy7.js +0 -3
  74. package/.output/server/_ssr/artifacts-DzWJrBxK.mjs +0 -2
  75. package/.output/server/_ssr/boot-BigKgB8p.mjs +0 -2
  76. package/.output/server/_ssr/db-BF8vSovA.mjs +0 -2
  77. package/.output/server/_ssr/logger-C7aewtve.mjs +0 -2
  78. package/.output/server/_ssr/runDiff-B9t7ouYj.mjs +0 -2
  79. package/.output/server/_ssr/store-Dw4LiFjE.mjs +0 -2
  80. package/.output/server/_ssr/tokens-DI_pklQB.mjs +0 -2
@@ -1,10 +1,10 @@
1
1
  import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { c as getAuthState, h as listTemplates, t as canViewTeam } from "./loopApi-7MTSs6hy.mjs";
3
- import { a as authClient } from "./LoopPlaybook-C86vJIjZ.mjs";
4
- import { n as fetchLiveData } from "./DashboardView-CQdjYy03.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/t._teamId-B_ieXBNF.js
2
+ import { c as getAuthState, g as listTemplates, t as canViewTeam } from "./loopApi-8_KgBapr.mjs";
3
+ import { a as authClient } from "./LoopPlaybook-uq_sFfgU.mjs";
4
+ import { n as fetchLiveData } from "./DashboardView-0yoKh8Em.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/t._teamId-BzWy4Ft2.js
6
6
  var $$splitErrorComponentImporter = () => import("./t._teamId-D9nCEa2h.mjs");
7
- var $$splitComponentImporter = () => import("./t._teamId-C_KZZ4Xh.mjs");
7
+ var $$splitComponentImporter = () => import("./t._teamId-BqOUF-0J.mjs");
8
8
  /**
9
9
  * The explicit-team dashboard (`/t/<teamId>`, Phase 2): the same dashboard scoped
10
10
  * to the team in the PATH, so a view is bookmarkable and each browser tab keeps
@@ -1,9 +1,9 @@
1
- import { D as createInvite$1, Dt as listTeamMembers, Ht as renameTeam$2, I as deleteTeamCascade, L as ensureServer, Ot as listTeamsForUser, P as deleteInvite, S as countLoopsForTeam, Vt as removeTeamMemberGuarded, Z as getInvite, it as getTeamMember, k as createTeam$2, m as addTeamMember$1, nn as userByEmail, qt as setTeamMemberRoleGuarded, rt as getTeam, ut as isPersonalTeam, wt as listPendingInvites, zt as redeemInviteAtomic } from "./boot-BZ-YyUiD.mjs";
1
+ import { $ as getInvite, A as createTeam$2, At as listTeamMembers, C as countLoopsForTeam, Dt as listPendingInvites, Gt as removeTeamMemberGuarded, I as deleteInvite, Kt as renameTeam$2, O as createInvite$1, R as deleteTeamCascade, Ut as redeemInviteAtomic, Zt as setTeamMemberRoleGuarded, at as getTeam, ft as isPersonalTeam, h as addTeamMember$1, jt as listTeamsForUser, on as userByEmail, ot as getTeamMember, z as ensureServer } from "./boot-akwC2sQg.mjs";
2
2
  import { n as createServerFn } from "./ssr.mjs";
3
- import { authEnabled, currentUserId } from "./auth-CbAfO4Ne.mjs";
3
+ import { authEnabled, currentUserId } from "./auth-Sie6sQHF.mjs";
4
4
  import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
5
5
  import { randomUUID } from "node:crypto";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/teamFns-O3ZmtZL2.js
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/teamFns-BcnGMC-g.js
7
7
  /**
8
8
  * Team lifecycle + membership logic (design report §2/§4/§5, all six §7 decisions
9
9
  * approved as recommended). This module is the ONE authorization + rules
@@ -1,6 +1,6 @@
1
1
  import { n as createServerFn } from "./ssr.mjs";
2
- import { r as createSsrRpc } from "./loopApi-7MTSs6hy.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/teamFns-BBIbatdZ.js
2
+ import { r as createSsrRpc } from "./loopApi-8_KgBapr.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/teamFns-bm82twd5.js
4
4
  /**
5
5
  * Team management server functions — the thin RPC surface over `teamAdmin`
6
6
  * (which holds all the rules + authorization). Every mutating fn takes an
@@ -0,0 +1,2 @@
1
+ import { Lt as mintDeviceToken, Wt as rememberConnectKey } from "./boot-akwC2sQg.mjs";
2
+ export { mintDeviceToken, rememberConnectKey };
@@ -1,4 +1,4 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-DKnfwHZr.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-COr27bxK.js
2
2
  var tsrStartManifest = () => ({ routes: {
3
3
  __root__: {
4
4
  filePath: "/Users/kky/dev/evo/packages/server/src/routes/__root.tsx",
@@ -25,28 +25,28 @@ var tsrStartManifest = () => ({ routes: {
25
25
  "/loops/$loopId_/runs/$runId"
26
26
  ],
27
27
  preloads: [
28
- "/assets/index-49hAH0gP.js",
28
+ "/assets/index-BGM1XGY0.js",
29
29
  "/assets/jsx-runtime-BseJUIpC.js",
30
- "/assets/preload-helper--VCqDT5m.js",
31
- "/assets/Modal-B3xpEtcf.js",
32
- "/assets/notifyFns-BaukhLAg.js",
30
+ "/assets/preload-helper-DFkkpP6W.js",
31
+ "/assets/Modal-Ba36NAkv.js",
32
+ "/assets/notifyFns-CYiZT7CK.js",
33
33
  "/assets/useRouter-DsjH8G0p.js",
34
- "/assets/loopApi-C_Dtw-nL.js",
34
+ "/assets/loopApi-CT1mMhlb.js",
35
35
  "/assets/ui-Gb1413-F.js",
36
- "/assets/lifecycleUi-C3k2MlX8.js"
36
+ "/assets/lifecycleUi-CMFw5Nlj.js"
37
37
  ],
38
38
  scripts: [{ attrs: {
39
39
  type: "module",
40
40
  async: !0,
41
- src: "/assets/index-49hAH0gP.js"
41
+ src: "/assets/index-BGM1XGY0.js"
42
42
  } }]
43
43
  },
44
44
  "/": {
45
45
  filePath: "/Users/kky/dev/evo/packages/server/src/routes/index.tsx",
46
46
  children: void 0,
47
47
  preloads: [
48
- "/assets/routes-BS4N7Lnf.js",
49
- "/assets/SignIn-9vsaKv_p.js",
48
+ "/assets/routes-B6Kg4mFC.js",
49
+ "/assets/SignIn-Cc1zxGnA.js",
50
50
  "/assets/routes-DsdcURfk.js",
51
51
  "/assets/actionUi-DDDfD0WX.js"
52
52
  ]
@@ -57,17 +57,17 @@ var tsrStartManifest = () => ({ routes: {
57
57
  preloads: [
58
58
  "/assets/invite._token-C3t4JfAY.js",
59
59
  "/assets/actionUi-DDDfD0WX.js",
60
- "/assets/invite._token-C891oGkK.js",
61
- "/assets/SignIn-9vsaKv_p.js"
60
+ "/assets/invite._token-CUCNcN89.js",
61
+ "/assets/SignIn-Cc1zxGnA.js"
62
62
  ]
63
63
  },
64
64
  "/loops/$loopId": {
65
65
  filePath: "/Users/kky/dev/evo/packages/server/src/routes/loops.$loopId.tsx",
66
66
  children: void 0,
67
67
  preloads: [
68
- "/assets/loops._loopId-DD4fKGMu.js",
69
- "/assets/artifactView-BV-yQVrj.js",
70
- "/assets/SignIn-9vsaKv_p.js",
68
+ "/assets/loops._loopId-CrSSvSVl.js",
69
+ "/assets/artifactView-Cd5wWPil.js",
70
+ "/assets/SignIn-Cc1zxGnA.js",
71
71
  "/assets/actionUi-DDDfD0WX.js"
72
72
  ]
73
73
  },
@@ -77,16 +77,16 @@ var tsrStartManifest = () => ({ routes: {
77
77
  preloads: [
78
78
  "/assets/t._teamId-C9uEyAh_.js",
79
79
  "/assets/actionUi-DDDfD0WX.js",
80
- "/assets/t._teamId-DSYlMX_v.js",
81
- "/assets/SignIn-9vsaKv_p.js"
80
+ "/assets/t._teamId-Cmm4xdKj.js",
81
+ "/assets/SignIn-Cc1zxGnA.js"
82
82
  ]
83
83
  },
84
84
  "/loops/$loopId_/runs/$runId": {
85
85
  filePath: "/Users/kky/dev/evo/packages/server/src/routes/loops.$loopId_.runs.$runId.tsx",
86
86
  children: void 0,
87
87
  preloads: [
88
- "/assets/loops._loopId_.runs._runId-DoPcCQy7.js",
89
- "/assets/SignIn-9vsaKv_p.js",
88
+ "/assets/loops._loopId_.runs._runId-B5Qacloe.js",
89
+ "/assets/SignIn-Cc1zxGnA.js",
90
90
  "/assets/actionUi-DDDfD0WX.js"
91
91
  ]
92
92
  }
@@ -0,0 +1,4 @@
1
+ -- Execution serialization belongs to a loop, not to its machine. Existing data
2
+ -- satisfies the new invariant because the old machine-wide index was stronger.
3
+ DROP INDEX "one_running_run_per_machine";--> statement-breakpoint
4
+ CREATE UNIQUE INDEX "one_running_run_per_loop" ON "runs" USING btree ("loop_id") WHERE "runs"."phase" = 'running';
@@ -113,6 +113,13 @@
113
113
  "when": 1784712544158,
114
114
  "tag": "0015_run_history_foundation",
115
115
  "breakpoints": true
116
+ },
117
+ {
118
+ "idx": 16,
119
+ "version": "7",
120
+ "when": 1784712544159,
121
+ "tag": "0016_plural_machine_runs",
122
+ "breakpoints": true
116
123
  }
117
124
  ]
118
125
  }
@@ -14,175 +14,175 @@ var public_assets_data_default = {
14
14
  "/favicon.svg": {
15
15
  "type": "image/svg+xml",
16
16
  "etag": "\"2f9-diQHMODwkdsIQ2ssl9fzDaFKaXE\"",
17
- "mtime": "2026-07-22T16:35:35.656Z",
17
+ "mtime": "2026-07-24T04:30:15.882Z",
18
18
  "size": 761,
19
19
  "path": "../public/favicon.svg"
20
20
  },
21
- "/assets/SignIn-9vsaKv_p.js": {
21
+ "/assets/Modal-Ba36NAkv.js": {
22
22
  "type": "text/javascript; charset=utf-8",
23
- "etag": "\"56e-4jYEnfid7ZndDeDjwXhMvTwGiXA\"",
24
- "mtime": "2026-07-22T16:35:35.141Z",
25
- "size": 1390,
26
- "path": "../public/assets/SignIn-9vsaKv_p.js"
23
+ "etag": "\"f440-2dHfNFz3iQN3Go0FUQ2k+2TgoZ8\"",
24
+ "mtime": "2026-07-24T04:30:15.386Z",
25
+ "size": 62528,
26
+ "path": "../public/assets/Modal-Ba36NAkv.js"
27
27
  },
28
28
  "/assets/actionUi-DDDfD0WX.js": {
29
29
  "type": "text/javascript; charset=utf-8",
30
30
  "etag": "\"8d4-T51UrrIcx8jtICuIR/SW8x8B76M\"",
31
- "mtime": "2026-07-22T16:35:35.141Z",
31
+ "mtime": "2026-07-24T04:30:15.386Z",
32
32
  "size": 2260,
33
33
  "path": "../public/assets/actionUi-DDDfD0WX.js"
34
34
  },
35
- "/assets/Modal-B3xpEtcf.js": {
35
+ "/assets/SignIn-Cc1zxGnA.js": {
36
36
  "type": "text/javascript; charset=utf-8",
37
- "etag": "\"f440-O5WfIh1wS+DhEmQCrpsHc32OmJU\"",
38
- "mtime": "2026-07-22T16:35:35.141Z",
39
- "size": 62528,
40
- "path": "../public/assets/Modal-B3xpEtcf.js"
37
+ "etag": "\"56e-dy0PUvMKvUIZIvYJ2tFG7+yq6DY\"",
38
+ "mtime": "2026-07-24T04:30:15.386Z",
39
+ "size": 1390,
40
+ "path": "../public/assets/SignIn-Cc1zxGnA.js"
41
41
  },
42
- "/assets/app-CStTBRt2.css": {
42
+ "/assets/app-D1cij_NJ.css": {
43
43
  "type": "text/css; charset=utf-8",
44
- "etag": "\"d9aa-t0ON5hShc+x9qmJXwPG0/3KRXo0\"",
45
- "mtime": "2026-07-22T16:35:35.143Z",
46
- "size": 55722,
47
- "path": "../public/assets/app-CStTBRt2.css"
44
+ "etag": "\"da23-4c1h5ujZCeLSpd3pc8103fyOriw\"",
45
+ "mtime": "2026-07-24T04:30:15.387Z",
46
+ "size": 55843,
47
+ "path": "../public/assets/app-D1cij_NJ.css"
48
48
  },
49
- "/assets/artifactView-BV-yQVrj.js": {
49
+ "/assets/artifactView-Cd5wWPil.js": {
50
50
  "type": "text/javascript; charset=utf-8",
51
- "etag": "\"11ea7-M1O0tnQNjnWG4plFk22L9lEof/c\"",
52
- "mtime": "2026-07-22T16:35:35.141Z",
51
+ "etag": "\"11ea7-9rGfsjTROSRLIyqgeOoTs9DcN7c\"",
52
+ "mtime": "2026-07-24T04:30:15.386Z",
53
53
  "size": 73383,
54
- "path": "../public/assets/artifactView-BV-yQVrj.js"
54
+ "path": "../public/assets/artifactView-Cd5wWPil.js"
55
55
  },
56
- "/assets/invite._token-C3t4JfAY.js": {
56
+ "/assets/LoopView-BTXoqfzM.js": {
57
57
  "type": "text/javascript; charset=utf-8",
58
- "etag": "\"17a-tpcmc7ytNGyRkPmMCJp1g7bfOVE\"",
59
- "mtime": "2026-07-22T16:35:35.141Z",
60
- "size": 378,
61
- "path": "../public/assets/invite._token-C3t4JfAY.js"
58
+ "etag": "\"6ae65-5J/a9HF94oe8gnlSLlbJ3c14bhw\"",
59
+ "mtime": "2026-07-24T04:30:15.385Z",
60
+ "size": 437861,
61
+ "path": "../public/assets/LoopView-BTXoqfzM.js"
62
62
  },
63
- "/assets/LoopView-Pbp2YtUu.js": {
63
+ "/assets/invite._token-CUCNcN89.js": {
64
64
  "type": "text/javascript; charset=utf-8",
65
- "etag": "\"63043-RVyp5R61D8mwTqEkn1XChynK/n8\"",
66
- "mtime": "2026-07-22T16:35:35.139Z",
67
- "size": 405571,
68
- "path": "../public/assets/LoopView-Pbp2YtUu.js"
65
+ "etag": "\"65a-Sc9gjLBAwlMLOi6LaqoPkPiXwMo\"",
66
+ "mtime": "2026-07-24T04:30:15.386Z",
67
+ "size": 1626,
68
+ "path": "../public/assets/invite._token-CUCNcN89.js"
69
69
  },
70
- "/assets/jsx-runtime-BseJUIpC.js": {
70
+ "/assets/lifecycleUi-CMFw5Nlj.js": {
71
71
  "type": "text/javascript; charset=utf-8",
72
- "etag": "\"21db-Zc8kSR08Ehf1UdEHwfS1+Mhso7E\"",
73
- "mtime": "2026-07-22T16:35:35.142Z",
74
- "size": 8667,
75
- "path": "../public/assets/jsx-runtime-BseJUIpC.js"
72
+ "etag": "\"50f-cHaEzAh4n3XZ1BRT+GyM6U1rjDk\"",
73
+ "mtime": "2026-07-24T04:30:15.386Z",
74
+ "size": 1295,
75
+ "path": "../public/assets/lifecycleUi-CMFw5Nlj.js"
76
76
  },
77
- "/assets/invite._token-C891oGkK.js": {
77
+ "/assets/invite._token-C3t4JfAY.js": {
78
78
  "type": "text/javascript; charset=utf-8",
79
- "etag": "\"65a-Qi4QrjSFBaMCBxaNpwfnzjMPhnM\"",
80
- "mtime": "2026-07-22T16:35:35.141Z",
81
- "size": 1626,
82
- "path": "../public/assets/invite._token-C891oGkK.js"
79
+ "etag": "\"17a-tpcmc7ytNGyRkPmMCJp1g7bfOVE\"",
80
+ "mtime": "2026-07-24T04:30:15.386Z",
81
+ "size": 378,
82
+ "path": "../public/assets/invite._token-C3t4JfAY.js"
83
83
  },
84
- "/assets/lifecycleUi-C3k2MlX8.js": {
84
+ "/assets/index-BGM1XGY0.js": {
85
85
  "type": "text/javascript; charset=utf-8",
86
- "etag": "\"50f-kWJ2CzUjjwKiXb/1i78rmnEKpDA\"",
87
- "mtime": "2026-07-22T16:35:35.142Z",
88
- "size": 1295,
89
- "path": "../public/assets/lifecycleUi-C3k2MlX8.js"
86
+ "etag": "\"49aea-BuUBQP8AD5RhGpKKPxyGrInE6co\"",
87
+ "mtime": "2026-07-24T04:30:15.385Z",
88
+ "size": 301802,
89
+ "path": "../public/assets/index-BGM1XGY0.js"
90
90
  },
91
- "/assets/loops._loopId-DD4fKGMu.js": {
91
+ "/assets/loopApi-CT1mMhlb.js": {
92
92
  "type": "text/javascript; charset=utf-8",
93
- "etag": "\"81fa-tRfySLcT36KGp0p59BjBUO0Nuyc\"",
94
- "mtime": "2026-07-22T16:35:35.142Z",
95
- "size": 33274,
96
- "path": "../public/assets/loops._loopId-DD4fKGMu.js"
93
+ "etag": "\"ac22-nuAz3tvTyTVzbikAxFXkZ+xNpt0\"",
94
+ "mtime": "2026-07-24T04:30:15.386Z",
95
+ "size": 44066,
96
+ "path": "../public/assets/loopApi-CT1mMhlb.js"
97
97
  },
98
- "/assets/loopApi-C_Dtw-nL.js": {
98
+ "/assets/loops._loopId-CrSSvSVl.js": {
99
99
  "type": "text/javascript; charset=utf-8",
100
- "etag": "\"abb6-9KPrkejlYudnh9/pm8jTfOn0daA\"",
101
- "mtime": "2026-07-22T16:35:35.142Z",
102
- "size": 43958,
103
- "path": "../public/assets/loopApi-C_Dtw-nL.js"
100
+ "etag": "\"81b8-aPKgd5R/22HJOoDPM5ncY8AU8JE\"",
101
+ "mtime": "2026-07-24T04:30:15.386Z",
102
+ "size": 33208,
103
+ "path": "../public/assets/loops._loopId-CrSSvSVl.js"
104
104
  },
105
- "/assets/loops._loopId_.runs._runId-DoPcCQy7.js": {
105
+ "/assets/loops._loopId_.runs._runId-B5Qacloe.js": {
106
106
  "type": "text/javascript; charset=utf-8",
107
- "etag": "\"34c0-ZXKEClM2fKV5zE/Hae+z6iZMd6g\"",
108
- "mtime": "2026-07-22T16:35:35.142Z",
109
- "size": 13504,
110
- "path": "../public/assets/loops._loopId_.runs._runId-DoPcCQy7.js"
107
+ "etag": "\"34d1-04xNZM/I3hRVlm79JV+46k+5Knk\"",
108
+ "mtime": "2026-07-24T04:30:15.386Z",
109
+ "size": 13521,
110
+ "path": "../public/assets/loops._loopId_.runs._runId-B5Qacloe.js"
111
111
  },
112
- "/assets/routes-BS4N7Lnf.js": {
112
+ "/assets/routes-B6Kg4mFC.js": {
113
113
  "type": "text/javascript; charset=utf-8",
114
- "etag": "\"17b-cfX8diTwD8sQyk4ghnMGkPz1PQw\"",
115
- "mtime": "2026-07-22T16:35:35.143Z",
114
+ "etag": "\"17b-tBeAG+vUP0iB96AsA5gAP9Dgh5s\"",
115
+ "mtime": "2026-07-24T04:30:15.387Z",
116
116
  "size": 379,
117
- "path": "../public/assets/routes-BS4N7Lnf.js"
117
+ "path": "../public/assets/routes-B6Kg4mFC.js"
118
118
  },
119
- "/assets/notifyFns-BaukhLAg.js": {
119
+ "/assets/jsx-runtime-BseJUIpC.js": {
120
120
  "type": "text/javascript; charset=utf-8",
121
- "etag": "\"fbdc-+m0E3+y/CnFzlvchZqNM/25EmCE\"",
122
- "mtime": "2026-07-22T16:35:35.143Z",
123
- "size": 64476,
124
- "path": "../public/assets/notifyFns-BaukhLAg.js"
121
+ "etag": "\"21db-Zc8kSR08Ehf1UdEHwfS1+Mhso7E\"",
122
+ "mtime": "2026-07-24T04:30:15.386Z",
123
+ "size": 8667,
124
+ "path": "../public/assets/jsx-runtime-BseJUIpC.js"
125
+ },
126
+ "/assets/routes-DsdcURfk.js": {
127
+ "type": "text/javascript; charset=utf-8",
128
+ "etag": "\"17c-fwC8gu6Xl/9dCUZKhEPkPadFJmc\"",
129
+ "mtime": "2026-07-24T04:30:15.387Z",
130
+ "size": 380,
131
+ "path": "../public/assets/routes-DsdcURfk.js"
125
132
  },
126
133
  "/assets/t._teamId-C9uEyAh_.js": {
127
134
  "type": "text/javascript; charset=utf-8",
128
135
  "etag": "\"178-7H9QBAqObhxeBvui9OTtPY0mnSU\"",
129
- "mtime": "2026-07-22T16:35:35.143Z",
136
+ "mtime": "2026-07-24T04:30:15.387Z",
130
137
  "size": 376,
131
138
  "path": "../public/assets/t._teamId-C9uEyAh_.js"
132
139
  },
133
- "/assets/routes-DsdcURfk.js": {
140
+ "/assets/preload-helper-DFkkpP6W.js": {
134
141
  "type": "text/javascript; charset=utf-8",
135
- "etag": "\"17c-fwC8gu6Xl/9dCUZKhEPkPadFJmc\"",
136
- "mtime": "2026-07-22T16:35:35.143Z",
137
- "size": 380,
138
- "path": "../public/assets/routes-DsdcURfk.js"
142
+ "etag": "\"14bb4-tg2MgcXnPAow0qlKYZovarjjqNg\"",
143
+ "mtime": "2026-07-24T04:30:15.387Z",
144
+ "size": 84916,
145
+ "path": "../public/assets/preload-helper-DFkkpP6W.js"
139
146
  },
140
- "/assets/t._teamId-DSYlMX_v.js": {
147
+ "/assets/t._teamId-Cmm4xdKj.js": {
141
148
  "type": "text/javascript; charset=utf-8",
142
- "etag": "\"194-UbYEkxRdy/igBSRzweeVfb+EZq0\"",
143
- "mtime": "2026-07-22T16:35:35.143Z",
149
+ "etag": "\"194-gBDEt+4XhYJnKLgjcfhBtOw+W94\"",
150
+ "mtime": "2026-07-24T04:30:15.387Z",
144
151
  "size": 404,
145
- "path": "../public/assets/t._teamId-DSYlMX_v.js"
152
+ "path": "../public/assets/t._teamId-Cmm4xdKj.js"
146
153
  },
147
- "/assets/preload-helper--VCqDT5m.js": {
154
+ "/assets/notifyFns-CYiZT7CK.js": {
148
155
  "type": "text/javascript; charset=utf-8",
149
- "etag": "\"14bb4-FAg2bQc2ZEhFKoiDCSsPnCEJ9pY\"",
150
- "mtime": "2026-07-22T16:35:35.143Z",
151
- "size": 84916,
152
- "path": "../public/assets/preload-helper--VCqDT5m.js"
156
+ "etag": "\"fbe7-JPiYmf04CGno1CrpBPTm6OB92ZY\"",
157
+ "mtime": "2026-07-24T04:30:15.386Z",
158
+ "size": 64487,
159
+ "path": "../public/assets/notifyFns-CYiZT7CK.js"
153
160
  },
154
161
  "/assets/ui-Gb1413-F.js": {
155
162
  "type": "text/javascript; charset=utf-8",
156
163
  "etag": "\"1b03-Yp1X1lb+G7it59MkrzqgP3+2aCM\"",
157
- "mtime": "2026-07-22T16:35:35.143Z",
164
+ "mtime": "2026-07-24T04:30:15.387Z",
158
165
  "size": 6915,
159
166
  "path": "../public/assets/ui-Gb1413-F.js"
160
167
  },
161
168
  "/assets/useRouter-DsjH8G0p.js": {
162
169
  "type": "text/javascript; charset=utf-8",
163
170
  "etag": "\"97-bwshbj7pN2rnQJllfZOPZLnOIos\"",
164
- "mtime": "2026-07-22T16:35:35.143Z",
171
+ "mtime": "2026-07-24T04:30:15.387Z",
165
172
  "size": 151,
166
173
  "path": "../public/assets/useRouter-DsjH8G0p.js"
167
174
  },
168
175
  "/fonts/GeistPixel-Square.woff2": {
169
176
  "type": "font/woff2",
170
177
  "etag": "\"6f7c-IQXyklzDeInO8O/YtOs5/0tckOE\"",
171
- "mtime": "2026-07-22T16:35:35.657Z",
178
+ "mtime": "2026-07-24T04:30:15.883Z",
172
179
  "size": 28540,
173
180
  "path": "../public/fonts/GeistPixel-Square.woff2"
174
181
  },
175
- "/assets/index-49hAH0gP.js": {
176
- "type": "text/javascript; charset=utf-8",
177
- "etag": "\"49ae2-7OKcjK5FMB4xxtvC/FnH4UNLEO4\"",
178
- "mtime": "2026-07-22T16:35:35.139Z",
179
- "size": 301794,
180
- "path": "../public/assets/index-49hAH0gP.js"
181
- },
182
182
  "/assets/CodeField-dOzyFQNH.js": {
183
183
  "type": "text/javascript; charset=utf-8",
184
184
  "etag": "\"8c119-K1dNstx4oT3G0gi1kwFhBau674k\"",
185
- "mtime": "2026-07-22T16:35:35.139Z",
185
+ "mtime": "2026-07-24T04:30:15.385Z",
186
186
  "size": 573721,
187
187
  "path": "../public/assets/CodeField-dOzyFQNH.js"
188
188
  }
@@ -0,0 +1,4 @@
1
+ -- Execution serialization belongs to a loop, not to its machine. Existing data
2
+ -- satisfies the new invariant because the old machine-wide index was stronger.
3
+ DROP INDEX "one_running_run_per_machine";--> statement-breakpoint
4
+ CREATE UNIQUE INDEX "one_running_run_per_loop" ON "runs" USING btree ("loop_id") WHERE "runs"."phase" = 'running';
@@ -113,6 +113,13 @@
113
113
  "when": 1784712544158,
114
114
  "tag": "0015_run_history_foundation",
115
115
  "breakpoints": true
116
+ },
117
+ {
118
+ "idx": 16,
119
+ "version": "7",
120
+ "when": 1784712544159,
121
+ "tag": "0016_plural_machine_runs",
122
+ "breakpoints": true
116
123
  }
117
124
  ]
118
125
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kky42/pievo-server",
3
- "version": "2.0.4",
3
+ "version": "2.2.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",