@integraledger/lcp-placement-ucp 0.9.0 → 0.10.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @integraledger/lcp-placement-ucp
2
2
 
3
+ ## 0.10.1
4
+
5
+ **0.10.0 was staged and withdrawn before approval; this is that release, re-cut.** The conformance corpus
6
+ was re-sealed after 0.10.0 was staged — its root moved `32fa90a6…` → `28bbf4ef…` when the vector tree was
7
+ brought inside the prose gates — so the staged `lcp-conformance` tarball carried a seal that no longer
8
+ matched the repository. The seal is what proves corpus authenticity to an independent implementer, and a
9
+ published version cannot be replaced, so the whole set was rejected and re-cut rather than shipping one
10
+ package that disagreed with its own source. No version 0.10.0 exists on the registry.
11
+
12
+ Released as part of a flat `0.10.1` across the whole suite. One number describes the set that was built,
13
+ tested and sealed together, so a consumer never has to work out which combination of versions was verified.
14
+
15
+ This package has no source change of its own in this release. What moved across the suite: three exported
16
+ names were corrected before anyone depends on them — `USDC_DECIMALS` became rail-qualified after it was
17
+ found to mean 6 on three rails and 7 on Stellar under one name, `VISA_TAP_PLACEMENT_TIER_A` lost the tier
18
+ it had baked into an identifier, and the memo codecs were named for the carrier they encode. Two wire
19
+ identities were respelled to match the vocabulary they are written into. Five gates were added or widened,
20
+ and a large number of documentation claims were corrected against the host specifications at HEAD.
21
+
3
22
  ## 0.9.0
4
23
 
5
24
  First public release.
package/README.md CHANGED
@@ -47,15 +47,19 @@ Both members are total: a refusal is a returned value, never a thrown exception.
47
47
 
48
48
  Read against the live spec at ucp.dev, version `2026-04-08` (`overview#capabilities`,
49
49
  `overview#namespace-governance`, `overview#intersection-algorithm`, and the checkout capability page), the
50
- gate falsified the completion plan's P1 twice:
50
+ gate falsified the design this package was specced from, twice:
51
51
 
52
- 1. **Vendor capabilities are Tier A.** The plan specced a links-only placement on the premise that UCP's
52
+ 1. **Vendor capabilities are Tier A.** It specced a links-only placement on the premise that UCP's
53
53
  strict schema rejects unregistered keys, making the integrity path Tier B. The live spec says the
54
54
  opposite: "Vendors MUST use their own reverse-domain namespace for custom capabilities" — no central
55
- registry, no maintainer approval. What replaces registration is **authority binding**: "the origin of
56
- these URLs MUST match the namespace authority" and "Platform MUST validate this binding and SHOULD
57
- reject capabilities where the spec origin does not match." Built as planned, this package would have
58
- shipped a URL and no hash while a hash-bearing carrier was available the whole time.
55
+ registry, no maintainer approval. What replaces registration is **authority binding**, and it binds the
56
+ `schema` URL alone: "a declared `schema` URL's origin MUST match the namespace authority in its name",
57
+ with a platform obliged to "validate each business-declared `schema` URL before fetching it". The `spec`
58
+ URL is expressly outside the trust path. Built as planned, this package would have shipped a URL and no
59
+ hash while a hash-bearing carrier was available the whole time. (Verified verbatim at UCP HEAD
60
+ 2026-08-11. An earlier release quoted the host as also saying platforms "SHOULD reject capabilities where
61
+ the spec origin does not match" — that sentence is nowhere in UCP, and it inverts the rule above;
62
+ `discovery/src/capability-identity.ts` records the search that established it.)
59
63
  2. **`links[].type` is an OPEN set** ("Businesses MAY define custom types"), not the closed enum the plan
60
64
  claimed — that enum is ACP's; an earlier reading conflated the two protocols. `links[]` is REQUIRED on checkout
61
65
  responses; entries are `{type (req), url (req), title (opt)}`; `terms_of_service` is a recommended
