Skip to content

MILAB-6319: canonical-encode createJsonResource + trace string for deterministic CIDs#1662

Draft
PaulNewling wants to merge 2 commits into
mainfrom
MILAB-6319_workflow-tengo-canonical-createjsonresource
Draft

MILAB-6319: canonical-encode createJsonResource + trace string for deterministic CIDs#1662
PaulNewling wants to merge 2 commits into
mainfrom
MILAB-6319_workflow-tengo-canonical-createjsonresource

Conversation

@PaulNewling

@PaulNewling PaulNewling commented May 28, 2026

Copy link
Copy Markdown
Contributor

What this fixes

Two non-canonical JSON encodings in workflow-tengo produced non-deterministic resource CIDs — causing CIDConflictError and silent cross-project dedup misses:

  1. createJsonResource encoded via json.encode, whose Go-map iteration order varies per render, so the same logical value yielded a different RTYPE_JSON CID each time. This affects every caller, including the SDK-internal params built inside pframes.processColumn and xsv.importFile.
  2. makeTrace (pframes/spec.lib.tengo) built the pl7.app/trace annotation via json.encode of step maps. That string sits inside a spec resource, so its inner key order escapes the backend's outer canonicalization; a randomized order poisoned the CID of every spec consumer.

Both now use canonical.encode (recursively key-sorted). The decoded values are unchanged; only the byte order becomes deterministic, so CIDs are stable across renders.

How it was tested

  • SDK regression tests (canonical.test.tengo, spec.test.tengo): assert json.encode is non-deterministic across repeated calls while canonical.encode is stable and key-sorted (flat and nested), and that the trace value-string is deterministic. The full workflow-tengo suite passes.
  • Downstream block: in mixcr-amplicon-alignment, both encodings drove CIDConflictError in its wf.test.ts; with these two fixes, the createJsonResource- and trace-driven conflicts no longer occur on a fresh backend.

Risks and downsides

  • One-time recompute on upgrade. These CIDs change (bytes are now sorted), so existing projects recompute the affected cached results the first time they run on a backend carrying this SDK. Inherent to fixing CID non-determinism — the old CIDs were never stable.
  • Platform-wide blast radius. Every createJsonResource caller across the SDK and all blocks now gets canonical bytes — intended (it closes the trap everywhere), but a behavior change for all consumers.
  • Encoding cost. canonical.encode sorts keys recursively, slightly slower than json.encode; negligible for the small params/trace maps on the hot path.

Scope note

A separate, related CID-determinism issue — the hash_override + saveStdoutStream pattern in MiXCR-family blocks, where rate-dependent stdout poisons the dedup CID — is not addressed here. It needs a different fix (an SDK stdout-only-capture primitive) and is tracked separately.

Greptile Summary

This PR fixes two CID non-determinism bugs in workflow-tengo by replacing json.encode (Go map iteration order is randomized per call) with canonical.encode (recursively key-sorted, RFC 8785-style) in createJsonResource and makeTrace. The decoded values are unchanged; only the byte order becomes deterministic, so resource CIDs are now stable across renders.

  • smart.lib.tengo: createJsonResource now calls canonical.encode, closing the trap for every RTYPE_JSON resource including SDK-internal params in pframes.processColumn and xsv.importFile.
  • pframes/spec.lib.tengo: makeTrace now canonical-encodes the pl7.app/trace annotation string, preventing its non-deterministic inner key order from poisoning the CID of parent spec resources.
  • Tests (canonical.test.tengo, spec.test.tengo, smart.test.tengo): regression tests confirm json.encode is non-deterministic across 200 calls while canonical.encode produces stable, lexicographically sorted output for both flat and nested maps.

Confidence Score: 4/5

The two targeted fixes are correct and well-tested; the main caveat is a known one-time CID recompute on upgrade, which is unavoidable and documented in the changeset.

