pipework 0.56.1 → 0.57.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 (72) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/REFERENCE.md +5 -1
  3. package/dist/REFERENCE.md +46 -11
  4. package/dist/core/config/discover.js +1 -1
  5. package/dist/core/config/discover.js.map +1 -1
  6. package/dist/core/config/ts-resolve-hooks.d.ts.map +1 -1
  7. package/dist/core/config/ts-resolve-hooks.js +18 -7
  8. package/dist/core/config/ts-resolve-hooks.js.map +1 -1
  9. package/dist/data/db/namespace.d.ts +1 -1
  10. package/dist/data/db/namespace.d.ts.map +1 -1
  11. package/dist/data/db/namespace.js +1 -1
  12. package/dist/data/db/namespace.js.map +1 -1
  13. package/dist/data/domain/types.d.ts +6 -0
  14. package/dist/data/domain/types.d.ts.map +1 -1
  15. package/dist/data/write/audit/audit-select.d.ts +3 -0
  16. package/dist/data/write/audit/audit-select.d.ts.map +1 -1
  17. package/dist/data/write/audit/audit-select.js +1 -1
  18. package/dist/data/write/audit/audit-select.js.map +1 -1
  19. package/dist/data/write/audit/cte-compile.js +2 -2
  20. package/dist/data/write/audit/cte-compile.js.map +1 -1
  21. package/dist/data/write/audit/decode-returning.d.ts +3 -0
  22. package/dist/data/write/audit/decode-returning.d.ts.map +1 -0
  23. package/dist/data/write/audit/decode-returning.js +42 -0
  24. package/dist/data/write/audit/decode-returning.js.map +1 -0
  25. package/dist/data/write/audit/final-select.d.ts +6 -0
  26. package/dist/data/write/audit/final-select.d.ts.map +1 -1
  27. package/dist/data/write/audit/final-select.js +11 -1
  28. package/dist/data/write/audit/final-select.js.map +1 -1
  29. package/dist/data/write/audit/read-touches.d.ts +2 -2
  30. package/dist/data/write/audit/read-touches.d.ts.map +1 -1
  31. package/dist/data/write/audit/read-touches.js +9 -8
  32. package/dist/data/write/audit/read-touches.js.map +1 -1
  33. package/dist/data/write/audit/touch-match.d.ts +11 -0
  34. package/dist/data/write/audit/touch-match.d.ts.map +1 -0
  35. package/dist/data/write/audit/touch-match.js +66 -0
  36. package/dist/data/write/audit/touch-match.js.map +1 -0
  37. package/dist/data/write/execute.d.ts.map +1 -1
  38. package/dist/data/write/execute.js +17 -19
  39. package/dist/data/write/execute.js.map +1 -1
  40. package/dist/test/vitest-plugin.d.ts.map +1 -1
  41. package/dist/test/vitest-plugin.js +14 -2
  42. package/dist/test/vitest-plugin.js.map +1 -1
  43. package/dist/trace/external/record.js +1 -1
  44. package/dist/trace/external/record.js.map +1 -1
  45. package/dist/trace/runtime/flow-step.d.ts +7 -1
  46. package/dist/trace/runtime/flow-step.d.ts.map +1 -1
  47. package/dist/trace/runtime/flow-step.js +11 -5
  48. package/dist/trace/runtime/flow-step.js.map +1 -1
  49. package/dist/trace/runtime/step-buffer.d.ts +9 -9
  50. package/dist/trace/runtime/step-buffer.d.ts.map +1 -1
  51. package/dist/trace/runtime/step-buffer.js +4 -4
  52. package/dist/trace/runtime/step-buffer.js.map +1 -1
  53. package/dist/trace/transformer/apply.d.ts +18 -0
  54. package/dist/trace/transformer/apply.d.ts.map +1 -0
  55. package/dist/trace/transformer/apply.js +67 -0
  56. package/dist/trace/transformer/apply.js.map +1 -0
  57. package/dist/trace/transformer/build-meta-literal.d.ts +5 -1
  58. package/dist/trace/transformer/build-meta-literal.d.ts.map +1 -1
  59. package/dist/trace/transformer/build-meta-literal.js +11 -2
  60. package/dist/trace/transformer/build-meta-literal.js.map +1 -1
  61. package/dist/trace/transformer/transform-flow-steps.d.ts.map +1 -1
  62. package/dist/trace/transformer/transform-flow-steps.js +5 -4
  63. package/dist/trace/transformer/transform-flow-steps.js.map +1 -1
  64. package/dist/trace/transformer/wrap-function-declaration.d.ts +2 -1
  65. package/dist/trace/transformer/wrap-function-declaration.d.ts.map +1 -1
  66. package/dist/trace/transformer/wrap-function-declaration.js +2 -2
  67. package/dist/trace/transformer/wrap-function-declaration.js.map +1 -1
  68. package/dist/trace/transformer/wrap-variable-declaration.d.ts +2 -1
  69. package/dist/trace/transformer/wrap-variable-declaration.d.ts.map +1 -1
  70. package/dist/trace/transformer/wrap-variable-declaration.js +2 -2
  71. package/dist/trace/transformer/wrap-variable-declaration.js.map +1 -1
  72. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.57.0
