deepline 0.2.17 → 0.2.18

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.
@@ -160,7 +160,7 @@ export const SDK_RELEASE = {
160
160
  // 0.2.0 makes Dataset Handles uniformly async-only after 0.1.320 briefly
161
161
  // exposed storage-dependent synchronous access. This deliberate minor
162
162
  // release keeps lazy paging semantics independent of row residency.
163
- version: '0.2.17',
163
+ version: '0.2.18',
164
164
  contracts: {
165
165
  api: {
166
166
  name: 'sdk-http-api',
@@ -7617,6 +7617,7 @@ export class PlayContextImpl implements ScalarPlayAuthoringRuntimeContext {
7617
7617
  const compositionNamespace = this.inlineChildCompositionNamespace(
7618
7618
  resolvedName,
7619
7619
  normalizedKey,
7620
+ input,
7620
7621
  );
7621
7622
  const inlineChildGovernor =
7622
7623
  await this.currentExecutionGovernor.forkInlineChild({
@@ -7728,35 +7729,42 @@ export class PlayContextImpl implements ScalarPlayAuthoringRuntimeContext {
7728
7729
  }
7729
7730
 
7730
7731
  /**
7731
- * Replay-stable composition namespace for one inline `ctx.runPlay`
7732
- * invocation. Format `child:<playName>#<callKey>[@<rowScope>]`:
7732
+ * Replay-stable receipt namespace for primitives executed by one inline
7733
+ * `ctx.runPlay` invocation. Format
7734
+ * `child:<playName>#<callKey>@<invocationDigest>`:
7733
7735
  *
7734
7736
  * - `callKey` is the author's normalized `ctx.runPlay(key, ...)` call key,
7735
7737
  * so distinct call sites never collide.
7736
- * - `rowScope` (table namespace + row key) is appended when the invocation
7737
- * runs inside a map/dataset row resolver, so the SAME call site invoked
7738
- * across rows scopes each row's child step receipts separately.
7738
+ * - `invocationDigest` hashes the resolved child input and inherited row
7739
+ * scope. The row scope keeps concurrent map invocations isolated; the
7740
+ * input prevents two different people at an otherwise identical caller
7741
+ * row from ever recovering one another's child step or fetch receipt.
7739
7742
  *
7740
- * The namespace is derived purely from authored, content-stable inputs
7741
- * never from arrival order so a retried run attempt reproduces the same
7742
- * namespace under any row-completion interleaving and the child's tool
7743
- * receipts (owned by the PARENT run) recover instead of re-billing. Inline
7744
- * children carry NO durable run id this namespace is their only identity.
7745
- * See ADR 0013.
7743
+ * This is not a `runPlay` result cache: `runPlay` always executes the child.
7744
+ * It only scopes the child's own durable step and fetch receipts. Parent run
7745
+ * identity is intentionally excluded, allowing semantically identical child
7746
+ * work to recover across retries and parent runs without permitting a
7747
+ * different child input to reuse a result. See ADR 0013.
7746
7748
  */
7747
7749
  private inlineChildCompositionNamespace(
7748
7750
  childPlayName: string,
7749
7751
  normalizedKey: string,
7752
+ input: Record<string, unknown>,
7750
7753
  ): string {
7751
7754
  const rowScope = rowContext.getStore();
7752
- const rowScopeKey = rowScope
7753
- ? `${rowScope.tableNamespace ?? rowScope.fieldName ?? 'rows'}:${
7754
- rowScope.rowKey ?? String(rowScope.rowId)
7755
- }`
7756
- : '';
7757
- const namespace = `child:${childPlayName}#${normalizedKey}${
7758
- rowScopeKey ? `@${rowScopeKey}` : ''
7759
- }`;
7755
+ const invocationScope = buildDurableRunPlayInvocationScope({
7756
+ childPlayName,
7757
+ input,
7758
+ rowScope: rowScope
7759
+ ? {
7760
+ tableNamespace: rowScope.tableNamespace ?? null,
7761
+ rowKey: rowScope.rowKey ?? null,
7762
+ rowId: rowScope.rowKey ? null : rowScope.rowId,
7763
+ fieldName: rowScope.fieldName ?? null,
7764
+ }
7765
+ : null,
7766
+ });
7767
+ const namespace = `child:${childPlayName}#${normalizedKey}@${invocationScope}`;
7760
7768
  if (rowScope) {
7761
7769
  const namespaces = (rowScope.inlineChildInvocationNamespaces ??=
7762
7770
  new Set<string>());
@@ -8138,6 +8146,11 @@ export class PlayContextImpl implements ScalarPlayAuthoringRuntimeContext {
8138
8146
  rowId: rowStore.rowKey ? null : rowStore.rowId,
8139
8147
  fieldName: rowStore.fieldName ?? null,
8140
8148
  callIndex,
8149
+ // Row scope prevents unrelated map cells from sharing a
8150
+ // checkpoint. A supplied semantic key identifies the actual
8151
+ // work (for example, ctx.runSteps hashes its current input),
8152
+ // so it must refine row scope rather than being discarded.
8153
+ semanticKey: options?.semanticKey ?? null,
8141
8154
  }),
8142
8155
  )
8143
8156
  : options?.semanticKey,
package/dist/cli/index.js CHANGED
@@ -1044,7 +1044,7 @@ var SDK_RELEASE = {
1044
1044
  // 0.2.0 makes Dataset Handles uniformly async-only after 0.1.320 briefly
1045
1045
  // exposed storage-dependent synchronous access. This deliberate minor
1046
1046
  // release keeps lazy paging semantics independent of row residency.
1047
- version: "0.2.17",
1047
+ version: "0.2.18",
1048
1048
  contracts: {
1049
1049
  api: {
1050
1050
  name: "sdk-http-api",
@@ -1030,7 +1030,7 @@ var SDK_RELEASE = {
1030
1030
  // 0.2.0 makes Dataset Handles uniformly async-only after 0.1.320 briefly
1031
1031
  // exposed storage-dependent synchronous access. This deliberate minor
1032
1032
  // release keeps lazy paging semantics independent of row residency.
1033
- version: "0.2.17",
1033
+ version: "0.2.18",
1034
1034
  contracts: {
1035
1035
  api: {
1036
1036
  name: "sdk-http-api",
package/dist/index.js CHANGED
@@ -763,7 +763,7 @@ var SDK_RELEASE = {
763
763
  // 0.2.0 makes Dataset Handles uniformly async-only after 0.1.320 briefly
764
764
  // exposed storage-dependent synchronous access. This deliberate minor
765
765
  // release keeps lazy paging semantics independent of row residency.
766
- version: "0.2.17",
766
+ version: "0.2.18",
767
767
  contracts: {
768
768
  api: {
769
769
  name: "sdk-http-api",
package/dist/index.mjs CHANGED
@@ -689,7 +689,7 @@ var SDK_RELEASE = {
689
689
  // 0.2.0 makes Dataset Handles uniformly async-only after 0.1.320 briefly
690
690
  // exposed storage-dependent synchronous access. This deliberate minor
691
691
  // release keeps lazy paging semantics independent of row residency.
692
- version: "0.2.17",
692
+ version: "0.2.18",
693
693
  contracts: {
694
694
  api: {
695
695
  name: "sdk-http-api",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.2.17",
3
+ "version": "0.2.18",
4
4
  "description": "Deepline SDK + CLI — B2B data enrichment powered by durable cloud execution",
5
5
  "license": "MIT",
6
6
  "repository": {