The changes are minimal and backed by thorough regression tests pinning exact sorted-key output. Several other createValueResource call sites in workflow/bobject.lib.tengo, exec/runcmd.lib.tengo, and pframes-rs.lib.tengo still use json.encode directly, so the same class of non-determinism survives in those resource types and warrants a follow-up pass.

The remaining json.encode usages for direct resource creation in workflow/bobject.lib.tengo and exec/runcmd.lib.tengo are worth a second look, since they bypass the now-fixed createJsonResource.

Important Files Changed

Filename Overview
sdk/workflow-tengo/src/smart.lib.tengo Switches createJsonResource from json.encode to canonical.encode; fix is correct and well-scoped, though several sibling sites that call createValueResource directly with json.encode remain unfixed.
sdk/workflow-tengo/src/pframes/spec.lib.tengo Switches makeTrace trace-string encoding from json.encode to canonical.encode; the string() cast around the result is now redundant (canonical.encode already returns a string for arrays) but harmless.
sdk/workflow-tengo/src/canonical.test.tengo Adds regression tests confirming json.encode is non-deterministic and canonical.encode is stable across 200 calls for both flat and nested maps; good coverage.
sdk/workflow-tengo/src/pframes/spec.test.tengo Adds TestMakeTraceValueStrIsDeterministic and TestMakeTraceValueStrIsSortedKeys to pin the exact sorted-key output of makeTrace.valueStr; solidly guards the MILAB-6319 regression.
sdk/workflow-tengo/src/smart.test.tengo New test file that guards the canonical.encode contract for createJsonResource with golden-string assertions for flat and nested maps.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[createJsonResource / makeTrace called] --> B{Encode value}
    B -- before fix --> C[json.encode\nGo map iteration = random order]
    B -- after fix --> D[canonical.encode\nkeys sorted lexicographically]
    C --> E[Non-deterministic bytes]
    D --> F[Deterministic bytes]
    E --> G[Different CID per render\nCIDConflictError / dedup miss]
    F --> H[Stable CID across renders]
    H --> I[tx.createValue stores resource]
    G --> J[Bug]
    I --> K[Fixed]
Loading
Prompt To Fix All With AI
Fix the following 1 code review issue. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 1
sdk/workflow-tengo/src/smart.lib.tengo:1514-1516
**Other resource-creation sites still use `json.encode` directly**

Several callers in the SDK bypass `createJsonResource` entirely and call `smart.createValueResource` (or `tx.createValue`) with a raw `json.encode(...)` output, leaving those resource types equally non-deterministic. For example, `workflow/bobject.lib.tengo:49` does `smart.createValueResource(constants.RTYPE_BOBJECT_SPEC, json.encode(spec))`, and `exec/runcmd.lib.tengo:773-776` creates `RTYPE_RUN_COMMAND_OPTIONS` and `RTYPE_RUN_COMMAND_ARGS` the same way. Any map-typed spec or options struct at those sites will produce non-stable CIDs the same way `createJsonResource` did before this fix. These are outside this PR's stated scope but worth tracking as follow-up.

Reviews (1): Last reviewed commit: "MILAB-6319: canonicalize trace string in..." | Re-trigger Greptile

Greptile also left 1 inline comment on this PR.

@changeset-bot

changeset-bot Bot commented May 28, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: dc18208

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 10 packages
Name Type
@platforma-sdk/workflow-tengo Patch
@milaboratories/pl-middle-layer Patch
@milaboratories/milaboratories.monetization-test.workflow Patch
@milaboratories/milaboratories.ui-examples.workflow Patch
@milaboratories/milaboratories.pool-explorer.workflow Patch
@platforma-sdk/pl-cli Patch
@platforma-sdk/test Patch
@milaboratories/milaboratories.monetization-test Patch
@milaboratories/milaboratories.ui-examples Patch
@milaboratories/milaboratories.pool-explorer Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@notion-workspace

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request addresses non-deterministic RTYPE_JSON resource CIDs by updating createJsonResource in smart.lib.tengo to use canonical.encode (which ensures key-sorted, stable serialization) instead of json.encode. Tests have been added in smart.test.tengo to verify that both flat and nested maps are serialized canonically. Feedback is provided to remove an unused import of the json module in the test file.