@@ -112,7 +116,9 @@ present, the `url` carrier type itself signalling discovery-not-integrity.
112
116
 
113
117
  ## Provenance
114
118
 
115
- Cut against UCP `2026-04-08` (ucp.dev) and reconciled against LCP v1.37 §C.3. A deployment advertises under
119
+ Cut against UCP `2026-04-08` (ucp.dev) and reconciled against LCP v1.37 §C.3; re-read against **v1.38 §C.3**
120
+ on 2026-08-12, which now records `policies[]` as a Tier A carrier in the negotiated baseline — the carrier
121
+ this package moved to. A deployment advertises under
116
122
  its own reverse-domain namespace; `org.legalcontextprotocol.*` is reserved for a TSC-ratified capability.
117
123
 
118
124
  ---
@@ -68,7 +68,8 @@ import type { PlacementManifest } from "@integraledger/lcp-binding-core";
68
68
  *
69
69
  * **`termsUrlField` is deliberately OMITTED.** The terms URL rides `links[type=terms_of_service].url` — a
70
70
  * tagged-array locator that a dotted-path parser cannot resolve. Declaring it as `termsUrlField` would
71
- * repeat the defect S7 fixed for `field`: a declared property that is not the declared thing. The discovery
71
+ * repeat the defect the `field` rule exists to prevent: a declared property that is not the declared thing.
72
+ * The discovery
72
73
  * alias states the same fact WITH its machine-readable container, and the `PlacementManifest` contract says
73
74
  * an absent `termsUrlField` means a parser must not demand one.
74
75
  *
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AACH,eAAO,MAAM,aAAa,EAAE,iBAyC3B,CAAC"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqFG;AACH,eAAO,MAAM,aAAa,EAAE,iBAyC3B,CAAC"}
package/dist/manifest.js CHANGED
@@ -67,7 +67,8 @@
67
67
  *
68
68
  * **`termsUrlField` is deliberately OMITTED.** The terms URL rides `links[type=terms_of_service].url` — a
69
69
  * tagged-array locator that a dotted-path parser cannot resolve. Declaring it as `termsUrlField` would
70
- * repeat the defect S7 fixed for `field`: a declared property that is not the declared thing. The discovery
70
+ * repeat the defect the `field` rule exists to prevent: a declared property that is not the declared thing.
71
+ * The discovery
71
72
  * alias states the same fact WITH its machine-readable container, and the `PlacementManifest` contract says
72
73
  * an absent `termsUrlField` means a parser must not demand one.
