fastscript 2.0.0 → 3.0.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.
@@ -0,0 +1,815 @@
1
+ export const COMPATIBILITY_REPORT = {
2
+ "generatedAt": "2026-04-15T19:21:33.048Z",
3
+ "governanceTrack": "4.0",
4
+ "stableLine": "3.0.x",
5
+ "packageVersion": "3.0.1",
6
+ "contract": "If a feature or ecosystem pattern is marked proven, it must have automated coverage and release gates must fail when that proof regresses.",
7
+ "summary": {
8
+ "entries": 30,
9
+ "byStatus": {
10
+ "proven": 28,
11
+ "partial": 1,
12
+ "planned": 1
13
+ },
14
+ "byCategory": {
15
+ "ecmascript": 2,
16
+ "modules-interop": 7,
17
+ "typescript": 2,
18
+ "jsx-tsx": 1,
19
+ "fastscript-sugar": 1,
20
+ "framework-patterns": 12,
21
+ "runtime-targets": 1,
22
+ "deployment-adapters": 1,
23
+ "tooling": 3
24
+ },
25
+ "provenEntries": 28
26
+ },
27
+ "artifacts": {
28
+ "jsTsSyntaxCases": 8,
29
+ "fsParityCases": 18,
30
+ "interopCases": 17
31
+ },
32
+ "entries": [
33
+ {
34
+ "id": "ecmascript-modern-syntax",
35
+ "category": "ecmascript",
36
+ "feature": "Modern ECMAScript syntax in .fs",
37
+ "status": "proven",
38
+ "contractNote": "Modern JS syntax should parse and normalize inside .fs without forcing a rewrite.",
39
+ "proofIds": [
40
+ "artifact:js-ts-syntax-proof:js-modern-module",
41
+ "artifact:js-ts-syntax-proof:js-comments-strings-regex",
42
+ "artifact:fs-parity:ecmascript-modern-class"
43
+ ],
44
+ "docsNote": "Covers module syntax, classes, private fields, static blocks, generators, and async generators.",
45
+ "proofDetails": [
46
+ {
47
+ "id": "artifact:js-ts-syntax-proof:js-modern-module",
48
+ "status": "pass",
49
+ "kind": "artifact",
50
+ "artifact": "js-ts-syntax-proof",
51
+ "label": "js-modern-module"
52
+ },
53
+ {
54
+ "id": "artifact:js-ts-syntax-proof:js-comments-strings-regex",
55
+ "status": "pass",
56
+ "kind": "artifact",
57
+ "artifact": "js-ts-syntax-proof",
58
+ "label": "js-comments-strings-regex"
59
+ },
60
+ {
61
+ "id": "artifact:fs-parity:ecmascript-modern-class",
62
+ "status": "pass",
63
+ "kind": "artifact",
64
+ "artifact": "fs-parity",
65
+ "label": "ecmascript-modern-class"
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ "id": "js-dynamic-import-and-require",
71
+ "category": "modules-interop",
72
+ "feature": "Dynamic import and require in .fs",
73
+ "status": "proven",
74
+ "contractNote": "Dynamic import and CommonJS-style require should remain usable in compatibility-first .fs code.",
75
+ "proofIds": [
76
+ "artifact:js-ts-syntax-proof:js-dynamic-and-require",
77
+ "artifact:fs-parity:module-interop-patterns",
78
+ "artifact:fs-parity:commonjs-interop"
79
+ ],
80
+ "docsNote": "Includes mixed ESM/CommonJS usage inside authored .fs modules.",
81
+ "proofDetails": [
82
+ {
83
+ "id": "artifact:js-ts-syntax-proof:js-dynamic-and-require",
84
+ "status": "pass",
85
+ "kind": "artifact",
86
+ "artifact": "js-ts-syntax-proof",
87
+ "label": "js-dynamic-and-require"
88
+ },
89
+ {
90
+ "id": "artifact:fs-parity:module-interop-patterns",
91
+ "status": "pass",
92
+ "kind": "artifact",
93
+ "artifact": "fs-parity",
94
+ "label": "module-interop-patterns"
95
+ },
96
+ {
97
+ "id": "artifact:fs-parity:commonjs-interop",
98
+ "status": "pass",
99
+ "kind": "artifact",
100
+ "artifact": "fs-parity",
101
+ "label": "commonjs-interop"
102
+ }
103
+ ]
104
+ },
105
+ {
106
+ "id": "typescript-type-erasure",
107
+ "category": "typescript",
108
+ "feature": "TypeScript type erasure in .fs",
109
+ "status": "proven",
110
+ "contractNote": "Type-only TS syntax should erase cleanly when authored directly in .fs.",
111
+ "proofIds": [
112
+ "artifact:js-ts-syntax-proof:ts-types",
113
+ "artifact:js-ts-syntax-proof:ts-namespace-and-declare",
114
+ "artifact:fs-parity:typescript-types-and-generics"
115
+ ],
116
+ "docsNote": "Covers interfaces, type aliases, generics, namespaces, and declaration shapes.",
117
+ "proofDetails": [
118
+ {
119
+ "id": "artifact:js-ts-syntax-proof:ts-types",
120
+ "status": "pass",
121
+ "kind": "artifact",
122
+ "artifact": "js-ts-syntax-proof",
123
+ "label": "ts-types"
124
+ },
125
+ {
126
+ "id": "artifact:js-ts-syntax-proof:ts-namespace-and-declare",
127
+ "status": "pass",
128
+ "kind": "artifact",
129
+ "artifact": "js-ts-syntax-proof",
130
+ "label": "ts-namespace-and-declare"
131
+ },
132
+ {
133
+ "id": "artifact:fs-parity:typescript-types-and-generics",
134
+ "status": "pass",
135
+ "kind": "artifact",
136
+ "artifact": "fs-parity",
137
+ "label": "typescript-types-and-generics"
138
+ }
139
+ ]
140
+ },
141
+ {
142
+ "id": "tsx-jsx-authoring",
143
+ "category": "jsx-tsx",
144
+ "feature": "JSX and TSX authoring in .fs",
145
+ "status": "proven",
146
+ "contractNote": "React-style JSX/TSX should compile directly in .fs with normal typed component authoring.",
147
+ "proofIds": [
148
+ "artifact:js-ts-syntax-proof:jsx-component",
149
+ "artifact:js-ts-syntax-proof:tsx-page",
150
+ "artifact:fs-parity:tsx-component-surface",
151
+ "script:test:authored-ts-in-fs"
152
+ ],
153
+ "docsNote": "Covers typed component props, TSX page modules, and authored .fs TSX.",
154
+ "proofDetails": [
155
+ {
156
+ "id": "artifact:js-ts-syntax-proof:jsx-component",
157
+ "status": "pass",
158
+ "kind": "artifact",
159
+ "artifact": "js-ts-syntax-proof",
160
+ "label": "jsx-component"
161
+ },
162
+ {
163
+ "id": "artifact:js-ts-syntax-proof:tsx-page",
164
+ "status": "pass",
165
+ "kind": "artifact",
166
+ "artifact": "js-ts-syntax-proof",
167
+ "label": "tsx-page"
168
+ },
169
+ {
170
+ "id": "artifact:fs-parity:tsx-component-surface",
171
+ "status": "pass",
172
+ "kind": "artifact",
173
+ "artifact": "fs-parity",
174
+ "label": "tsx-component-surface"
175
+ },
176
+ {
177
+ "id": "script:test:authored-ts-in-fs",
178
+ "status": "configured",
179
+ "kind": "script"
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ "id": "fastscript-sugar-optional",
185
+ "category": "fastscript-sugar",
186
+ "feature": "FastScript sugar remains optional",
187
+ "status": "proven",
188
+ "contractNote": "fn, state, and ~ should remain optional language sugar on top of JS/TS-first .fs authoring.",
189
+ "proofIds": [
190
+ "artifact:fs-parity:fastscript-sugar-compatible"
191
+ ],
192
+ "docsNote": "Sugar support is maintained without making it the required authoring model.",
193
+ "proofDetails": [
194
+ {
195
+ "id": "artifact:fs-parity:fastscript-sugar-compatible",
196
+ "status": "pass",
197
+ "kind": "artifact",
198
+ "artifact": "fs-parity",
199
+ "label": "fastscript-sugar-compatible"
200
+ }
201
+ ]
202
+ },
203
+ {
204
+ "id": "import-assertion-shapes",
205
+ "category": "modules-interop",
206
+ "feature": "Import assertion and multiline import shapes",
207
+ "status": "proven",
208
+ "contractNote": "Supported import assertion shapes should survive compatibility-first conversion into .fs.",
209
+ "proofIds": [
210
+ "artifact:js-ts-syntax-proof:multiline-import-assertion-shape"
211
+ ],
212
+ "docsNote": "Current proof covers multiline assertion-like import shapes in migration input.",
213
+ "proofDetails": [
214
+ {
215
+ "id": "artifact:js-ts-syntax-proof:multiline-import-assertion-shape",
216
+ "status": "pass",
217
+ "kind": "artifact",
218
+ "artifact": "js-ts-syntax-proof",
219
+ "label": "multiline-import-assertion-shape"
220
+ }
221
+ ]
222
+ },
223
+ {
224
+ "id": "framework-build-corpus",
225
+ "category": "framework-patterns",
226
+ "feature": "Framework-style build corpus",
227
+ "status": "proven",
228
+ "contractNote": "Representative page, route, and API module shapes should build cleanly as .fs projects.",
229
+ "proofIds": [
230
+ "artifact:fs-parity:framework-build-corpus"
231
+ ],
232
+ "docsNote": "Covers a small build corpus with pages, dynamic routes, and API modules.",
233
+ "proofDetails": [
234
+ {
235
+ "id": "artifact:fs-parity:framework-build-corpus",
236
+ "status": "pass",
237
+ "kind": "artifact",
238
+ "artifact": "fs-parity",
239
+ "label": "framework-build-corpus"
240
+ }
241
+ ]
242
+ },
243
+ {
244
+ "id": "node-server-patterns",
245
+ "category": "framework-patterns",
246
+ "feature": "Node and Express-style handler patterns",
247
+ "status": "proven",
248
+ "contractNote": "Common Node/server request-handler shapes should work directly in .fs.",
249
+ "proofIds": [
250
+ "artifact:fs-parity:node-express-style",
251
+ "artifact:fs-parity:node-request-mutation-mixed-modules",
252
+ "script:test:runtime-contract"
253
+ ],
254
+ "docsNote": "Includes handler-style modules, params access, request mutation, mixed ESM/CJS helpers, and path/env-adjacent server code.",
255
+ "proofDetails": [
256
+ {
257
+ "id": "artifact:fs-parity:node-express-style",
258
+ "status": "pass",
259
+ "kind": "artifact",
260
+ "artifact": "fs-parity",
261
+ "label": "node-express-style"
262
+ },
263
+ {
264
+ "id": "artifact:fs-parity:node-request-mutation-mixed-modules",
265
+ "status": "pass",
266
+ "kind": "artifact",
267
+ "artifact": "fs-parity",
268
+ "label": "node-request-mutation-mixed-modules"
269
+ },
270
+ {
271
+ "id": "script:test:runtime-contract",
272
+ "status": "configured",
273
+ "kind": "script"
274
+ }
275
+ ]
276
+ },
277
+ {
278
+ "id": "node-middleware-and-error-flow",
279
+ "category": "framework-patterns",
280
+ "feature": "Node middleware chains, error handlers, and env-aware server flow",
281
+ "status": "proven",
282
+ "contractNote": "Middleware chains, error bubbling, and environment-aware server modules should remain valid .fs patterns.",
283
+ "proofIds": [
284
+ "artifact:fs-parity:node-middleware-error-chain"
285
+ ],
286
+ "docsNote": "Covers sequential middleware, error handling, and process.env usage in server code.",
287
+ "proofDetails": [
288
+ {
289
+ "id": "artifact:fs-parity:node-middleware-error-chain",
290
+ "status": "pass",
291
+ "kind": "artifact",
292
+ "artifact": "fs-parity",
293
+ "label": "node-middleware-error-chain"
294
+ }
295
+ ]
296
+ },
297
+ {
298
+ "id": "react-tsx-interop",
299
+ "category": "framework-patterns",
300
+ "feature": "React and TSX ecosystem interop",
301
+ "status": "proven",
302
+ "contractNote": "React-style modules and TSX authoring should work without forcing a framework rewrite.",
303
+ "proofIds": [
304
+ "artifact:interop:react-core-fs",
305
+ "artifact:interop:react-dom-server-fs"
306
+ ],
307
+ "docsNote": "Current proof covers createElement plus react-dom client/server import surfaces.",
308
+ "proofDetails": [
309
+ {
310
+ "id": "artifact:interop:react-core-fs",
311
+ "status": "pass",
312
+ "kind": "artifact",
313
+ "artifact": "interop",
314
+ "label": "react-core-fs"
315
+ },
316
+ {
317
+ "id": "artifact:interop:react-dom-server-fs",
318
+ "status": "pass",
319
+ "kind": "artifact",
320
+ "artifact": "interop",
321
+ "label": "react-dom-server-fs"
322
+ }
323
+ ]
324
+ },
325
+ {
326
+ "id": "react-hooks-context-and-lazy",
327
+ "category": "framework-patterns",
328
+ "feature": "React hooks, context, and lazy module patterns",
329
+ "status": "proven",
330
+ "contractNote": "React-style hook and lazy-module workflows should remain valid authored .fs patterns.",
331
+ "proofIds": [
332
+ "artifact:fs-parity:react-hooks-context-lazy",
333
+ "artifact:fs-parity:react-composed-hooks-shared-helper"
334
+ ],
335
+ "docsNote": "Covers useState, createContext/useContext, lazy-loaded module flow, and composed hook/shared-helper patterns.",
336
+ "proofDetails": [
337
+ {
338
+ "id": "artifact:fs-parity:react-hooks-context-lazy",
339
+ "status": "pass",
340
+ "kind": "artifact",
341
+ "artifact": "fs-parity",
342
+ "label": "react-hooks-context-lazy"
343
+ },
344
+ {
345
+ "id": "artifact:fs-parity:react-composed-hooks-shared-helper",
346
+ "status": "pass",
347
+ "kind": "artifact",
348
+ "artifact": "fs-parity",
349
+ "label": "react-composed-hooks-shared-helper"
350
+ }
351
+ ]
352
+ },
353
+ {
354
+ "id": "next-style-modules",
355
+ "category": "framework-patterns",
356
+ "feature": "Next-style pages, links, and route-adjacent modules",
357
+ "status": "proven",
358
+ "contractNote": "Next-style module shapes should be accepted as syntax and framework-adjacent source in .fs.",
359
+ "proofIds": [
360
+ "artifact:interop:next-link-fs",
361
+ "artifact:interop:next-navigation-fs",
362
+ "artifact:fs-parity:next-page-style-tsx",
363
+ "artifact:fs-parity:next-route-shared-lib-style"
364
+ ],
365
+ "docsNote": "Covers page-style TSX modules, next/link and next/navigation imports, plus shared-lib route-adjacent patterns.",
366
+ "proofDetails": [
367
+ {
368
+ "id": "artifact:interop:next-link-fs",
369
+ "status": "pass",
370
+ "kind": "artifact",
371
+ "artifact": "interop",
372
+ "label": "next-link-fs"
373
+ },
374
+ {
375
+ "id": "artifact:interop:next-navigation-fs",
376
+ "status": "pass",
377
+ "kind": "artifact",
378
+ "artifact": "interop",
379
+ "label": "next-navigation-fs"
380
+ },
381
+ {
382
+ "id": "artifact:fs-parity:next-page-style-tsx",
383
+ "status": "pass",
384
+ "kind": "artifact",
385
+ "artifact": "fs-parity",
386
+ "label": "next-page-style-tsx"
387
+ },
388
+ {
389
+ "id": "artifact:fs-parity:next-route-shared-lib-style",
390
+ "status": "pass",
391
+ "kind": "artifact",
392
+ "artifact": "fs-parity",
393
+ "label": "next-route-shared-lib-style"
394
+ }
395
+ ]
396
+ },
397
+ {
398
+ "id": "vue-style-modules",
399
+ "category": "framework-patterns",
400
+ "feature": "Vue-adjacent script and composable patterns",
401
+ "status": "proven",
402
+ "contractNote": "Vue-style script modules and composable helpers should work as normal .fs source.",
403
+ "proofIds": [
404
+ "artifact:interop:vue-core-fs",
405
+ "artifact:interop:vue-router-fs",
406
+ "artifact:fs-parity:vue-script-setup-adjacent",
407
+ "artifact:fs-parity:vue-app-utility-module"
408
+ ],
409
+ "docsNote": "Current proof covers Vue createApp/h interop, vue-router module usage, typed composable-style modules, and app-adjacent utility helpers.",
410
+ "proofDetails": [
411
+ {
412
+ "id": "artifact:interop:vue-core-fs",
413
+ "status": "pass",
414
+ "kind": "artifact",
415
+ "artifact": "interop",
416
+ "label": "vue-core-fs"
417
+ },
418
+ {
419
+ "id": "artifact:interop:vue-router-fs",
420
+ "status": "pass",
421
+ "kind": "artifact",
422
+ "artifact": "interop",
423
+ "label": "vue-router-fs"
424
+ },
425
+ {
426
+ "id": "artifact:fs-parity:vue-script-setup-adjacent",
427
+ "status": "pass",
428
+ "kind": "artifact",
429
+ "artifact": "fs-parity",
430
+ "label": "vue-script-setup-adjacent"
431
+ },
432
+ {
433
+ "id": "artifact:fs-parity:vue-app-utility-module",
434
+ "status": "pass",
435
+ "kind": "artifact",
436
+ "artifact": "fs-parity",
437
+ "label": "vue-app-utility-module"
438
+ }
439
+ ]
440
+ },
441
+ {
442
+ "id": "vue-composables-and-store-helpers",
443
+ "category": "framework-patterns",
444
+ "feature": "Vue composables and store-adjacent helpers",
445
+ "status": "proven",
446
+ "contractNote": "Composable and store-helper patterns should remain valid .fs source, not migration-only compatibility.",
447
+ "proofIds": [
448
+ "artifact:fs-parity:vue-composable-store-adjacent"
449
+ ],
450
+ "docsNote": "Covers ref/computed-based composables and store-like helper return shapes.",
451
+ "proofDetails": [
452
+ {
453
+ "id": "artifact:fs-parity:vue-composable-store-adjacent",
454
+ "status": "pass",
455
+ "kind": "artifact",
456
+ "artifact": "fs-parity",
457
+ "label": "vue-composable-store-adjacent"
458
+ }
459
+ ]
460
+ },
461
+ {
462
+ "id": "svelte-store-interop",
463
+ "category": "framework-patterns",
464
+ "feature": "Svelte store interop",
465
+ "status": "proven",
466
+ "contractNote": "Store-centric ecosystem imports should bundle cleanly from .fs.",
467
+ "proofIds": [
468
+ "artifact:interop:svelte-store-fs"
469
+ ],
470
+ "docsNote": "Current proof covers writable store usage.",
471
+ "proofDetails": [
472
+ {
473
+ "id": "artifact:interop:svelte-store-fs",
474
+ "status": "pass",
475
+ "kind": "artifact",
476
+ "artifact": "interop",
477
+ "label": "svelte-store-fs"
478
+ }
479
+ ]
480
+ },
481
+ {
482
+ "id": "preact-interop",
483
+ "category": "framework-patterns",
484
+ "feature": "Preact interop",
485
+ "status": "proven",
486
+ "contractNote": "Preact h/render APIs should remain accessible from .fs modules.",
487
+ "proofIds": [
488
+ "artifact:interop:preact-core-fs"
489
+ ],
490
+ "docsNote": "Current proof covers core Preact render flow.",
491
+ "proofDetails": [
492
+ {
493
+ "id": "artifact:interop:preact-core-fs",
494
+ "status": "pass",
495
+ "kind": "artifact",
496
+ "artifact": "interop",
497
+ "label": "preact-core-fs"
498
+ }
499
+ ]
500
+ },
501
+ {
502
+ "id": "solid-interop",
503
+ "category": "framework-patterns",
504
+ "feature": "SolidJS signal interop",
505
+ "status": "proven",
506
+ "contractNote": "Signal-style frameworks should import and bundle from .fs without compatibility rewrites.",
507
+ "proofIds": [
508
+ "artifact:interop:solid-core-fs"
509
+ ],
510
+ "docsNote": "Current proof covers createSignal/createMemo usage.",
511
+ "proofDetails": [
512
+ {
513
+ "id": "artifact:interop:solid-core-fs",
514
+ "status": "pass",
515
+ "kind": "artifact",
516
+ "artifact": "interop",
517
+ "label": "solid-core-fs"
518
+ }
519
+ ]
520
+ },
521
+ {
522
+ "id": "package-subpath-exports",
523
+ "category": "modules-interop",
524
+ "feature": "Scoped package subpath exports",
525
+ "status": "proven",
526
+ "contractNote": "Subpath export resolution should work for .fs imports against modern packages.",
527
+ "proofIds": [
528
+ "artifact:interop:scoped-subpath-fs",
529
+ "artifact:interop:conditioned-subpath-fs",
530
+ "script:test:ecosystem-compatibility-contract"
531
+ ],
532
+ "docsNote": "Covers scoped package subpath exports, export-condition subpaths, and workspace-linked packages.",
533
+ "proofDetails": [
534
+ {
535
+ "id": "artifact:interop:scoped-subpath-fs",
536
+ "status": "pass",
537
+ "kind": "artifact",
538
+ "artifact": "interop",
539
+ "label": "scoped-subpath-fs"
540
+ },
541
+ {
542
+ "id": "artifact:interop:conditioned-subpath-fs",
543
+ "status": "pass",
544
+ "kind": "artifact",
545
+ "artifact": "interop",
546
+ "label": "conditioned-subpath-fs"
547
+ },
548
+ {
549
+ "id": "script:test:ecosystem-compatibility-contract",
550
+ "status": "configured",
551
+ "kind": "script"
552
+ }
553
+ ]
554
+ },
555
+ {
556
+ "id": "package-dual-mode",
557
+ "category": "modules-interop",
558
+ "feature": "Dual-mode package resolution",
559
+ "status": "proven",
560
+ "contractNote": "Dual-mode ESM/CJS package exports should resolve correctly from .fs.",
561
+ "proofIds": [
562
+ "artifact:interop:dual-mode-fs",
563
+ "script:test:ecosystem-compatibility-contract"
564
+ ],
565
+ "docsNote": "Covers modern export-condition resolution.",
566
+ "proofDetails": [
567
+ {
568
+ "id": "artifact:interop:dual-mode-fs",
569
+ "status": "pass",
570
+ "kind": "artifact",
571
+ "artifact": "interop",
572
+ "label": "dual-mode-fs"
573
+ },
574
+ {
575
+ "id": "script:test:ecosystem-compatibility-contract",
576
+ "status": "configured",
577
+ "kind": "script"
578
+ }
579
+ ]
580
+ },
581
+ {
582
+ "id": "package-commonjs",
583
+ "category": "modules-interop",
584
+ "feature": "CommonJS package interop",
585
+ "status": "proven",
586
+ "contractNote": "CommonJS packages should remain consumable from .fs through compatibility interop.",
587
+ "proofIds": [
588
+ "artifact:interop:node-cjs-npm-fs",
589
+ "artifact:fs-parity:commonjs-interop",
590
+ "script:test:ecosystem-compatibility-contract"
591
+ ],
592
+ "docsNote": "Covers require-driven compatibility and bundling against npm CommonJS packages.",
593
+ "proofDetails": [
594
+ {
595
+ "id": "artifact:interop:node-cjs-npm-fs",
596
+ "status": "pass",
597
+ "kind": "artifact",
598
+ "artifact": "interop",
599
+ "label": "node-cjs-npm-fs"
600
+ },
601
+ {
602
+ "id": "artifact:fs-parity:commonjs-interop",
603
+ "status": "pass",
604
+ "kind": "artifact",
605
+ "artifact": "fs-parity",
606
+ "label": "commonjs-interop"
607
+ },
608
+ {
609
+ "id": "script:test:ecosystem-compatibility-contract",
610
+ "status": "configured",
611
+ "kind": "script"
612
+ }
613
+ ]
614
+ },
615
+ {
616
+ "id": "package-node-builtins",
617
+ "category": "modules-interop",
618
+ "feature": "Node built-in module imports",
619
+ "status": "proven",
620
+ "contractNote": "Node built-ins should be importable from .fs wherever the runtime target allows them.",
621
+ "proofIds": [
622
+ "artifact:interop:node-builtins-fs"
623
+ ],
624
+ "docsNote": "Current proof covers node:crypto and node:path.",
625
+ "proofDetails": [
626
+ {
627
+ "id": "artifact:interop:node-builtins-fs",
628
+ "status": "pass",
629
+ "kind": "artifact",
630
+ "artifact": "interop",
631
+ "label": "node-builtins-fs"
632
+ }
633
+ ]
634
+ },
635
+ {
636
+ "id": "package-real-npm",
637
+ "category": "modules-interop",
638
+ "feature": "Real npm package bundling",
639
+ "status": "proven",
640
+ "contractNote": "Real ecosystem packages should bundle from .fs without relying only on toy fixtures.",
641
+ "proofIds": [
642
+ "artifact:interop:real-acorn-js",
643
+ "artifact:interop:real-astring-js",
644
+ "artifact:interop:real-acorn-walk-js"
645
+ ],
646
+ "docsNote": "Current proof uses real installed dependencies instead of synthetic package mocks alone.",
647
+ "proofDetails": [
648
+ {
649
+ "id": "artifact:interop:real-acorn-js",
650
+ "status": "pass",
651
+ "kind": "artifact",
652
+ "artifact": "interop",
653
+ "label": "real-acorn-js"
654
+ },
655
+ {
656
+ "id": "artifact:interop:real-astring-js",
657
+ "status": "pass",
658
+ "kind": "artifact",
659
+ "artifact": "interop",
660
+ "label": "real-astring-js"
661
+ },
662
+ {
663
+ "id": "artifact:interop:real-acorn-walk-js",
664
+ "status": "pass",
665
+ "kind": "artifact",
666
+ "artifact": "interop",
667
+ "label": "real-acorn-walk-js"
668
+ }
669
+ ]
670
+ },
671
+ {
672
+ "id": "runtime-target-node",
673
+ "category": "runtime-targets",
674
+ "feature": "Node HTTP runtime target",
675
+ "status": "proven",
676
+ "contractNote": "The core Node runtime path should remain a release-blocking supported target.",
677
+ "proofIds": [
678
+ "script:test:runtime-contract",
679
+ "script:smoke:start"
680
+ ],
681
+ "docsNote": "Covers app routing, API routes, and production adapter serving.",
682
+ "proofDetails": [
683
+ {
684
+ "id": "script:test:runtime-contract",
685
+ "status": "configured",
686
+ "kind": "script"
687
+ },
688
+ {
689
+ "id": "script:smoke:start",
690
+ "status": "configured",
691
+ "kind": "script"
692
+ }
693
+ ]
694
+ },
695
+ {
696
+ "id": "deployment-adapters",
697
+ "category": "deployment-adapters",
698
+ "feature": "Node, Vercel, and Cloudflare deploy adapters",
699
+ "status": "proven",
700
+ "contractNote": "Core deployment adapters are part of the governed compatibility surface.",
701
+ "proofIds": [
702
+ "script:test:deploy-adapters"
703
+ ],
704
+ "docsNote": "Current proof covers Node/PM2, Vercel, and Cloudflare adapter generation.",
705
+ "proofDetails": [
706
+ {
707
+ "id": "script:test:deploy-adapters",
708
+ "status": "configured",
709
+ "kind": "script"
710
+ }
711
+ ]
712
+ },
713
+ {
714
+ "id": "tooling-core",
715
+ "category": "tooling",
716
+ "feature": "CLI, lint, format, and typecheck stability",
717
+ "status": "proven",
718
+ "contractNote": "The core toolchain should remain stable under release gates, not just the parser.",
719
+ "proofIds": [
720
+ "script:qa:gate"
721
+ ],
722
+ "docsNote": "Governed through the full repo quality gate.",
723
+ "proofDetails": [
724
+ {
725
+ "id": "script:qa:gate",
726
+ "status": "configured",
727
+ "kind": "script"
728
+ }
729
+ ]
730
+ },
731
+ {
732
+ "id": "tooling-vscode",
733
+ "category": "tooling",
734
+ "feature": "VS Code language tooling",
735
+ "status": "proven",
736
+ "contractNote": "The editor surface should stay aligned with the compatibility contract.",
737
+ "proofIds": [
738
+ "script:test:vscode-language"
739
+ ],
740
+ "docsNote": "Smoke-tested LSP and syntax integration.",
741
+ "proofDetails": [
742
+ {
743
+ "id": "script:test:vscode-language",
744
+ "status": "configured",
745
+ "kind": "script"
746
+ }
747
+ ]
748
+ },
749
+ {
750
+ "id": "proof-and-benchmark-discipline",
751
+ "category": "tooling",
752
+ "feature": "Proof and benchmark discipline",
753
+ "status": "proven",
754
+ "contractNote": "Public performance and proof claims must stay under automated discipline.",
755
+ "proofIds": [
756
+ "script:test:benchmark-discipline",
757
+ "script:test:release-discipline"
758
+ ],
759
+ "docsNote": "Keeps proof pack claims tied to generated artifacts and release gates.",
760
+ "proofDetails": [
761
+ {
762
+ "id": "script:test:benchmark-discipline",
763
+ "status": "configured",
764
+ "kind": "script"
765
+ },
766
+ {
767
+ "id": "script:test:release-discipline",
768
+ "status": "configured",
769
+ "kind": "script"
770
+ }
771
+ ]
772
+ },
773
+ {
774
+ "id": "typescript-decorators",
775
+ "category": "typescript",
776
+ "feature": "TypeScript decorators",
777
+ "status": "partial",
778
+ "contractNote": "Decorator support is not yet a governed proven guarantee.",
779
+ "proofIds": [],
780
+ "docsNote": "Keep visible as an explicit compatibility lane instead of implying support.",
781
+ "proofDetails": []
782
+ },
783
+ {
784
+ "id": "next-layout-and-metadata",
785
+ "category": "framework-patterns",
786
+ "feature": "Next-style layout and metadata exports",
787
+ "status": "proven",
788
+ "contractNote": "Next-style layout and metadata-like exports are part of the governed compatibility surface.",
789
+ "proofIds": [
790
+ "artifact:fs-parity:next-layout-metadata-style"
791
+ ],
792
+ "docsNote": "Covers metadata-like exports, generated metadata, and layout-style wrappers.",
793
+ "proofDetails": [
794
+ {
795
+ "id": "artifact:fs-parity:next-layout-metadata-style",
796
+ "status": "pass",
797
+ "kind": "artifact",
798
+ "artifact": "fs-parity",
799
+ "label": "next-layout-metadata-style"
800
+ }
801
+ ]
802
+ },
803
+ {
804
+ "id": "future-tc39-and-ts-additions",
805
+ "category": "ecmascript",
806
+ "feature": "Future TC39 and TypeScript additions",
807
+ "status": "planned",
808
+ "contractNote": "New language additions should be incorporated into the compatibility matrix as they stabilize.",
809
+ "proofIds": [],
810
+ "docsNote": "4.0 establishes the governed system that future additions plug into.",
811
+ "proofDetails": []
812
+ }
813
+ ]
814
+ };
815
+ export default COMPATIBILITY_REPORT;