Comment on lines +17 to +18
canonical := import(":canonical")
json := import("json")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The 'json' module is imported but never used in this test file. Removing unused imports keeps the code clean and avoids unnecessary dependencies.

canonical := import(":canonical")

@codecov

codecov Bot commented May 28, 2026

Copy link
Copy Markdown

❌ 39 Tests Failed:

Tests completed Failed Passed Skipped
1427 39 1388 18
View the full list of 39 ❄️ flaky test(s)
src/cfg_render/executor.test.ts > cfg test with pl, simple

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0345s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/middle_layer/render.test.ts > test JS render enter numbers

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0364s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/block-pack/block_pack.test.ts > test load template from 'dev-v1'

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.317s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/block-pack/block_pack.test.ts > test load template from 'from-registry-v1'

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.654s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project-v3.test.ts > v3 blocks: basic test with unified state

Flake rate in main: 8.51% (Passed 43 times, Failed 4 times)

Stack Traces | 0.0326s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project-v3.test.ts > v3 blocks: migrateBlockPack assigns author marker

Flake rate in main: 8.51% (Passed 43 times, Failed 4 times)

Stack Traces | 0.00257s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project-v3.test.ts > v3 blocks: migrateBlockPack preserves state and re-derives args and prerunArgs

Flake rate in main: 8.51% (Passed 43 times, Failed 4 times)

Stack Traces | 0.0032s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project-v3.test.ts > v3 blocks: migrateBlockPack with storage migration re-derives args and prerunArgs

Flake rate in main: 8.51% (Passed 43 times, Failed 4 times)

Stack Traces | 0.00776s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project-v3.test.ts > v3 blocks: prerunArgs skip test

Flake rate in main: 8.51% (Passed 43 times, Failed 4 times)

Stack Traces | 0.00383s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project-v3.test.ts > v3 blocks: resetToInitialStorage derives prerunArgs even when args() throws

Flake rate in main: 8.51% (Passed 43 times, Failed 4 times)

Stack Traces | 0.00303s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project.test.ts > simple test #1

Flake rate in main: 16.67% (Passed 15 times, Failed 3 times)

Stack Traces | 0.0432s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/project.test.ts > simple test #2 with bp migration

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00349s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > GC > does not evict when under max entries

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00193s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > GC > evicts entries when cache exceeds max entries

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00211s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > cacheBlockPackTemplate > replaces prepared template with cached reference

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00274s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > cacheBlockPackTemplate > returns already-cached spec unchanged

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0048s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > dropTemplateCache > drops cache and allows recreation

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00367s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > getOrCreateTemplateCache > creates cache on first call and reuses on second

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0343s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > loadTemplateCached > cache miss then cache hit returns same SignedResourceId

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00299s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > loadTemplateCached > cached spec type is passed through without re-caching

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00313s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > loadTemplateCached > cached template can be used in a transaction via loadTemplate

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00301s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > loadTemplateCached > different templates get different ResourceIds

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00273s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > loadTemplateCached > uses lazy cache initialization when no cacheResourceId provided

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00273s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > shared library dedup > two different templates sharing a library reuse the same cache entry

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00242s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_cache.test.ts > template cache produces equivalent resources > cached and legacy templates deduplicate to same original (V2)

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00318s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'explicit' > test render chain production

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00263s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'explicit' > test render chain staging

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00299s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'explicit' > test render template production

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00384s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'explicit' > test render template staging

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0355s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'from registry' > test render chain production

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0027s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'from registry' > test render chain staging

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00256s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'from registry' > test render template production

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00275s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/mutator/template/template_render.test.ts > test render 'from registry' > test render template staging

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00307s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/network_check/template.test.ts > check downloadFromEveryStorage

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00354s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/network_check/template.test.ts > check runDownloadFile

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00415s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/network_check/template.test.ts > check runPythonSoftware

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00418s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/network_check/template.test.ts > check runSoftware

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.00679s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/network_check/template.test.ts > check runUploadFile

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0045s run time
RpcError: No connection established. Last error: null
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }
src/network_check/template.test.ts > check runUploadTemplate