73
74
  *
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE;QACT,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,wCAAwC;QAC7C,UAAU,EAAE,iCAAiC;QAC7C,mGAAmG;QACnG,iGAAiG;QACjG,yGAAyG;QACzG,uCAAuC;QACvC,SAAS,EAAE;YACT,WAAW,EAAE;gBACX,KAAK,EACH,gKAAgK;aACnK;SACF;KACF;IACD,KAAK,EAAE,uDAAuD;IAC9D,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,WAAW;YACzB,SAAS,EAAE;gBACT,IAAI,EAAE,cAAc;gBACpB,EAAE,EAAE,OAAO;gBACX,QAAQ,EAAE,MAAM;gBAChB,GAAG,EAAE,kBAAkB;gBACvB,UAAU,EAAE,KAAK;aAClB;SACF;KACF;IACD,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC/B,OAAO,EACL,sWAAsW;CACzW,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqFG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE;QACT,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,wCAAwC;QAC7C,UAAU,EAAE,iCAAiC;QAC7C,mGAAmG;QACnG,iGAAiG;QACjG,yGAAyG;QACzG,uCAAuC;QACvC,SAAS,EAAE;YACT,WAAW,EAAE;gBACX,KAAK,EACH,gKAAgK;aACnK;SACF;KACF;IACD,KAAK,EAAE,uDAAuD;IAC9D,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,WAAW;YACzB,SAAS,EAAE;gBACT,IAAI,EAAE,cAAc;gBACpB,EAAE,EAAE,OAAO;gBACX,QAAQ,EAAE,MAAM;gBAChB,GAAG,EAAE,kBAAkB;gBACvB,UAAU,EAAE,KAAK;aAClB;SACF;KACF;IACD,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC/B,OAAO,EACL,sWAAsW;CACzW,CAAC"}
@@ -2,14 +2,17 @@ import { type ReferencePlacementAdapter } from "@integraledger/lcp-binding-core"
2
2
  /**
3
3
  * The UCP reference placement — the kit plus ONE protocol rule the kit cannot know.
4
4
  *
5
- * `makePlacement(UCP_PLACEMENT)` supplies everything structural: the dotted-key capability write (the
6
- * container's `segments` make `com.integraledger.legal-context` ONE key, not four), the tagged-array read of
7
- * the `links` discovery alias, strength-ordered extraction, purity, and every refusal the vectors pin. This
5
+ * `makePlacement(UCP_PLACEMENT)` supplies everything structural: the tagged-array write into `policies[]`,
6
+ * the tagged-array read of the `links` discovery alias, strength-ordered extraction, purity, and every
7
+ * refusal the vectors pin. (An earlier revision described a dotted-key capability write through the
8
+ * container's `segments`; that carrier was retired when UCP turned out to define no `extensions` map, and
9
+ * `segments` now has no shipped declarer.) This
8
10
  * file adds only the rule that is UCP's semantics rather than any container's mechanics: **a terms link must
9
11
  * be HTTPS.** An `http:` URL is rewritable in transit, so accepting one would put an unauthenticated document
10
12
  * behind a reference the record cites.
11
13
  *
12
- * This is the composition S7 anticipates — generic mechanics, protocol-specific semantics layered on top —
14
+ * This is the composition the kit is shaped for — generic mechanics, protocol-specific semantics layered on
15
+ * top —
13
16
  * and it wraps `extract`, not `place`: `place` never writes the links alias (the terms URL is the
14
17
  * DEPLOYMENT's datum, not the reference — see the manifest), so the write side has no URL to police.
15
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../src/placement.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AAKzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,EAAE,yBAc1B,CAAC"}
1
+ {"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../src/placement.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,iCAAiC,CAAC;AAKzC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,YAAY,EAAE,yBAc1B,CAAC"}
package/dist/placement.js CHANGED
@@ -4,14 +4,17 @@ const base = makePlacement(UCP_PLACEMENT);
4
4
  /**
5
5
  * The UCP reference placement — the kit plus ONE protocol rule the kit cannot know.
6
6
  *
7
- * `makePlacement(UCP_PLACEMENT)` supplies everything structural: the dotted-key capability write (the
8
- * container's `segments` make `com.integraledger.legal-context` ONE key, not four), the tagged-array read of
9
- * the `links` discovery alias, strength-ordered extraction, purity, and every refusal the vectors pin. This
7
+ * `makePlacement(UCP_PLACEMENT)` supplies everything structural: the tagged-array write into `policies[]`,
8
+ * the tagged-array read of the `links` discovery alias, strength-ordered extraction, purity, and every
9
+ * refusal the vectors pin. (An earlier revision described a dotted-key capability write through the
10
+ * container's `segments`; that carrier was retired when UCP turned out to define no `extensions` map, and
11
+ * `segments` now has no shipped declarer.) This
10
12
  * file adds only the rule that is UCP's semantics rather than any container's mechanics: **a terms link must
11
13
  * be HTTPS.** An `http:` URL is rewritable in transit, so accepting one would put an unauthenticated document
12
14
  * behind a reference the record cites.
13
15
  *
14
- * This is the composition S7 anticipates — generic mechanics, protocol-specific semantics layered on top —
16
+ * This is the composition the kit is shaped for — generic mechanics, protocol-specific semantics layered on
17
+ * top —
15
18
  * and it wraps `extract`, not `place`: `place` never writes the links alias (the terms URL is the
16
19
  * DEPLOYMENT's datum, not the reference — see the manifest), so the write side has no URL to police.
17
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"placement.js","sourceRoot":"","sources":["../src/placement.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,GAEd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,YAAY,GAA8B;IACrD,GAAG,IAAI;IACP,OAAO,CAAC,GAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACjC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,sBAAsB;gBACjC,IAAI,EAAE,wBAAwB;gBAC9B,MAAM,EAAE,6EAA6E,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;aACvG,CAAC;QACJ,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"placement.js","sourceRoot":"","sources":["../src/placement.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,GAEd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,YAAY,GAA8B;IACrD,GAAG,IAAI;IACP,OAAO,CAAC,GAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACjC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,sBAAsB;gBACjC,IAAI,EAAE,wBAAwB;gBAC9B,MAAM,EAAE,6EAA6E,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;aACvG,CAAC;QACJ,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integraledger/lcp-placement-ucp",
3
- "version": "0.9.0",
3
+ "version": "0.10.1",
4
4
  "description": "Places an LCP reference into a UCP (Universal Commerce Protocol) checkout, and reads it back.",
5
5
  "keywords": [
6
6
  "lcp",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "homepage": "https://github.com/IntegraLedger/integra-protocol/tree/main/packages/placement-ucp#readme",
42
42
  "dependencies": {
43
- "@integraledger/lcp-binding-core": "0.9.0"
43
+ "@integraledger/lcp-binding-core": "0.10.1"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@cfworker/json-schema": "4.1.1",
package/src/manifest.ts CHANGED
@@ -69,7 +69,8 @@ import type { PlacementManifest } from "@integraledger/lcp-binding-core";
69
69
  *
70
70
  * **`termsUrlField` is deliberately OMITTED.** The terms URL rides `links[type=terms_of_service].url` — a
71
71
  * tagged-array locator that a dotted-path parser cannot resolve. Declaring it as `termsUrlField` would
72
- * repeat the defect S7 fixed for `field`: a declared property that is not the declared thing. The discovery
72
+ * repeat the defect the `field` rule exists to prevent: a declared property that is not the declared thing.
73
+ * The discovery
73
74
  * alias states the same fact WITH its machine-readable container, and the `PlacementManifest` contract says
74
75
  * an absent `termsUrlField` means a parser must not demand one.
75
76
  *
package/src/placement.ts CHANGED
@@ -9,14 +9,17 @@ const base = makePlacement(UCP_PLACEMENT);
9
9
  /**
10
10
  * The UCP reference placement — the kit plus ONE protocol rule the kit cannot know.
11
11
  *
12
- * `makePlacement(UCP_PLACEMENT)` supplies everything structural: the dotted-key capability write (the
13
- * container's `segments` make `com.integraledger.legal-context` ONE key, not four), the tagged-array read of
14
- * the `links` discovery alias, strength-ordered extraction, purity, and every refusal the vectors pin. This
12
+ * `makePlacement(UCP_PLACEMENT)` supplies everything structural: the tagged-array write into `policies[]`,
13
+ * the tagged-array read of the `links` discovery alias, strength-ordered extraction, purity, and every
14
+ * refusal the vectors pin. (An earlier revision described a dotted-key capability write through the
15
+ * container's `segments`; that carrier was retired when UCP turned out to define no `extensions` map, and
16
+ * `segments` now has no shipped declarer.) This
15
17
  * file adds only the rule that is UCP's semantics rather than any container's mechanics: **a terms link must
16
18
  * be HTTPS.** An `http:` URL is rewritable in transit, so accepting one would put an unauthenticated document
17
19
  * behind a reference the record cites.
18
20
  *
19
- * This is the composition S7 anticipates — generic mechanics, protocol-specific semantics layered on top —
21
+ * This is the composition the kit is shaped for — generic mechanics, protocol-specific semantics layered on
22
+ * top —
20
23
  * and it wraps `extract`, not `place`: `place` never writes the links alias (the terms URL is the
21
24
  * DEPLOYMENT's datum, not the reference — see the manifest), so the write side has no URL to police.
22
25
  *