@massa-ai/core 1.52.0 → 1.53.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 (29) hide show
  1. package/dist/data/handoff/handoff-contract.d.ts +16 -0
  2. package/dist/data/handoff/handoff-contract.d.ts.map +1 -1
  3. package/dist/data/handoff/handoff-contract.js +23 -0
  4. package/dist/data/handoff/handoff-contract.js.map +1 -1
  5. package/dist/data/handoff/handoff-repository-pg.d.ts +17 -1
  6. package/dist/data/handoff/handoff-repository-pg.d.ts.map +1 -1
  7. package/dist/data/handoff/handoff-repository-pg.js +63 -0
  8. package/dist/data/handoff/handoff-repository-pg.js.map +1 -1
  9. package/dist/data/proposal/proposal-contract.d.ts +24 -0
  10. package/dist/data/proposal/proposal-contract.d.ts.map +1 -1
  11. package/dist/data/proposal/proposal-contract.js +36 -0
  12. package/dist/data/proposal/proposal-contract.js.map +1 -1
  13. package/dist/data/proposal/proposal-payload-validation.d.ts +54 -0
  14. package/dist/data/proposal/proposal-payload-validation.d.ts.map +1 -0
  15. package/dist/data/proposal/proposal-payload-validation.js +106 -0
  16. package/dist/data/proposal/proposal-payload-validation.js.map +1 -0
  17. package/dist/data/proposal/proposal-repository-pg.d.ts +27 -1
  18. package/dist/data/proposal/proposal-repository-pg.d.ts.map +1 -1
  19. package/dist/data/proposal/proposal-repository-pg.js +92 -31
  20. package/dist/data/proposal/proposal-repository-pg.js.map +1 -1
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +7 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/services/handoff/handoff-service.d.ts +46 -2
  26. package/dist/services/handoff/handoff-service.d.ts.map +1 -1
  27. package/dist/services/handoff/handoff-service.js +81 -2
  28. package/dist/services/handoff/handoff-service.js.map +1 -1
  29. package/package.json +2 -2
@@ -13,11 +13,25 @@ export interface HandoffRecord {
13
13
  createdAt: number;
14
14
  acceptedAt: number | null;
15
15
  }
16
+ /**
17
+ * The five fields `update` is allowed to touch (AC-01.1/AC-01.3). `status`
18
+ * and `acceptedAt` are deliberately absent — they stay exclusively
19
+ * `setStatus`'s, a paired write this store has no corruption guard for.
20
+ */
21
+ export interface HandoffUpdatePatch {
22
+ targetAgent?: string | null;
23
+ summary?: string;
24
+ openQuestions?: string[];
25
+ nextSteps?: string[];
26
+ files?: string[];
27
+ }
16
28
  export interface HandoffStore {
17
29
  insert(h: HandoffRecord): Promise<void>;
18
30
  getById(id: string): Promise<HandoffRecord | null>;
19
31
  listPending(projectId: string, targetAgent?: string | null): Promise<HandoffRecord[]>;
20
32
  setStatus(id: string, status: "accepted" | "expired", acceptedAt?: number): Promise<HandoffRecord | null>;
33
+ update(id: string, patch: HandoffUpdatePatch): Promise<HandoffRecord | null>;
34
+ delete(id: string): Promise<string | null>;
21
35
  journalMode(): Promise<string>;
22
36
  }
23
37
  /** Test double; never selected by production factory. */
@@ -27,6 +41,8 @@ export declare class MemoryHandoffStore implements HandoffStore {
27
41
  getById(id: string): Promise<HandoffRecord | null>;
28
42
  listPending(projectId: string, targetAgent?: string | null): Promise<HandoffRecord[]>;
29
43
  setStatus(id: string, status: "accepted" | "expired", acceptedAt?: number): Promise<HandoffRecord | null>;
44
+ update(id: string, patch: HandoffUpdatePatch): Promise<HandoffRecord | null>;
45
+ delete(id: string): Promise<string | null>;
30
46
  journalMode(): Promise<string>;
31
47
  }
32
48
  //# sourceMappingURL=handoff-contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-contract.d.ts","sourceRoot":"","sources":["../../../src/data/handoff/handoff-contract.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,0CAA2C,CAAC;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9D,MAAM,WAAW,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAAE;AAClR,MAAM,WAAW,YAAY;IAAG,MAAM,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAAE;AAChW,yDAAyD;AACzD,qBAAa,kBAAmB,YAAW,YAAY;IAC9C,IAAI,EAAE,aAAa,EAAE,CAAM;IAC5B,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAClD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACrF,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IACzG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;CACrC"}
