@openwop/openwop-conformance 1.105.0 → 1.106.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "1.105.0",
3
+ "version": "1.106.0",
4
4
  "description": "Production-ready black-box conformance suite for OpenWOP v1.0 compliant servers.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "_comment": "Provenance of this vendored schemas/ copy. See conformance/README.md \u00a7\"Resolving the contract\". Compare against the stamp in your installed @openwop/openwop-conformance to detect a stale hand-copied contract.",
3
- "suiteVersion": "1.105.0",
4
- "corpusCommit": "6eac39408ddd1007eab55e23a1cc09d2078d7ef5"
3
+ "suiteVersion": "1.106.0",
4
+ "corpusCommit": "328f41b272bce308f9d6c3c09209b69b1f0b118e"
5
5
  }
@@ -14,10 +14,15 @@
14
14
  * 200 {"maxTokens":null}
15
15
  *
16
16
  * The registration path logged *"test seam ENABLED — NEVER enable in
17
- * production"* while doing exactly that, and the mock-AI staging endpoint
18
- * performed no tenant resolution at all — staging keyed on `nodeId`, which is
17
+ * production"* while doing exactly that. Staging is keyed on `nodeId`, which is
19
18
  * not a secret: node ids ship inside chain packs.
20
19
  *
20
+ * (An earlier account of this — including the first version of this docblock —
21
+ * said the staging route performed *no tenant resolution at all*. The reporter
22
+ * retracted that within the hour: auth **runs and succeeds**, minting an
23
+ * anonymous session. The corrected mechanism is what makes the weak prose
24
+ * clause interesting, so it is recorded rather than quietly swapped.)
25
+ *
21
26
  * **Why this matters beyond the seam.** A staged mock program makes a replay
22
27
  * diverge on purpose, so an unauthenticated caller could switch off the
23
28
  * byte-equivalence `replay.md` §C.2 requires — and any host advertising
@@ -30,6 +35,16 @@
30
35
  * enabled answers `404` and passes correctly, which is the honest outcome
31
36
  * rather than a skip.
32
37
  *
38
+ * **Why this leg asserts the observable property, not the mechanism.** The prose clause
39
+ * originally required an enabled seam to apply *"the same authentication and tenant
40
+ * resolution as the canonical surface"* — which RFC 0132 makes trivially satisfiable, since
41
+ * the canonical surface legitimately admits anonymous actors. The reporting host's auth
42
+ * **ran and succeeded**, minting `tenantId: "anon:<sid>"`, so the seam applied exactly the
43
+ * canonical treatment and the hole survived the rule. This leg reds it either way, because
44
+ * a `200` to a credential-less caller is the thing that matters. **The prose and this leg
45
+ * disagreed for twenty minutes and the leg was right** — the clause now requires a
46
+ * non-anonymous principal.
47
+ *
33
48
  * Requires a base URL; issues NO credentials by design.
34
49
  */
35
50
 
@@ -89,9 +104,10 @@ describe('test-seam-unauthenticated: an enabled seam still authenticates', () =>
89
104
  answered,
90
105
  driver.describe(
91
106
  'host-sample-test-seams.md §"Production safety (normative)"',
92
- 'An ENABLED seam MUST apply the same authentication and tenant resolution as the canonical ' +
93
- 'surface. The env-gate governs whether a seam EXISTS; it does not govern who may call it. ' +
94
- 'A seam answering an unauthenticated request is an open control surface on a public ' +
107
+ 'An ENABLED seam MUST require an authenticated, NON-ANONYMOUS principal. A host that mints ' +
108
+ 'an anonymous identity for credential-less callers MUST NOT treat it as satisfying that. ' +
109
+ 'The env-gate governs whether a seam EXISTS; it does not govern who may call it. A seam ' +
110
+ 'answering a credential-less request with 200 is an open control surface on a public ' +
95
111
  'origin — and staging keys such as `nodeId` are not secrets, they ship inside chain ' +
96
112
  'packs.\n ' + answered.join('\n '),
97
113
  ),