@x12i/memorix-writer 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +25 -1
  2. package/catalox-seeds/memorix-write-descriptors.manifest.json +1 -2
  3. package/dist/constants.d.ts +1 -1
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +1 -1
  6. package/dist/constants.js.map +1 -1
  7. package/dist/data/collection-name.d.ts +1 -0
  8. package/dist/data/collection-name.d.ts.map +1 -1
  9. package/dist/data/collection-name.js +29 -6
  10. package/dist/data/collection-name.js.map +1 -1
  11. package/dist/data/memorix-write-adapter.d.ts +3 -0
  12. package/dist/data/memorix-write-adapter.d.ts.map +1 -1
  13. package/dist/data/memorix-write-adapter.js +2 -1
  14. package/dist/data/memorix-write-adapter.js.map +1 -1
  15. package/dist/descriptors/load-entity-descriptor.d.ts.map +1 -1
  16. package/dist/descriptors/load-entity-descriptor.js +3 -2
  17. package/dist/descriptors/load-entity-descriptor.js.map +1 -1
  18. package/dist/descriptors/write-descriptor-types.d.ts +0 -11
  19. package/dist/descriptors/write-descriptor-types.d.ts.map +1 -1
  20. package/dist/errors/issues.d.ts +1 -1
  21. package/dist/errors/issues.d.ts.map +1 -1
  22. package/dist/errors/issues.js.map +1 -1
  23. package/dist/graph-runs/clear-run.d.ts +9 -0
  24. package/dist/graph-runs/clear-run.d.ts.map +1 -0
  25. package/dist/graph-runs/clear-run.js +18 -0
  26. package/dist/graph-runs/clear-run.js.map +1 -0
  27. package/dist/graph-runs/constants.d.ts +4 -0
  28. package/dist/graph-runs/constants.d.ts.map +1 -0
  29. package/dist/graph-runs/constants.js +6 -0
  30. package/dist/graph-runs/constants.js.map +1 -0
  31. package/dist/graph-runs/context.d.ts +12 -0
  32. package/dist/graph-runs/context.d.ts.map +1 -0
  33. package/dist/graph-runs/context.js +25 -0
  34. package/dist/graph-runs/context.js.map +1 -0
  35. package/dist/graph-runs/ensure-indexes.d.ts +10 -0
  36. package/dist/graph-runs/ensure-indexes.d.ts.map +1 -0
  37. package/dist/graph-runs/ensure-indexes.js +27 -0
  38. package/dist/graph-runs/ensure-indexes.js.map +1 -0
  39. package/dist/graph-runs/logging.d.ts +9 -0
  40. package/dist/graph-runs/logging.d.ts.map +1 -0
  41. package/dist/graph-runs/logging.js +4 -0
  42. package/dist/graph-runs/logging.js.map +1 -0
  43. package/dist/graph-runs/mark-failed.d.ts +14 -0
  44. package/dist/graph-runs/mark-failed.d.ts.map +1 -0
  45. package/dist/graph-runs/mark-failed.js +31 -0
  46. package/dist/graph-runs/mark-failed.js.map +1 -0
  47. package/dist/graph-runs/mark-started.d.ts +15 -0
  48. package/dist/graph-runs/mark-started.d.ts.map +1 -0
  49. package/dist/graph-runs/mark-started.js +31 -0
  50. package/dist/graph-runs/mark-started.js.map +1 -0
  51. package/dist/graph-runs/resolve-record-collection.d.ts +14 -0
  52. package/dist/graph-runs/resolve-record-collection.d.ts.map +1 -0
  53. package/dist/graph-runs/resolve-record-collection.js +25 -0
  54. package/dist/graph-runs/resolve-record-collection.js.map +1 -0
  55. package/dist/graph-runs/write-result.d.ts +17 -0
  56. package/dist/graph-runs/write-result.d.ts.map +1 -0
  57. package/dist/graph-runs/write-result.js +95 -0
  58. package/dist/graph-runs/write-result.js.map +1 -0
  59. package/dist/index.d.ts +18 -3
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +10 -2
  62. package/dist/index.js.map +1 -1
  63. package/dist/mongo/collection-documents.d.ts +6 -0
  64. package/dist/mongo/collection-documents.d.ts.map +1 -1
  65. package/dist/mongo/collection-documents.js +7 -0
  66. package/dist/mongo/collection-documents.js.map +1 -1
  67. package/dist/mongo/env.d.ts +9 -1
  68. package/dist/mongo/env.d.ts.map +1 -1
  69. package/dist/mongo/env.js +24 -5
  70. package/dist/mongo/env.js.map +1 -1
  71. package/dist/mongo/index.d.ts +1 -1
  72. package/dist/mongo/index.d.ts.map +1 -1
  73. package/dist/mongo/index.js +1 -1
  74. package/dist/mongo/index.js.map +1 -1
  75. package/dist/mongo/target.d.ts +1 -1
  76. package/dist/mongo/target.d.ts.map +1 -1
  77. package/dist/mongo/target.js +1 -1
  78. package/dist/mongo/target.js.map +1 -1
  79. package/dist/validation/validate-fields.d.ts.map +1 -1
  80. package/dist/validation/validate-fields.js +4 -0
  81. package/dist/validation/validate-fields.js.map +1 -1
  82. package/dist/validation/validate-immutability.d.ts.map +1 -1
  83. package/dist/validation/validate-immutability.js +1 -0
  84. package/dist/validation/validate-immutability.js.map +1 -1
  85. package/docs/GRAPH-RUNS.md +93 -0
  86. package/docs/gap-analysis.md +18 -0
  87. package/package.json +3 -6
