@kumwe/studio-testkit 0.1.0-alpha.8 → 0.1.0-beta.3

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.
Files changed (72) hide show
  1. package/README.md +79 -19
  2. package/THIRD_PARTY_NOTICES.md +9 -0
  3. package/conformance/authoring-web/non-drag-move-equivalence.json +199 -0
  4. package/conformance/renderer-web/blob-default-deny.json +62 -0
  5. package/conformance/renderer-web/chart-fallback.json +54 -0
  6. package/conformance/renderer-web/complete-catalog.json +649 -0
  7. package/conformance/renderer-web/escaped-heading.json +43 -0
  8. package/conformance/renderer-web/interactive-behaviors.json +284 -0
  9. package/conformance/renderer-web/presentation-capabilities.json +104 -0
  10. package/conformance/renderer-web/responsive-grid.json +48 -0
  11. package/conformance/renderer-web/security-fallbacks.json +184 -0
  12. package/conformance/rich-text/advanced.first-party.json +67 -0
  13. package/corpus-manifest.json +190 -2
  14. package/dist/contextual-conformance.d.ts +81 -0
  15. package/dist/contextual-conformance.d.ts.map +1 -0
  16. package/dist/contextual-conformance.js +1 -0
  17. package/dist/host-testbed.d.ts +47 -4
  18. package/dist/host-testbed.d.ts.map +1 -1
  19. package/dist/host-testbed.js +1 -742
  20. package/dist/http-authoring-contract.d.ts +3 -0
  21. package/dist/http-authoring-contract.d.ts.map +1 -0
  22. package/dist/http-authoring-contract.js +1 -0
  23. package/dist/http-host-adapter.d.ts +12 -64
  24. package/dist/http-host-adapter.d.ts.map +1 -1
  25. package/dist/http-host-adapter.js +1 -256
  26. package/dist/http-host-responder.d.ts +58 -0
  27. package/dist/http-host-responder.d.ts.map +1 -0
  28. package/dist/http-host-responder.js +1 -0
  29. package/dist/index.d.ts +49 -3
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -174
  32. package/dist/web-conformance.d.ts +112 -0
  33. package/dist/web-conformance.d.ts.map +1 -0
  34. package/dist/web-conformance.js +1 -0
  35. package/fixtures/authoring-message-catalog.en.json +1093 -0
  36. package/fixtures/authoring-save.plan.example.json +48 -0
  37. package/fixtures/authoring-session.example.json +212 -0
  38. package/fixtures/authoring-target.example.json +34 -0
  39. package/fixtures/host-operations.example.json +77 -0
  40. package/fixtures/plugin.example.json +12 -0
  41. package/fixtures/reusable-content-type.example.json +26 -0
  42. package/fixtures/studio-deployment.hosted.example.json +152 -0
  43. package/fixtures/studio-deployment.standalone.example.json +9 -0
  44. package/invalid/authoring-save.plan-missing-coordinates.json +16 -0
  45. package/invalid/authoring-save.plan-missing-successor-context.json +28 -0
  46. package/invalid/authoring-save.request-plan-missing-successor-context.json +26 -0
  47. package/invalid/authoring-session.missing-entry-state.json +9 -0
  48. package/invalid/authoring-target.missing-resource-types.json +24 -0
  49. package/invalid/binding-projection-vector.unknown-status.json +85 -0
  50. package/invalid/host-error.retry-delay-without-retry.json +16 -0
  51. package/invalid/host-error.retry-delay-wrong-category.json +16 -0
  52. package/invalid/host-error.revision-without-conflict.json +16 -0
  53. package/invalid/reusable-content-type.entry-values.json +32 -0
  54. package/invalid/studio-chart.script-config.json +10 -0
  55. package/invalid/studio-deployment.long-lived-token.json +24 -0
  56. package/invalid/studio-deployment.missing-required.json +5 -0
  57. package/invalid/studio-deployment.unknown-member.json +15 -0
  58. package/invalid/studio-drawing.svg-payload.json +10 -0
  59. package/invalid/studio-money.float.json +8 -0
  60. package/invalid/studio-presentation.css-injection.json +8 -0
  61. package/invalid/studio-table.html-cell.json +8 -0
  62. package/package.json +8 -4
  63. package/studio-release.json +35 -0
  64. package/vectors/authoring-http/transport-matrix.json +237 -0
  65. package/vectors/binding-projection/app-content-fields.resolved.json +286 -0
  66. package/vectors/binding-projection/field-removed.diagnostic.json +135 -0
  67. package/vectors/binding-projection/model-revision-mismatch.diagnostic.json +124 -0
  68. package/vectors/host/model.get.stored.json +37 -0
  69. package/vectors/host/model.list.authorized.json +31 -0
  70. package/dist/host-testbed.js.map +0 -1
  71. package/dist/http-host-adapter.js.map +0 -1
  72. package/dist/index.js.map +0 -1
