@gate-forge/http-contract 0.3.0 → 0.4.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/dist/codes.d.ts +8 -1
- package/dist/codes.d.ts.map +1 -1
- package/dist/codes.js +8 -0
- package/dist/codes.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/codes.d.ts
CHANGED
|
@@ -30,12 +30,19 @@ export declare const FRONTEND_ROUTE_AMBIGUOUS = "FRONTEND_ROUTE_AMBIGUOUS";
|
|
|
30
30
|
export declare const ENDPOINT_SEMANTICS_UNRESOLVED = "ENDPOINT_SEMANTICS_UNRESOLVED";
|
|
31
31
|
/** An endpoint that cannot be linked to exactly one business resource. */
|
|
32
32
|
export declare const ENDPOINT_RESOURCE_LINK_UNRESOLVED = "ENDPOINT_RESOURCE_LINK_UNRESOLVED";
|
|
33
|
+
/**
|
|
34
|
+
* Two `.gateforge/endpoints.json` capability rules match one endpoint
|
|
35
|
+
* identity and assert DIFFERENT capabilities — the declarative channel
|
|
36
|
+
* fails closed (no capability is applied) until the rules agree, exactly
|
|
37
|
+
* like `PLANE_RULE_CONTRADICTION` on the plane channel.
|
|
38
|
+
*/
|
|
39
|
+
export declare const ENDPOINT_CAPABILITY_CONTRADICTION = "ENDPOINT_CAPABILITY_CONTRADICTION";
|
|
33
40
|
/**
|
|
34
41
|
* A runtime HTTP observation that cannot be trusted (suite-submitted
|
|
35
42
|
* network record, missing run binding, wrong provenance).
|
|
36
43
|
*/
|
|
37
44
|
export declare const HTTP_OBSERVATION_UNTRUSTED = "HTTP_OBSERVATION_UNTRUSTED";
|
|
38
45
|
/** Every typed outcome code defined by this package. */
|
|
39
|
-
export declare const HTTP_BLOCK_CODES: readonly ["HTTP_PATH_DYNAMIC", "HTTP_METHOD_DYNAMIC", "FASTAPI_PREFIX_UNRESOLVED", "FRONTEND_CALL_TARGET_UNRESOLVED", "FRONTEND_ROUTE_UNWIRED", "FRONTEND_ROUTE_AMBIGUOUS", "ENDPOINT_SEMANTICS_UNRESOLVED", "ENDPOINT_RESOURCE_LINK_UNRESOLVED", "HTTP_OBSERVATION_UNTRUSTED"];
|
|
46
|
+
export declare const HTTP_BLOCK_CODES: readonly ["HTTP_PATH_DYNAMIC", "HTTP_METHOD_DYNAMIC", "FASTAPI_PREFIX_UNRESOLVED", "FRONTEND_CALL_TARGET_UNRESOLVED", "FRONTEND_ROUTE_UNWIRED", "FRONTEND_ROUTE_AMBIGUOUS", "ENDPOINT_SEMANTICS_UNRESOLVED", "ENDPOINT_RESOURCE_LINK_UNRESOLVED", "ENDPOINT_CAPABILITY_CONTRADICTION", "HTTP_OBSERVATION_UNTRUSTED"];
|
|
40
47
|
export type HttpBlockCode = (typeof HTTP_BLOCK_CODES)[number];
|
|
41
48
|
//# sourceMappingURL=codes.d.ts.map
|
package/dist/codes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAErE,6EAA6E;AAC7E,eAAO,MAAM,+BAA+B,oCAAoC,CAAC;AAEjF,sDAAsD;AACtD,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,0EAA0E;AAC1E,eAAO,MAAM,6BAA6B,kCAAkC,CAAC;AAE7E,0EAA0E;AAC1E,eAAO,MAAM,iCAAiC,sCAAsC,CAAC;AAErF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAErE,6EAA6E;AAC7E,eAAO,MAAM,+BAA+B,oCAAoC,CAAC;AAEjF,sDAAsD;AACtD,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,0EAA0E;AAC1E,eAAO,MAAM,6BAA6B,kCAAkC,CAAC;AAE7E,0EAA0E;AAC1E,eAAO,MAAM,iCAAiC,sCAAsC,CAAC;AAErF;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,sCAAsC,CAAC;AAErF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,sTAWnB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/codes.js
CHANGED
|
@@ -30,6 +30,13 @@ export const FRONTEND_ROUTE_AMBIGUOUS = 'FRONTEND_ROUTE_AMBIGUOUS';
|
|
|
30
30
|
export const ENDPOINT_SEMANTICS_UNRESOLVED = 'ENDPOINT_SEMANTICS_UNRESOLVED';
|
|
31
31
|
/** An endpoint that cannot be linked to exactly one business resource. */
|
|
32
32
|
export const ENDPOINT_RESOURCE_LINK_UNRESOLVED = 'ENDPOINT_RESOURCE_LINK_UNRESOLVED';
|
|
33
|
+
/**
|
|
34
|
+
* Two `.gateforge/endpoints.json` capability rules match one endpoint
|
|
35
|
+
* identity and assert DIFFERENT capabilities — the declarative channel
|
|
36
|
+
* fails closed (no capability is applied) until the rules agree, exactly
|
|
37
|
+
* like `PLANE_RULE_CONTRADICTION` on the plane channel.
|
|
38
|
+
*/
|
|
39
|
+
export const ENDPOINT_CAPABILITY_CONTRADICTION = 'ENDPOINT_CAPABILITY_CONTRADICTION';
|
|
33
40
|
/**
|
|
34
41
|
* A runtime HTTP observation that cannot be trusted (suite-submitted
|
|
35
42
|
* network record, missing run binding, wrong provenance).
|
|
@@ -45,6 +52,7 @@ export const HTTP_BLOCK_CODES = [
|
|
|
45
52
|
FRONTEND_ROUTE_AMBIGUOUS,
|
|
46
53
|
ENDPOINT_SEMANTICS_UNRESOLVED,
|
|
47
54
|
ENDPOINT_RESOURCE_LINK_UNRESOLVED,
|
|
55
|
+
ENDPOINT_CAPABILITY_CONTRADICTION,
|
|
48
56
|
HTTP_OBSERVATION_UNTRUSTED,
|
|
49
57
|
];
|
|
50
58
|
//# sourceMappingURL=codes.js.map
|
package/dist/codes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,+BAA+B,GAAG,iCAAiC,CAAC;AAEjF,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAEnE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,+BAA+B,CAAC;AAE7E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iCAAiC,GAAG,mCAAmC,CAAC;AAErF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AAEvE,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,mBAAmB;IACnB,yBAAyB;IACzB,+BAA+B;IAC/B,sBAAsB;IACtB,wBAAwB;IACxB,6BAA6B;IAC7B,iCAAiC;IACjC,0BAA0B;CAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,+BAA+B,GAAG,iCAAiC,CAAC;AAEjF,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAEnE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,+BAA+B,CAAC;AAE7E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iCAAiC,GAAG,mCAAmC,CAAC;AAErF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,mCAAmC,CAAC;AAErF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AAEvE,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,mBAAmB;IACnB,yBAAyB;IACzB,+BAA+B;IAC/B,sBAAsB;IACtB,wBAAwB;IACxB,6BAA6B;IAC7B,iCAAiC;IACjC,iCAAiC;IACjC,0BAA0B;CAClB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* that), no classification (core owns that), no I/O. Everything is a pure
|
|
8
8
|
* function so identical inputs produce byte-identical outputs.
|
|
9
9
|
*/
|
|
10
|
-
export { FASTAPI_PREFIX_UNRESOLVED, FRONTEND_CALL_TARGET_UNRESOLVED, FRONTEND_ROUTE_AMBIGUOUS, FRONTEND_ROUTE_UNWIRED, ENDPOINT_RESOURCE_LINK_UNRESOLVED, ENDPOINT_SEMANTICS_UNRESOLVED, HTTP_METHOD_DYNAMIC, HTTP_OBSERVATION_UNTRUSTED, HTTP_PATH_DYNAMIC, HTTP_BLOCK_CODES, type HttpBlockCode, } from './codes.js';
|
|
10
|
+
export { FASTAPI_PREFIX_UNRESOLVED, FRONTEND_CALL_TARGET_UNRESOLVED, FRONTEND_ROUTE_AMBIGUOUS, FRONTEND_ROUTE_UNWIRED, ENDPOINT_CAPABILITY_CONTRADICTION, ENDPOINT_RESOURCE_LINK_UNRESOLVED, ENDPOINT_SEMANTICS_UNRESOLVED, HTTP_METHOD_DYNAMIC, HTTP_OBSERVATION_UNTRUSTED, HTTP_PATH_DYNAMIC, HTTP_BLOCK_CODES, type HttpBlockCode, } from './codes.js';
|
|
11
11
|
export { HTTP_CONTRACT_SCHEMA_VERSION, HTTP_CONTRACT_KIND, HTTP_ENDPOINT_KIND, HTTP_METHODS, HttpContractFactSchema, HttpContractRoleSchema, HttpContractSchemaVersionField, HttpLocationSchema, HttpMethodSchema, type HttpContractFact, type HttpContractRole, type HttpLocation, type HttpMethod, } from './schema.js';
|
|
12
12
|
export { HTTP_CONTRACT_VERSION, } from './version.js';
|
|
13
13
|
export { HTTP_PARAM_SLOT, HTTP_WILDCARD_SLOT, normalizeHttpMethod, normalizeHttpPath, pathSegments, type NormalizePathDynamic, type NormalizePathOk, type NormalizePathOptions, type NormalizePathResult, } from './normalize.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,6BAA6B,EAC7B,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,iCAAiC,EACjC,6BAA6B,EAC7B,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* that), no classification (core owns that), no I/O. Everything is a pure
|
|
8
8
|
* function so identical inputs produce byte-identical outputs.
|
|
9
9
|
*/
|
|
10
|
-
export { FASTAPI_PREFIX_UNRESOLVED, FRONTEND_CALL_TARGET_UNRESOLVED, FRONTEND_ROUTE_AMBIGUOUS, FRONTEND_ROUTE_UNWIRED, ENDPOINT_RESOURCE_LINK_UNRESOLVED, ENDPOINT_SEMANTICS_UNRESOLVED, HTTP_METHOD_DYNAMIC, HTTP_OBSERVATION_UNTRUSTED, HTTP_PATH_DYNAMIC, HTTP_BLOCK_CODES, } from './codes.js';
|
|
10
|
+
export { FASTAPI_PREFIX_UNRESOLVED, FRONTEND_CALL_TARGET_UNRESOLVED, FRONTEND_ROUTE_AMBIGUOUS, FRONTEND_ROUTE_UNWIRED, ENDPOINT_CAPABILITY_CONTRADICTION, ENDPOINT_RESOURCE_LINK_UNRESOLVED, ENDPOINT_SEMANTICS_UNRESOLVED, HTTP_METHOD_DYNAMIC, HTTP_OBSERVATION_UNTRUSTED, HTTP_PATH_DYNAMIC, HTTP_BLOCK_CODES, } from './codes.js';
|
|
11
11
|
export { HTTP_CONTRACT_SCHEMA_VERSION, HTTP_CONTRACT_KIND, HTTP_ENDPOINT_KIND, HTTP_METHODS, HttpContractFactSchema, HttpContractRoleSchema, HttpContractSchemaVersionField, HttpLocationSchema, HttpMethodSchema, } from './schema.js';
|
|
12
12
|
export { HTTP_CONTRACT_VERSION, } from './version.js';
|
|
13
13
|
export { HTTP_PARAM_SLOT, HTTP_WILDCARD_SLOT, normalizeHttpMethod, normalizeHttpPath, pathSegments, } from './normalize.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,6BAA6B,EAC7B,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,GAKb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GAMjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,iCAAiC,EACjC,6BAA6B,EAC7B,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,GAKb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GAMjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gate-forge/http-contract",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Framework-neutral canonical HTTP contract: HttpContractFact schema, typed block codes, path/method normalization, and the deterministic frontend-call <-> server-route join engine (ADR 0004 D1-D4).",
|
|
6
6
|
"type": "module",
|