Flake rate in main: 11.11% (Passed 16 times, Failed 2 times)

Stack Traces | 0.0359s run time
RpcError: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:6345
 ❯ Object.callback ../../../node_modules/.pnpm/@protobuf-ts+grpc-transport@2.11.1_@grpc+grpc-js@1.13.4/node_modules/@.../build/commonjs/grpc-transport.js:37:27
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client.ts:360:25
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:149:26
 ❯ Object.onReceiveStatus ...../src/core/ll_client.ts:482:15
 ❯ InterceptingListenerImpl.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/call-interface.ts:145:18
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:458:33
 ❯ Object.onReceiveStatus ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/client-interceptors.ts:419:47
 ❯ ../../../node_modules/.pnpm/@grpc+grpc-js@1.13.4/node_modules/@.../grpc-js/src/resolving-call.ts:169:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'UNAVAILABLE', meta: {}, methodName: 'Ping', serviceName: 'MiLaboratories.PL.API.Platform' }

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Second instance of the non-canonical-encoding trap (re-applies ef340dbf9). makeTrace
built the pl7.app/trace annotation via json.encode of step maps (randomized Go-map
order). The string is embedded inside a spec resource, so non-canonical inner key
order escapes the backend's outer canonicalization and poisons consumer CIDs ->
CIDConflictError. Switch to canonical.encode; add trace + canonical regression tests.
Updated the changeset to cover both canonical fixes.
@PaulNewling PaulNewling changed the title MILAB-6319: createJsonResource encodes canonically for deterministic RTYPE_JSON CIDs MILAB-6319: canonical-encode createJsonResource + trace string for deterministic CIDs May 29, 2026
@PaulNewling

Copy link
Copy Markdown
Contributor Author

@greptileai

Comment on lines +1514 to 1516
encoded := canonical.encode(value)

return createValueResource(constants.RTYPE_JSON, encoded)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Other resource-creation sites still use json.encode directly

Several callers in the SDK bypass createJsonResource entirely and call smart.createValueResource (or tx.createValue) with a raw json.encode(...) output, leaving those resource types equally non-deterministic. For example, workflow/bobject.lib.tengo:49 does smart.createValueResource(constants.RTYPE_BOBJECT_SPEC, json.encode(spec)), and exec/runcmd.lib.tengo:773-776 creates RTYPE_RUN_COMMAND_OPTIONS and RTYPE_RUN_COMMAND_ARGS the same way. Any map-typed spec or options struct at those sites will produce non-stable CIDs the same way createJsonResource did before this fix. These are outside this PR's stated scope but worth tracking as follow-up.

Prompt To Fix With AI
This is a comment left during a code review.
Path: sdk/workflow-tengo/src/smart.lib.tengo
Line: 1514-1516

Comment:
**Other resource-creation sites still use `json.encode` directly**

Several callers in the SDK bypass `createJsonResource` entirely and call `smart.createValueResource` (or `tx.createValue`) with a raw `json.encode(...)` output, leaving those resource types equally non-deterministic. For example, `workflow/bobject.lib.tengo:49` does `smart.createValueResource(constants.RTYPE_BOBJECT_SPEC, json.encode(spec))`, and `exec/runcmd.lib.tengo:773-776` creates `RTYPE_RUN_COMMAND_OPTIONS` and `RTYPE_RUN_COMMAND_ARGS` the same way. Any map-typed spec or options struct at those sites will produce non-stable CIDs the same way `createJsonResource` did before this fix. These are outside this PR's stated scope but worth tracking as follow-up.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant