@particle-academy/fancy-conformance 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.19.0
1
+ 0.20.0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@particle-academy/fancy-conformance",
3
- "version": "0.19.0",
4
- "description": "Shared cross-language conformance fixtures for the Fancy suite. One contract, N implementations, and a single table that every implementation asserts in its own CI so 'parity' is a test result rather than a claim. Ships the fixture data itself, so a Rust, Go or Python runner can consume it without a JavaScript toolchain.",
3
+ "version": "0.20.0",
4
+ "description": "Shared cross-language conformance fixtures for the Fancy suite. One contract, N implementations, and a single table that every implementation asserts in its own CI \u2014 so 'parity' is a test result rather than a claim. Ships the fixture data itself, so a Rust, Go or Python runner can consume it without a JavaScript toolchain.",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/Particle-Academy/fancy-conformance.git"
@@ -183,7 +183,10 @@
183
183
  "outputShape": null,
184
184
  "emits": null
185
185
  },
186
- "note": "It emits a LIST, whose elements are not addressable as top-level fields. [] would claim 'emits no fields', which is false and would refuse every reference."
186
+ "note": "It emits a LIST, whose elements are not addressable as top-level fields. [] would claim 'emits no fields', which is false and would refuse every reference.",
187
+ "skip": {
188
+ "rust": "fancy-flow-rs cannot resolve a config-dependent relation in-process: NodeKind derives Clone + PartialEq, so it carries EmitsRelation::Dynamic as a MARKER rather than a closure. It answers \"dynamic\" here -- which is honest and is NOT null: null claims nobody declared, about a kind that has. Requiring null would force it either to fail forever or to lie. Every other row in this table runs on Rust; this is the one question it cannot be asked."
189
+ }
187
190
  },
188
191
  {
189
192
  "id": "0203-llm-call-is-dynamic",
@@ -287,8 +290,9 @@
287
290
  },
288
291
  "expected": {
289
292
  "outputShape": null,
290
- "emits": "input"
291
- }
293
+ "emits": "input-map-merged"
294
+ },
295
+ "note": "`input-map-merged`, not `input` or `inputs-merged`. This kind merges the raw input MAP, whose shape depends on POSITION: collectInputs seeds an entry node flat and keys every other node by handle, so the same kind with an inbound edge emits {cron, timezone, in: {...}}. `merge` unions each port's PAYLOAD, which is a different operation -- two names rather than one name plus a positional rule a reader has to know."
292
296
  },
293
297
  {
294
298
  "id": "0305-variable-relation",
@@ -367,9 +371,9 @@
367
371
  "cron",
368
372
  "timezone"
369
373
  ],
370
- "emits": "inputs-merged"
374
+ "emits": "input-map-merged"
371
375
  },
372
- "note": "Correct precisely where `wait` is not. It was undeclared until the relation existed: a partial ['cron','timezone'] list with nothing to say the inputs also merge is a false-rejection generator."
376
+ "note": "`input-map-merged`, not `input` or `inputs-merged`. This kind merges the raw input MAP, whose shape depends on POSITION: collectInputs seeds an entry node flat and keys every other node by handle, so the same kind with an inbound edge emits {cron, timezone, in: {...}}. `merge` unions each port's PAYLOAD, which is a different operation -- two names rather than one name plus a positional rule a reader has to know."
373
377
  },
374
378
  {
375
379
  "id": "0403-webhook-trigger-is-data-dependent",