@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.
- package/README.md +25 -1
- package/catalox-seeds/memorix-write-descriptors.manifest.json +1 -2
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/data/collection-name.d.ts +1 -0
- package/dist/data/collection-name.d.ts.map +1 -1
- package/dist/data/collection-name.js +29 -6
- package/dist/data/collection-name.js.map +1 -1
- package/dist/data/memorix-write-adapter.d.ts +3 -0
- package/dist/data/memorix-write-adapter.d.ts.map +1 -1
- package/dist/data/memorix-write-adapter.js +2 -1
- package/dist/data/memorix-write-adapter.js.map +1 -1
- package/dist/descriptors/load-entity-descriptor.d.ts.map +1 -1
- package/dist/descriptors/load-entity-descriptor.js +3 -2
- package/dist/descriptors/load-entity-descriptor.js.map +1 -1
- package/dist/descriptors/write-descriptor-types.d.ts +0 -11
- package/dist/descriptors/write-descriptor-types.d.ts.map +1 -1
- package/dist/errors/issues.d.ts +1 -1
- package/dist/errors/issues.d.ts.map +1 -1
- package/dist/errors/issues.js.map +1 -1
- package/dist/graph-runs/clear-run.d.ts +9 -0
- package/dist/graph-runs/clear-run.d.ts.map +1 -0
- package/dist/graph-runs/clear-run.js +18 -0
- package/dist/graph-runs/clear-run.js.map +1 -0
- package/dist/graph-runs/constants.d.ts +4 -0
- package/dist/graph-runs/constants.d.ts.map +1 -0
- package/dist/graph-runs/constants.js +6 -0
- package/dist/graph-runs/constants.js.map +1 -0
- package/dist/graph-runs/context.d.ts +12 -0
- package/dist/graph-runs/context.d.ts.map +1 -0
- package/dist/graph-runs/context.js +25 -0
- package/dist/graph-runs/context.js.map +1 -0
- package/dist/graph-runs/ensure-indexes.d.ts +10 -0
- package/dist/graph-runs/ensure-indexes.d.ts.map +1 -0
- package/dist/graph-runs/ensure-indexes.js +27 -0
- package/dist/graph-runs/ensure-indexes.js.map +1 -0
- package/dist/graph-runs/logging.d.ts +9 -0
- package/dist/graph-runs/logging.d.ts.map +1 -0
- package/dist/graph-runs/logging.js +4 -0
- package/dist/graph-runs/logging.js.map +1 -0
- package/dist/graph-runs/mark-failed.d.ts +14 -0
- package/dist/graph-runs/mark-failed.d.ts.map +1 -0
- package/dist/graph-runs/mark-failed.js +31 -0
- package/dist/graph-runs/mark-failed.js.map +1 -0
- package/dist/graph-runs/mark-started.d.ts +15 -0
- package/dist/graph-runs/mark-started.d.ts.map +1 -0
- package/dist/graph-runs/mark-started.js +31 -0
- package/dist/graph-runs/mark-started.js.map +1 -0
- package/dist/graph-runs/resolve-record-collection.d.ts +14 -0
- package/dist/graph-runs/resolve-record-collection.d.ts.map +1 -0
- package/dist/graph-runs/resolve-record-collection.js +25 -0
- package/dist/graph-runs/resolve-record-collection.js.map +1 -0
- package/dist/graph-runs/write-result.d.ts +17 -0
- package/dist/graph-runs/write-result.d.ts.map +1 -0
- package/dist/graph-runs/write-result.js +95 -0
- package/dist/graph-runs/write-result.js.map +1 -0
- package/dist/index.d.ts +18 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/mongo/collection-documents.d.ts +6 -0
- package/dist/mongo/collection-documents.d.ts.map +1 -1
- package/dist/mongo/collection-documents.js +7 -0
- package/dist/mongo/collection-documents.js.map +1 -1
- package/dist/mongo/env.d.ts +9 -1
- package/dist/mongo/env.d.ts.map +1 -1
- package/dist/mongo/env.js +24 -5
- package/dist/mongo/env.js.map +1 -1
- package/dist/mongo/index.d.ts +1 -1
- package/dist/mongo/index.d.ts.map +1 -1
- package/dist/mongo/index.js +1 -1
- package/dist/mongo/index.js.map +1 -1
- package/dist/mongo/target.d.ts +1 -1
- package/dist/mongo/target.d.ts.map +1 -1
- package/dist/mongo/target.js +1 -1
- package/dist/mongo/target.js.map +1 -1
- package/dist/validation/validate-fields.d.ts.map +1 -1
- package/dist/validation/validate-fields.js +4 -0
- package/dist/validation/validate-fields.js.map +1 -1
- package/dist/validation/validate-immutability.d.ts.map +1 -1
- package/dist/validation/validate-immutability.js +1 -0
- package/dist/validation/validate-immutability.js.map +1 -1
- package/docs/GRAPH-RUNS.md +93 -0
- package/docs/gap-analysis.md +18 -0
- 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.
|
|
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/
|
|
31
|
-
"@x12i/
|
|
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": {
|