@@ -0,0 +1,93 @@
1
+ # Graph-run tracking (`_graphRuns`) — MRX-FRS-001
2
+
3
+ Record-level visibility for graph execution over Memorix entity and event records.
4
+
5
+ ## Overview
6
+
7
+ The reserved system field `_graphRuns` is stored **top-level on the Mongo payload document**, outside domain `data`. It is keyed by `graphId` and holds the **latest state only** per `(record, graphId)`.
8
+
9
+ Domain `writeMemorixRecord` operations **must not** accept `_graphRuns` in user input. Only the graph-run writer APIs below may mutate it.
10
+
11
+ Shared types live in `@x12i/memorix-descriptors/types`.
12
+
13
+ ## Writer APIs (`@x12i/memorix-writer`)
14
+
15
+ ```typescript
16
+ import {
17
+ markGraphRunStarted,
18
+ markGraphRunFailed,
19
+ writeGraphRunResult,
20
+ clearGraphRun,
21
+ ensureGraphRunIndexes,
22
+ } from "@x12i/memorix-writer";
23
+ ```
24
+
25
+ ### `markGraphRunStarted(ref, graphId, opts)`
26
+
27
+ Sets `_graphRuns.<graphId>` to `{ status: "in_progress", startedAt, lastJobRunId, attempts, graphVersion? }` using a per-key dot-path `$set`.
28
+
29
+ **Idempotency:** If already `in_progress` with the same `lastJobRunId`, no-op (safe on lease-sweep re-claim). A different `lastJobRunId` overwrites the stamp.
30
+
31
+ ### `markGraphRunFailed(ref, graphId, opts)`
32
+
33
+ Sets terminal `failed` status with `error` and `completedAt`. Call only when `job_runs` has exhausted `maxAttempts`.
34
+
35
+ ### `writeGraphRunResult(ref, graphId, opts)` — combined success path
36
+
37
+ 1. Upserts the graph result document to the persistency target collection (`<entityName>-<contentType>`).
38
+ 2. Stamps the source record `_graphRuns.<graphId>` = `done` + result pointer + `completedAt`.
39
+
40
+ **Atomicity (best-effort compensation):** No Mongo transactions. Result is written first; if stamping fails, the result document is rolled back (restored to prior state or deleted). A hard crash between steps can leave a stray result doc — reconcile via jobs / optional sweep (FRS-001-F).
41
+
42
+ ### `clearGraphRun(ref, graphId)`
43
+
44
+ `$unset` on `_graphRuns.<graphId>` so the record re-qualifies for `graphRunNotDone` planning queries.
45
+
46
+ ### `ensureGraphRunIndexes(client, ref, graphId)`
47
+
48
+ Opt-in helper creating recommended compound indexes on the source collection:
49
+
50
+ - `{ "_graphRuns.<graphId>.status": 1, <idField>: 1 }`
51
+ - `{ "_graphRuns.<graphId>.completedAt": 1 }`
52
+
53
+ ## Retrieval filters (`@x12i/memorix-retrieval`)
54
+
55
+ ```typescript
56
+ await fetchMemorixListForEntity(client, {
57
+ entityName: "assets",
58
+ contentType: "scoped", // via list descriptor driver content type
59
+ graphRunFilter: { graphRunNotDone: { graphId: "graph-qcrbz6t" } },
60
+ page: { limit: 100, offset: 0 },
61
+ });
62
+ ```
63
+
64
+ Supported facets (via `compileGraphRunFilter` / `graphRunFilter` on list requests):
65
+
66
+ | Facet | Use case |
67
+ |-------|----------|
68
+ | `graphRunStatus` | Filter by `in_progress` / `done` / `failed` |
69
+ | `graphRunNotDone` | Planning — absent or status ≠ `done` |
70
+ | `graphRunCompletedBefore` | Stale results |
71
+ | `graphRunFailed` | Retry candidates |
72
+ | `graphRunStaleVersion` | Graph version invalidation |
73
+
74
+ Read exposure:
75
+
76
+ - **List:** `includeGraphRuns: true` adds `_graphRuns` to row projection (default off).
77
+ - **Item:** `includeGraphRuns` defaults to **true**; response includes top-level `_graphRuns` when present.
78
+
79
+ ## Error codes
80
+
81
+ | Code | When |
82
+ |------|------|
83
+ | `RECORD_NOT_FOUND` | Source record missing |
84
+ | `DESCRIPTOR_MISSING` | Result collection write failed |
85
+ | `GRAPH_RUN_STAMP_FAILED` | Stamp failed after compensation attempt |
86
+ | `SYSTEM_FIELD_NOT_WRITABLE` | `_graphRuns` passed to `writeMemorixRecord` |
87
+
88
+ Log correlation shape: `{ jobRunId, graphId, recordRef, operation }`.
89
+
90
+ ## References
91
+
92
+ - MRX-FRS-001 change request (Exellix consumer: EXLX-CRS-001)
93
+ - [MEMORIX-DATABASE-CONVENTIONS](https://github.com/x12i/memorix-retrieval/blob/main/docs/MEMORIX-DATABASE-CONVENTIONS.md)
@@ -0,0 +1,18 @@
1
+ # @x12i/memorix-writer — gap analysis
2
+
3
+ ## Status: v1.0 core path complete
4
+
5
+ | Area | Status |
6
+ |------|--------|
7
+ | Descriptor-driven writes (add/upsert/patch/replace) | Done |
8
+ | Content upload + pointers | Done |
9
+ | Wired to `@x12i/memorix-descriptors/catalog` | Done |
10
+ | Knowledge target | Done |
11
+ | Write descriptor CRUD | Owned by `@x12i/memorix-descriptors` |
12
+ | CLI | Not planned (library-only) |
13
+ | Live integration tests | Optional via host env |
14
+
15
+ ## Non-goals
16
+
17
+ - Descriptor admin (use `@x12i/memorix-descriptors`)
18
+ - List/item layout (use `@x12i/memorix-retrieval`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/memorix-writer",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Descriptor-driven write layer for Memorix entity/event records and content objects",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -27,11 +27,8 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@x12i/catalox": "^5.1.1",
30
- "@x12i/env": "^4.0.1",
31
- "@x12i/helpers": "^1.7.0",
32
- "@x12i/memorix-descriptors": "^1.6.0",
33
- "@x12i/memorix-retrieval": "^1.10.0",
34
- "@x12i/xronox": "^3.9.0",
30
+ "@x12i/memorix-descriptors": "^1.7.0",
31
+ "@x12i/memorix-retrieval": "^1.12.0",
35
32
  "mongodb": "^6.21.0"
36
33
  },
37
34
  "devDependencies": {