@@ -3,6 +3,22 @@
3
3
  "groups": [
4
4
  {
5
5
  "files": [
6
+ {
7
+ "digest": "sha256-YuNbHhSY0b4oz/98G3cHYkhNguXAFniLaGjp8dLbrQM=",
8
+ "file": "authoring-message-catalog.en.json"
9
+ },
10
+ {
11
+ "digest": "sha256-8JYR5mUlMvswled3UGVoc0EhoDm89eFDDqhFMzYg+oo=",
12
+ "file": "authoring-save.plan.example.json"
13
+ },
14
+ {
15
+ "digest": "sha256-zmP9grVS7kYOVsoH6nWd/15IlllVW1vYRJjz3AvajI8=",
16
+ "file": "authoring-session.example.json"
17
+ },
18
+ {
19
+ "digest": "sha256-oDINh/ZoTlEzYlf+/E31mYddo1LXSYG33aEaUGq2i4I=",
20
+ "file": "authoring-target.example.json"
21
+ },
6
22
  {
7
23
  "digest": "sha256-VPvgjeVcou8k/vGgrFXfMOx2ureah7+HADcuV1ze8To=",
8
24
  "file": "block.grid.example.json"
@@ -44,7 +60,7 @@
44
60
  "file": "host-error.conflict.example.json"
45
61
  },
46
62
  {
47
- "digest": "sha256-SJwDS1MjbhC9zDyHhmuXPVjhTrxQnxfKhtJ9o2Uvv+Q=",
63
+ "digest": "sha256-52sSih7W3FfACN77wf9w69JAnUSiKYmMGGgIELB3tqw=",
48
64
  "file": "host-operations.example.json"
49
65
  },
50
66
  {
@@ -80,7 +96,7 @@
80
96
  "file": "pattern.example.json"
81
97
  },
82
98
  {
83
- "digest": "sha256-RhghT+jsQKZY8AddDzLrzeC92FBj00MT3rlsJm6eXog=",
99
+ "digest": "sha256-gjrUSkrEuT9RaaYLt7cqYg9CDa/0xoJpdez/f2fdzbc=",
84
100
  "file": "plugin.example.json"
85
101
  },
86
102
  {
@@ -91,6 +107,10 @@
91
107
  "digest": "sha256-LYQoj0Jvx3qr4aiqy9r+JhLZixKS1c/rdhrHC2nM5x0=",
92
108
  "file": "provenance.example.json"
93
109
  },
110
+ {
111
+ "digest": "sha256-t9UP5fgKknUbGHJtIjhDy9z96gqkTuSCth+vgJHg+Mo=",
112
+ "file": "reusable-content-type.example.json"
113
+ },
94
114
  {
95
115
  "digest": "sha256-EXaD+hJHyRCGQoxSVo/a7jJBUJ2ZqH5a6eXdjTPfros=",
96
116
  "file": "rich-text.example.json"
@@ -99,6 +119,14 @@
99
119
  "digest": "sha256-FzjalpM4jDkbkK8rGnmH6HSFxU9PhMp0vI9aPTCyEJE=",
100
120
  "file": "studio-config.example.json"
101
121
  },
122
+ {
123
+ "digest": "sha256-ng0RLEGil8PQ52ER/iKqKDRjJ9cpi4cla0uoij/r/0Q=",
124
+ "file": "studio-deployment.hosted.example.json"
125
+ },
126
+ {
127
+ "digest": "sha256-8KnarP4nAaFJTfm9gjXT7mAo501Oa1NLosajuEyatoE=",
128
+ "file": "studio-deployment.standalone.example.json"
129
+ },
102
130
  {
103
131
  "digest": "sha256-fuMTN0/YCVdx5cpXDzT72aoDKe7iKUeOTSGRm3Axq6k=",
104
132
  "file": "theme.example.json"
@@ -111,6 +139,24 @@
111
139
  "group": "fixtures",
112
140
  "path": "fixtures"
113
141
  },
142
+ {
143
+ "files": [
144
+ {
145
+ "digest": "sha256-9mVzhFKG6xIkVtGwxzgLRtBv+k57U3xVX8LP4kpROKg=",
146
+ "file": "app-content-fields.resolved.json"
147
+ },
148
+ {
149
+ "digest": "sha256-OEBnXlw4oNAXpee8Yy3rjlyi++KsE68QddAWBQ3vFSQ=",
150
+ "file": "field-removed.diagnostic.json"
151
+ },
152
+ {
153
+ "digest": "sha256-xM3yGpWMnTF4s+9OPdf79pg1Tjtgn0FCipXVy8n/V44=",
154
+ "file": "model-revision-mismatch.diagnostic.json"
155
+ }
156
+ ],
157
+ "group": "binding-projection-vectors",
158
+ "path": "vectors/binding-projection"
159
+ },
114
160
  {
115
161
  "files": [
116
162
  {
@@ -505,6 +551,14 @@
505
551
  "digest": "sha256-6lCxcY8XnoOmYrApFVs0f8lJophb4fJDSY0Rs9Okiss=",
506
552
  "file": "media.upload-status.unknown.error.json"
507
553
  },
554
+ {
555
+ "digest": "sha256-thmjZlZ2aG2wPykTdgqA/f94lHY0jSit03IIR0lCdNE=",
556
+ "file": "model.get.stored.json"
557
+ },
558
+ {
559
+ "digest": "sha256-OpFkLnn1WCGEL7JHz1aTJ6bcX6Tdq5mWmVsMIdHZADA=",
560
+ "file": "model.list.authorized.json"
561
+ },
508
562
  {
509
563
  "digest": "sha256-WMY/mRoj/RQtTk51Tq4yhObfMO84ZPdnC4LzV5QXaFE=",
510
564
  "file": "permission.explain.withheld.json"
@@ -571,6 +625,16 @@
571
625
  "group": "host-sequence-vectors",
572
626
  "path": "vectors/host-sequence"
573
627
  },
628
+ {
629
+ "files": [
630
+ {
631
+ "digest": "sha256-UjioXieC+7goKt+iLia/4IXh7wxx9KZc/vxPD4ewyfM=",
632
+ "file": "transport-matrix.json"
633
+ }
634
+ ],
635
+ "group": "authoring-http-vectors",
636
+ "path": "vectors/authoring-http"
637
+ },
574
638
  {
575
639
  "files": [
576
640
  {
@@ -895,6 +959,30 @@
895
959
  },
896
960
  {
897
961
  "files": [
962
+ {
963
+ "digest": "sha256-ljTJiEiRDi0K8gevNB0CJbiTk8Elh4Nof6H0vvaeVRk=",
964
+ "file": "authoring-save.plan-missing-coordinates.json"
965
+ },
966
+ {
967
+ "digest": "sha256-KJwtRIuXAwAA5iuNjM59dCCiJdBWGf75AwIM9T7JUrA=",
968
+ "file": "authoring-save.plan-missing-successor-context.json"
969
+ },
970
+ {
971
+ "digest": "sha256-cm+XIGq1B+jHZ5rnMqP8Ar30sSe7i4mBaL9naAABTGI=",
972
+ "file": "authoring-save.request-plan-missing-successor-context.json"
973
+ },
974
+ {
975
+ "digest": "sha256-MCJnARlTtq/Bu6cEfE4mgKn+/bF9Ie49nVzjNh1q+ZY=",
976
+ "file": "authoring-session.missing-entry-state.json"
977
+ },
978
+ {
979
+ "digest": "sha256-cmSS67Tsvof3kidNu4igl/Gx21+4WwW0iSrpCcX74z0=",
980
+ "file": "authoring-target.missing-resource-types.json"
981
+ },
982
+ {
983
+ "digest": "sha256-QioG6zTTAy2LjLUO5oNmYvvvzJ754+kQq9fMCAz2iFA=",
984
+ "file": "binding-projection-vector.unknown-status.json"
985
+ },
898
986
  {
899
987
  "digest": "sha256-ZpkplYh1yIT/sRYxajj76pydhPqJzAPNdnVvog96oC4=",
900
988
  "file": "blueprint.control-character-member.json"
@@ -983,6 +1071,18 @@
983
1071
  "digest": "sha256-uStQRWKgfZNleRDRh3RIPMpONCxXlrwzbAJOSFIoWSU=",
984
1072
  "file": "host-capabilities.invalid-protocol-version.json"
985
1073
  },
1074
+ {
1075
+ "digest": "sha256-9DF9DTP0FSwJ9P3kj/pOlFOik3p2JtSBsjFBii551WE=",
1076
+ "file": "host-error.retry-delay-without-retry.json"
1077
+ },
1078
+ {
1079
+ "digest": "sha256-cjukTWhUZMALqEY0IXBPcIlE4xTRb6n8UA3XiBPJ8/o=",
1080
+ "file": "host-error.retry-delay-wrong-category.json"
1081
+ },
1082
+ {
1083
+ "digest": "sha256-eYNlSGuvJiINWipDkv/F+wcDpFTbdUR7tD6+srZ4bdI=",
1084
+ "file": "host-error.revision-without-conflict.json"
1085
+ },
986
1086
  {
987
1087
  "digest": "sha256-TbyqAfnspj0axcP3sJNAj+Sqqg0XaOpCmYy6l6MEF2Y=",
988
1088
  "file": "host-sequence.pending-expectation.json"
@@ -1051,6 +1151,10 @@
1051
1151
  "digest": "sha256-a7E9wkgCsB+d2WxYAjJjmRJJsFhrL+fnZo/aQsMYIE0=",
1052
1152
  "file": "preview-message.viewport-unsafe-role.json"
1053
1153
  },
1154
+ {
1155
+ "digest": "sha256-Cq6bZogn1IJfqzkIgNtu3mpMHASFAf0hSbRqPjlIhDc=",
1156
+ "file": "reusable-content-type.entry-values.json"
1157
+ },
1054
1158
  {
1055
1159
  "digest": "sha256-Ha4ygQciWMcqcM8k/7qDW3CW4mr2EIwdrRCxglwBG2c=",
1056
1160
  "file": "rich-text.embedded-html.json"
@@ -1059,6 +1163,38 @@
1059
1163
  "digest": "sha256-ff5p8K4OUHe0VqfxR15UCUHrhNlRMlsQifJw/wOOXwU=",
1060
1164
  "file": "rich-text.unknown-mark.json"
1061
1165
  },
1166
+ {
1167
+ "digest": "sha256-w3ZWv4DbsOsPn/99raEr4O1LHinoK5V2AePlIpHtqr8=",
1168
+ "file": "studio-chart.script-config.json"
1169
+ },
1170
+ {
1171
+ "digest": "sha256-NlwsVag8hq4JMb3+OLQ72nJAWio8oyBqsyemCznDdnQ=",
1172
+ "file": "studio-deployment.long-lived-token.json"
1173
+ },
1174
+ {
1175
+ "digest": "sha256-oDXveuLa6aefSSvVeFWJAv6037lqqIcy8Iuczsg8qbA=",
1176
+ "file": "studio-deployment.missing-required.json"
1177
+ },
1178
+ {
1179
+ "digest": "sha256-mp8F0wbXMvjnJbiRunRXnx7H+w+1JyNHxdQP5cnn6Jo=",
1180
+ "file": "studio-deployment.unknown-member.json"
1181
+ },
1182
+ {
1183
+ "digest": "sha256-m1+/TT3sDNebrcKQjKgnD3VMBZuu0gA5IpPtnvD4N94=",
1184
+ "file": "studio-drawing.svg-payload.json"
1185
+ },
1186
+ {
1187
+ "digest": "sha256-AOCJqRUU3tCVqzkXelDsDeR9kxRTVPbSrenbf0FPEzE=",
1188
+ "file": "studio-money.float.json"
1189
+ },
1190
+ {
1191
+ "digest": "sha256-989o8RxLYQLsIKe/I0B+ETP4DRCjtniMzT57fwxbeGw=",
1192
+ "file": "studio-presentation.css-injection.json"
1193
+ },
1194
+ {
1195
+ "digest": "sha256-oF+T+wJT1px5lPSq1YClUSIZhsIYBw9SMCndc6Ano1Q=",
1196
+ "file": "studio-table.html-cell.json"
1197
+ },
1062
1198
  {
1063
1199
  "digest": "sha256-ip22Uidj7KWI9kqcBbB5YphmBjcUSFyJ0hvO28V6I9w=",
1064
1200
  "file": "theme.unknown-member.json"
@@ -1069,6 +1205,10 @@
1069
1205
  },
1070
1206
  {
1071
1207
  "files": [
1208
+ {
1209
+ "digest": "sha256-UWgLox9yJZ/L/f3NUC3lMJX2OsZvqo/R7+gO0S39O0A=",
1210
+ "file": "advanced.first-party.json"
1211
+ },
1072
1212
  {
1073
1213
  "digest": "sha256-tfrW7o0SAOxFp9pTOi6mXKVmpT/t16ZqEBpyt5CIdNk=",
1074
1214
  "file": "blocks.structural.json"
@@ -1100,6 +1240,54 @@
1100
1240
  ],
1101
1241
  "group": "rich-text-conformance",
1102
1242
  "path": "conformance/rich-text"
1243
+ },
1244
+ {
1245
+ "files": [
1246
+ {
1247
+ "digest": "sha256-MQavkWcGxN1RXJoa16WNsFhbvAzfE3Zz+ak++SpX8tQ=",
1248
+ "file": "non-drag-move-equivalence.json"
1249
+ }
1250
+ ],
1251
+ "group": "authoring-web-conformance",
1252
+ "path": "conformance/authoring-web"
1253
+ },
1254
+ {
1255
+ "files": [
1256
+ {
1257
+ "digest": "sha256-2oGROiWkPVzuaR5SUt781ys7Q6itRY3IBwK7MXq4yAA=",
1258
+ "file": "blob-default-deny.json"
1259
+ },
1260
+ {
1261
+ "digest": "sha256-IIiRyZBhwOx6mmHQkYkVivizehpbNOTssHNHwEe0YwA=",
1262
+ "file": "chart-fallback.json"
1263
+ },
1264
+ {
1265
+ "digest": "sha256-ScdG3XmPTIr8iUNo6oIe73876e3I626nGK0VdWqkOCg=",
1266
+ "file": "complete-catalog.json"
1267
+ },
1268
+ {
1269
+ "digest": "sha256-8MSR3lTM8xTYOzo7IsVFjvxIf46gh/xo6z9YIrURVUo=",
1270
+ "file": "escaped-heading.json"
1271
+ },
1272
+ {
1273
+ "digest": "sha256-mqB9ODQSu5BmCcZwUKVWEzZMYjsXTj6qnzsXpIearaU=",
1274
+ "file": "interactive-behaviors.json"
1275
+ },
1276
+ {
1277
+ "digest": "sha256-cCRU6GZqgWqd2G+yR3CoGjY9R9bal/9t/x4M48bCAIo=",
1278
+ "file": "presentation-capabilities.json"
1279
+ },
1280
+ {
1281
+ "digest": "sha256-bJpIcWGTUkKxXbAmMTkvPIs40dBjE4wO39xHRJn2eYs=",
1282
+ "file": "responsive-grid.json"
1283
+ },
1284
+ {
1285
+ "digest": "sha256-M6fXBiAu5c73xGHt7m2914EHPvMbIfkcJxJUCqyXm7o=",
1286
+ "file": "security-fallbacks.json"
1287
+ }
1288
+ ],
1289
+ "group": "renderer-web-conformance",
1290
+ "path": "conformance/renderer-web"
1103
1291
  }
1104
1292
  ],
1105
1293
  "kind": "corpus-manifest"
@@ -0,0 +1,81 @@
1
+ import type { AuthoringSaveAsNewTypeRequest, AuthoringSaveIntent, AuthoringSaveItemRequest, AuthoringSaveNewTypeVersionRequest, AuthoringSavePlan, AuthoringSaveResult, AuthoringSessionSnapshot, AuthoringStartRequest, AuthoringTargetResolution, AuthoringTargetResolveRequest, AuthoringTypeListPage, AuthoringTypeListQuery, EntryDocument, QualifiedName, StudioCommand } from '@kumwe/studio-protocol';
2
+ export interface ContextualAuthoringLaunchAssertion {
3
+ expect: AuthoringSessionSnapshot;
4
+ /** Entry value sets that this launch must not have copied. */
5
+ forbiddenEntryValues?: EntryDocument['values'][];
6
+ name: string;
7
+ request: AuthoringStartRequest;
8
+ }
9
+ export interface ContextualAuthoringCommandAssertion {
10
+ commands: StudioCommand[];
11
+ expect: AuthoringSessionSnapshot;
12
+ startName: string;
13
+ }
14
+ export type ContextualAuthoringSaveRequest = AuthoringSaveAsNewTypeRequest | AuthoringSaveItemRequest | AuthoringSaveNewTypeVersionRequest;
15
+ export interface ContextualAuthoringSaveAssertion {
16
+ /** Exact coordinated state immediately before the save intent is planned. */
17
+ before: AuthoringSessionSnapshot;
18
+ expectPlan: AuthoringSavePlan;
19
+ expectResult: AuthoringSaveResult;
20
+ intent: AuthoringSaveIntent;
21
+ request: ContextualAuthoringSaveRequest;
22
+ }
23
+ /**
24
+ * Pure-data first-stride vector. It intentionally remains narrower than the
25
+ * complete `authoring-web` profile: presentation continuity, contribution
26
+ * lifecycle, browser accessibility, and real-host qualification remain open.
27
+ */
28
+ export interface ContextualAuthoringStrideVector {
29
+ authoring?: ContextualAuthoringCommandAssertion;
30
+ contractVersion: string;
31
+ description: string;
32
+ id: QualifiedName;
33
+ kind: 'contextual-authoring-stride-vector';
34
+ launches: ContextualAuthoringLaunchAssertion[];
35
+ requirements: string[];
36
+ saves: ContextualAuthoringSaveAssertion[];
37
+ target: {
38
+ expect: AuthoringTargetResolution;
39
+ request: AuthoringTargetResolveRequest;
40
+ };
41
+ types: {
42
+ expect: AuthoringTypeListPage;
43
+ query: AuthoringTypeListQuery;
44
+ };
45
+ }
46
+ export interface ContextualAuthoringConformanceSession {
47
+ dispatch(command: Readonly<StudioCommand>): Promise<void> | void;
48
+ observe(): Promise<AuthoringSessionSnapshot> | AuthoringSessionSnapshot;
49
+ }
50
+ /**
51
+ * Selector- and framework-neutral adapter. A browser claimant maps these
52
+ * semantic calls onto its real shell; a core or host claimant maps them onto
53
+ * the public session/port APIs. Neither mapping leaks selectors into vectors.
54
+ */
55
+ export interface ContextualAuthoringConformanceAdapter {
56
+ listTypes(query: Readonly<AuthoringTypeListQuery>): Promise<AuthoringTypeListPage>;
57
+ open(snapshot: Readonly<AuthoringSessionSnapshot>): ContextualAuthoringConformanceSession | Promise<ContextualAuthoringConformanceSession>;
58
+ planSave(intent: Readonly<AuthoringSaveIntent>): Promise<AuthoringSavePlan>;
59
+ resolveTarget(request: Readonly<AuthoringTargetResolveRequest>): Promise<AuthoringTargetResolution>;
60
+ saveAsNewType(request: Readonly<AuthoringSaveAsNewTypeRequest>): Promise<AuthoringSaveResult>;
61
+ saveItem(request: Readonly<AuthoringSaveItemRequest>): Promise<AuthoringSaveResult>;
62
+ saveNewTypeVersion(request: Readonly<AuthoringSaveNewTypeVersionRequest>): Promise<AuthoringSaveResult>;
63
+ start(request: Readonly<AuthoringStartRequest>): Promise<AuthoringSessionSnapshot>;
64
+ }
65
+ export interface ContextualAuthoringStrideResult {
66
+ /** This first increment is executable but is not the complete profile. */
67
+ completeProfile: false;
68
+ mismatches: string[];
69
+ passed: boolean;
70
+ profile: 'studio.profile/authoring-web';
71
+ vectorId: QualifiedName;
72
+ }
73
+ /**
74
+ * Replays target resolution, exact launches, coordinated typed commands, and
75
+ * all three host-authoritative save boundaries without consulting DOM/CSS
76
+ * selectors. The runner compares exact canonical observations and enforces
77
+ * cross-document invariants that a structurally valid individual document
78
+ * cannot express by itself.
79
+ */
80
+ export declare function runContextualAuthoringStrideVector(vector: Readonly<ContextualAuthoringStrideVector>, adapter: Readonly<ContextualAuthoringConformanceAdapter>): Promise<ContextualAuthoringStrideResult>;
81
+ //# sourceMappingURL=contextual-conformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextual-conformance.d.ts","sourceRoot":"","sources":["../src/contextual-conformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export async function runContextualAuthoringStrideVector(e,s){let f=d(e),p=[];l(p,`target resolution`,u(await s.resolveTarget(u(e.target.request))),e.target.expect);let m=u(await s.listTypes(u(e.types.query)));l(p,`reusable content type page`,m,e.types.expect);for(let[e,t]of m.items.entries())(c(t,`values`)||c(t,`entry`))&&p.push(`reusable content type summary ${e} contains Entry values`);let h=new Map;for(let[n,r]of e.launches.entries()){let e=`launches[${n}] (${r.name})`,i=u(await s.start(u(r.request)));l(p,e,i,r.expect),t(p,e,r,i),h.has(r.name)&&p.push(`${e} duplicates a launch name`),h.set(r.name,i)}if(e.authoring!==void 0){let t=h.get(e.authoring.startName);if(t===void 0)p.push(`authoring references unknown launch ${e.authoring.startName}`);else{let i=await s.open(u(t));for(let[n,a]of e.authoring.commands.entries())r(p,`authoring.commands[${n}]`,t,a),await i.dispatch(u(a));let a=u(await i.observe());l(p,`coordinated authoring state`,a,e.authoring.expect),n(p,`coordinated authoring state`,a)}}for(let[t,r]of e.saves.entries()){let e=`saves[${t}] (${r.intent.draft.outcome})`;r.before.sessionId!==r.intent.sessionId&&p.push(`${e}.before belongs to another session`);let c=u(await s.planSave(u(r.intent)));l(p,`${e}.plan`,c,r.expectPlan),i(p,e,r.before,r.intent,c,r.request);let d=u(await o(s,u(r.request)));l(p,`${e}.result`,d,r.expectResult),d.outcome!==r.intent.draft.outcome&&p.push(`${e}.result outcome differs from the planned intent`),l(p,`${e}.result plan`,d.plan,r.request.plan),n(p,`${e}.result.session`,d.session),a(p,e,r.before,r.intent,d)}return d(e)!==f&&p.push(`adapter mutated the contextual authoring vector`),{completeProfile:!1,mismatches:p,passed:p.length===0,profile:`studio.profile/authoring-web`,vectorId:e.id}}function t(e,t,r,i){i.target.id!==r.request.targetId&&e.push(`${t} resolved another target`),l(e,`${t}.resourceContext`,i.resourceContext,r.request.resourceContext),l(e,`${t}.start`,i.start,r.request.source),n(e,t,i),r.request.source.kind===`blank`?(i.type!==void 0||i.state.coordinates.type!==void 0)&&e.push(`${t} blank start unexpectedly resolves a reusable type`):r.request.source.kind===`from-type`&&(l(e,`${t}.type reference`,i.state.coordinates.type,r.request.source.type),i.type===void 0?e.push(`${t} did not return the selected reusable type definition`):(l(e,`${t}.type definition reference`,s(i.type),r.request.source.type),(c(i.type,`values`)||c(i.type,`entry`))&&e.push(`${t} reusable type contains Entry values`)));for(let[n,a]of(r.forbiddenEntryValues??[]).entries())d(i.state.entry.values)===d(a)&&e.push(`${t} copied forbidden Entry values set ${n}`)}function n(e,t,n){let{coordinates:r}=n.state;l(e,`${t}.model coordinate`,r.model,{id:n.state.model.id,revision:n.state.model.revision,version:n.state.model.version}),l(e,`${t}.blueprint coordinate`,r.blueprint,{id:n.state.blueprint.id,revision:n.state.blueprint.revision,version:n.state.blueprint.version}),l(e,`${t}.entry coordinate`,r.entry,{id:n.state.entry.id,revision:n.state.entry.revision}),l(e,`${t}.blueprint model lock`,n.state.blueprint.model,r.model),l(e,`${t}.entry model lock`,n.state.entry.model,r.model),n.type===void 0?r.type!==void 0&&e.push(`${t} has type coordinates without a type definition`):(l(e,`${t}.type coordinate`,r.type,s(n.type)),l(e,`${t}.type model lock`,n.type.model,r.model),n.type.authoringPolicy.itemComposition===`denied`&&l(e,`${t}.type blueprint lock`,n.type.blueprint,r.blueprint),(c(n.type,`values`)||c(n.type,`entry`))&&e.push(`${t} reusable type contains Entry values`))}function r(e,t,n,r){let i=r.type===`studio.command/add-model-field`?n.state.model.id:r.type===`studio.command/set-field-value`?n.state.entry.id:n.state.blueprint.id;r.artifactId!==i&&e.push(`${t} targets the wrong separately governed artifact`),r.sessionGeneration!==n.sessionGeneration&&e.push(`${t} carries another session generation`)}function i(e,t,n,r,i,a){let o=r.draft.outcome;if((i.outcome!==o||a.draft.outcome!==o)&&e.push(`${t} crosses save-outcome boundaries`),i.sessionId!==r.sessionId&&e.push(`${t}.plan belongs to another session`),l(e,`${t}.plan expected coordinates`,i.expected,r.expected),l(e,`${t}.request plan`,a.plan,{id:i.id,revision:i.revision,successorContext:i.successorContext}),l(e,`${t}.request draft`,a.draft,r.draft),o===`save-item`)a.kind!==`authoring-save-item-request`&&e.push(`${t} did not use the save-item host operation`),i.affectedArtifacts.includes(`entry`)||e.push(`${t}.plan does not affect the Entry`),i.affectedArtifacts.some(e=>e===`model`||e===`reusable-content-type`)&&e.push(`${t}.plan would mutate the reusable type during item save`),r.draft.itemBlueprint===void 0?i.affectedArtifacts.includes(`blueprint`)&&e.push(`${t}.plan affects a Blueprint without an item-local draft`):(n.type?.authoringPolicy.itemComposition!==`overrides`&&e.push(`${t} carries item-local composition without override authority`),i.affectedArtifacts.includes(`blueprint`)||e.push(`${t}.plan omits the item-local Blueprint`));else{let n=o===`save-new-type-version`?`authoring-save-new-type-version-request`:`authoring-save-as-new-type-request`;a.kind!==n&&e.push(`${t} did not use its distinct type-save host operation`),i.affectedArtifacts.includes(`entry`)&&e.push(`${t}.plan leaks the Entry into a reusable-type save`);for(let n of[`model`,`blueprint`,`reusable-content-type`])i.affectedArtifacts.includes(n)||e.push(`${t}.plan omits affected ${n}`);i.confirmationRequired||e.push(`${t}.plan does not require consequence confirmation`),(c(r.draft,`entry`)||c(a.draft,`entry`)||c(r.draft,`values`)||c(a.draft,`values`))&&e.push(`${t} carries an Entry artifact into a reusable-type operation`)}}function a(e,t,n,r,i){if(i.session.sessionId!==r.sessionId&&e.push(`${t}.result belongs to another session`),l(e,`${t}.result successor context`,i.session.presentation.returnContext,i.plan.successorContext),r.draft.outcome===`save-item`){l(e,`${t}.result reusable type`,i.session.type,n.type),l(e,`${t}.result reusable type coordinate`,i.session.state.coordinates.type,n.state.coordinates.type);return}l(e,`${t}.result Entry values`,i.session.state.entry.values,n.state.entry.values),l(e,`${t}.result Entry dirty state`,i.session.state.dirty.includes(`entry`),n.state.dirty.includes(`entry`)),i.session.type!==void 0&&(c(i.session.type,`entry`)||c(i.session.type,`values`))&&e.push(`${t}.result reusable type contains an Entry artifact`)}async function o(e,t){switch(t.kind){case`authoring-save-item-request`:return e.saveItem(t);case`authoring-save-new-type-version-request`:return e.saveNewTypeVersion(t);case`authoring-save-as-new-type-request`:return e.saveAsNewType(t)}}function s(e){return{id:e.id,revision:e.revision,version:e.version}}function c(e,t){return typeof e==`object`&&!!e&&Object.hasOwn(e,t)}function l(e,t,n,r){d(n)!==d(r)&&e.push(`${t} differs from the vector expectation`)}function u(e){return JSON.parse(JSON.stringify(e))}function d(e){return JSON.stringify(f(e))??`undefined`}function f(e){return Array.isArray(e)?e.map(e=>f(e)):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)).map(([e,t])=>[e,f(t)])):e}
@@ -1,11 +1,12 @@
1
- import { type HostAdapter, type HostErrorCategory, type HostPortError, type HostPortResult, type HostRequestContext, type JsonObject, type MediaAsset, type MediaUploadAcceptedAsset, type PreviewRenderPayload, type PreviewRenderedPayload, type QualifiedName, type ResourceSearchHit, type Revision, type StableId, type StudioArtifact, type StudioWireProtocolVersion, type TelemetryEvent } from '@kumwe/studio-protocol';
2
- export type TestbedPortName = 'artifact' | 'localization' | 'media' | 'permission' | 'preview' | 'recovery' | 'resource' | 'telemetry';
1
+ import { HostPortFailure, type AuthoringSaveAsNewTypeRequest, type AuthoringSaveIntent, type AuthoringSaveItemRequest, type AuthoringSaveNewTypeVersionRequest, type AuthoringSavePlan, type AuthoringSaveResult, type AuthoringSessionSnapshot, type AuthoringStartRequest, type AuthoringTargetResolution, type AuthoringTargetResolveRequest, type AuthoringTypeListQuery, type HostAdapter, type HostErrorCategory, type HostPortError, type HostPortResult, type HostRequestContext, type JsonObject, type MediaAsset, type MediaUploadAcceptedAsset, type PreviewRenderPayload, type PreviewRenderedPayload, type QualifiedName, type ReusableContentTypeDefinition, type ResourceSearchHit, type Revision, type StableId, type StudioArtifact, type StudioWireProtocolVersion, type TelemetryEvent } from '@kumwe/studio-protocol';
2
+ export type TestbedPortName = 'artifact' | 'authoring' | 'localization' | 'media' | 'model' | 'permission' | 'preview' | 'recovery' | 'resource' | 'telemetry';
3
3
  export interface TestbedHostOptions {
4
4
  /**
5
5
  * Permits the fixture-only `studio.test/operation` wildcard used by broad
6
6
  * unit tests. Defaults to false and MUST remain false for conformance replay.
7
7
  */
8
8
  allowTestOperationId?: boolean;
9
+ authoring?: TestbedAuthoringOptions;
9
10
  documents?: StudioArtifact[];
10
11
  initialClockMilliseconds?: number;
11
12
  mediaAssets?: MediaAsset[];
@@ -17,6 +18,48 @@ export interface TestbedHostOptions {
17
18
  /** Exact live generation to seed before the first portable request. */
18
19
  sessionGeneration?: Revision;
19
20
  }
21
+ /**
22
+ * Exact fixture exchanges for the additive contextual-authoring port. The
23
+ * testbed deliberately does not invent host business policy: a real host
24
+ * supplies the exact target, launch, plan, and accepted-result projections it
25
+ * authorizes, while the testbed supplies deterministic envelope, operation,
26
+ * isolation, and idempotency behavior around those exchanges.
27
+ */
28
+ export interface TestbedAuthoringOptions {
29
+ plans?: TestbedAuthoringPlanFixture[];
30
+ saves?: TestbedAuthoringSaveFixture[];
31
+ starts?: TestbedAuthoringStartFixture[];
32
+ targets?: TestbedAuthoringTargetFixture[];
33
+ types?: TestbedAuthoringTypeFixture[];
34
+ }
35
+ export interface TestbedAuthoringTargetFixture {
36
+ request: AuthoringTargetResolveRequest;
37
+ resolution: AuthoringTargetResolution;
38
+ }
39
+ export interface TestbedAuthoringTypeFixture {
40
+ definition: ReusableContentTypeDefinition;
41
+ resourceContextKey: StableId;
42
+ targetId: QualifiedName;
43
+ }
44
+ export interface TestbedAuthoringStartFixture {
45
+ request: AuthoringStartRequest;
46
+ session: AuthoringSessionSnapshot;
47
+ }
48
+ export interface TestbedAuthoringPlanFixture {
49
+ intent: AuthoringSaveIntent;
50
+ plan: AuthoringSavePlan;
51
+ resourceContextKey: StableId;
52
+ }
53
+ export type TestbedAuthoringSaveRequest = AuthoringSaveAsNewTypeRequest | AuthoringSaveItemRequest | AuthoringSaveNewTypeVersionRequest;
54
+ export interface TestbedAuthoringSaveFixture {
55
+ request: TestbedAuthoringSaveRequest;
56
+ resourceContextKey: StableId;
57
+ result: AuthoringSaveResult;
58
+ }
59
+ export interface TestbedAuthoringOperation {
60
+ argument: AuthoringSaveIntent | AuthoringStartRequest | AuthoringTargetResolveRequest | AuthoringTypeListQuery | TestbedAuthoringSaveRequest;
61
+ operation: 'list-types' | 'plan-save' | 'resolve-target' | 'save-as-new-type' | 'save-item' | 'save-new-type-version' | 'start';
62
+ }
20
63
  /** A deterministic fixed-window policy used by portable sequence replays. */
21
64
  export interface TestbedRateLimitPolicy {
22
65
  maximumRequests: number;
@@ -25,6 +68,7 @@ export interface TestbedRateLimitPolicy {
25
68
  }
26
69
  export interface TestbedControls {
27
70
  advanceClock(milliseconds: number): void;
71
+ readonly authoringOperations: readonly TestbedAuthoringOperation[];
28
72
  artifactStatus(id: StableId): StudioArtifact['status'] | undefined;
29
73
  disconnect(): void;
30
74
  failNext(portName: TestbedPortName, operation: string, category: HostErrorCategory): void;
@@ -63,8 +107,7 @@ export interface HostRequestContextFixtureOptions {
63
107
  resourceContextKey?: StableId;
64
108
  sessionGeneration?: Revision;
65
109
  }
66
- export declare class TestbedHostError extends Error {
67
- readonly error: HostPortError;
110
+ export declare class TestbedHostError extends HostPortFailure {
68
111
  constructor(error: HostPortError);
69
112
  }
70
113
  export declare function createHostRequestContextFixture(options?: HostRequestContextFixtureOptions): HostRequestContext;
@@ -1 +1 @@
1
- {"version":3,"file":"host-testbed.d.ts","sourceRoot":"","sources":["../src/host-testbed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host-testbed.d.ts","sourceRoot":"","sources":["../src/host-testbed.ts"],"names":[],"mappings":"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"}