4
+
5
+ **Can break on upgrade:** a `@touches` entity must now match a defined table (or a table's `auditEntity`), or the first write in that step throws naming the entity and the closest tables. Rename the entity or set `auditEntity` before upgrading.
6
+
7
+ - **Fix: `.returning()` under an audited step returned raw database rows.** A `pipe.insert`, `update`, `delete` or `upsert` run inside a step with `@touches` gave back snake_case keys and timestamps, bigints and json as the driver's strings. Rows are now decoded through the table's columns, so the result is identical with and without an audited step, chunked or not, for `.returning()` and for a per-key `.returning({ ... })`.
8
+ - **Fix: `@touches` audited every write in the step under every declared entity, whatever table it hit.** A step declaring `Version:update` that also updated a `Document` wrote an audit row for the `Document` update under `Version`. A write is now audited only under the touches whose entity is the written table: the definition's new `auditEntity` option (`define(name, fields, { auditEntity: 'Version' })`) matching exactly, otherwise the table name matching ignoring case and underscores, optionally plural (`Version` matches `versions`; `DocumentVersion` matches `document_versions`). A write to a table no touch matches is not audited; a touch no write was audited under gets its read row when the step completes, per touch; and a write under a touch whose entity matches no defined table throws, naming the closest tables. **Behaviour change:** a step whose touch names an entity that is not a table name (for example `Item` on `audit_test_items`) now throws on its first write: set `auditEntity` on the table or rename the entity.
9
+
10
+ ## 0.56.2
11
+
12
+ - **Fix: `@flow_step` and `@touches` annotations are now applied at runtime.** The annotations were parsed by `pipework check` but nothing wrapped the functions, so annotated code recorded no `trace_step` and no `audit_record` (with `audit: { chain: true }`, a `pipe.update` under `@touches` left no audit row). Annotated functions are now wrapped with `__flowStep` automatically under `pipework test` and the vitest preset, and under `pipework dev` and `pipework serve`, with no change to app code; `@touches` targets are carried into the step. The `ref` is the file's path relative to the directory holding `pipework.config.ts` (the one `pipework check` runs from), plus the function name. A `@flow_step` that cannot be wrapped (a default export, a method) now fails the load with its file and line instead of running unwrapped. Stack-trace line numbers inside an annotated file can shift. An app built with plain `tsc` is not wrapped: run it through `pipework serve`, or wrap with `__flowStep` by hand.
13
+
3
14
  ## 0.56.1
4
15
 
5
16
  - **Fix: routes with `.input()`, `.query()` or `.params()` answered `422 VALIDATION_ERROR` on Fastify 5.11.0 and later.** Any app that installed after Fastify 5.11.0 shipped (2026-07-30) got Fastify 5.12.x, whose validation step now replaces the request body, query and params with whatever the validator returns; Pipework's pass-through validator returned `undefined`, so the handler's input parse saw nothing and failed with "expected object, received undefined". The pass-through now returns the data unchanged, so these routes receive their input on every Fastify 5.x. Routes with none of the three were not affected. The repo now tests against Fastify 5.12.5.
package/REFERENCE.md CHANGED
@@ -699,7 +699,7 @@ Field builders for domain definitions — uuid(), text(), integer(), etc.
699
699
 
700
700
  ### `pipe.define`
701
701
 
702
- Registers a domain definition with table, validators, and factory projections.
702
+ Registers a domain definition with table, validators, and factory projections. The `auditEntity` option names the `@touches` entity writes to this table are audited under (see `__flowStep`).
703
703
 
704
704
  ### `pipe.definitions`
705
705
 
@@ -1316,6 +1316,10 @@ function tap(url: string, options?: ConnectOptions): ManagedConnection
1316
1316
 
1317
1317
  Wraps `impl` so that, under an active traced Flow, each call records a `trace_step`.
1318
1318
 
1319
+ A function documented with `@flow_step` (and `@touches Entity:verb`) is wrapped automatically: under `pipework test` and the vitest preset, and under `pipework dev` and `pipework serve`. An app built with plain `tsc` gets no wrapping: run it through `pipework serve`, or call `__flowStep` by hand.
1320
+
1321
+ * A write under a step with `@touches` is audited only under the touches whose entity is the written table, one `audit_record` per affected row per matching touch. A touch's `Entity` matches a table when the definition declares `define(name, fields, { auditEntity })` equal to `Entity` exactly; otherwise when the names agree ignoring case and underscores, with the table name optionally plural (`Version` matches `version` and `versions`; `DocumentVersion` matches `document_versions`). A write to a table no touch matches is not audited. A touch that no write of the step was audited under gets a read row (`before` and `after` null) when the step completes. A write under a step with a touch whose entity matches no defined table throws, naming the closest table names. `.returning()` returns the same rows with or without an audited step.
1322
+
1319
1323
  ```typescript
1320
1324
  function __flowStep<F extends AnyFunction>(meta: FlowStepMeta, impl: F): F
1321
1325
  ```
package/dist/REFERENCE.md CHANGED
@@ -24,6 +24,7 @@
24
24
  - [temporal — Bitemporal Data](#temporal-bitemporal-data)
25
25
  - [valve](#valve)
26
26
  - [vector — Vector & Full-Text Search](#vector-vector-full-text-search)
27
+ - [accessLinks](#accesslinks)
27
28
  - [audit — Audit Logging](#audit-audit-logging)
28
29
  - [cache — Caching](#cache-caching)
29
30
  - [webhook — Inbound & Outbound Webhooks](#webhook-inbound-outbound-webhooks)
@@ -34,9 +35,9 @@
34
35
  - [http — Server](#http-server)
35
36
  - [openapi — API Documentation](#openapi-api-documentation)
36
37
  - [test](#test)
38
+ - [trace](#trace)
37
39
  - [data](#data)
38
40
  - [request](#request)
39
- - [trace](#trace)
40
41
 
41
42
  ## Core
42
43
 
@@ -1018,6 +1019,14 @@ Computes ts_rank for full-text search result ordering. Accepts a pre-built tsque
1018
1019
 
1019
1020
  Verifies the pgvector extension is installed and accessible.
1020
1021
 
1022
+ ## accessLinks
1023
+
1024
+ Access links namespace — short revocable bearer links to a tenant's resource.
1025
+
1026
+ ### `accessLinks.create`
1027
+
1028
+ Creates an access-link handle: tenant-scoped management plus the public resolve / beginUse / completeUse / abandonUse.
1029
+
1021
1030
  ## audit — Audit Logging
1022
1031
 
1023
1032
  Audit logging namespace — structured audit trail for data changes.
@@ -1222,6 +1231,42 @@ Generates an OpenAPI 3.1 document from route registrations — schemas derived f
1222
1231
 
1223
1232
  ## test
1224
1233
 
1234
+ ## trace
1235
+
1236
+ Trace namespace — hand the current trace to a process outside Node and record the steps it reports back.
1237
+
1238
+ ### `trace.traceparent`
1239
+
1240
+ W3C `traceparent` for the current trace and open step; `null` outside a traced flow or when the trace is truncated.
1241
+
1242
+ ### `trace.env`
1243
+
1244
+ `{ TRACEPARENT }` for a child process's environment, or `{}` when there is no traceparent.
1245
+
1246
+ ### `trace.record`
1247
+
1248
+ Records steps reported as JSON lines (or objects) by an outside process under the step open now. Synchronous; never throws.
1249
+
1250
+ ### Types
1251
+
1252
+ **`FlowStepMeta`** — Trace metadata for one documented flow-step: its `path:symbol` graph node id and the per-argument capture projections.
1253
+
1254
+ ```typescript
1255
+ interface FlowStepMeta
1256
+ ```
1257
+
1258
+ **`ExternalStepReport`** — One step reported by an outside process.
1259
+
1260
+ ```typescript
1261
+ type ExternalStepReport = z.infer<typeof externalStepReportSchema>
1262
+ ```
1263
+
1264
+ **`ExternalRecordResult`** — What `trace.record` did with a report.
1265
+
1266
+ ```typescript
1267
+ interface ExternalRecordResult
1268
+ ```
1269
+
1225
1270
  ## data
1226
1271
 
1227
1272
  ### `tap`
@@ -1244,13 +1289,3 @@ Creates a PipeworkServer — wraps Fastify with auto request IDs, CORS, rate lim
1244
1289
  ```typescript
1245
1290
  function createServer(instance: Manifold, config: ServerConfig = if (instance.config.environment === 'production')
1246
1291
  ```
1247
-
1248
- ## trace
1249
-
1250
- ### `__flowStep`
1251
-
1252
- Wraps `impl` so that, under an active traced Flow, each call records a `trace_step`.
1253
-
1254
- ```typescript
1255
- function __flowStep<F extends AnyFunction>(meta: FlowStepMeta, impl: F): F
1256
- ```
@@ -12,7 +12,7 @@ export function registerTsResolveHooks() {
12
12
  // to its backing TS file (.js→.ts + extensionless); `load` fully transpiles it
13
13
  // (parameter properties, enums, namespaces) via Node's bundled
14
14
  // `stripTypeScriptTypes` — `--experimental-strip-types` only erases annotations
15
- // and rejects those features. Keep in sync with ts-resolve-hooks.ts.
15
+ // and rejects those features. Keep resolve and strip in sync with ts-resolve-hooks.ts, which also applies @flow_step.
16
16
  const code = `
17
17
  import { existsSync } from 'node:fs'
18
18
  import { readFile } from 'node:fs/promises'
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/core/config/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,eAAe,GAAG,oBAAoB,CAAA;AAE5C,MAAM,UAAU,sBAAsB;IACpC,CAAC;QACC,+EAA+E;QAC/E,qEAAqE;QACrE,8EAA8E;QAC9E,+EAA+E;QAC/E,+DAA+D;QAC/D,gFAAgF;QAChF,qEAAqE;QACrE,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0CZ,CAAA;QACD,QAAQ,CAAC,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY;IACjD,MAAM,KAAK,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC/C,MAAM,UAAU,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;IAEzF,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CACnB,MAAM,eAAe,aAAa,KAAK,2BAA2B,EAClE,sEAAsE,CACvE,CAAA;IACH,CAAC;IAED,sBAAsB,EAAE,CAAA;IAExB,OAAO,YAAY,CAAC,UAAU,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,WAAW,CACnB,4DAA4D,IAAI,EAAE,EAClE,qCAAqC,eAAe,+CAA+C,CACpG,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,GAAG,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;QAC/C,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;QAC3C,GAAG,GAAG,MAAM,CAAA;QACZ,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/core/config/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,eAAe,GAAG,oBAAoB,CAAA;AAE5C,MAAM,UAAU,sBAAsB;IACpC,CAAC;QACC,+EAA+E;QAC/E,qEAAqE;QACrE,8EAA8E;QAC9E,+EAA+E;QAC/E,+DAA+D;QAC/D,gFAAgF;QAChF,sHAAsH;QACtH,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0CZ,CAAA;QACD,QAAQ,CAAC,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY;IACjD,MAAM,KAAK,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC/C,MAAM,UAAU,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;IAEzF,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CACnB,MAAM,eAAe,aAAa,KAAK,2BAA2B,EAClE,sEAAsE,CACvE,CAAA;IACH,CAAC;IAED,sBAAsB,EAAE,CAAA;IAExB,OAAO,YAAY,CAAC,UAAU,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,WAAW,CACnB,4DAA4D,IAAI,EAAE,EAClE,qCAAqC,eAAe,+CAA+C,CACpG,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,GAAG,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;QAC/C,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;QAC3C,GAAG,GAAG,MAAM,CAAA;QACZ,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ts-resolve-hooks.d.ts","sourceRoot":"","sources":["../../../src/core/config/ts-resolve-hooks.ts"],"names":[],"mappings":"AAwBA,wBAAgB,OAAO,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACnF;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAmBjB;AAgBD,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,UAAU,CAAA;IACjD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AASD,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EAC/C,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAC3G,OAAO,CAAC,UAAU,CAAC,CAOrB"}
1
+ {"version":3,"file":"ts-resolve-hooks.d.ts","sourceRoot":"","sources":["../../../src/core/config/ts-resolve-hooks.ts"],"names":[],"mappings":"AA6BA,wBAAgB,OAAO,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACnF;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAmBjB;AAgBD,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,UAAU,CAAA;IACjD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AASD,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EAC/C,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAC3G,OAAO,CAAC,UAAU,CAAC,CAYrB"}
@@ -3,7 +3,9 @@ import { readFile } from 'node:fs/promises';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { stripTypeScriptTypes } from 'node:module';
5
5
  // ESM loader hooks — run on a separate thread, so this file must be
6
- // self-contained (no imports from the rest of pipework).
6
+ // self-contained: no static imports from the rest of pipework. The one
7
+ // exception is `load`, which dynamically imports the flow-step transformer
8
+ // (`../../trace/transformer/apply.js`) only for a file that mentions `@flow_step`.
7
9
  //
8
10
  // `resolve` rewrites a relative specifier to the TS file that actually backs
9
11
  // it (.js→.ts, and extensionless bundler-style imports); `load` fully transpiles
@@ -11,11 +13,14 @@ import { stripTypeScriptTypes } from 'node:module';
11
13
  // `--experimental-strip-types` cannot do. Together they let `pipework dev` and
12
14
  // config discovery run a consumer's real TypeScript source unbuilt.
13
15
  //
14
- // Mirrors the inline hook in `registerTsResolveHooks()` (discover.ts). They
15
- // stay separate on purpose: that one registers a self-contained `data:` URL so
16
- // it works during pipework's own source-mode runs where this compiled `.js`
17
- // file does not exist yet; this one is a real file loaded via `--import` into
18
- // child processes (`pipework dev`). Keep BOTH hooks in sync.
16
+ // Mirrors the inline hook in `registerTsResolveHooks()` (discover.ts) for
17
+ // `resolve` and for TS stripping. They stay separate on purpose: that one
18
+ // registers a self-contained `data:` URL so it works during pipework's own
19
+ // source-mode runs where this compiled `.js` file does not exist yet, and it
20
+ // skips the `@flow_step` transform because config discovery has no steps; this
21
+ // one is a real file loaded via `--import` into child processes (`pipework
22
+ // dev`/`serve`), so it can reach the compiled transformer by relative URL.
23
+ // Keep the `resolve` and strip logic of BOTH hooks in sync.
19
24
  //
20
25
  // The `.ts` candidate must exist on disk before we rewrite. `nextResolve` does
21
26
  // not touch the filesystem for file: URLs, so a missing file is not caught by a
@@ -66,7 +71,13 @@ function tsCandidates(specifier) {
66
71
  // `.js` and node_modules is left to the host loader.
67
72
  export async function load(url, context, nextLoad) {
68
73
  if (url.endsWith('.ts') && !url.includes('/node_modules/')) {
69
- const source = await readFile(fileURLToPath(url), 'utf8');
74
+ let source = await readFile(fileURLToPath(url), 'utf8');
75
+ if (source.includes('@flow_step')) {
76
+ const { applyFlowStepTransform } = await import('../../trace/transformer/apply.js');
77
+ const applied = applyFlowStepTransform(source, fileURLToPath(url));
78
+ if (applied !== null)
79
+ source = applied.code;
80
+ }
70
81
  const code = stripTypeScriptTypes(source, { mode: 'transform', sourceMap: true, sourceUrl: url });
71
82
  return { format: 'module', source: code, shortCircuit: true };
72
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ts-resolve-hooks.js","sourceRoot":"","sources":["../../../src/core/config/ts-resolve-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ts-resolve-hooks.js","sourceRoot":"","sources":["../../../src/core/config/ts-resolve-hooks.ts"],"names":[],"mappings":"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"}
@@ -144,7 +144,7 @@ export declare const pipe: typeof getDb & {
144
144
  pgLsn(): import("../domain/types.js").FieldDescriptor<string, {}> & import("../domain/field.js").FieldModifiers<string, {}>;
145
145
  custom<S extends import("zod/v4").ZodType>(column: unknown, validator: S): import("../domain/types.js").FieldDescriptor<import("zod/v4").infer<S>, {}> & import("../domain/field.js").FieldModifiers<import("zod/v4").infer<S>, {}>;
146
146
  };
147
- /** Registers a domain definition with table, validators, and factory projections. */
147
+ /** Registers a domain definition with table, validators, and factory projections. The `auditEntity` option names the `@touches` entity writes to this table are audited under (see `__flowStep`). */
148
148
  define: typeof define;
149
149
  /** Returns the global registry of all domain definitions. */
150
150
  definitions: typeof definitions;
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGnM,OAAO,EAAS,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAG/D,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE3E,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,eAAO,MAAM,IAAI;IACf,iQAAiQ;;IAGjQ,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAG7E,+RAA+R;;;;;;;;;;;;;IAkB/R,oDAAoD;;IAEpD,mDAAmD;;IAGnD,6EAA6E;;IAG7E,gFAAgF;;IAGhF,kHAAkH;;IAGlH,2GAA2G;;IAG3G,0GAA0G;;IAG1G,8EAA8E;;;;;;;;;;;;;;;;;;;;;;;IAE9E,qFAAqF;;IAErF,6DAA6D;;IAG7D,2GAA2G;;IAE3G,gHAAgH;;IAEhH,gHAAgH;;IAEhH,4EAA4E;;CAE5E,CAAA"}
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGnM,OAAO,EAAS,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAG/D,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE3E,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,eAAO,MAAM,IAAI;IACf,iQAAiQ;;IAGjQ,6EAA6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAG7E,+RAA+R;;;;;;;;;;;;;IAkB/R,oDAAoD;;IAEpD,mDAAmD;;IAGnD,6EAA6E;;IAG7E,gFAAgF;;IAGhF,kHAAkH;;IAGlH,2GAA2G;;IAG3G,0GAA0G;;IAG1G,8EAA8E;;;;;;;;;;;;;;;;;;;;;;;IAE9E,qMAAqM;;IAErM,6DAA6D;;IAG7D,2GAA2G;;IAE3G,gHAAgH;;IAEhH,gHAAgH;;IAEhH,4EAA4E;;CAE5E,CAAA"}
@@ -52,7 +52,7 @@ export const pipe = Object.assign(getDb, {
52
52
  values,
53
53
  /** Field builders for domain definitions — uuid(), text(), integer(), etc. */
54
54
  field,
55
- /** Registers a domain definition with table, validators, and factory projections. */
55
+ /** Registers a domain definition with table, validators, and factory projections. The `auditEntity` option names the `@touches` entity writes to this table are audited under (see `__flowStep`). */
56
56
  define,
57
57
  /** Returns the global registry of all domain definitions. */
58
58
  definitions,
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEnM,qBAAqB;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAK/D,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,iQAAiQ;IACjQ,MAAM,EAAE,UAAU;IAElB,6EAA6E;IAC7E,MAAM;IAEN,+RAA+R;IAC/R,GAAG;IAEH,kGAAkG;IAClG,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,WAAW;IACX,qBAAqB;IACrB,OAAO;IAEP,qDAAqD;IACrD,UAAU;IACV,SAAS;IACT,SAAS;IAET,oDAAoD;IACpD,OAAO,EAAE,UAAU;IACnB,mDAAmD;IACnD,UAAU;IAEV,6EAA6E;IAC7E,QAAQ;IAER,gFAAgF;IAChF,YAAY;IAEZ,kHAAkH;IAClH,YAAY;IAEZ,2GAA2G;IAC3G,OAAO;IAEP,0GAA0G;IAC1G,MAAM;IAEN,8EAA8E;IAC9E,KAAK;IACL,qFAAqF;IACrF,MAAM;IACN,6DAA6D;IAC7D,WAAW;IAEX,2GAA2G;IAC3G,MAAM;IACN,gHAAgH;IAChH,MAAM;IACN,gHAAgH;IAChH,MAAM,EAAE,MAAM;IACd,4EAA4E;IAC5E,MAAM;CACP,CAAC,CAAA"}
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/data/db/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEnM,qBAAqB;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAK/D,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,6EAA6E;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,mJAAmJ;AACnJ,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,iQAAiQ;IACjQ,MAAM,EAAE,UAAU;IAElB,6EAA6E;IAC7E,MAAM;IAEN,+RAA+R;IAC/R,GAAG;IAEH,kGAAkG;IAClG,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,WAAW;IACX,qBAAqB;IACrB,OAAO;IAEP,qDAAqD;IACrD,UAAU;IACV,SAAS;IACT,SAAS;IAET,oDAAoD;IACpD,OAAO,EAAE,UAAU;IACnB,mDAAmD;IACnD,UAAU;IAEV,6EAA6E;IAC7E,QAAQ;IAER,gFAAgF;IAChF,YAAY;IAEZ,kHAAkH;IAClH,YAAY;IAEZ,2GAA2G;IAC3G,OAAO;IAEP,0GAA0G;IAC1G,MAAM;IAEN,8EAA8E;IAC9E,KAAK;IACL,qMAAqM;IACrM,MAAM;IACN,6DAA6D;IAC7D,WAAW;IAEX,2GAA2G;IAC3G,MAAM;IACN,gHAAgH;IAChH,MAAM;IACN,gHAAgH;IAChH,MAAM,EAAE,MAAM;IACd,4EAA4E;IAC5E,MAAM;CACP,CAAC,CAAA"}
@@ -118,6 +118,12 @@ export interface DefineOptions {
118
118
  readonly foreignKeys?: readonly CompositeForeignKey[];
119
119
  /** Marks the table RANGE-partitioned. Partitions are managed outside the migration. */
120
120
  readonly partitionBy?: PartitionSpec;
121
+ /**
122
+ * The `@touches` entity name writes to this table are audited under. When set it
123
+ * must equal the touch's entity exactly; otherwise the touch matches by normalized
124
+ * name (case-insensitive, underscores ignored, table name optionally plural).
125
+ */
126
+ readonly auditEntity?: string;
121
127
  }
122
128
  /** Column type projected from a FieldDescriptor — carries the right data type for Drizzle operators. */
123
129
  export type FieldColumn<F extends FieldDescriptor, TName extends string = string> = AnyPgColumn<{
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/domain/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/domain/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE5F,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,WAAW,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,OAAO,GACP,OAAO,GACP,QAAQ,CAAA;AAEZ,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB;;;;;WAKG;QACH,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,CAAC,CAAA;QAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB;;;;;;WAMG;QACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAC5B,CAAA;IACD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAA;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAA;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,OAAO,CAAA;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,+FAA+F;AAC/F,MAAM,WAAW,eAAe,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,SAAS,UAAU,GAAG,UAAU;IACxF,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAGD,KAAK,kBAAkB,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAEnD,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;AAE5D,+DAA+D;AAC/D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAA;AAEhG,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,UAAU,EAAE;QACnB;;;;;WAKG;QAEH,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;QAClE,6DAA6D;QAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KACpC,CAAA;IACD,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CACrC;AAED,kFAAkF;AAElF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAEvF;AAED,mGAAmG;AACnG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAE1B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxE,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAA;IACrD,uFAAuF;IACvF,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,wGAAwG;AACxG,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC;IAC9F,IAAI,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO,EAAE,IAAI,SAAS,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;IACxD,SAAS,EAAE,KAAK,CAAA;CACjB,CAAC,CAAA;AAEF,iEAAiE;AACjE,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,WAAW,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI;IACzF,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;CACvE,CAAA;AAED,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM;IACzG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,KAAK,IAAI,KAAK,CAAA;IACd,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IACnD,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IACnD,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IACnD,OAAO,IAAI,cAAc,CAAA;IACzB,cAAc,IAAI,YAAY,CAAC,OAAO,GAAG,oBAAoB,EAAE,KAAK,CAAC,CAAA;IACrE,OAAO,IAAI,YAAY,CAAC,OAAO,GAAG,aAAa,EAAE,KAAK,CAAC,CAAA;IACvD,WAAW,IAAI,YAAY,CAAC,OAAO,GAAG,iBAAiB,EAAE,KAAK,CAAC,CAAA;IAC/D,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC1C,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;CAC3C;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,IAC/F,OAAO,CAAC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,GAC5G,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,GAChC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AAErC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,IACnG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AAE9B,0FAA0F;AAC1F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;IACtF,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,GAAG,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;IACzF,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;CACnF;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;IAClG,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;IAClF,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;IACzG,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;CAC1F;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,GAAG,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;IACvF,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC,CAAA;CAC1F;AAED,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAChH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;CAC9L;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B"}
@@ -1,5 +1,6 @@
1
1
  import type { SQL } from '../../db/types.js';
2
2
  import type { ActiveAuditStep } from '../../../trace/runtime/step-buffer.js';
3
+ import type { MetaTouch } from '../../../trace/runtime/step-meta.js';
3
4
  /**
4
5
  * Information about the active flow_step plus the actor/tenant the row is
5
6
  * attributed to. The CTE compiler resolves these from the active `Flow` and
@@ -7,6 +8,8 @@ import type { ActiveAuditStep } from '../../../trace/runtime/step-buffer.js';
7
8
  */
8
9
  export interface AuditSelectContext {
9
10
  readonly step: ActiveAuditStep;
11
+ /** The step's touches that match the written table — one audit row per affected row per touch. */
12
+ readonly touches: readonly MetaTouch[];
10
13
  /** `auth?.userId`, or null when the trace ran without an authenticated principal. */
11
14
  readonly actorId: string | null;
12
15
  /** `flow.tenant`, or null when the entry was not tenant-scoped. */
@@ -1 +1 @@
1
- {"version":3,"file":"audit-select.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/audit-select.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAE5E;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,GACT,GAAG,CAwBL"}
1
+ {"version":3,"file":"audit-select.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/audit-select.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAEpE;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAA;IACtC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,GACT,GAAG,CAwBL"}
@@ -28,7 +28,7 @@ export function buildAuditInserts(ctx, from, before, after) {
28
28
  const capturedJson = capturedInputs === null
29
29
  ? sql `NULL::jsonb`
30
30
  : sql `${JSON.stringify(capturedInputs)}::jsonb`;
31
- const selects = ctx.step.touches.map(t => sql `
31
+ const selects = ctx.touches.map(t => sql `
32
32
  SELECT
33
33
  gen_random_uuid(),
34
34
  ${ctx.step.traceDay}::date,
@@ -1 +1 @@
1
- {"version":3,"file":"audit-select.js","sourceRoot":"","sources":["../../../../src/data/write/audit/audit-select.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,uCAAuC;AACvC,EAAE;AACF,2EAA2E;AAC3E,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAE1E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAiBrC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAuB,EACvB,IAAS,EACT,MAAW,EACX,KAAU;IAEV,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAA;IAC9C,MAAM,YAAY,GAAG,cAAc,KAAK,IAAI;QAC1C,CAAC,CAAC,GAAG,CAAA,aAAa;QAClB,CAAC,CAAC,GAAG,CAAA,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAA;IAEjD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAA;;;QAGvC,GAAG,CAAC,IAAI,CAAC,QAAQ;QACjB,GAAG,CAAC,IAAI,CAAC,OAAO;QAChB,GAAG,CAAC,IAAI,CAAC,MAAM;QACf,GAAG,CAAC,QAAQ;QACZ,GAAG,CAAC,OAAO;QACX,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI;QACN,MAAM;QACN,KAAK;QACL,YAAY;;MAEd,IAAI;GACP,CAAC,CAAA;IAEF,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAA,aAAa,CAAC,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"audit-select.js","sourceRoot":"","sources":["../../../../src/data/write/audit/audit-select.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,uCAAuC;AACvC,EAAE;AACF,2EAA2E;AAC3E,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAE1E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAoBrC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAuB,EACvB,IAAS,EACT,MAAW,EACX,KAAU;IAEV,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAA;IAC9C,MAAM,YAAY,GAAG,cAAc,KAAK,IAAI;QAC1C,CAAC,CAAC,GAAG,CAAA,aAAa;QAClB,CAAC,CAAC,GAAG,CAAA,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAA;IAEjD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAA;;;QAGlC,GAAG,CAAC,IAAI,CAAC,QAAQ;QACjB,GAAG,CAAC,IAAI,CAAC,OAAO;QAChB,GAAG,CAAC,IAAI,CAAC,MAAM;QACf,GAAG,CAAC,QAAQ;QACZ,GAAG,CAAC,OAAO;QACX,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI;QACN,MAAM;QACN,KAAK;QACL,YAAY;;MAEd,IAAI;GACP,CAAC,CAAA;IAEF,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAA,aAAa,CAAC,CAAA;AAC5C,CAAC"}
@@ -9,9 +9,9 @@ import { compileUpdateAudit } from './verb-update.js';
9
9
  import { compileDeleteAudit } from './verb-delete.js';
10
10
  import { compileUpsertAudit } from './verb-upsert.js';
11
11
  export function compileAuditWrite(db, state, ctx) {
12
- if (ctx.step.touches.length === 0) {
12
+ if (ctx.touches.length === 0) {
13
13
  throw new Error(`[pipework] compileAuditWrite called with empty touches on "${state.table.$name}". ` +
14
- `Active step "${ctx.step.stepId}" has no @touches — the executor should have taken the vanilla DML branch.`);
14
+ `Active step "${ctx.step.stepId}" has no @touches matching this table — the executor should have taken the vanilla DML branch.`);
15
15
  }
16
16
  switch (state.verb) {
17
17
  case 'insert': return compileInsertAudit(db, state, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"cte-compile.js","sourceRoot":"","sources":["../../../../src/data/write/audit/cte-compile.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,0BAA0B;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAQrD,MAAM,UAAU,iBAAiB,CAAC,EAAS,EAAE,KAAiB,EAAE,GAAuB;IACrF,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,8DAA8D,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK;YACpF,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,4EAA4E,CAC5G,CAAA;IACH,CAAC;IACD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACxD,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACxD,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACxD,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cte-compile.js","sourceRoot":"","sources":["../../../../src/data/write/audit/cte-compile.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,0BAA0B;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAQrD,MAAM,UAAU,iBAAiB,CAAC,EAAS,EAAE,KAAiB,EAAE,GAAuB;IACrF,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,8DAA8D,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK;YACpF,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,gGAAgG,CAChI,CAAA;IACH,CAAC;IACD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACxD,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACxD,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACxD,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { WriteState } from '../state.js';
2
+ export declare function decodeReturning(state: WriteState, rows: unknown): unknown;
3
+ //# sourceMappingURL=decode-returning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-returning.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/decode-returning.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAK7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAczE"}
@@ -0,0 +1,42 @@
1
+ // Decodes the CTE statement's raw rows the way drizzle decodes a vanilla
2
+ // `.returning()`: each value is read from its physical column and run through
3
+ // the column's `mapFromDriverValue` (timestamps to Date, bigint, json, ...),
4
+ // nulls passing through. Keys are the table's field keys for `returning('all')`
5
+ // and the caller's aliases for a per-key projection.
6
+ import { physicalColumnName } from './final-select.js';
7
+ export function decodeReturning(state, rows) {
8
+ const returning = state.returning;
9
+ if (returning === undefined || returning === null)
10
+ return undefined;
11
+ if (!Array.isArray(rows))
12
+ return rows;
13
+ const slots = slotsFor(state);
14
+ return rows.map(row => {
15
+ const raw = row;
16
+ const out = {};
17
+ for (const slot of slots) {
18
+ const value = raw[slot.physical];
19
+ out[slot.key] = value === null || value === undefined || slot.decode === undefined ? value : slot.decode(value);
20
+ }
21
+ return out;
22
+ });
23
+ }
24
+ function slotsFor(state) {
25
+ const returning = state.returning;
26
+ const table = state.table;
27
+ if (returning === 'all' || returning === null || returning === undefined || Object.keys(returning).length === 0) {
28
+ return Object.keys(state.table.$fields).map(key => slot(key, key, table[key]));
29
+ }
30
+ // Per-key rows are aliased by the final select, so they are read by alias.
31
+ return Object.keys(returning).map(key => ({ key, physical: key, decode: decoderOf(returning[key]) }));
32
+ }
33
+ function slot(key, alias, column) {
34
+ return { key, physical: physicalColumnName(alias, column), decode: decoderOf(column) };
35
+ }
36
+ function decoderOf(column) {
37
+ const fn = column?.mapFromDriverValue;
38
+ if (typeof fn !== 'function')
39
+ return undefined;
40
+ return (v) => fn.call(column, v);
41
+ }
42
+ //# sourceMappingURL=decode-returning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-returning.js","sourceRoot":"","sources":["../../../../src/data/write/audit/decode-returning.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,gFAAgF;AAChF,qDAAqD;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAMtD,MAAM,UAAU,eAAe,CAAC,KAAiB,EAAE,IAAa;IAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IACjC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACpB,MAAM,GAAG,GAAG,GAA8B,CAAA;QAC1C,MAAM,GAAG,GAA4B,EAAE,CAAA;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAChC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACjH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAA2C,CAAA;IAC/D,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChH,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAChF,CAAC;IACD,2EAA2E;IAC3E,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACvG,CAAC;AAED,SAAS,IAAI,CAAC,GAAW,EAAE,KAAa,EAAE,MAAe;IACvD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAA;AACxF,CAAC;AAED,SAAS,SAAS,CAAC,MAAe;IAChC,MAAM,EAAE,GAAI,MAAkD,EAAE,kBAAkB,CAAA;IAClF,IAAI,OAAO,EAAE,KAAK,UAAU;QAAE,OAAO,SAAS,CAAA;IAC9C,OAAO,CAAC,CAAU,EAAE,EAAE,CAAE,EAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC"}
@@ -1,4 +1,10 @@
1
1
  import type { SQL } from '../../db/types.js';
2
2
  import type { WriteState } from '../state.js';
3
3
  export declare function buildFinalSelect(state: WriteState, sourceCte: string): SQL;
4
+ /** The projected column's own SQL name when `value` is a column; otherwise the alias, snake-cased. */
5
+ export declare function physicalColumnName(alias: string, value: unknown): string;
6
+ export declare function isColumn(value: unknown): value is {
7
+ name: string;
8
+ mapFromDriverValue?: (v: unknown) => unknown;
9
+ };
4
10
  //# sourceMappingURL=final-select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"final-select.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/final-select.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAiB1E"}
1
+ {"version":3,"file":"final-select.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/final-select.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAiB1E;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAIxE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CAAE,CAEhH"}
@@ -19,10 +19,20 @@ export function buildFinalSelect(state, sourceCte) {
19
19
  if (keys.length === 0)
20
20
  return sql.raw(`SELECT * FROM ${source}`);
21
21
  const cols = keys.map(k => {
22
- const physical = quoteIdentifier(camelToSnake(k), 'returning column');
22
+ const physical = quoteIdentifier(physicalColumnName(k, returning[k]), 'returning column');
23
23
  const alias = quoteIdentifier(k, 'returning alias');
24
24
  return `${source}.${physical} AS ${alias}`;
25
25
  }).join(', ');
26
26
  return sql.raw(`SELECT ${cols} FROM ${source}`);
27
27
  }
28
+ /** The projected column's own SQL name when `value` is a column; otherwise the alias, snake-cased. */
29
+ export function physicalColumnName(alias, value) {
30
+ const name = value?.name;
31
+ if (isColumn(value) && typeof name === 'string')
32
+ return name;
33
+ return camelToSnake(alias);
34
+ }
35
+ export function isColumn(value) {
36
+ return typeof value === 'object' && value !== null && 'columnType' in value;
37
+ }
28
38
  //# sourceMappingURL=final-select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"final-select.js","sourceRoot":"","sources":["../../../../src/data/write/audit/final-select.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAC5E,uCAAuC;AAEvC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAIrD,MAAM,UAAU,gBAAgB,CAAC,KAAiB,EAAE,SAAiB;IACnE,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAA;IACzC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,MAAM,cAAc,CAAC,CAAA;IACvD,CAAC;IACD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAA;QACrE,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;QACnD,OAAO,GAAG,MAAM,IAAI,QAAQ,OAAO,KAAK,EAAE,CAAA;IAC5C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS,MAAM,EAAE,CAAC,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"final-select.js","sourceRoot":"","sources":["../../../../src/data/write/audit/final-select.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAC5E,uCAAuC;AAEvC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAIrD,MAAM,UAAU,gBAAgB,CAAC,KAAiB,EAAE,SAAiB;IACnE,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAA;IACzC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,MAAM,cAAc,CAAC,CAAA;IACvD,CAAC;IACD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAA;QACzF,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;QACnD,OAAO,GAAG,MAAM,IAAI,QAAQ,OAAO,KAAK,EAAE,CAAA;IAC5C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS,MAAM,EAAE,CAAC,CAAA;AACjD,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,KAAc;IAC9D,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAA;IACvD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC5D,OAAO,YAAY,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,IAAI,KAAK,CAAA;AAC7E,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import type { Flow } from '../../../request/context/types.js';
2
2
  import type { BegunStep } from '../../../trace/runtime/step-buffer.js';
3
3
  /**
4
- * Emits one `audit_record` row per `@touches` target for a completed step
5
- * that performed no write. Resolves when the insert settles. Failures are
4
+ * Emits one `audit_record` row per `@touches` target that no write of the
5
+ * completed step audited. Resolves when the insert settles. Failures are
6
6
  * logged at error level and swallowed — an audit-emit failure must not
7
7
  * propagate to the user-visible step outcome (the step already succeeded).
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"read-touches.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/read-touches.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAA;AAiBtE;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCjF"}
1
+ {"version":3,"file":"read-touches.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/read-touches.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAA;AAiBtE;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCjF"}
@@ -1,9 +1,9 @@
1
1
  // Read-touches audit emission. A flow_step that declared `@touches Entity:verb`
2
- // but performed no `pipe.*` write is recording a read, not a mutation: the step
2
+ // but performed no `pipe.*` write to its entity is recording a read, not a mutation: the step
3
3
  // observed the entity in service of the request, and the audit substrate must
4
4
  // record that observation for compliance and trail-reconstruction. The
5
- // CTE-form write path already covered the write case (`wroteForAudit === true`
6
- // flips on `markWrote()`); this module covers the complement.
5
+ // CTE-form write path covers the touches it wrote (recorded by
6
+ // `markWrote(touch)`); this module covers the rest.
7
7
  //
8
8
  // Atomicity: the emit goes through `pipeRaw()` so a bound transaction on the
9
9
  // active Flow carries the insert. If the caller wrapped the step in
@@ -22,13 +22,14 @@ import { pipeRaw } from '../../db/db.js';
22
22
  import { getBaseLogger } from '../../../core/logging/index.js';
23
23
  import { resolveActorId } from './actor.js';
24
24
  /**
25
- * Emits one `audit_record` row per `@touches` target for a completed step
26
- * that performed no write. Resolves when the insert settles. Failures are
25
+ * Emits one `audit_record` row per `@touches` target that no write of the
26
+ * completed step audited. Resolves when the insert settles. Failures are
27
27
  * logged at error level and swallowed — an audit-emit failure must not
28
28
  * propagate to the user-visible step outcome (the step already succeeded).
29
29
  */
30
30
  export async function emitReadTouches(flow, begun) {
31
- if (begun.touches.length === 0 || begun.wroteForAudit)
31
+ const unwritten = begun.touches.filter(t => !begun.wroteTouches.has(t));
32
+ if (unwritten.length === 0)
32
33
  return;
33
34
  if (flow.trace === null)
34
35
  return;
@@ -38,7 +39,7 @@ export async function emitReadTouches(flow, begun) {
38
39
  const actorId = resolveActorId(flow);
39
40
  const capturedInputs = begun.capturedInputs;
40
41
  const occurredAt = new Date();
41
- const rows = begun.touches.map(t => ({
42
+ const rows = unwritten.map(t => ({
42
43
  traceDay,
43
44
  traceId,
44
45
  traceStepId: begun.stepId,
@@ -57,7 +58,7 @@ export async function emitReadTouches(flow, begun) {
57
58
  await db.insert(auditRecord.table()).values(rows);
58
59
  }
59
60
  catch (err) {
60
- getBaseLogger().error({ err, traceId, stepId: begun.stepId, touches: begun.touches.length }, 'Failed to emit read-touches audit row — the audit trail is missing a read observation');
61
+ getBaseLogger().error({ err, traceId, stepId: begun.stepId, touches: unwritten.length }, 'Failed to emit read-touches audit row — the audit trail is missing a read observation');
61
62
  }
62
63
  }
63
64
  //# sourceMappingURL=read-touches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-touches.js","sourceRoot":"","sources":["../../../../src/data/write/audit/read-touches.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,uEAAuE;AACvE,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,6EAA6E;AAC7E,oEAAoE;AACpE,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,gEAAgE;AAChE,EAAE;AACF,yEAAyE;AACzE,sEAAsE;AACtE,8EAA8E;AAC9E,+EAA+E;AAC/E,YAAY;AAEZ,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAgB3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,KAAgB;IAChE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,aAAa;QAAE,OAAM;IAC7D,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;QAAE,OAAM;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAA;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAA;IAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAA;IAC3C,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAA;IAE7B,MAAM,IAAI,GAAwB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,QAAQ;QACR,OAAO;QACP,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,QAAQ;QACR,OAAO;QACP,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,cAAc;QACd,UAAU;KACX,CAAC,CAAC,CAAA;IAEH,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACjD,wHAAwH;QACxH,MAAO,EAAU,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,EAAE,CAAC,KAAK,CACnB,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EACrE,uFAAuF,CACxF,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"read-touches.js","sourceRoot":"","sources":["../../../../src/data/write/audit/read-touches.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8FAA8F;AAC9F,8EAA8E;AAC9E,uEAAuE;AACvE,+DAA+D;AAC/D,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,oEAAoE;AACpE,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,gEAAgE;AAChE,EAAE;AACF,yEAAyE;AACzE,sEAAsE;AACtE,8EAA8E;AAC9E,+EAA+E;AAC/E,YAAY;AAEZ,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAgB3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,KAAgB;IAChE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACvE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAClC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;QAAE,OAAM;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAA;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAA;IAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAA;IAC3C,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAA;IAE7B,MAAM,IAAI,GAAwB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,QAAQ;QACR,OAAO;QACP,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,QAAQ;QACR,OAAO;QACP,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,cAAc;QACd,UAAU;KACX,CAAC,CAAC,CAAA;IAEH,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACjD,wHAAwH;QACxH,MAAO,EAAU,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,EAAE,CAAC,KAAK,CACnB,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,EACjE,uFAAuF,CACxF,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { DefinedTable } from '../../domain/types.js';
2
+ import type { MetaTouch } from '../../../trace/runtime/step-meta.js';
3
+ type AnyDefinition = DefinedTable<any>;
4
+ export declare function touchMatchesTable(entity: string, table: AnyDefinition): boolean;
5
+ /**
6
+ * The touches a write to `table` is audited under. Throws when any of the
7
+ * step's touches names an entity no registered definition matches.
8
+ */
9
+ export declare function touchesForTable(table: AnyDefinition, touches: readonly MetaTouch[]): MetaTouch[];
10
+ export {};
11
+ //# sourceMappingURL=touch-match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch-match.d.ts","sourceRoot":"","sources":["../../../../src/data/write/audit/touch-match.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAGpE,KAAK,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;AAMtC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAQ/E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,CAchG"}