1
+ {"version":3,"file":"handoff-contract.d.ts","sourceRoot":"","sources":["../../../src/data/handoff/handoff-contract.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,0CAA2C,CAAC;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9D,MAAM,WAAW,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAAE;AAClR;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAAG,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAAE;AACxJ,MAAM,WAAW,YAAY;IAAG,MAAM,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAAE;AAC1d,yDAAyD;AACzD,qBAAa,kBAAmB,YAAW,YAAY;IAC9C,IAAI,EAAE,aAAa,EAAE,CAAM;IAC5B,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAClD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACrF,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IACzG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAU5E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM1C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;CACrC"}
@@ -7,6 +7,29 @@ export class MemoryHandoffStore {
7
7
  async listPending(projectId, targetAgent) { return this.rows.filter((row) => row.projectId === projectId && row.status === "open" && (targetAgent == null || row.targetAgent === targetAgent || row.targetAgent == null)).sort((a, b) => a.createdAt - b.createdAt).map((row) => structuredClone(row)); }
8
8
  async setStatus(id, status, acceptedAt) { const row = this.rows.find((item) => item.id === id); if (!row)
9
9
  return null; row.status = status; row.acceptedAt = status === "accepted" ? acceptedAt ?? Date.now() : null; return structuredClone(row); }
10
+ async update(id, patch) {
11
+ const row = this.rows.find((item) => item.id === id);
12
+ if (!row)
13
+ return null;
14
+ if (patch.targetAgent !== undefined)
15
+ row.targetAgent = patch.targetAgent;
16
+ if (patch.summary !== undefined)
17
+ row.summary = patch.summary;
18
+ if (patch.openQuestions !== undefined)
19
+ row.openQuestions = patch.openQuestions;
20
+ if (patch.nextSteps !== undefined)
21
+ row.nextSteps = patch.nextSteps;
22
+ if (patch.files !== undefined)
23
+ row.files = patch.files;
24
+ return structuredClone(row);
25
+ }
26
+ async delete(id) {
27
+ const index = this.rows.findIndex((item) => item.id === id);
28
+ if (index === -1)
29
+ return null;
30
+ this.rows.splice(index, 1);
31
+ return id;
32
+ }
10
33
  async journalMode() { return "memory"; }
11
34
  }
12
35
  //# sourceMappingURL=handoff-contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-contract.js","sourceRoot":"","sources":["../../../src/data/handoff/handoff-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AAIzE,yDAAyD;AACzD,MAAM,OAAO,kBAAkB;IACtB,IAAI,GAAoB,EAAE,CAAC;IAClC,KAAK,CAAC,MAAM,CAAC,GAAkB,IAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,KAAK,CAAC,OAAO,CAAC,EAAU,IAAmC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5J,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,WAA2B,IAA8B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3V,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,MAA8B,EAAE,UAAmB,IAAmC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5T,KAAK,CAAC,WAAW,KAAsB,OAAO,QAAQ,CAAC,CAAC,CAAC;CAC1D"}
1
+ {"version":3,"file":"handoff-contract.js","sourceRoot":"","sources":["../../../src/data/handoff/handoff-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AAUzE,yDAAyD;AACzD,MAAM,OAAO,kBAAkB;IACtB,IAAI,GAAoB,EAAE,CAAC;IAClC,KAAK,CAAC,MAAM,CAAC,GAAkB,IAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,KAAK,CAAC,OAAO,CAAC,EAAU,IAAmC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5J,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,WAA2B,IAA8B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3V,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,MAA8B,EAAE,UAAmB,IAAmC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5T,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,KAAyB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACzE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7D,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;YAAE,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC/E,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACnE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACvD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,CAAC,WAAW,KAAsB,OAAO,QAAQ,CAAC,CAAC,CAAC;CAC1D"}
@@ -1,6 +1,6 @@
1
1
  /** PostgreSQL implementation of the durable asynchronous HandoffStore contract. */
2
2
  import type { PrismaClient } from "../../generated/prisma/index.js";
3
- import { type HandoffRecord, type HandoffStore } from "./handoff-contract.js";
3
+ import { type HandoffRecord, type HandoffStore, type HandoffUpdatePatch } from "./handoff-contract.js";
4
4
  export declare class PgHandoffStore implements HandoffStore {
5
5
  private prisma;
6
6
  private mirror;
@@ -13,6 +13,22 @@ export declare class PgHandoffStore implements HandoffStore {
13
13
  getById(id: string): Promise<HandoffRecord | null>;
14
14
  listPending(projectId: string, targetAgent?: string | null): Promise<HandoffRecord[]>;
15
15
  setStatus(id: string, status: "accepted" | "expired", acceptedAt?: number): Promise<HandoffRecord | null>;
16
+ /**
17
+ * Writes only the five allowlisted columns (AC-01.1). `status` /
18
+ * `accepted_at` never appear in this SQL — they stay exclusively
19
+ * `setStatus`'s paired write (AC-01.3). Absent patch fields are re-written
20
+ * with their current mirror value rather than a partial `SET` list, which
21
+ * keeps the query static; the effect on the row is identical either way.
22
+ */
23
+ update(id: string, patch: HandoffUpdatePatch): Promise<HandoffRecord | null>;
24
+ /**
25
+ * Hard-deletes in any status (AC-01.4). The DB's affected-row count is the
26
+ * source of truth for whether anything existed; the in-process mirror is
27
+ * only ever purged *after* that DB write succeeds, and it must be purged
28
+ * (D3) — omitting `mirror.delete` leaves this store instance serving the
29
+ * deleted row from memory for the rest of the process.
30
+ */
31
+ delete(id: string): Promise<string | null>;
16
32
  journalMode(): Promise<string>;
17
33
  /** Internal verification hook for async persistence and restart tests. */
18
34
  __hydrate(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-repository-pg.d.ts","sourceRoot":"","sources":["../../../src/data/handoff/handoff-repository-pg.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAOpE,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAwD/B,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA8B;gBAEnC,MAAM,CAAC,EAAE,YAAY;IAIjC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,cAAc;IAyBhB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B5C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAMlD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAerF,SAAS,CACb,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgC1B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC,0EAA0E;IACpE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,8EAA8E;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"handoff-repository-pg.d.ts","sourceRoot":"","sources":["../../../src/data/handoff/handoff-repository-pg.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAOpE,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAwD/B,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA8B;gBAEnC,MAAM,CAAC,EAAE,YAAY;IAIjC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,cAAc;IAyBhB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B5C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAMlD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAerF,SAAS,CACb,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgChC;;;;;;OAMG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmClF;;;;;;OAMG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa1C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC,0EAA0E;IACpE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,8EAA8E;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -161,6 +161,69 @@ export class PgHandoffStore {
161
161
  this.mirror.set(id, persisted);
162
162
  return structuredClone(persisted);
163
163
  }
164
+ /**
165
+ * Writes only the five allowlisted columns (AC-01.1). `status` /
166
+ * `accepted_at` never appear in this SQL — they stay exclusively
167
+ * `setStatus`'s paired write (AC-01.3). Absent patch fields are re-written
168
+ * with their current mirror value rather than a partial `SET` list, which
169
+ * keeps the query static; the effect on the row is identical either way.
170
+ */
171
+ async update(id, patch) {
172
+ await this.ensureHydrated();
173
+ const current = this.mirror.get(id);
174
+ if (!current)
175
+ return null;
176
+ const merged = {
177
+ ...current,
178
+ ...(patch.targetAgent !== undefined ? { targetAgent: patch.targetAgent } : {}),
179
+ ...(patch.summary !== undefined ? { summary: patch.summary } : {}),
180
+ ...(patch.openQuestions !== undefined ? { openQuestions: patch.openQuestions } : {}),
181
+ ...(patch.nextSteps !== undefined ? { nextSteps: patch.nextSteps } : {}),
182
+ ...(patch.files !== undefined ? { files: patch.files } : {}),
183
+ };
184
+ let rows;
185
+ try {
186
+ rows = await this.getClient().$queryRaw `
187
+ UPDATE handoffs
188
+ SET target_agent = ${merged.targetAgent}, summary = ${merged.summary},
189
+ open_questions_json = ${JSON.stringify(merged.openQuestions ?? [])},
190
+ next_steps_json = ${JSON.stringify(merged.nextSteps ?? [])},
191
+ files_json = ${JSON.stringify(merged.files ?? [])}
192
+ WHERE id = ${id}
193
+ RETURNING id, project_id, source_session_id, target_agent, summary,
194
+ open_questions_json, next_steps_json, files_json, status,
195
+ created_at, accepted_at`;
196
+ }
197
+ catch (error) {
198
+ throw searchBackendUnavailable("handoff_store", error);
199
+ }
200
+ if (!rows[0])
201
+ return null;
202
+ const persisted = toRecord(rows[0]);
203
+ this.mirror.set(id, persisted);
204
+ return structuredClone(persisted);
205
+ }
206
+ /**
207
+ * Hard-deletes in any status (AC-01.4). The DB's affected-row count is the
208
+ * source of truth for whether anything existed; the in-process mirror is
209
+ * only ever purged *after* that DB write succeeds, and it must be purged
210
+ * (D3) — omitting `mirror.delete` leaves this store instance serving the
211
+ * deleted row from memory for the rest of the process.
212
+ */
213
+ async delete(id) {
214
+ await this.ensureHydrated();
215
+ let affected;
216
+ try {
217
+ affected = await this.getClient().$executeRaw `DELETE FROM handoffs WHERE id = ${id}`;
218
+ }
219
+ catch (error) {
220
+ throw searchBackendUnavailable("handoff_store", error);
221
+ }
222
+ if (affected === 0)
223
+ return null;
224
+ this.mirror.delete(id);
225
+ return id;
226
+ }
164
227
  async journalMode() {
165
228
  await this.ensureHydrated();
166
229
  return "postgres";
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-repository-pg.js","sourceRoot":"","sources":["../../../src/data/handoff/handoff-repository-pg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff-repository-pg.js","sourceRoot":"","sources":["../../../src/data/handoff/handoff-repository-pg.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAGnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,gBAAgB,GAKjB,MAAM,uBAAuB,CAAC;AAgB/B,SAAS,SAAS,CAAC,GAAW,EAAE,KAAa;IAC3C,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,WAAW,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC5E,MAAM,eAAe,CAAC,WAAW,KAAK,EAAE,EAAE,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,KAAa,EAAE,QAAQ,GAAG,KAAK;IAChE,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC9D,MAAM,eAAe,CAAC,WAAW,KAAK,EAAE,EAAE,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAiB;IACjC,IAAI,CAAE,gBAAsC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE,MAAM,eAAe,CAAC,gBAAgB,EAAE,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,eAAe,EAAE,GAAG,CAAC,iBAAiB;QACtC,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;QACxE,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC;QAC5D,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC;QAC9C,MAAM,EAAE,GAAG,CAAC,MAAuB;QACnC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAE;QACnD,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAc;IACjB,MAAM,CAAgB;IACtB,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC1C,QAAQ,GAAG,KAAK,CAAC;IACjB,SAAS,GAAyB,IAAI,CAAC;IAE/C,YAAY,MAAqB;QAC/B,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE;YAC3B,IAAI,CAAC;gBACH,IAAI,IAAoB,CAAC;gBACzB,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAgB;;;;0BAIvC,CAAC;gBACnB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAqB;QAChC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACzC,wEAAwE;QACxE,yDAAyD;QACzD,QAAQ,CAAC,SAAS,GAAG,MAAM,+BAA+B,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAA;;;;;;YAM5B,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,eAAe;YAC/D,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,OAAO;YACzC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,QAAQ,CAAC,MAAM;YACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;UACrE,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,WAA2B;QAC9D,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;aAC7B,MAAM,CACL,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,SAAS,KAAK,SAAS;YAC9B,MAAM,CAAC,MAAM,KAAK,MAAM;YACxB,CAAC,WAAW,IAAI,IAAI;gBAClB,MAAM,CAAC,WAAW,KAAK,WAAW;gBAClC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CACjC;aACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,SAAS,CACb,EAAU,EACV,MAA8B,EAC9B,UAAmB;QAEnB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,cAAc,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,MAAM,YAAY,GAAG,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/E,IAAI,IAAoB,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAgB;;uBAEtC,MAAM,mBAAmB,YAAY;qBACvC,EAAE;;;0CAGmB,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAgB;;;kEAGG,EAAE,EAAE,CAAC;YACjE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/B,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,KAAyB;QAChD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,MAAM,GAAkB;YAC5B,GAAG,OAAO;YACV,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC;QAEF,IAAI,IAAoB,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAgB;;6BAEhC,MAAM,CAAC,WAAW,eAAe,MAAM,CAAC,OAAO;oCACxC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;gCAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;2BAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;qBACxC,EAAE;;;0CAGmB,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/B,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAA,mCAAmC,EAAE,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -29,11 +29,32 @@ export interface ProposalRecord {
29
29
  createdAt: number;
30
30
  decidedAt: number | null;
31
31
  }
32
+ /** Input to `create` (AC-02.1): the store stamps `status: "pending"` and
33
+ * `decidedAt: null` itself — those two fields are never caller-supplied here,
34
+ * which is what keeps them out of reach of a manual `insert()` misuse. */
35
+ export interface ProposalCreateInput {
36
+ id: string;
37
+ projectId: string;
38
+ kind: ProposalKind;
39
+ payload: ProposalPayload;
40
+ rationale?: string;
41
+ targetMemoryId?: string | null;
42
+ createdAt?: number;
43
+ }
44
+ /** The two fields `update` is allowed to touch (AC-02.3/AC-02.4). `kind`,
45
+ * `targetMemoryId`, `status` and `decidedAt` are deliberately absent. */
46
+ export interface ProposalUpdatePatch {
47
+ rationale?: string;
48
+ payload?: ProposalPayload;
49
+ }
32
50
  export interface ProposalStore {
33
51
  insert(p: ProposalRecord): Promise<void>;
34
52
  getById(id: string): Promise<ProposalRecord | null>;
35
53
  listPending(projectId: string): Promise<ProposalRecord[]>;
36
54
  setStatus(id: string, status: "approved" | "rejected", decidedAt?: number): Promise<ProposalRecord | null>;
55
+ create(input: ProposalCreateInput): Promise<ProposalRecord>;
56
+ update(id: string, patch: ProposalUpdatePatch): Promise<ProposalRecord | null>;
57
+ delete(id: string): Promise<string | null>;
37
58
  journalMode(): Promise<string>;
38
59
  }
39
60
  export declare class MemoryProposalStore implements ProposalStore {
@@ -42,6 +63,9 @@ export declare class MemoryProposalStore implements ProposalStore {
42
63
  getById(id: string): Promise<ProposalRecord | null>;
43
64
  listPending(projectId: string): Promise<ProposalRecord[]>;
44
65
  setStatus(id: string, status: "approved" | "rejected", decidedAt?: number): Promise<ProposalRecord | null>;
66
+ create(input: ProposalCreateInput): Promise<ProposalRecord>;
67
+ update(id: string, patch: ProposalUpdatePatch): Promise<ProposalRecord | null>;
68
+ delete(id: string): Promise<string | null>;
45
69
  journalMode(): Promise<string>;
46
70
  }
47
71
  //# sourceMappingURL=proposal-contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-contract.d.ts","sourceRoot":"","sources":["../../../src/data/proposal/proposal-contract.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,8CAA+C,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,eAAO,MAAM,cAAc,2DAA4D,CAAC;AACxF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,WAAW,mBAAmB;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAAE;AAC9H,MAAM,WAAW,mBAAmB;IAAG,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAAE;AAChG,MAAM,WAAW,gBAAgB;IAAG,IAAI,EAAE,MAAM,EAAE,CAAC;CAAE;AACrD,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;AAC3F,MAAM,WAAW,cAAc;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAAE;AAEvO,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3G,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,qBAAa,mBAAoB,YAAW,aAAa;IAChD,IAAI,EAAE,cAAc,EAAE,CAAM;IAE7B,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKnD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAOzD,SAAS,CACb,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,GAAG,UAAU,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAS3B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;CAGrC"}
1
+ {"version":3,"file":"proposal-contract.d.ts","sourceRoot":"","sources":["../../../src/data/proposal/proposal-contract.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { assertValidProposalPayload } from "./proposal-payload-validation.js";
1
2
  export const PROPOSAL_STATUSES = ["pending", "approved", "rejected"];
2
3
  export const PROPOSAL_KINDS = ["memory.create", "memory.update", "memory.tag"];
3
4
  export class MemoryProposalStore {
@@ -25,6 +26,41 @@ export class MemoryProposalStore {
25
26
  row.decidedAt = decidedAt ?? Date.now();
26
27
  return structuredClone(row);
27
28
  }
29
+ async create(input) {
30
+ assertValidProposalPayload(input.kind, input.payload);
31
+ const record = {
32
+ id: input.id,
33
+ projectId: input.projectId,
34
+ kind: input.kind,
35
+ targetMemoryId: input.targetMemoryId ?? null,
36
+ payload: input.payload,
37
+ rationale: input.rationale ?? "",
38
+ status: "pending",
39
+ createdAt: input.createdAt ?? Date.now(),
40
+ decidedAt: null,
41
+ };
42
+ this.rows.push(structuredClone(record));
43
+ return structuredClone(record);
44
+ }
45
+ async update(id, patch) {
46
+ const row = this.rows.find((item) => item.id === id);
47
+ if (!row)
48
+ return null;
49
+ if (patch.payload !== undefined)
50
+ assertValidProposalPayload(row.kind, patch.payload);
51
+ if (patch.rationale !== undefined)
52
+ row.rationale = patch.rationale;
53
+ if (patch.payload !== undefined)
54
+ row.payload = patch.payload;
55
+ return structuredClone(row);
56
+ }
57
+ async delete(id) {
58
+ const index = this.rows.findIndex((item) => item.id === id);
59
+ if (index === -1)
60
+ return null;
61
+ this.rows.splice(index, 1);
62
+ return id;
63
+ }
28
64
  async journalMode() {
29
65
  return "memory";
30
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-contract.js","sourceRoot":"","sources":["../../../src/data/proposal/proposal-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAE9E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,YAAY,CAAU,CAAC;AAgBxF,MAAM,OAAO,mBAAmB;IACvB,IAAI,GAAqB,EAAE,CAAC;IAEnC,KAAK,CAAC,MAAM,CAAC,GAAmB;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,IAAI;aACb,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;aACxE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,EAAU,EACV,MAA+B,EAC/B,SAAkB;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1D,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QACpB,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"proposal-contract.js","sourceRoot":"","sources":["../../../src/data/proposal/proposal-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Per-kind proposal payload validation — one table, two callers (D4).
3
+ *
4
+ * `proposal-repository-pg.ts`'s `parsePayload` already enforces this exact
5
+ * allowed-key/type set on **read**, throwing `storeCorruption` on deviation.
6
+ * `create`/`update` apply the identical rules on **write**, so a row cannot
7
+ * be written that its own reader will reject: a payload accepted at write
8
+ * time but rejected here on the next read would make every subsequent
9
+ * `getById`, `listPending` and `approve` on that row throw `storeCorruption`
10
+ * (AC-02.2). Two independent copies of this table drift, and the drift only
11
+ * ever surfaces as a corrupt row — so this module is the only place either
12
+ * caller may define it.
13
+ */
14
+ import type { ProposalKind, ProposalPayload } from "./proposal-contract.js";
15
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
16
+ export declare function isStringArray(value: unknown): value is string[];
17
+ interface ProposalPayloadFieldRule {
18
+ optional: boolean;
19
+ validate: (value: unknown) => boolean;
20
+ }
21
+ interface ProposalPayloadRule {
22
+ allowedKeys: readonly string[];
23
+ /** memory.update has no columns of its own; an empty patch is refused. */
24
+ requireNonEmpty?: boolean;
25
+ fields: Record<string, ProposalPayloadFieldRule>;
26
+ }
27
+ /**
28
+ * The single per-kind key/type table. Traced 1:1 against the validation
29
+ * `parsePayload` applied inline before extraction — see
30
+ * `proposal-repository-pg.ts`'s `parsePayload`, which now delegates here.
31
+ */
32
+ export declare const PROPOSAL_PAYLOAD_RULES: Readonly<Record<ProposalKind, ProposalPayloadRule>>;
33
+ /**
34
+ * Applies `PROPOSAL_PAYLOAD_RULES` for `kind` against an already-parsed
35
+ * object. Pure predicate — no throwing — so both the read path (which wraps
36
+ * a `false` result in `storeCorruption`) and the write path (which wraps it
37
+ * in `ProposalPayloadValidationError`) can each apply their own error shape.
38
+ */
39
+ export declare function isValidProposalPayload(kind: ProposalKind, value: Record<string, unknown>): boolean;
40
+ /** Write-side 400-shaped error — deliberately not `SearchServiceError`: the
41
+ * `data/` layer must not import from `services/`, and this is a client
42
+ * input-validation failure, not a backend or corruption failure. */
43
+ export declare class ProposalPayloadValidationError extends Error {
44
+ readonly kind: ProposalKind;
45
+ readonly statusCode = 400;
46
+ constructor(kind: ProposalKind, message: string);
47
+ }
48
+ /**
49
+ * Write-time gate (AC-02.2, AC-02.3): throws `ProposalPayloadValidationError`
50
+ * for exactly the payloads `parsePayload` would refuse on the next read.
51
+ */
52
+ export declare function assertValidProposalPayload(kind: ProposalKind, value: unknown): asserts value is ProposalPayload;
53
+ export {};
54
+ //# sourceMappingURL=proposal-payload-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-payload-validation.d.ts","sourceRoot":"","sources":["../../../src/data/proposal/proposal-payload-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE5E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAUD,UAAU,wBAAwB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACvC;AAED,UAAU,mBAAmB;IAC3B,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;CAClD;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,CA0BtF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAaT;AAED;;oEAEoE;AACpE,qBAAa,8BAA+B,SAAQ,KAAK;aAGrC,IAAI,EAAE,YAAY;IAFpC,QAAQ,CAAC,UAAU,OAAO;gBAER,IAAI,EAAE,YAAY,EAClC,OAAO,EAAE,MAAM;CAKlB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,eAAe,CAalC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Per-kind proposal payload validation — one table, two callers (D4).
3
+ *
4
+ * `proposal-repository-pg.ts`'s `parsePayload` already enforces this exact
5
+ * allowed-key/type set on **read**, throwing `storeCorruption` on deviation.
6
+ * `create`/`update` apply the identical rules on **write**, so a row cannot
7
+ * be written that its own reader will reject: a payload accepted at write
8
+ * time but rejected here on the next read would make every subsequent
9
+ * `getById`, `listPending` and `approve` on that row throw `storeCorruption`
10
+ * (AC-02.2). Two independent copies of this table drift, and the drift only
11
+ * ever surfaces as a corrupt row — so this module is the only place either
12
+ * caller may define it.
13
+ */
14
+ export function isRecord(value) {
15
+ return value !== null && typeof value === "object" && !Array.isArray(value);
16
+ }
17
+ export function isStringArray(value) {
18
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
19
+ }
20
+ function isString(value) {
21
+ return typeof value === "string";
22
+ }
23
+ function isNumber(value) {
24
+ return typeof value === "number";
25
+ }
26
+ /**
27
+ * The single per-kind key/type table. Traced 1:1 against the validation
28
+ * `parsePayload` applied inline before extraction — see
29
+ * `proposal-repository-pg.ts`'s `parsePayload`, which now delegates here.
30
+ */
31
+ export const PROPOSAL_PAYLOAD_RULES = {
32
+ "memory.create": {
33
+ allowedKeys: ["content", "type", "level", "importance", "tags"],
34
+ fields: {
35
+ content: { optional: false, validate: isString },
36
+ type: { optional: true, validate: isString },
37
+ level: { optional: true, validate: isNumber },
38
+ importance: { optional: true, validate: isNumber },
39
+ tags: { optional: true, validate: isStringArray },
40
+ },
41
+ },
42
+ "memory.update": {
43
+ allowedKeys: ["content", "importance", "tags"],
44
+ requireNonEmpty: true,
45
+ fields: {
46
+ content: { optional: true, validate: isString },
47
+ importance: { optional: true, validate: isNumber },
48
+ tags: { optional: true, validate: isStringArray },
49
+ },
50
+ },
51
+ "memory.tag": {
52
+ allowedKeys: ["tags"],
53
+ fields: {
54
+ tags: { optional: false, validate: isStringArray },
55
+ },
56
+ },
57
+ };
58
+ /**
59
+ * Applies `PROPOSAL_PAYLOAD_RULES` for `kind` against an already-parsed
60
+ * object. Pure predicate — no throwing — so both the read path (which wraps
61
+ * a `false` result in `storeCorruption`) and the write path (which wraps it
62
+ * in `ProposalPayloadValidationError`) can each apply their own error shape.
63
+ */
64
+ export function isValidProposalPayload(kind, value) {
65
+ const rule = PROPOSAL_PAYLOAD_RULES[kind];
66
+ if (!Object.keys(value).every((key) => rule.allowedKeys.includes(key)))
67
+ return false;
68
+ if (rule.requireNonEmpty && Object.keys(value).length === 0)
69
+ return false;
70
+ for (const [field, fieldRule] of Object.entries(rule.fields)) {
71
+ const present = value[field] !== undefined;
72
+ if (!present) {
73
+ if (!fieldRule.optional)
74
+ return false;
75
+ continue;
76
+ }
77
+ if (!fieldRule.validate(value[field]))
78
+ return false;
79
+ }
80
+ return true;
81
+ }
82
+ /** Write-side 400-shaped error — deliberately not `SearchServiceError`: the
83
+ * `data/` layer must not import from `services/`, and this is a client
84
+ * input-validation failure, not a backend or corruption failure. */
85
+ export class ProposalPayloadValidationError extends Error {
86
+ kind;
87
+ statusCode = 400;
88
+ constructor(kind, message) {
89
+ super(message);
90
+ this.kind = kind;
91
+ this.name = "ProposalPayloadValidationError";
92
+ }
93
+ }
94
+ /**
95
+ * Write-time gate (AC-02.2, AC-02.3): throws `ProposalPayloadValidationError`
96
+ * for exactly the payloads `parsePayload` would refuse on the next read.
97
+ */
98
+ export function assertValidProposalPayload(kind, value) {
99
+ if (!isRecord(value)) {
100
+ throw new ProposalPayloadValidationError(kind, `proposal payload must be an object for kind "${kind}"`);
101
+ }
102
+ if (!isValidProposalPayload(kind, value)) {
103
+ throw new ProposalPayloadValidationError(kind, `proposal payload is invalid for kind "${kind}"`);
104
+ }
105
+ }
106
+ //# sourceMappingURL=proposal-payload-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-payload-validation.js","sourceRoot":"","sources":["../../../src/data/proposal/proposal-payload-validation.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /** PostgreSQL implementation of the durable asynchronous ProposalStore contract. */
2
2
  import type { PrismaClient } from "../../generated/prisma/index.js";
3
- import { type ProposalRecord, type ProposalStore } from "./proposal-contract.js";
3
+ import { type ProposalCreateInput, type ProposalRecord, type ProposalStore, type ProposalUpdatePatch } from "./proposal-contract.js";
4
4
  export declare class PgProposalStore implements ProposalStore {
5
5
  private prisma;
6
6
  private mirror;
@@ -13,6 +13,32 @@ export declare class PgProposalStore implements ProposalStore {
13
13
  getById(id: string): Promise<ProposalRecord | null>;
14
14
  listPending(projectId: string): Promise<ProposalRecord[]>;
15
15
  setStatus(id: string, status: "approved" | "rejected", decidedAt?: number): Promise<ProposalRecord | null>;
16
+ /**
17
+ * Manual create (AC-02.1): always lands at `status: "pending"` /
18
+ * `decidedAt: null`, both stamped here rather than caller-suppliable, and
19
+ * the payload is re-validated against T5's shared table before the row
20
+ * is ever written — so a create can never write a row `parsePayload`
21
+ * would refuse on the next read.
22
+ */
23
+ create(input: ProposalCreateInput): Promise<ProposalRecord>;
24
+ /**
25
+ * Writes only `rationale` and `payload` (AC-02.3/AC-02.4). `kind` /
26
+ * `targetMemoryId` / `status` / `decided_at` never appear in this SQL —
27
+ * `applyProposal` branches on the first two, and the second two stay
28
+ * exclusively `setStatus`'s paired write, whose corruption guard
29
+ * (`toRecord`) throws when `(status === "pending") !== (decidedAt ===
30
+ * null)`. A `payload` edit re-validates against the row's *existing*
31
+ * `kind` — changing `kind` here would let a payload for the old kind slip
32
+ * past validation for the new one.
33
+ */
34
+ update(id: string, patch: ProposalUpdatePatch): Promise<ProposalRecord | null>;
35
+ /**
36
+ * Hard-deletes in any status (AC-02.5), including `approved` — the memory
37
+ * edit an approved proposal already applied is not reversed. As in
38
+ * `PgHandoffStore.delete` (D3), the DB's affected-row count is the source
39
+ * of truth and `mirror.delete` runs only after that write succeeds.
40
+ */
41
+ delete(id: string): Promise<string | null>;
16
42
  journalMode(): Promise<string>;
17
43
  __hydrate(): Promise<void>;
18
44
  __drain(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-repository-pg.d.ts","sourceRoot":"","sources":["../../../src/data/proposal/proposal-repository-pg.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAOpE,OAAO,EAKL,KAAK,cAAc,EAEnB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AA+FhC,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA8B;gBAEnC,MAAM,CAAC,EAAE,YAAY;IAIjC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,cAAc;IAsBhB,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAMnD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAQzD,SAAS,CACb,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,GAAG,UAAU,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA6B3B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"proposal-repository-pg.d.ts","sourceRoot":"","sources":["../../../src/data/proposal/proposal-repository-pg.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAOpE,OAAO,EAGL,KAAK,mBAAmB,EAGxB,KAAK,cAAc,EAEnB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAC;AA0EhC,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA8B;gBAEnC,MAAM,CAAC,EAAE,YAAY;IAIjC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,cAAc;IAsBhB,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAMnD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAQzD,SAAS,CACb,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,GAAG,UAAU,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA6BjC;;;;;;OAMG;IACG,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAiBjE;;;;;;;;;OASG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA+BpF;;;;;OAKG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa1C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -3,15 +3,13 @@ import { getPrismaClient } from "../../kernel/prisma-client.js";
3
3
  import { getProjectIdentityAliasResolver } from "../../kernel/alias-resolver.js";
4
4
  import { searchBackendUnavailable, storeCorruption, } from "../../kernel/search-diagnostics.js";
5
5
  import { PROPOSAL_KINDS, PROPOSAL_STATUSES, } from "./proposal-contract.js";
6
- function isRecord(value) {
7
- return value !== null && typeof value === "object" && !Array.isArray(value);
8
- }
9
- function stringArray(value) {
10
- return Array.isArray(value) && value.every((item) => typeof item === "string");
11
- }
12
- function validKeys(value, allowed) {
13
- return Object.keys(value).every((key) => allowed.includes(key));
14
- }
6
+ import { assertValidProposalPayload, isRecord, isValidProposalPayload, } from "./proposal-payload-validation.js";
7
+ /**
8
+ * Read-side application of the shared `PROPOSAL_PAYLOAD_RULES` table
9
+ * (`proposal-payload-validation.ts`, D4). This is the *reader* half of the
10
+ * "one table, two callers" contract `create`/`update` below are the write
11
+ * half, and neither may re-derive its own copy of the key table.
12
+ */
15
13
  function parsePayload(raw, kind) {
16
14
  let value;
17
15
  try {
@@ -23,28 +21,7 @@ function parsePayload(raw, kind) {
23
21
  if (!isRecord(value)) {
24
22
  throw storeCorruption("proposal.payload_json", new TypeError("expected object"));
25
23
  }
26
- let valid = false;
27
- if (kind === "memory.create") {
28
- valid =
29
- validKeys(value, ["content", "type", "level", "importance", "tags"]) &&
30
- typeof value.content === "string" &&
31
- (value.type === undefined || typeof value.type === "string") &&
32
- (value.level === undefined || typeof value.level === "number") &&
33
- (value.importance === undefined || typeof value.importance === "number") &&
34
- (value.tags === undefined || stringArray(value.tags));
35
- }
36
- else if (kind === "memory.update") {
37
- valid =
38
- validKeys(value, ["content", "importance", "tags"]) &&
39
- Object.keys(value).length > 0 &&
40
- (value.content === undefined || typeof value.content === "string") &&
41
- (value.importance === undefined || typeof value.importance === "number") &&
42
- (value.tags === undefined || stringArray(value.tags));
43
- }
44
- else {
45
- valid = validKeys(value, ["tags"]) && stringArray(value.tags);
46
- }
47
- if (!valid) {
24
+ if (!isValidProposalPayload(kind, value)) {
48
25
  throw storeCorruption("proposal.payload_json", new TypeError("invalid proposal payload"));
49
26
  }
50
27
  return value;
@@ -185,6 +162,90 @@ export class PgProposalStore {
185
162
  this.mirror.set(id, persisted);
186
163
  return structuredClone(persisted);
187
164
  }
165
+ /**
166
+ * Manual create (AC-02.1): always lands at `status: "pending"` /
167
+ * `decidedAt: null`, both stamped here rather than caller-suppliable, and
168
+ * the payload is re-validated against T5's shared table before the row
169
+ * is ever written — so a create can never write a row `parsePayload`
170
+ * would refuse on the next read.
171
+ */
172
+ async create(input) {
173
+ assertValidProposalPayload(input.kind, input.payload);
174
+ const record = {
175
+ id: input.id,
176
+ projectId: input.projectId,
177
+ kind: input.kind,
178
+ targetMemoryId: input.targetMemoryId ?? null,
179
+ payload: input.payload,
180
+ rationale: input.rationale ?? "",
181
+ status: "pending",
182
+ createdAt: input.createdAt ?? Date.now(),
183
+ decidedAt: null,
184
+ };
185
+ await this.insert(record);
186
+ return record;
187
+ }
188
+ /**
189
+ * Writes only `rationale` and `payload` (AC-02.3/AC-02.4). `kind` /
190
+ * `targetMemoryId` / `status` / `decided_at` never appear in this SQL —
191
+ * `applyProposal` branches on the first two, and the second two stay
192
+ * exclusively `setStatus`'s paired write, whose corruption guard
193
+ * (`toRecord`) throws when `(status === "pending") !== (decidedAt ===
194
+ * null)`. A `payload` edit re-validates against the row's *existing*
195
+ * `kind` — changing `kind` here would let a payload for the old kind slip
196
+ * past validation for the new one.
197
+ */
198
+ async update(id, patch) {
199
+ await this.ensureHydrated();
200
+ const current = this.mirror.get(id);
201
+ if (!current)
202
+ return null;
203
+ if (patch.payload !== undefined) {
204
+ assertValidProposalPayload(current.kind, patch.payload);
205
+ }
206
+ const merged = {
207
+ ...current,
208
+ ...(patch.rationale !== undefined ? { rationale: patch.rationale } : {}),
209
+ ...(patch.payload !== undefined ? { payload: patch.payload } : {}),
210
+ };
211
+ let rows;
212
+ try {
213
+ rows = await this.getClient().$queryRaw `
214
+ UPDATE proposals
215
+ SET rationale = ${merged.rationale}, payload_json = ${JSON.stringify(merged.payload)}
216
+ WHERE id = ${id}
217
+ RETURNING id, project_id, kind, target_memory_id, payload_json,
218
+ rationale, status, created_at, decided_at`;
219
+ }
220
+ catch (error) {
221
+ throw searchBackendUnavailable("proposal_store", error);
222
+ }
223
+ if (!rows[0])
224
+ return null;
225
+ const persisted = toRecord(rows[0]);
226
+ this.mirror.set(id, persisted);
227
+ return structuredClone(persisted);
228
+ }
229
+ /**
230
+ * Hard-deletes in any status (AC-02.5), including `approved` — the memory
231
+ * edit an approved proposal already applied is not reversed. As in
232
+ * `PgHandoffStore.delete` (D3), the DB's affected-row count is the source
233
+ * of truth and `mirror.delete` runs only after that write succeeds.
234
+ */
235
+ async delete(id) {
236
+ await this.ensureHydrated();
237
+ let affected;
238
+ try {
239
+ affected = await this.getClient().$executeRaw `DELETE FROM proposals WHERE id = ${id}`;
240
+ }
241
+ catch (error) {
242
+ throw searchBackendUnavailable("proposal_store", error);
243
+ }
244
+ if (affected === 0)
245
+ return null;
246
+ this.mirror.delete(id);
247
+ return id;
248
+ }
188
249
  async journalMode() {
189
250
  await this.ensureHydrated();
190
251
  return "postgres";
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-repository-pg.js","sourceRoot":"","sources":["../../../src/data/proposal/proposal-repository-pg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proposal-repository-pg.js","sourceRoot":"","sources":["../../../src/data/proposal/proposal-repository-pg.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -50,6 +50,7 @@ export { HandoffService, getHandoffService, resetHandoffService, buildHandoffMem
50
50
  export type { BeginHandoffInput, BeginResult, AcceptCancelResult, HandoffMemorySeam, HandoffDeps, } from "./services/handoff/handoff-service.js";
51
51
  export { HandoffAutoInjector } from "./services/handoff/handoff-auto-injector.js";
52
52
  export { MemoryProposalStore, getProposalStore, resetProposalStore, newProposalId, PROPOSAL_STATUSES, PROPOSAL_KINDS, } from "./data/proposal/proposal-repository.js";
53
+ export { ProposalPayloadValidationError, assertValidProposalPayload, isValidProposalPayload, PROPOSAL_PAYLOAD_RULES, } from "./data/proposal/proposal-payload-validation.js";
53
54
  export type { ProposalStore, ProposalRecord, ProposalStatus, ProposalKind, ProposalPayload, CreateMemoryPayload, UpdateMemoryPayload, TagMemoryPayload, } from "./data/proposal/proposal-repository.js";
54
55
  export { AutoImproveJob, getAutoImproveJob, resetAutoImproveJob, autoImproveJob, detectPatterns, enrichWithLlm, ProposalEnrichmentSchema, } from "./services/jobs/auto-improve-job.js";
55
56
  export type { AutoImproveJobOptions, AutoImproveResult, ApproveRejectResult, PatternThresholds, PatternCandidate, MemoryApplySeam, ProposalEnrichment, } from "./services/jobs/auto-improve-job.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -51,5 +51,12 @@ export { HandoffService, getHandoffService, resetHandoffService, buildHandoffMem
51
51
  export { HandoffAutoInjector } from "./services/handoff/handoff-auto-injector.js";
52
52
  // Phase 5 — auto-improvement loop (G7)
53
53
  export { MemoryProposalStore, getProposalStore, resetProposalStore, newProposalId, PROPOSAL_STATUSES, PROPOSAL_KINDS, } from "./data/proposal/proposal-repository.js";
54
+ // Exported so transports can identify a write-time payload rejection with
55
+ // `instanceof` rather than duck-typing `error.name`. `apps/tools-api`'s
56
+ // proposal routes need to map this to a 400, and without the class on the
57
+ // public surface the only available check was a string comparison against
58
+ // `name` — which a rename, a subclass, or a minifier breaks silently, turning
59
+ // a 400 into a 500 with no test able to see the difference.
60
+ export { ProposalPayloadValidationError, assertValidProposalPayload, isValidProposalPayload, PROPOSAL_PAYLOAD_RULES, } from "./data/proposal/proposal-payload-validation.js";
54
61
  export { AutoImproveJob, getAutoImproveJob, resetAutoImproveJob, autoImproveJob, detectPatterns, enrichWithLlm, ProposalEnrichmentSchema, } from "./services/jobs/auto-improve-job.js";
55
62
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,gFAAgF;AAChF,gEAAgE;AAChE,cAAc,qBAAqB,CAAC;AAEpC,OAAO;AACP,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAMjF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7F,cAAc,kCAAkC,CAAC;AAEjD,qFAAqF;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAQlF,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,uDAAuD;AACvD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAShF,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,kCAAkC,CAAC;AAM1C,OAAO,EACL,WAAW,EACX,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,uDAAuD;AACvD,OAAO,EACL,eAAe,EACf,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAO5F,2CAA2C;AAC3C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,2CAA2C,CAAC;AAenD,wCAAwC;AACxC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uCAAuC,CAAC;AAQ/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAElF,uCAAuC;AACvC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,cAAc,GACf,MAAM,wCAAwC,CAAC;AAWhD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,aAAa,EACb,wBAAwB,GACzB,MAAM,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,gFAAgF;AAChF,gEAAgE;AAChE,cAAc,qBAAqB,CAAC;AAEpC,OAAO;AACP,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAMjF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7F,cAAc,kCAAkC,CAAC;AAEjD,qFAAqF;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAQlF,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,uDAAuD;AACvD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAShF,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,kCAAkC,CAAC;AAM1C,OAAO,EACL,WAAW,EACX,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,uDAAuD;AACvD,OAAO,EACL,eAAe,EACf,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAO5F,2CAA2C;AAC3C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,2CAA2C,CAAC;AAenD,wCAAwC;AACxC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uCAAuC,CAAC;AAQ/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAElF,uCAAuC;AACvC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,cAAc,GACf,MAAM,wCAAwC,CAAC;AAChD,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,8EAA8E;AAC9E,4DAA4D;AAC5D,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,gDAAgD,CAAC;AAWxD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,aAAa,EACb,wBAAwB,GACzB,MAAM,qCAAqC,CAAC"}
@@ -20,8 +20,8 @@
20
20
  * Defaults resolve lazily at run time so the closed-MemoryRepository
21
21
  * landmine (memory-crud.test.ts) does not poison handoff tests.
22
22
  */
23
- import { type HandoffRecord, type HandoffStore } from "../../data/handoff/handoff-repository.js";
24
- import type { InsertMemoryInput } from "../../data/memory/memory-repository.js";
23
+ import { type HandoffRecord, type HandoffStore, type HandoffUpdatePatch } from "../../data/handoff/handoff-repository.js";
24
+ import type { InsertMemoryInput, UpdateMemoryPatch } from "../../data/memory/memory-repository.js";
25
25
  import type { LlmSurface } from "../memory/consolidator.js";
26
26
  export interface BeginHandoffInput {
27
27
  projectId: string;
@@ -44,12 +44,25 @@ export interface AcceptCancelResult {
44
44
  handoff?: HandoffRecord;
45
45
  reason?: string;
46
46
  }
47
+ /** T7 — PATCH/DELETE results (AC-01.1..AC-01.8). */
48
+ export interface UpdateResult {
49
+ ok: boolean;
50
+ handoff?: HandoffRecord;
51
+ reason?: string;
52
+ }
53
+ export interface DeleteResult {
54
+ ok: boolean;
55
+ id?: string;
56
+ reason?: string;
57
+ }
47
58
  /**
48
59
  * Injectable memory-repository seam. The default implementation resolves
49
60
  * getMemoryRepository() lazily inside each method (test-isolation).
50
61
  */
51
62
  export interface HandoffMemorySeam {
52
63
  insert(input: InsertMemoryInput): void | Promise<void>;
64
+ /** AC-01.8: refresh the dual-written memory's content after an edit. */
65
+ update(id: string, patch: UpdateMemoryPatch): boolean | Promise<boolean>;
53
66
  }
54
67
  export interface HandoffDeps {
55
68
  store?: HandoffStore;
@@ -75,7 +88,38 @@ export declare class HandoffService {
75
88
  }): Promise<AcceptCancelResult>;
76
89
  private terminate;
77
90
  listPending(projectId: string, targetAgent?: string | null): Promise<HandoffRecord[]>;
91
+ /**
92
+ * Applies an already-allowlisted patch (the route owns rejecting
93
+ * disallowed/unknown fields by name — AC-01.2). `status`/`acceptedAt` are
94
+ * not reachable through `HandoffUpdatePatch` at all, so they cannot be
95
+ * written here even by mistake (AC-01.3).
96
+ */
97
+ update(params: {
98
+ id: string;
99
+ projectId?: string;
100
+ patch: HandoffUpdatePatch;
101
+ }): Promise<UpdateResult>;
102
+ private refreshDualWriteMemory;
103
+ /**
104
+ * Hard-deletes in any status (AC-01.4). The dual-written memory row is
105
+ * left untouched (AC-01.5) — its dangling `metadata.handoffId` is accepted,
106
+ * documented behaviour, not an integrity break.
107
+ */
108
+ delete(params: {
109
+ id: string;
110
+ projectId?: string;
111
+ }): Promise<DeleteResult>;
78
112
  }
113
+ /**
114
+ * Deterministic by handoff id (no random suffix): a PATCH must be able to
115
+ * recompute the id of the memory row `dualWrite` created at `begin` without
116
+ * any new lookup primitive on the data layer (out of this task's write set),
117
+ * so a PATCH that touches summary/openQuestions/nextSteps/files can refresh
118
+ * that row's content directly (AC-01.8). Safe against collision because a
119
+ * handoff id (`newHandoffId()`) is itself already unique per row and
120
+ * `dualWrite` runs at most once per handoff id (inside `begin`).
121
+ */
122
+ export declare function dualWriteMemoryId(handoffId: string): string;
79
123
  export declare function buildHandoffMemoryInput(memId: string, record: HandoffRecord): InsertMemoryInput;
80
124
  export declare function formatMemoryContent(record: HandoffRecord): string;
81
125
  export declare function getHandoffService(): HandoffService;
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-service.d.ts","sourceRoot":"","sources":["../../../src/services/handoff/handoff-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAGhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAeD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,IAAI,GAAE,WAAgB;IAgB5B,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;YAiD7C,SAAS;IASjB,MAAM,CAAC,MAAM,EAAE;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMzB,MAAM,CAAC,MAAM,EAAE;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAIjB,SAAS;IAuCjB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAG5F;AAID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,GACpB,iBAAiB,CAmBnB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAYjE;AAkDD,wBAAgB,iBAAiB,IAAI,cAAc,CAGlD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
1
+ {"version":3,"file":"handoff-service.d.ts","sourceRoot":"","sources":["../../../src/services/handoff/handoff-service.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,6 @@
20
20
  * Defaults resolve lazily at run time so the closed-MemoryRepository
21
21
  * landmine (memory-crud.test.ts) does not poison handoff tests.
22
22
  */
23
- import { randomUUID } from "crypto";
24
23
  import { z } from "zod";
25
24
  import { MemoryLevel, MemoryType } from "@massa-ai/shared";
26
25
  import { getHandoffStore, newHandoffId, } from "../../data/handoff/handoff-repository.js";
@@ -51,6 +50,7 @@ export class HandoffService {
51
50
  injectedRepo ??
52
51
  {
53
52
  insert: (i) => getMemoryRepository().insert(i),
53
+ update: (id, p) => getMemoryRepository().update(id, p),
54
54
  };
55
55
  }
56
56
  // ── begin (R1, R2, R5, R7) ────────────────────────────────────────────────
@@ -100,7 +100,7 @@ export class HandoffService {
100
100
  return { ok: true, id, status: "open", memoryId };
101
101
  }
102
102
  async dualWrite(record) {
103
- const memId = `handoff-mem-${record.id}-${randomUUID().slice(0, 8)}`;
103
+ const memId = dualWriteMemoryId(record.id);
104
104
  const input = buildHandoffMemoryInput(memId, record);
105
105
  await Promise.resolve(this.memoryRepo.insert(input));
106
106
  return memId;
@@ -148,8 +148,87 @@ export class HandoffService {
148
148
  async listPending(projectId, targetAgent) {
149
149
  return this.store.listPending(projectId, targetAgent ?? undefined);
150
150
  }
151
+ // ── update (T7 — AC-01.1, AC-01.3, AC-01.7, AC-01.8) ─────────────────────
152
+ /**
153
+ * Applies an already-allowlisted patch (the route owns rejecting
154
+ * disallowed/unknown fields by name — AC-01.2). `status`/`acceptedAt` are
155
+ * not reachable through `HandoffUpdatePatch` at all, so they cannot be
156
+ * written here even by mistake (AC-01.3).
157
+ */
158
+ async update(params) {
159
+ if (!params || !params.id) {
160
+ return { ok: false, reason: "missing-id" };
161
+ }
162
+ const row = await this.store.getById(params.id);
163
+ if (!row)
164
+ return { ok: false, reason: "not-found" };
165
+ if (params.projectId && row.projectId !== params.projectId) {
166
+ return { ok: false, reason: "project-mismatch" };
167
+ }
168
+ const updated = await this.store.update(params.id, params.patch);
169
+ if (!updated)
170
+ return { ok: false, reason: "not-found" };
171
+ // AC-01.8: the dual-written memory's content was built once at `begin`
172
+ // and nothing else ever refreshes it. Any patch field that feeds
173
+ // `formatMemoryContent` must re-run it and push the new content into the
174
+ // memory row, or an edit ships active, FTS-indexed, wrong content.
175
+ const touchesMemoryContent = params.patch.summary !== undefined ||
176
+ params.patch.openQuestions !== undefined ||
177
+ params.patch.nextSteps !== undefined ||
178
+ params.patch.files !== undefined;
179
+ if (touchesMemoryContent) {
180
+ await this.refreshDualWriteMemory(updated);
181
+ }
182
+ return { ok: true, handoff: updated };
183
+ }
184
+ async refreshDualWriteMemory(record) {
185
+ // Best-effort, mirroring dualWrite's own swallow in begin(): the memory
186
+ // row may not exist (dualWrite is itself best-effort), and a refresh
187
+ // failure must never fail the handoff edit that triggered it.
188
+ try {
189
+ const memId = dualWriteMemoryId(record.id);
190
+ const content = formatMemoryContent(record);
191
+ await Promise.resolve(this.memoryRepo.update(memId, { content }));
192
+ }
193
+ catch {
194
+ /* best-effort */
195
+ }
196
+ }
197
+ // ── delete (T7 — AC-01.4, AC-01.5, AC-01.6, AC-01.7) ─────────────────────
198
+ /**
199
+ * Hard-deletes in any status (AC-01.4). The dual-written memory row is
200
+ * left untouched (AC-01.5) — its dangling `metadata.handoffId` is accepted,
201
+ * documented behaviour, not an integrity break.
202
+ */
203
+ async delete(params) {
204
+ if (!params || !params.id) {
205
+ return { ok: false, reason: "missing-id" };
206
+ }
207
+ const row = await this.store.getById(params.id);
208
+ if (!row)
209
+ return { ok: false, reason: "not-found" };
210
+ if (params.projectId && row.projectId !== params.projectId) {
211
+ return { ok: false, reason: "project-mismatch" };
212
+ }
213
+ const deletedId = await this.store.delete(params.id);
214
+ if (!deletedId)
215
+ return { ok: false, reason: "not-found" };
216
+ return { ok: true, id: deletedId };
217
+ }
151
218
  }
152
219
  // ── Pure helpers ────────────────────────────────────────────────────────────
220
+ /**
221
+ * Deterministic by handoff id (no random suffix): a PATCH must be able to
222
+ * recompute the id of the memory row `dualWrite` created at `begin` without
223
+ * any new lookup primitive on the data layer (out of this task's write set),
224
+ * so a PATCH that touches summary/openQuestions/nextSteps/files can refresh
225
+ * that row's content directly (AC-01.8). Safe against collision because a
226
+ * handoff id (`newHandoffId()`) is itself already unique per row and
227
+ * `dualWrite` runs at most once per handoff id (inside `begin`).
228
+ */
229
+ export function dualWriteMemoryId(handoffId) {
230
+ return `handoff-mem-${handoffId}`;
231
+ }
153
232
  export function buildHandoffMemoryInput(memId, record) {
154
233
  const content = formatMemoryContent(record);
155
234
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-service.js","sourceRoot":"","sources":["../../../src/services/handoff/handoff-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff-service.js","sourceRoot":"","sources":["../../../src/services/handoff/handoff-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@massa-ai/core",
3
- "version": "1.52.0",
3
+ "version": "1.53.0",
4
4
  "author": "luizgmassa",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -44,7 +44,7 @@
44
44
  "@ai-sdk/google": "^3.0.19",
45
45
  "@ai-sdk/mistral": "^3.0.17",
46
46
  "@ai-sdk/openai": "^3.0.24",
47
- "@massa-ai/shared": "1.52.0",
47
+ "@massa-ai/shared": "1.53.0",
48
48
  "@prisma/adapter-pg": "^7.5.0",
49
49
  "@prisma/client": "^7.5.0",
50
50
  "@prisma/client-runtime-utils": "^7.3.0",