@ccslabs/xtend 0.1.0-rc.1 → 0.1.2
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 +2 -0
- package/README.md +4 -0
- package/catalog/component-catalog-coverage.js +2 -0
- package/catalog/epic13-package-export-lock.js +11 -1
- package/catalog/epic13-rmt-production-readiness.js +0 -1
- package/catalog/epic18-rmt-action-effect-runtime.d.ts +36 -0
- package/catalog/epic18-rmt-action-effect-runtime.js +249 -0
- package/catalog/epic18-rmt-app-platform-authoring.d.ts +39 -0
- package/catalog/epic18-rmt-app-platform-authoring.js +319 -0
- package/catalog/epic18-rmt-app-platform-fixture.d.ts +33 -0
- package/catalog/epic18-rmt-app-platform-fixture.js +221 -0
- package/catalog/epic18-rmt-app-platform-release-handoff.d.ts +30 -0
- package/catalog/epic18-rmt-app-platform-release-handoff.js +231 -0
- package/catalog/epic18-rmt-app-platform-tooling.d.ts +38 -0
- package/catalog/epic18-rmt-app-platform-tooling.js +242 -0
- package/catalog/epic18-rmt-component-template-primitives.d.ts +33 -0
- package/catalog/epic18-rmt-component-template-primitives.js +240 -0
- package/catalog/epic18-rmt-dom-descriptor-renderer.d.ts +35 -0
- package/catalog/epic18-rmt-dom-descriptor-renderer.js +232 -0
- package/catalog/epic18-rmt-event-routing-runtime.d.ts +35 -0
- package/catalog/epic18-rmt-event-routing-runtime.js +234 -0
- package/catalog/epic18-rmt-state-selector-runtime.d.ts +34 -0
- package/catalog/epic18-rmt-state-selector-runtime.js +216 -0
- package/catalog/epic18-rmt-surface-resource-graph-runtime.d.ts +36 -0
- package/catalog/epic18-rmt-surface-resource-graph-runtime.js +256 -0
- package/catalog/surface-manager-controller.js +5 -1
- package/catalog/surface-manager-materialization.js +7 -1
- package/catalog/surface-manager-overlay-bridge.js +41 -6
- package/catalog/surface-manager-workbench-fixture.js +1 -1
- package/catalog/surface-type-capability-matrix.d.ts +61 -0
- package/catalog/surface-type-capability-matrix.js +183 -0
- package/catalog/type-exports-rmt.js +37 -1
- package/catalog/type-exports.js +3 -3
- package/components/icon-packs/lucide.js +4 -0
- package/components/manifest.json +2 -0
- package/components/prism-rmt.d.ts +34 -0
- package/components/prism-rmt.js +130 -0
- package/components/xcards.js +15 -0
- package/components/xcode.d.ts +36 -1
- package/components/xcode.js +215 -20
- package/components/xfooter.js +17 -0
- package/components/xheader.js +14 -0
- package/components/xhero.js +16 -1
- package/components/xlink.js +97 -14
- package/components/xmasonry.js +15 -0
- package/components/xplayer.d.ts +44 -2
- package/components/xplayer.js +242 -15
- package/components/xrouter.js +27 -2
- package/components/xsection.js +15 -0
- package/components/xsidepanel.js +10 -2
- package/components/xsurfacemanager-controller.d.ts +2 -1
- package/components/xsurfacemanager-controller.js +27 -3
- package/components/xsurfacemanager.d.ts +2 -0
- package/components/xsurfacemanager.js +20 -8
- package/components/xsurfaceoverlay-bridge.d.ts +20 -5
- package/components/xsurfaceoverlay-bridge.js +114 -18
- package/components/xsurfaceportal.d.ts +29 -0
- package/components/xsurfaceportal.js +122 -0
- package/components/xsurfaceregion.d.ts +50 -0
- package/components/xsurfaceregion.js +285 -0
- package/components/xsurfacewindow.js +2 -1
- package/components/xtooltip.js +89 -23
- package/docs/README.md +222 -298
- package/docs/changelog.md +107 -0
- package/docs/component-catalog-coverage.md +9 -9
- package/docs/component-platform.md +19 -1
- package/docs/component-ux-app-authoring.md +56 -63
- package/docs/components/xcode.md +83 -53
- package/docs/components/xsurfaceportal.md +32 -0
- package/docs/components/xsurfaceregion.md +37 -0
- package/docs/components.md +105 -69
- package/docs/de/README.md +264 -0
- package/docs/de/XTend-ADR.md +221 -0
- package/docs/de/a11y-keyboard-smokes.md +62 -0
- package/docs/de/about.md +18 -0
- package/docs/de/api.md +157 -0
- package/docs/de/best-practices.md +76 -0
- package/docs/de/changelog.md +107 -0
- package/docs/de/component-catalog-coverage.md +58 -0
- package/docs/de/component-lab.md +103 -0
- package/docs/de/component-long-tail-migration.md +41 -0
- package/docs/de/component-platform.md +177 -0
- package/docs/de/component-ux-app-authoring.md +123 -0
- package/docs/de/component-ux-authoring.md +96 -0
- package/docs/de/component-ux-gates.md +45 -0
- package/docs/de/components/x-rmt-lifecycle-demo-build.md +60 -0
- package/docs/de/components/xalert.md +81 -0
- package/docs/de/components/xbutton.md +103 -0
- package/docs/de/components/xcalendar.md +82 -0
- package/docs/de/components/xcards.md +128 -0
- package/docs/de/components/xcheckbox.md +102 -0
- package/docs/de/components/xcode.md +156 -0
- package/docs/de/components/xdialog.md +92 -0
- package/docs/de/components/xdrawer.md +84 -0
- package/docs/de/components/xfooter.md +126 -0
- package/docs/de/components/xform.md +128 -0
- package/docs/de/components/xheader.md +308 -0
- package/docs/de/components/xhero.md +142 -0
- package/docs/de/components/xicon.md +125 -0
- package/docs/de/components/xinput.md +129 -0
- package/docs/de/components/xlightbox.md +98 -0
- package/docs/de/components/xlink.md +109 -0
- package/docs/de/components/xmasonry.md +124 -0
- package/docs/de/components/xmenu.md +158 -0
- package/docs/de/components/xmodal.md +82 -0
- package/docs/de/components/xplayer.md +104 -0
- package/docs/de/components/xpopover.md +67 -0
- package/docs/de/components/xprogress.md +56 -0
- package/docs/de/components/xradio.md +103 -0
- package/docs/de/components/xrouter.md +260 -0
- package/docs/de/components/xsection.md +125 -0
- package/docs/de/components/xselect.md +105 -0
- package/docs/de/components/xsidepanel.md +30 -0
- package/docs/de/components/xspinner.md +102 -0
- package/docs/de/components/xstate.md +148 -0
- package/docs/de/components/xstatus.md +55 -0
- package/docs/de/components/xsummary.md +78 -0
- package/docs/de/components/xsurfacemanager.md +27 -0
- package/docs/de/components/xsurfacewindow.md +21 -0
- package/docs/de/components/xtabs.md +160 -0
- package/docs/de/components/xtextarea.md +98 -0
- package/docs/de/components/xtheme.md +167 -0
- package/docs/de/components/xtoast.md +62 -0
- package/docs/de/components/xtooltip.md +66 -0
- package/docs/de/components/xtype.md +82 -0
- package/docs/de/components/xutils.md +144 -0
- package/docs/de/components/xwriter.md +94 -0
- package/docs/de/components.md +153 -0
- package/docs/de/conditional-network-evidence-ci.md +38 -0
- package/docs/de/conditional-network-evidence.md +50 -0
- package/docs/de/core-migration-guide.md +110 -0
- package/docs/de/design-tokens.md +116 -0
- package/docs/de/docs-rmt-production-hardening.md +31 -0
- package/docs/de/enterprise-adoption.md +413 -0
- package/docs/de/enterprise-component-flex-release-handoff.md +129 -0
- package/docs/de/epic10-platform-gates.md +62 -0
- package/docs/de/epic10-release-handoff.md +81 -0
- package/docs/de/epic11-enterprise-ux-handoff.md +70 -0
- package/docs/de/epic12-rc0-handoff.md +61 -0
- package/docs/de/epic18-media-manager-vendor-upstream.md +318 -0
- package/docs/de/epic18-rmt-app-platform-release-handoff.md +67 -0
- package/docs/de/epic18-vendor-bugfixes.md +34 -0
- package/docs/de/existing-component-metadata.md +67 -0
- package/docs/de/hydration-performance-closure.md +34 -0
- package/docs/de/hydration-policies.md +71 -0
- package/docs/de/known-residual-triage.md +22 -0
- package/docs/de/manifest-import-policy.md +79 -0
- package/docs/de/manifest.md +112 -0
- package/docs/de/motion-contrast.md +67 -0
- package/docs/de/package-export-lock.md +44 -0
- package/docs/de/performance-measurements.md +106 -0
- package/docs/de/performance-regression.md +89 -0
- package/docs/de/performance.md +94 -0
- package/docs/de/previews/README.md +17 -0
- package/docs/de/prod-browser-csp-smokes.md +40 -0
- package/docs/de/public-component-types.md +79 -0
- package/docs/de/quick-start-guide.md +220 -0
- package/docs/de/rc0-adoption-guide.md +102 -0
- package/docs/de/rc0-gate-matrix.md +58 -0
- package/docs/de/rc1-gate-matrix-ci-handoff.md +56 -0
- package/docs/de/rc1-migration-notes.md +69 -0
- package/docs/de/rc1-readiness.md +46 -0
- package/docs/de/release-owner-acceptance.md +56 -0
- package/docs/de/release-report-pack-dry-run-evidence.md +39 -0
- package/docs/de/rmt-action-effect-runtime.md +81 -0
- package/docs/de/rmt-app-platform-authoring.md +54 -0
- package/docs/de/rmt-app-platform-fixture.md +46 -0
- package/docs/de/rmt-app-platform-migration-guide.md +88 -0
- package/docs/de/rmt-app-platform-tooling.md +79 -0
- package/docs/de/rmt-component-template-primitives.md +57 -0
- package/docs/de/rmt-dom-descriptor-renderer.md +64 -0
- package/docs/de/rmt-dsl-authoring-polish.md +145 -0
- package/docs/de/rmt-event-routing-runtime.md +81 -0
- package/docs/de/rmt-first-demo-app.md +77 -0
- package/docs/de/rmt-first-xtend-apps.md +129 -0
- package/docs/de/rmt-kernel-panic-recovery-incident-handoff.md +61 -0
- package/docs/de/rmt-kernel-security-hardening-migration.md +50 -0
- package/docs/de/rmt-kernel-trusted-output-authoring.md +69 -0
- package/docs/de/rmt-language-server.md +234 -0
- package/docs/de/rmt-lifecycle-demo.md +24 -0
- package/docs/de/rmt-linter.md +140 -0
- package/docs/de/rmt-node-ssr-adapter.md +100 -0
- package/docs/de/rmt-php-ssr-adapter.md +120 -0
- package/docs/de/rmt-production-readiness.md +63 -0
- package/docs/de/rmt-state-selector-runtime.md +47 -0
- package/docs/de/rmt-surface-resource-graph-runtime.md +92 -0
- package/docs/de/rmt-tooling-release-gates.md +77 -0
- package/docs/de/rmt-vnext-authoring.md +170 -0
- package/docs/de/rmt-vnext-component-primitives.md +188 -0
- package/docs/de/rmt-vnext-cross-surface-events.md +68 -0
- package/docs/de/rmt-vnext-enterprise-mfe-handoff.md +70 -0
- package/docs/de/rmt-vnext-fabric-bridge-evidence.md +81 -0
- package/docs/de/rmt-vnext-migration-notes.md +62 -0
- package/docs/de/rmt-vnext-primitive-authoring-tooling.md +247 -0
- package/docs/de/rmt-vnext-primitive-grammar-design.md +289 -0
- package/docs/de/rmt-vnext-primitive-lowering.md +108 -0
- package/docs/de/rmt-vnext-primitive-migration.md +119 -0
- package/docs/de/rmt-vnext-primitive-parser-ast.md +76 -0
- package/docs/de/rmt-vnext-primitive-semantic-graph.md +118 -0
- package/docs/de/rmt-vnext-primitives-compiler-backlog.md +739 -0
- package/docs/de/rmt-vnext-release-handoff.md +83 -0
- package/docs/de/rmt-vnext-remote-surfaces.md +90 -0
- package/docs/de/rmt-vnext-source-to-sea-gate.md +612 -0
- package/docs/de/rmt-vnext-surface-registry-enterprise.md +76 -0
- package/docs/de/screenreader-signals.md +56 -0
- package/docs/de/supply-chain-gates.md +100 -0
- package/docs/de/surface-manager-authoring-guide.md +94 -0
- package/docs/de/surface-manager-browser-lab.md +45 -0
- package/docs/de/surface-manager-component-lab.md +43 -0
- package/docs/de/surface-manager-controller.md +66 -0
- package/docs/de/surface-manager-layout-engines.md +32 -0
- package/docs/de/surface-manager-lazy-hydration.md +63 -0
- package/docs/de/surface-manager-migration-guide.md +122 -0
- package/docs/de/surface-manager-native-rmt-surfaces.md +38 -0
- package/docs/de/surface-manager-overlay-bridge.md +53 -0
- package/docs/de/surface-manager-persistence.md +30 -0
- package/docs/de/surface-manager-quality-gates.md +51 -0
- package/docs/de/surface-manager-release-handoff.md +68 -0
- package/docs/de/surface-manager-remote-policy.md +54 -0
- package/docs/de/surface-manager-rmt-authoring.md +102 -0
- package/docs/de/surface-manager-route-lifecycle.md +59 -0
- package/docs/de/surface-manager-runtime-release-handoff.md +69 -0
- package/docs/de/surface-manager-side-panel-runtime.md +36 -0
- package/docs/de/surface-manager-stack-policy.md +39 -0
- package/docs/de/surface-manager-window-runtime.md +47 -0
- package/docs/de/surface-manager-workbench-fixture.md +43 -0
- package/docs/de/third-party-design-authoring.md +406 -0
- package/docs/de/trusted-dom-boundary-browser-proof.md +32 -0
- package/docs/de/trusted-dom-sanitizing.md +110 -0
- package/docs/de/type-exports.md +61 -0
- package/docs/de/typescript-components.md +63 -0
- package/docs/de/visual-browser-regression.md +83 -0
- package/docs/de/visual-owner-artifacts.md +46 -0
- package/docs/de/visual-snapshot-automation.md +87 -0
- package/docs/de/xtend-api-types.md +55 -0
- package/docs/de/xtend-builder-types.md +55 -0
- package/docs/de/xtend-catalog-types.md +44 -0
- package/docs/de/xtend-fabric-rmt-lane-mapping.md +143 -0
- package/docs/de/xtend-fabric.md +474 -0
- package/docs/de/xtend-loader-types.md +58 -0
- package/docs/de/xtend-loader.md +265 -0
- package/docs/de/xtend-policy-types.md +38 -0
- package/docs/de/xtend-rmt-types.md +40 -0
- package/docs/de/xtend-vendor-types.md +36 -0
- package/docs/de/xtendrmt-app-dsl.md +334 -0
- package/docs/de/xtendrmt-migration-guide.md +266 -0
- package/docs/de/xtendrmt-native-authoring.md +333 -0
- package/docs/de/xtendrmt-overview.md +109 -0
- package/docs/de/xtendrmt-parsedown-scheduling.md +301 -0
- package/docs/de/xtendrmt-runtime-bridge.md +155 -0
- package/docs/en/README.md +163 -0
- package/docs/en/XTend-ADR.md +221 -0
- package/docs/en/a11y-keyboard-smokes.md +68 -0
- package/docs/en/about.md +25 -0
- package/docs/en/api.md +171 -0
- package/docs/en/best-practices.md +125 -0
- package/docs/en/changelog.md +104 -0
- package/docs/en/component-catalog-coverage.md +104 -0
- package/docs/en/component-lab.md +103 -0
- package/docs/en/component-long-tail-migration.md +41 -0
- package/docs/en/component-platform.md +243 -0
- package/docs/en/component-ux-app-authoring.md +118 -0
- package/docs/en/component-ux-authoring.md +96 -0
- package/docs/en/component-ux-gates.md +45 -0
- package/docs/en/components/x-rmt-lifecycle-demo-build.md +75 -0
- package/docs/en/components/xalert.md +94 -0
- package/docs/en/components/xbutton.md +118 -0
- package/docs/en/components/xcalendar.md +95 -0
- package/docs/en/components/xcards.md +139 -0
- package/docs/en/components/xcheckbox.md +118 -0
- package/docs/en/components/xcode.md +153 -0
- package/docs/en/components/xdialog.md +108 -0
- package/docs/en/components/xdrawer.md +110 -0
- package/docs/en/components/xfooter.md +138 -0
- package/docs/en/components/xform.md +147 -0
- package/docs/en/components/xheader.md +308 -0
- package/docs/en/components/xhero.md +157 -0
- package/docs/en/components/xicon.md +149 -0
- package/docs/en/components/xinput.md +147 -0
- package/docs/en/components/xlightbox.md +113 -0
- package/docs/en/components/xlink.md +130 -0
- package/docs/en/components/xmasonry.md +136 -0
- package/docs/en/components/xmenu.md +185 -0
- package/docs/en/components/xmodal.md +102 -0
- package/docs/en/components/xplayer.md +114 -0
- package/docs/en/components/xpopover.md +87 -0
- package/docs/en/components/xprogress.md +73 -0
- package/docs/en/components/xradio.md +119 -0
- package/docs/en/components/xrouter.md +260 -0
- package/docs/en/components/xsection.md +136 -0
- package/docs/en/components/xselect.md +122 -0
- package/docs/en/components/xsidepanel.md +48 -0
- package/docs/en/components/xspinner.md +118 -0
- package/docs/en/components/xstate.md +163 -0
- package/docs/en/components/xstatus.md +71 -0
- package/docs/en/components/xsummary.md +90 -0
- package/docs/en/components/xsurfacemanager.md +42 -0
- package/docs/en/components/xsurfacewindow.md +31 -0
- package/docs/en/components/xtabs.md +187 -0
- package/docs/en/components/xtextarea.md +115 -0
- package/docs/en/components/xtheme.md +203 -0
- package/docs/en/components/xtoast.md +78 -0
- package/docs/en/components/xtooltip.md +85 -0
- package/docs/en/components/xtype.md +91 -0
- package/docs/en/components/xutils.md +161 -0
- package/docs/en/components/xwriter.md +106 -0
- package/docs/en/components.md +151 -0
- package/docs/en/conditional-network-evidence-ci.md +38 -0
- package/docs/en/conditional-network-evidence.md +50 -0
- package/docs/en/core-migration-guide.md +110 -0
- package/docs/en/design-tokens.md +137 -0
- package/docs/en/docs-rmt-production-hardening.md +31 -0
- package/docs/en/enterprise-adoption.md +413 -0
- package/docs/en/enterprise-component-flex-release-handoff.md +129 -0
- package/docs/en/epic10-platform-gates.md +62 -0
- package/docs/en/epic10-release-handoff.md +81 -0
- package/docs/en/epic11-enterprise-ux-handoff.md +70 -0
- package/docs/en/epic12-rc0-handoff.md +61 -0
- package/docs/en/epic18-media-manager-vendor-upstream.md +232 -0
- package/docs/en/epic18-rmt-app-platform-release-handoff.md +60 -0
- package/docs/en/epic18-vendor-bugfixes.md +29 -0
- package/docs/en/existing-component-metadata.md +67 -0
- package/docs/en/hydration-performance-closure.md +34 -0
- package/docs/en/hydration-policies.md +75 -0
- package/docs/en/known-residual-triage.md +22 -0
- package/docs/en/manifest-import-policy.md +81 -0
- package/docs/en/manifest.md +135 -0
- package/docs/en/motion-contrast.md +67 -0
- package/docs/en/package-export-lock.md +44 -0
- package/docs/en/performance-measurements.md +106 -0
- package/docs/en/performance-regression.md +89 -0
- package/docs/en/performance.md +132 -0
- package/docs/en/previews/README.md +17 -0
- package/docs/en/prod-browser-csp-smokes.md +40 -0
- package/docs/en/public-component-types.md +79 -0
- package/docs/en/quick-start-guide.md +189 -0
- package/docs/en/rc0-adoption-guide.md +102 -0
- package/docs/en/rc0-gate-matrix.md +58 -0
- package/docs/en/rc1-gate-matrix-ci-handoff.md +56 -0
- package/docs/en/rc1-migration-notes.md +69 -0
- package/docs/en/rc1-readiness.md +46 -0
- package/docs/en/release-owner-acceptance.md +56 -0
- package/docs/en/release-report-pack-dry-run-evidence.md +39 -0
- package/docs/en/rmt-action-effect-runtime.md +101 -0
- package/docs/en/rmt-app-platform-authoring.md +47 -0
- package/docs/en/rmt-app-platform-fixture.md +35 -0
- package/docs/en/rmt-app-platform-migration-guide.md +75 -0
- package/docs/en/rmt-app-platform-tooling.md +58 -0
- package/docs/en/rmt-component-template-primitives.md +49 -0
- package/docs/en/rmt-dom-descriptor-renderer.md +54 -0
- package/docs/en/rmt-dsl-authoring-polish.md +143 -0
- package/docs/en/rmt-event-routing-runtime.md +98 -0
- package/docs/en/rmt-first-demo-app.md +87 -0
- package/docs/en/rmt-first-xtend-apps.md +127 -0
- package/docs/en/rmt-kernel-panic-recovery-incident-handoff.md +60 -0
- package/docs/en/rmt-kernel-security-hardening-migration.md +49 -0
- package/docs/en/rmt-kernel-trusted-output-authoring.md +68 -0
- package/docs/en/rmt-language-server.md +243 -0
- package/docs/en/rmt-lifecycle-demo.md +23 -0
- package/docs/en/rmt-linter.md +146 -0
- package/docs/en/rmt-node-ssr-adapter.md +99 -0
- package/docs/en/rmt-php-ssr-adapter.md +118 -0
- package/docs/en/rmt-production-readiness.md +63 -0
- package/docs/en/rmt-state-selector-runtime.md +34 -0
- package/docs/en/rmt-surface-resource-graph-runtime.md +68 -0
- package/docs/en/rmt-tooling-release-gates.md +77 -0
- package/docs/en/rmt-vnext-authoring.md +102 -0
- package/docs/en/rmt-vnext-component-primitives.md +185 -0
- package/docs/en/rmt-vnext-cross-surface-events.md +59 -0
- package/docs/en/rmt-vnext-enterprise-mfe-handoff.md +62 -0
- package/docs/en/rmt-vnext-fabric-bridge-evidence.md +64 -0
- package/docs/en/rmt-vnext-migration-notes.md +62 -0
- package/docs/en/rmt-vnext-primitive-authoring-tooling.md +174 -0
- package/docs/en/rmt-vnext-primitive-grammar-design.md +268 -0
- package/docs/en/rmt-vnext-primitive-lowering.md +91 -0
- package/docs/en/rmt-vnext-primitive-migration.md +93 -0
- package/docs/en/rmt-vnext-primitive-parser-ast.md +59 -0
- package/docs/en/rmt-vnext-primitive-semantic-graph.md +103 -0
- package/docs/en/rmt-vnext-primitives-compiler-backlog.md +327 -0
- package/docs/en/rmt-vnext-release-handoff.md +83 -0
- package/docs/en/rmt-vnext-remote-surfaces.md +81 -0
- package/docs/en/rmt-vnext-source-to-sea-gate.md +482 -0
- package/docs/en/rmt-vnext-surface-registry-enterprise.md +68 -0
- package/docs/en/screenreader-signals.md +56 -0
- package/docs/en/supply-chain-gates.md +106 -0
- package/docs/en/surface-manager-authoring-guide.md +94 -0
- package/docs/en/surface-manager-browser-lab.md +45 -0
- package/docs/en/surface-manager-component-lab.md +43 -0
- package/docs/en/surface-manager-controller.md +66 -0
- package/docs/en/surface-manager-layout-engines.md +32 -0
- package/docs/en/surface-manager-lazy-hydration.md +63 -0
- package/docs/en/surface-manager-migration-guide.md +113 -0
- package/docs/en/surface-manager-native-rmt-surfaces.md +38 -0
- package/docs/en/surface-manager-overlay-bridge.md +53 -0
- package/docs/en/surface-manager-persistence.md +30 -0
- package/docs/en/surface-manager-quality-gates.md +51 -0
- package/docs/en/surface-manager-release-handoff.md +68 -0
- package/docs/en/surface-manager-remote-policy.md +54 -0
- package/docs/en/surface-manager-rmt-authoring.md +89 -0
- package/docs/en/surface-manager-route-lifecycle.md +59 -0
- package/docs/en/surface-manager-runtime-release-handoff.md +69 -0
- package/docs/en/surface-manager-side-panel-runtime.md +36 -0
- package/docs/en/surface-manager-stack-policy.md +39 -0
- package/docs/en/surface-manager-window-runtime.md +47 -0
- package/docs/en/surface-manager-workbench-fixture.md +43 -0
- package/docs/en/third-party-design-authoring.md +406 -0
- package/docs/en/trusted-dom-boundary-browser-proof.md +32 -0
- package/docs/en/trusted-dom-sanitizing.md +124 -0
- package/docs/en/type-exports.md +61 -0
- package/docs/en/typescript-components.md +63 -0
- package/docs/en/visual-browser-regression.md +83 -0
- package/docs/en/visual-owner-artifacts.md +46 -0
- package/docs/en/visual-snapshot-automation.md +87 -0
- package/docs/en/xtend-api-types.md +55 -0
- package/docs/en/xtend-builder-types.md +55 -0
- package/docs/en/xtend-catalog-types.md +44 -0
- package/docs/en/xtend-fabric-rmt-lane-mapping.md +143 -0
- package/docs/en/xtend-fabric.md +474 -0
- package/docs/en/xtend-loader-types.md +58 -0
- package/docs/en/xtend-loader.md +265 -0
- package/docs/en/xtend-policy-types.md +38 -0
- package/docs/en/xtend-rmt-types.md +40 -0
- package/docs/en/xtend-vendor-types.md +36 -0
- package/docs/en/xtendrmt-app-dsl.md +331 -0
- package/docs/en/xtendrmt-migration-guide.md +256 -0
- package/docs/en/xtendrmt-native-authoring.md +336 -0
- package/docs/en/xtendrmt-overview.md +63 -0
- package/docs/en/xtendrmt-parsedown-scheduling.md +301 -0
- package/docs/en/xtendrmt-runtime-bridge.md +155 -0
- package/docs/enterprise-adoption.md +4 -2
- package/docs/epic18-media-manager-vendor-upstream.md +318 -0
- package/docs/epic18-rmt-app-platform-release-handoff.md +67 -0
- package/docs/epic18-vendor-bugfixes.md +34 -0
- package/docs/index.php +1056 -109
- package/docs/manifest.md +8 -2
- package/docs/menu.json +986 -133
- package/docs/package-export-lock.md +2 -2
- package/docs/public-component-types.md +2 -2
- package/docs/quick-start-guide.md +126 -58
- package/docs/rmt-action-effect-runtime.md +101 -0
- package/docs/rmt-app-platform-authoring.md +54 -0
- package/docs/rmt-app-platform-fixture.md +46 -0
- package/docs/rmt-app-platform-migration-guide.md +88 -0
- package/docs/rmt-app-platform-tooling.md +79 -0
- package/docs/rmt-component-template-primitives.md +57 -0
- package/docs/rmt-dom-descriptor-renderer.md +64 -0
- package/docs/rmt-dsl-authoring-polish.md +67 -44
- package/docs/rmt-event-routing-runtime.md +98 -0
- package/docs/rmt-first-demo-app.md +2 -2
- package/docs/rmt-first-xtend-apps.md +70 -46
- package/docs/rmt-language-server.md +61 -4
- package/docs/rmt-lifecycle-demo.md +1 -2
- package/docs/rmt-node-ssr-adapter.md +144 -0
- package/docs/rmt-php-ssr-adapter.md +158 -0
- package/docs/rmt-state-selector-runtime.md +47 -0
- package/docs/rmt-surface-resource-graph-runtime.md +92 -0
- package/docs/rmt-vnext-authoring.md +128 -18
- package/docs/rmt-vnext-component-primitives.md +188 -0
- package/docs/rmt-vnext-fabric-bridge-evidence.md +81 -0
- package/docs/rmt-vnext-primitive-authoring-tooling.md +247 -0
- package/docs/rmt-vnext-primitive-grammar-design.md +289 -0
- package/docs/rmt-vnext-primitive-lowering.md +108 -0
- package/docs/rmt-vnext-primitive-migration.md +119 -0
- package/docs/rmt-vnext-primitive-parser-ast.md +76 -0
- package/docs/rmt-vnext-primitive-semantic-graph.md +118 -0
- package/docs/rmt-vnext-primitives-compiler-backlog.md +742 -0
- package/docs/rmt-vnext-release-handoff.md +14 -0
- package/docs/rmt-vnext-source-to-sea-gate.md +629 -0
- package/docs/surface-manager-migration-guide.md +34 -6
- package/docs/surface-manager-overlay-bridge.md +9 -4
- package/docs/surface-manager-rmt-authoring.md +50 -34
- package/docs/surface-manager-workbench-fixture.md +1 -2
- package/docs/third-party-design-authoring.md +1 -1
- package/docs/type-exports.md +3 -3
- package/docs/utils/pageloader.js +811 -62
- package/docs/visual-browser-regression.md +1 -1
- package/docs/xtend-rmt-types.md +3 -2
- package/docs/xtendrmt-app-dsl.md +187 -122
- package/docs/xtendrmt-docs-shell-vnext.rmt +165 -0
- package/docs/xtendrmt-migration-guide.md +48 -17
- package/docs/xtendrmt-native-authoring.md +213 -217
- package/docs/xtendrmt-overview.md +81 -61
- package/docs/xtendrmt-parsedown-scheduling.md +23 -8
- package/fabric/package.json +1 -1
- package/package.json +684 -21
- package/tools/package.json +5 -1
- package/tools/rmt-editor/vscode/README.md +72 -5
- package/tools/rmt-editor/vscode/XTend-Logo.png +0 -0
- package/tools/rmt-editor/vscode/extension.d.ts +33 -0
- package/tools/rmt-editor/vscode/extension.js +1816 -7
- package/tools/rmt-editor/vscode/language-configuration.json +2 -1
- package/tools/rmt-editor/vscode/package.json +193 -2
- package/tools/rmt-editor/vscode/snippets/rmt.code-snippets +41 -0
- package/tools/rmt-editor/vscode/syntaxes/rmt.tmLanguage.json +103 -1
- package/tools/rmt-editor/vscode/templates/launch.json +70 -0
- package/tools/rmt-editor/vscode/templates/tasks.json +172 -0
- package/tools/rmt-editor/vscode/xtend-rmt-language-0.0.0-enterprise-readiness.vsix +0 -0
- package/tools/rmt-language/app-platform-tooling.d.ts +128 -0
- package/tools/rmt-language/app-platform-tooling.js +677 -0
- package/tools/rmt-language/completions.d.ts +5 -0
- package/tools/rmt-language/completions.js +185 -3
- package/tools/rmt-language/diagnostics.js +54 -0
- package/tools/rmt-language/hover.js +36 -0
- package/tools/rmt-language/rmt-tooling-public-types.d.ts +7 -0
- package/tools/rmt-language/rules/app-platform-policy.js +39 -0
- package/tools/rmt-language/rules/index.js +5 -1
- package/tools/rmt-language/semantic-graph.d.ts +6 -0
- package/tools/rmt-language/semantic-graph.js +928 -0
- package/tools/rmt-language/snippets/index.js +44 -0
- package/tools/rmt-language/snippets/rmt.code-snippets +41 -0
- package/tools/rmt-language/vnext-compatibility.d.ts +10 -0
- package/tools/rmt-language/vnext-compatibility.js +642 -0
- package/tools/rmt-language/vnext-compiler.d.ts +5 -0
- package/tools/rmt-language/vnext-compiler.js +863 -17
- package/tools/rmt-language/vnext-parser.js +725 -9
- package/tools/rmt-language/vnext-release.d.ts +1 -0
- package/tools/rmt-language/vnext-release.js +20 -0
- package/tools/rmt-language/vnext-source-to-sea.d.ts +33 -0
- package/tools/rmt-language/vnext-source-to-sea.js +2227 -0
- package/tools/rmt-language/vnext-surfaces.js +111 -52
- package/tools/rmt-language/vnext-tooling.d.ts +19 -1
- package/tools/rmt-language/vnext-tooling.js +1247 -5
- package/tools/rmt-language-server/protocol.js +3 -0
- package/tools/rmt-language-server/server.d.ts +2 -0
- package/tools/rmt-language-server/server.js +176 -22
- package/tools/rmt-linter/cli.d.ts +2 -0
- package/tools/rmt-linter/cli.js +62 -0
- package/xtend-builder/generators/registry.js +11 -0
- package/xtend-builder/generators/rmt-app-platform.js +239 -0
- package/xtend-builder/generators/rmt-lifecycle-demo.js +3 -11
- package/xtend-builder/lib/cli.js +38 -0
- package/xtend-builder/package.json +3 -3
- package/xtend-builder/scaffold.config.js +29 -2
- package/xtend.css +49 -2
- package/xtendrmt/package.json +49 -1
- package/xtendrmt/rmt-action-effect-runtime.d.ts +126 -0
- package/xtendrmt/rmt-action-effect-runtime.js +494 -0
- package/xtendrmt/rmt-component-capability-registry.d.ts +180 -0
- package/xtendrmt/rmt-component-capability-registry.js +636 -0
- package/xtendrmt/rmt-core.d.ts +6 -0
- package/xtendrmt/rmt-core.esm.js +32 -6
- package/xtendrmt/rmt-dom-descriptor-renderer.d.ts +107 -0
- package/xtendrmt/rmt-dom-descriptor-renderer.js +1066 -0
- package/xtendrmt/rmt-event-routing-runtime.d.ts +144 -0
- package/xtendrmt/rmt-event-routing-runtime.js +666 -0
- package/xtendrmt/rmt-lifecycle-demo.app.js +2 -2
- package/xtendrmt/rmt-lifecycle-demo.core.json +4 -0
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.app.js +1 -1
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.scaffold.json +2 -2
- package/xtendrmt/rmt-lifecycle-demo.scaffold.json +4 -4
- package/xtendrmt/rmt-native-shell-runtime.d.ts +77 -0
- package/xtendrmt/rmt-native-shell-runtime.js +309 -0
- package/xtendrmt/rmt-node-ssr-adapter.d.ts +197 -0
- package/xtendrmt/rmt-node-ssr-adapter.js +1006 -0
- package/xtendrmt/rmt-php-ssr-adapter.php +976 -0
- package/xtendrmt/rmt-runtime.browser.js +32 -6
- package/xtendrmt/rmt-runtime.esm.js +32 -6
- package/xtendrmt/rmt-state-selector-runtime.d.ts +166 -0
- package/xtendrmt/rmt-state-selector-runtime.js +866 -0
- package/xtendrmt/rmt-surface-resource-graph-runtime.d.ts +224 -0
- package/xtendrmt/rmt-surface-resource-graph-runtime.js +932 -0
- package/xtendrmt/rmt-vnext-enterprise-mfe-demo.core.json +3 -0
- package/xtendrmt/rmt-vnext-reference-demo.core.json +3 -0
- package/xtendrmt/xtendrmt-bestcase-demo.core.json +3420 -372
- package/xtendrmt/xtendrmt-bestcase-demo.js +424 -8
- package/xtendrmt/xtendrmt-bestcase-demo.rmt +214 -6
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
# RMT vNext Source-to-Sea Gate
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.vnext.source-to-sea-gate.v1`
|
|
4
|
+
- Evidence: `xtend.rmt.vnext.source-to-sea-evidence.v1`
|
|
5
|
+
- Evidence Report: `xtend.rmt.vnext.source-to-sea-evidence-report.v1`
|
|
6
|
+
- Object Matrix: `xtend.rmt.vnext.source-to-sea-object-matrix.v1`
|
|
7
|
+
- CI Artifact Validation: `xtend.rmt.vnext.source-to-sea-ci-artifact-validation.v1`
|
|
8
|
+
- Fabric Bridge Evidence: `xtend.rmt.vnext.fabric-bridge-evidence.v1`
|
|
9
|
+
- Workpackage: `RMT-VNEXT-PRIM-06`
|
|
10
|
+
- Active Bridge Workpackage: `RMT-VNEXT-PRIM-05`
|
|
11
|
+
- Status: `in_progress`
|
|
12
|
+
- Fabric Bridge Handoff: [RMT vNext Fabric Bridge Evidence](./rmt-vnext-fabric-bridge-evidence.md)
|
|
13
|
+
- Source: Media Manager downstream transfer, `2026-05-19`
|
|
14
|
+
|
|
15
|
+
## Goal
|
|
16
|
+
|
|
17
|
+
`RMT-VNEXT-PRIM-06` starts the full-stack gate for vNext-authored primitives. The gate proves not only parser or JSON output, but reconstructs the same visible object lifecycle across all runtime boundaries:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
source -> kernel -> Fabric -> UI -> Browser
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The first PRIM-06 slice remains deterministic in the default run and works without an external browser driver. It connects a vNext fixture with a self-checking browser-smoke fixture and produces machine-readable evidence from that. With the current expansion, a WebDriver, Firefox/Geckodriver, ChromeDriver or Safari Driver path can open the same browser fixture, read the same result key and compare the real browser result against compiler, kernel and Fabric evidence. Browser execution evidence can now also be written as a release artifact at `.xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json`. In GitHub Actions, this path is optional and only runs on manual `workflow_dispatch` with `run_source_to_sea=true`.
|
|
24
|
+
|
|
25
|
+
## Fixture
|
|
26
|
+
|
|
27
|
+
The vNext fixture is located at:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
tests/rmt-language/fixtures/vnext-source-to-sea.rmt
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
It declares exclusively in RMT vNext:
|
|
34
|
+
|
|
35
|
+
- `state demo.feedback.status`
|
|
36
|
+
- `state demo.feedback.toast`
|
|
37
|
+
- `state demo.feedback.detail`
|
|
38
|
+
- `state demo.feedback.audit`
|
|
39
|
+
- `selector demo.feedback.status`
|
|
40
|
+
- `selector demo.feedback.toast`
|
|
41
|
+
- `selector demo.feedback.detail`
|
|
42
|
+
- `selector demo.feedback.audit`
|
|
43
|
+
- `action demo.feedback.save`
|
|
44
|
+
- `action demo.feedback.dismiss`
|
|
45
|
+
- `action demo.feedback.detail.ack`
|
|
46
|
+
- `action demo.feedback.audit.review`
|
|
47
|
+
- `portal surface.root`
|
|
48
|
+
- `resource demo.feedback.timer`
|
|
49
|
+
- `resource demo.feedback.toastTimer`
|
|
50
|
+
- `resource demo.feedback.detailTimer`
|
|
51
|
+
- `resource demo.feedback.auditTimer`
|
|
52
|
+
- `surface demo.feedback.status`
|
|
53
|
+
- `surface demo.feedback.toast`
|
|
54
|
+
- `surface demo.feedback.detail`
|
|
55
|
+
- `surface demo.feedback.audit`
|
|
56
|
+
- one `visible` lane with `hydrate feedback-status`
|
|
57
|
+
- a second `idle` lane with `hydrate feedback-toast`
|
|
58
|
+
- a `transition` lane with `mount feedback-detail`
|
|
59
|
+
- a second `transition` lane with `mount feedback-audit`
|
|
60
|
+
- a click event on `[data-action='save']`
|
|
61
|
+
- a click event on `[data-action='dismiss']`
|
|
62
|
+
- a click event on `[data-action='ack-detail']`
|
|
63
|
+
- a click event on `[data-action='review-audit']`
|
|
64
|
+
- a cross-primitive reducer from `demo.feedback.save` to `state.demo.feedback.toast.text`
|
|
65
|
+
|
|
66
|
+
This puts state, selector, action, event, surface, lane/fiber and lifecycle owner in the same authoring language.
|
|
67
|
+
|
|
68
|
+
## Browser Probe
|
|
69
|
+
|
|
70
|
+
The browser fixture is located at:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
tests/browser/fixtures/rmt-vnext-source-to-sea-smoke.html
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
It contains visible DOM markers:
|
|
77
|
+
|
|
78
|
+
```html
|
|
79
|
+
data-rmt-primitive-id="demo.feedback.status"
|
|
80
|
+
data-rmt-primitive-id="demo.feedback.toast"
|
|
81
|
+
data-rmt-primitive-id="demo.feedback.detail"
|
|
82
|
+
data-rmt-primitive-id="demo.feedback.audit"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
and a stable result key:
|
|
86
|
+
|
|
87
|
+
```js
|
|
88
|
+
window.__xtendRmtVNextSourceToSeaResult
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The fixture checks locally that the object is visible, carries the expected schedule/fiber metadata, records the RMT action event on click and changes the visible text from `Ready` to `Saved`.
|
|
92
|
+
|
|
93
|
+
Since `RMT-VNEXT-PRIM-05`, the same DOM probe also carries visible Fabric bridge markers:
|
|
94
|
+
|
|
95
|
+
```html
|
|
96
|
+
data-xtend-fabric-lane="visible"
|
|
97
|
+
data-xtend-fabric-fiber="fiber:demo.feedback/demo.feedback.status/visible/0"
|
|
98
|
+
data-xtend-fabric-schedule="component.visible.hydrate"
|
|
99
|
+
data-xtend-host-adapter-telemetry="xtend.component.lifecycle-telemetry.v1"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The bridge also hardens a lane matrix for `user-blocking`, `transition`, `idle`, `background` and `diagnostics`. Every matrix lane creates a real Fabric fiber, a Fabric/RMT mapping decision and a telemetry snapshot entry.
|
|
103
|
+
|
|
104
|
+
The browser probe additionally contains a host-adapter telemetry record with `xtend.component.lifecycle-telemetry.v1`. The gate normalizes this record through `fabric.recordComponentTelemetry(...)` so PRIM-05 can prove the XTend UI host-adapter layer in the Fabric snapshot.
|
|
105
|
+
|
|
106
|
+
Since the multi-object expansion, the gate projects host-adapter telemetry per primitive. `demo.feedback.status` stays on `visible` and `component.visible.hydrate`, while `demo.feedback.toast` is validated through `idle` and `component.idle.hydrate`. `demo.feedback.detail` and `demo.feedback.audit` are separate route targets on the `transition` lane.
|
|
107
|
+
|
|
108
|
+
PRIM-05 also binds the production fiber instrumentations:
|
|
109
|
+
|
|
110
|
+
- `createComponentFiberInstrumentation(...)` creates `component.mount` and `component.hydrate`.
|
|
111
|
+
- `createRouteFiberInstrumentation(...)` creates `route.navigate` and `route.render`.
|
|
112
|
+
- The schedule refs `component.visible.mount`, `component.idle.hydrate`, `ui.user-blocking.input` and `route.transition.render` must appear in the Fabric telemetry snapshot.
|
|
113
|
+
|
|
114
|
+
## Evidence API
|
|
115
|
+
|
|
116
|
+
The gate is produced by `tools/rmt-language/vnext-source-to-sea.js`:
|
|
117
|
+
|
|
118
|
+
```js
|
|
119
|
+
const {
|
|
120
|
+
createRmtVNextFabricBridgeEvidence,
|
|
121
|
+
createRmtVNextSourceToSeaEvidenceReport,
|
|
122
|
+
createRmtVNextSourceToSeaEvidence,
|
|
123
|
+
runRmtVNextSourceToSeaBrowserExecution,
|
|
124
|
+
writeRmtVNextSourceToSeaEvidenceReport
|
|
125
|
+
} = require('./tools/rmt-language/vnext-source-to-sea');
|
|
126
|
+
|
|
127
|
+
const evidence = createRmtVNextSourceToSeaEvidence({
|
|
128
|
+
text,
|
|
129
|
+
filePath
|
|
130
|
+
}, {
|
|
131
|
+
browserFixtureText,
|
|
132
|
+
browserFixturePath: 'tests/browser/fixtures/rmt-vnext-source-to-sea-smoke.html'
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
const browserExecution = await runRmtVNextSourceToSeaBrowserExecution(evidence, {
|
|
136
|
+
rootDir: process.cwd(),
|
|
137
|
+
browserFixturePath: 'tests/browser/fixtures/rmt-vnext-source-to-sea-smoke.html',
|
|
138
|
+
browserDriver: process.env.RMT_VNEXT_SOURCE_TO_SEA_BROWSER_DRIVER || 'chromedriver',
|
|
139
|
+
requireBrowserExecution: true
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
const evidenceReport = await createRmtVNextSourceToSeaEvidenceReport({
|
|
143
|
+
rootDir: process.cwd(),
|
|
144
|
+
evidence,
|
|
145
|
+
browserExecution
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
await writeRmtVNextSourceToSeaEvidenceReport({
|
|
149
|
+
rootDir: process.cwd()
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Evidence must correlate under the same primitive ID:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"schema": "xtend.rmt.vnext.source-to-sea-evidence.v1",
|
|
158
|
+
"primitiveId": "demo.feedback.status",
|
|
159
|
+
"sourcePointer": "/events/0",
|
|
160
|
+
"kernel": {
|
|
161
|
+
"scheduleRef": "schedule:demo.feedback/demo.feedback.status/visible"
|
|
162
|
+
},
|
|
163
|
+
"fabric": {
|
|
164
|
+
"schema": "xtend.rmt.vnext.fabric-bridge-evidence.v1",
|
|
165
|
+
"workpackage": "RMT-VNEXT-PRIM-05",
|
|
166
|
+
"lane": "visible",
|
|
167
|
+
"fiber": "fiber:demo.feedback/demo.feedback.status/visible/0",
|
|
168
|
+
"scheduleRef": "component.visible.hydrate",
|
|
169
|
+
"endpointName": "xtendrmt.component.hydrate",
|
|
170
|
+
"hostAdapter": {
|
|
171
|
+
"schema": "xtend.component.lifecycle-telemetry.v1",
|
|
172
|
+
"source": "xtend.component-adapter",
|
|
173
|
+
"operation": "hydrate"
|
|
174
|
+
},
|
|
175
|
+
"routeComponentFibers": {
|
|
176
|
+
"schema": "xtend.rmt.vnext.route-component-fiber-evidence.v1",
|
|
177
|
+
"component": ["component.visible.mount", "component.idle.hydrate"],
|
|
178
|
+
"route": ["ui.user-blocking.input", "route.transition.render"]
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"ui": {
|
|
182
|
+
"selector": "[data-rmt-primitive-id=\"demo.feedback.status\"]",
|
|
183
|
+
"visible": true,
|
|
184
|
+
"text": "Saved"
|
|
185
|
+
},
|
|
186
|
+
"browser": {
|
|
187
|
+
"viewportAsserted": true,
|
|
188
|
+
"eventObserved": true
|
|
189
|
+
},
|
|
190
|
+
"browserExecution": {
|
|
191
|
+
"schema": "xtend.rmt.vnext.browser-execution-evidence.v1",
|
|
192
|
+
"status": "skipped",
|
|
193
|
+
"driver": null,
|
|
194
|
+
"resultKey": "__xtendRmtVNextSourceToSeaResult"
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
The artifact report wraps this evidence plus browser-execution policy:
|
|
200
|
+
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"schema": "xtend.rmt.vnext.source-to-sea-evidence-report.v1",
|
|
204
|
+
"workpackage": "RMT-VNEXT-PRIM-06",
|
|
205
|
+
"status": "passed",
|
|
206
|
+
"artifact": {
|
|
207
|
+
"path": ".xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json",
|
|
208
|
+
"browserExecutionRequired": false,
|
|
209
|
+
"browserExecutionStatus": "skipped"
|
|
210
|
+
},
|
|
211
|
+
"ciArtifactValidation": {
|
|
212
|
+
"schema": "xtend.rmt.vnext.source-to-sea-ci-artifact-validation.v1",
|
|
213
|
+
"status": "skipped"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Since the multi-object expansion, the same report also contains an object matrix:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"schema": "xtend.rmt.vnext.source-to-sea-object-matrix.v1",
|
|
223
|
+
"objectCount": 4,
|
|
224
|
+
"primitiveIds": [
|
|
225
|
+
"demo.feedback.status",
|
|
226
|
+
"demo.feedback.toast",
|
|
227
|
+
"demo.feedback.detail",
|
|
228
|
+
"demo.feedback.audit"
|
|
229
|
+
],
|
|
230
|
+
"crossPrimitiveEvents": [
|
|
231
|
+
{
|
|
232
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
233
|
+
"targetPrimitiveId": "demo.feedback.toast",
|
|
234
|
+
"actionId": "demo.feedback.save",
|
|
235
|
+
"eventId": "demo.feedback.toast.promoted",
|
|
236
|
+
"targetState": "state.demo.feedback.toast.text",
|
|
237
|
+
"lane": "idle"
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
"routeSwitches": [
|
|
241
|
+
{
|
|
242
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
243
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
244
|
+
"actionId": "demo.feedback.save",
|
|
245
|
+
"from": "/rmt-vnext-source-to-sea",
|
|
246
|
+
"to": "/rmt-vnext-source-to-sea/toast",
|
|
247
|
+
"scheduleRef": "ui.user-blocking.input",
|
|
248
|
+
"renderScheduleRef": "route.transition.render",
|
|
249
|
+
"lane": "transition",
|
|
250
|
+
"targetScheduleRef": "schedule:demo.feedback/demo.feedback.detail/transition",
|
|
251
|
+
"targetFiberRef": "fiber:demo.feedback/demo.feedback.detail/transition/0",
|
|
252
|
+
"targetExpectedText": "Detail mounted"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
256
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
257
|
+
"actionId": "demo.feedback.save",
|
|
258
|
+
"from": "/rmt-vnext-source-to-sea/toast",
|
|
259
|
+
"to": "/rmt-vnext-source-to-sea/audit",
|
|
260
|
+
"scheduleRef": "ui.user-blocking.input",
|
|
261
|
+
"renderScheduleRef": "route.transition.render",
|
|
262
|
+
"lane": "transition",
|
|
263
|
+
"targetScheduleRef": "schedule:demo.feedback/demo.feedback.audit/transition",
|
|
264
|
+
"targetFiberRef": "fiber:demo.feedback/demo.feedback.audit/transition/0",
|
|
265
|
+
"targetExpectedText": "Audit mounted"
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
"routeLifecycleCycles": [
|
|
269
|
+
{
|
|
270
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
271
|
+
"from": "/rmt-vnext-source-to-sea/toast",
|
|
272
|
+
"to": "/rmt-vnext-source-to-sea",
|
|
273
|
+
"unmountScheduleRef": "ui.background.work",
|
|
274
|
+
"remountScheduleRef": "route.transition.render",
|
|
275
|
+
"resourceId": "demo.feedback.detailTimer",
|
|
276
|
+
"expectedUnmountCount": 1,
|
|
277
|
+
"expectedRemountCount": 1
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
281
|
+
"from": "/rmt-vnext-source-to-sea/audit",
|
|
282
|
+
"to": "/rmt-vnext-source-to-sea",
|
|
283
|
+
"unmountScheduleRef": "ui.background.work",
|
|
284
|
+
"remountScheduleRef": "route.transition.render",
|
|
285
|
+
"resourceId": "demo.feedback.auditTimer",
|
|
286
|
+
"expectedUnmountCount": 1,
|
|
287
|
+
"expectedRemountCount": 1
|
|
288
|
+
}
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## Gate Rules
|
|
294
|
+
|
|
295
|
+
The gate fails if any of these correlation links is missing:
|
|
296
|
+
|
|
297
|
+
- Compiler result is not successful.
|
|
298
|
+
- PRIM-03 semantic graph reports errors.
|
|
299
|
+
- PRIM-04 App Platform or Kernel records are missing.
|
|
300
|
+
- Kernel boundary is not `no-rmt-kernel-import-of-host-runtime-types`.
|
|
301
|
+
- Schedule or lifecycle record is missing.
|
|
302
|
+
- No Fabric fiber can be derived from schedule and operation.
|
|
303
|
+
- The Fabric bridge cannot create an `xtend.fabric.fiber.v1`.
|
|
304
|
+
- Fabric/RMT lane resolution does not return `xtend.fabric.rmt-lane-mapping.v1`.
|
|
305
|
+
- The Fabric telemetry snapshot does not contain the expected lane or schedule ref.
|
|
306
|
+
- The PRIM-05 lane matrix does not contain all expected Fabric lanes.
|
|
307
|
+
- Host-adapter telemetry is missing in the Fabric snapshot.
|
|
308
|
+
- Route or component fibers are missing in the Fabric snapshot.
|
|
309
|
+
- The browser fixture contains no visible Fabric lane/fiber markers.
|
|
310
|
+
- The fiber source kind is not `selector`.
|
|
311
|
+
- Source-map pointer to the event is missing.
|
|
312
|
+
- Browser fixture declares no probe contract.
|
|
313
|
+
- DOM marker, viewport assertion or event result key is missing.
|
|
314
|
+
- The object matrix contains fewer than four visible primitives, no separate lanes or no cross-primitive event.
|
|
315
|
+
- The object matrix does not contain at least two valid route switches with navigation and render schedule.
|
|
316
|
+
- The route switch mounts no target object or the target is not visible in the real browser result.
|
|
317
|
+
- A route lifecycle cycle does not unmount or remount the target, the expected unmount/remount counters per target are missing, declared resource cleanup is not provable in vNext/Core, or the resource owner does not match the route target.
|
|
318
|
+
- One of the matrix objects does not correlate through source, kernel, Fabric, UI and browser.
|
|
319
|
+
- The optional browser-execution path with an active driver does not return a `passed` result key or drifts from evidence in primitive ID, schedule, fiber, Fabric schedule, host-adapter telemetry or event.
|
|
320
|
+
- ChromeDriver auto-cleanup cannot stop an automatically started driver after a successful browser result through `/shutdown` or process fallback.
|
|
321
|
+
- Kernel records contain XTend host imports.
|
|
322
|
+
|
|
323
|
+
## Local Gates
|
|
324
|
+
|
|
325
|
+
Targeted PRIM-06 gates:
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
node --check tools/rmt-language/vnext-source-to-sea.js
|
|
329
|
+
node --check tests/rmt-language/rmt_vnext_source_to_sea_suite.js
|
|
330
|
+
node --check scripts/capture_rmt_vnext_source_to_sea_evidence.js
|
|
331
|
+
node -e "const suite=require('./tests/rmt-language/rmt_vnext_source_to_sea_suite'); suite.runRmtVNextSourceToSeaSuite({rootDir:process.cwd()}).then((result)=>process.exit(result.ok ? 0 : 1));"
|
|
332
|
+
node scripts/capture_rmt_vnext_source_to_sea_evidence.js
|
|
333
|
+
node scripts/run_xtend_tests.js fabric-lane-mapping fabric-component-fibers fabric-runtime-bridge --json
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Real browser run with external WebDriver:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
RMT_VNEXT_SOURCE_TO_SEA_BROWSER_DRIVER=webdriver \
|
|
340
|
+
RMT_VNEXT_SOURCE_TO_SEA_WEBDRIVER_URL=http://127.0.0.1:9515 \
|
|
341
|
+
node scripts/capture_rmt_vnext_source_to_sea_evidence.js --require-browser
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
Real browser run with automatically started ChromeDriver:
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
npm run test:rmt-vnext-source-to-sea:chromedriver
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Real browser run with automatically started Firefox/Geckodriver:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
npm run test:rmt-vnext-source-to-sea:firefox
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
The GitHub Actions job `rmt-vnext-primitive-gates` keeps this ChromeDriver path as an optional evidence run behind `workflow_dispatch` and then uploads the same evidence artifact. The report additionally contains CI artifact validation. In local browser-skip mode it remains `skipped`; in a manually requested browser path it must be `passed` and prove `objectCount: 4`, two cross-primitive events, two route switches, two route lifecycle cycles, `targetMounted`, `targetVisible`, `countsMatch` and the audit resources `demo.feedback.auditTimer` and `demo.feedback.auditSubscription`.
|
|
357
|
+
|
|
358
|
+
An already written CI artifact can be checked again against the same contract without a new browser run:
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
npm run test:rmt-vnext-source-to-sea:validate-artifact
|
|
362
|
+
node scripts/capture_rmt_vnext_source_to_sea_evidence.js --validate-artifact .xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
The replay path uses `validateRmtVNextSourceToSeaCiArtifactFile(...)`, expects browser evidence for this optional replay and fails closed with `status: "failed"` for missing, unparseable or drifted artifacts.
|
|
366
|
+
|
|
367
|
+
ChromeDriver auto-cleanup first uses the local WebDriver endpoint `/shutdown` for automatically started ChromeDriver. Only if this path does not stop the process does the gate fall back to process signals. This matters for Snap/Chromium installations where a direct `kill()` can fail with `EACCES`.
|
|
368
|
+
|
|
369
|
+
## Next Handoff
|
|
370
|
+
|
|
371
|
+
`RMT-VNEXT-PRIM-06` now provides the first source-to-sea evidence. `RMT-VNEXT-PRIM-05` is complete as its own Fabric bridge package: real Fabric runtime fibers, host-adapter telemetry, route/component fibers, a telemetry snapshot and a lane matrix for non-visible scheduling classes are gateable through `rmt-vnext-fabric-bridge`. The current PRIM-06 expansion keeps the browser-execution path in GitHub Actions as optional, manually activated evidence. The release artifact is wired as `.xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json`. The browser result matrix now contains four objects, cross-primitive events and two sequential route switches. The current runtime slice mounts `demo.feedback.detail` and `demo.feedback.audit` only after route changes and requires `targetMounted: true` and `targetVisible: true` in the browser result for each. In addition, `routeLifecycleCycles` runs separate unmount/remount cycles for both targets: `demo.feedback.detailTimer` and `demo.feedback.auditTimer` must be present through `dispose on surface.destroy` as resource-cleanup evidence; browser evidence must provide `unmountCount: 1`, `remountCount: 1` and `countsMatch: true` per target. The audit cycle now checks multiple resource records: beside `demo.feedback.auditTimer`, `demo.feedback.auditSubscription` with `kind subscription`, `owner surface.demo.feedback.audit` and `dispose on surface.destroy` must also be artifacted. A negative fixture without dispose policy must fail in a controlled way with `rmt.vnext.source_to_sea.cleanup_dispose_policy_missing`. A second negative fixture has a dispose policy but binds `demo.feedback.detailTimer` to `surface.demo.feedback.toast`; it must fail with `rmt.vnext.source_to_sea.cleanup_owner_mismatch`. A third negative fixture removes `demo.feedback.auditTimer` completely from vNext while keeping `demo.feedback.audit` as a route target; it must fail with `rmt.vnext.source_to_sea.cleanup_resource_missing`. The optional next step is comparing local browser evidence with manually requested CI artifacts.
|
|
372
|
+
|
|
373
|
+
Cross-primitive evidence is now two-stage: beside `demo.feedback.save -> demo.feedback.toast`, `demo.feedback.detail.ack -> demo.feedback.audit` must also be proven after route mount. The second entry reduces `state.demo.feedback.audit.text`, emits `demo.feedback.audit.escalated` and must appear in the browser result as `stage: "route-target"` with `sourceLane: "transition"` and `targetLane: "transition"`.
|
|
374
|
+
|
|
375
|
+
The negative browser probe `tests/browser/fixtures/rmt-vnext-source-to-sea-cross-route-invalid.html` intentionally moves the `stage: "route-target"` entry to `targetPrimitiveId: "demo.feedback.toast"` while event and target state continue to point to `demo.feedback.audit`. The object matrix must therefore fail closed and mark at least these guards as `false`: `cross event route-target state belongs to target primitive`, `cross event route-target event belongs to target primitive` and `cross event route-target stage uses transition lanes`.
|
|
376
|
+
|
|
377
|
+
## Browser Result Drift
|
|
378
|
+
|
|
379
|
+
The WebDriver result path is additionally protected by `xtend.rmt.vnext.source-to-sea-browser-result-validation.v1`. `createRmtVNextSourceToSeaBrowserResultValidation(...)` wraps the same checks that the real ChromeDriver run evaluates after the headless browser. This makes route-switch and lifecycle drifts deterministically reconstructable without a new browser start:
|
|
380
|
+
|
|
381
|
+
- `browser execution route switches pass` must fail when a route switch is present in the result but reports `status: "failed"`, `targetMounted: false` or `targetVisible: false`.
|
|
382
|
+
- `browser execution route lifecycle cycles pass` must fail when a lifecycle cycle reports `countsMatch: false` or different unmount/remount counters.
|
|
383
|
+
- `browser execution cross-primitive events pass` must fail when a cross-primitive event in the browser result does not report `status: "passed"`.
|
|
384
|
+
- `browser execution object matrix passes` must fail when a visible object in the browser result does not report `status: "passed"`.
|
|
385
|
+
|
|
386
|
+
## Cross-Route Event Evidence
|
|
387
|
+
|
|
388
|
+
The positive browser result must contain two cross-primitive events:
|
|
389
|
+
|
|
390
|
+
```json
|
|
391
|
+
{
|
|
392
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
393
|
+
"targetPrimitiveId": "demo.feedback.toast",
|
|
394
|
+
"eventId": "demo.feedback.toast.promoted",
|
|
395
|
+
"targetLane": "idle"
|
|
396
|
+
}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
```json
|
|
400
|
+
{
|
|
401
|
+
"sourcePrimitiveId": "demo.feedback.detail",
|
|
402
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
403
|
+
"eventId": "demo.feedback.audit.escalated",
|
|
404
|
+
"stage": "route-target",
|
|
405
|
+
"sourceLane": "transition",
|
|
406
|
+
"targetLane": "transition"
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
## Multi-Resource Cleanup Evidence
|
|
411
|
+
|
|
412
|
+
The positive audit lifecycle must show multiple cleanup resources:
|
|
413
|
+
|
|
414
|
+
```json
|
|
415
|
+
{
|
|
416
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
417
|
+
"resourceIds": [
|
|
418
|
+
"demo.feedback.auditTimer",
|
|
419
|
+
"demo.feedback.auditSubscription"
|
|
420
|
+
],
|
|
421
|
+
"resourceKinds": [
|
|
422
|
+
"timer",
|
|
423
|
+
"subscription"
|
|
424
|
+
],
|
|
425
|
+
"resourceDisposed": true
|
|
426
|
+
}
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
The object matrix must check the same owner and dispose policy for `demo.feedback.auditSubscription` as for the timer. Cycles with only `resourceId` remain compatible; production cycles can declare `resources` with multiple resource IDs and expected kinds.
|
|
430
|
+
|
|
431
|
+
## Negative Cleanup Fixtures
|
|
432
|
+
|
|
433
|
+
The negative fixtures are located under:
|
|
434
|
+
|
|
435
|
+
```text
|
|
436
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-invalid.rmt
|
|
437
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-owner-invalid.rmt
|
|
438
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-resource-missing.rmt
|
|
439
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-kind-invalid.rmt
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
The first fixture intentionally leaves `demo.feedback.detailTimer` without `dispose on surface.destroy`. The second fixture keeps the dispose policy but intentionally binds the resource owner to `surface.demo.feedback.toast`. The third fixture keeps `demo.feedback.audit` as a route target but removes `demo.feedback.auditTimer` completely from the vNext source. The fourth fixture keeps `demo.feedback.auditSubscription` as cleanup resource but intentionally declares it with `kind cache` instead of `kind subscription`.
|
|
443
|
+
The positive source-to-sea gate remains successful, but the negative matrices must fail and provide this evidence:
|
|
444
|
+
|
|
445
|
+
```json
|
|
446
|
+
{
|
|
447
|
+
"code": "rmt.vnext.source_to_sea.cleanup_dispose_policy_missing",
|
|
448
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
449
|
+
"resourceId": "demo.feedback.detailTimer",
|
|
450
|
+
"dispose": null
|
|
451
|
+
}
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
```json
|
|
455
|
+
{
|
|
456
|
+
"code": "rmt.vnext.source_to_sea.cleanup_owner_mismatch",
|
|
457
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
458
|
+
"resourceId": "demo.feedback.detailTimer",
|
|
459
|
+
"owner": {
|
|
460
|
+
"id": "demo.feedback.toast"
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
```json
|
|
466
|
+
{
|
|
467
|
+
"code": "rmt.vnext.source_to_sea.cleanup_resource_missing",
|
|
468
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
469
|
+
"resourceId": "demo.feedback.auditTimer",
|
|
470
|
+
"resource": null
|
|
471
|
+
}
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
```json
|
|
475
|
+
{
|
|
476
|
+
"code": "rmt.vnext.source_to_sea.cleanup_kind_mismatch",
|
|
477
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
478
|
+
"resourceId": "demo.feedback.auditSubscription",
|
|
479
|
+
"expectedKind": "subscription",
|
|
480
|
+
"actualKind": "cache"
|
|
481
|
+
}
|
|
482
|
+
```
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# RMT vNext Enterprise Surface Registry
|
|
2
|
+
|
|
3
|
+
`surface.registry` is the shared enterprise MFE index for local and remote surfaces. It is not a runtime manager and not a global event bus, but an auditable snapshot for ownership, discoverability, active versions, shell targets, lanes, fallbacks and event facts.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
schema: "xtend.rmt.vnext-enterprise-surface-registry.v1"
|
|
9
|
+
surfaceSchema: "xtend.rmt.vnext-enterprise-surface.v1"
|
|
10
|
+
targetReadiness: "rmt-vnext-enterprise-mfe-ready"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The registry snapshot answers the enterprise questions:
|
|
14
|
+
|
|
15
|
+
- Which surfaces exist at runtime?
|
|
16
|
+
- Which team owns which surface?
|
|
17
|
+
- Which version is active and which range was expected?
|
|
18
|
+
- Which shell targets and lanes are bound?
|
|
19
|
+
- Which surfaces are local, remote or fallback?
|
|
20
|
+
- Which events may leave or reach a surface?
|
|
21
|
+
- Which degradation policy applies on incompatibility?
|
|
22
|
+
|
|
23
|
+
## Registry Shape
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"schema": "xtend.rmt.vnext-enterprise-surface-registry.v1",
|
|
28
|
+
"registryId": "enterprise:xtend.enterprise-mfe.demo",
|
|
29
|
+
"surfaceCount": 4,
|
|
30
|
+
"localSurfaceCount": 3,
|
|
31
|
+
"remoteSurfaceCount": 1,
|
|
32
|
+
"indexes": {
|
|
33
|
+
"byOwner": {
|
|
34
|
+
"checkout-platform": ["surface:panel.checkoutFallback", "remote:checkout.cart"]
|
|
35
|
+
},
|
|
36
|
+
"byShellTarget": {
|
|
37
|
+
"shell.slot:sidebar.cart": ["remote:checkout.cart"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The registry may be read by hosts and operations tools. It remains a language-layer artifact and creates no implicit runtime connections.
|
|
44
|
+
|
|
45
|
+
## Ownership
|
|
46
|
+
|
|
47
|
+
Every surface needs a domain owner. The owner is responsible for:
|
|
48
|
+
|
|
49
|
+
- version range and active version
|
|
50
|
+
- fallback surface or blocking degradation path
|
|
51
|
+
- event ownership and payload ownership
|
|
52
|
+
- security policy and trust boundary
|
|
53
|
+
- migration notes for legacy surface facts
|
|
54
|
+
|
|
55
|
+
## Discoverability
|
|
56
|
+
|
|
57
|
+
Discoverability comes from stable indexes, not runtime heuristics. The registry must be resolvable at least by surface name, owner, shell target, lane, status, remote ID and fallback. The demo scenario validates this through `tools/rmt-language/vnext-enterprise-fixtures.js`.
|
|
58
|
+
|
|
59
|
+
## Gates
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-registry --json
|
|
63
|
+
node scripts/run_xtend_tests.js rmt-vnext-degradation --json
|
|
64
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-fixtures --json
|
|
65
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-release --json
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The operational handoff is summarized in `docs/rmt-vnext-enterprise-mfe-handoff.md`.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Screenreader Signals
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.docs.screenreader-signals.v1`
|
|
4
|
+
- Runtime/gate contract: `xtend.a11y.screenreader-signals.v1`
|
|
5
|
+
- Signal record: `xtend.a11y.screenreader-signal.v1`
|
|
6
|
+
- Gate: `node scripts/run_xtend_tests.js screenreader-signals --json`
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Screenreader signals make visible which UI state changes must not remain silent. The contract describes `aria-live`, status regions, error regions and announcements without embedding a specific UI runtime into XTendRMT.
|
|
11
|
+
|
|
12
|
+
XTend uses the contract for components and scaffold artifacts. XTendRMT can schedule the resulting a11y work through Fabric lane `a11y`, fiber `a11y.announce` and schedule `a11y.user-blocking.announce`.
|
|
13
|
+
|
|
14
|
+
## Signal Types
|
|
15
|
+
|
|
16
|
+
| Signal | Live region | Region | Typical use |
|
|
17
|
+
|--------|-------------|--------|-------------|
|
|
18
|
+
| `status-announcement` | `polite` | `status` | Toasts, alerts, submit success |
|
|
19
|
+
| `dismissal-announcement` | `polite` | `status` | Toast/alert was closed |
|
|
20
|
+
| `validation-error-summary` | `assertive` | `error` | Form or input errors |
|
|
21
|
+
| `submit-status` | `polite` | `status` | Form processed successfully |
|
|
22
|
+
| `dialog-context` | `none` | `dialog` | Dialog/modal context via role and label |
|
|
23
|
+
| `focus-return` | `none` | `focus` | Focus returns to source after overlay close |
|
|
24
|
+
| `route-change-announcement` | `polite` | `status` | Route was changed |
|
|
25
|
+
|
|
26
|
+
## Component Obligations
|
|
27
|
+
|
|
28
|
+
Feedback components declare status signals and set a live region. Error states may be assertive, but must remain reviewable.
|
|
29
|
+
|
|
30
|
+
Form components declare at least `validation-error-summary` and `submit-status`. Error regions need a clear source and must not treat empty announcements as success.
|
|
31
|
+
|
|
32
|
+
Overlay components declare `dialog-context` and `focus-return`. They do not necessarily need `aria-live`, because the screenreader context comes from `role="dialog"`, `aria-modal`, `aria-labelledby` and focus management.
|
|
33
|
+
|
|
34
|
+
## Scaffold
|
|
35
|
+
|
|
36
|
+
New scaffold components include the screenreader contract in:
|
|
37
|
+
|
|
38
|
+
- `xtendScaffoldA11yProfile.screenreader.signalContract`
|
|
39
|
+
- manifest key `screenreaderSignals`
|
|
40
|
+
- component docs section `Screenreader Signals`
|
|
41
|
+
- fixture result `screenreaderSignals`
|
|
42
|
+
- type contract `ScreenreaderSignalContract`
|
|
43
|
+
|
|
44
|
+
## Verification
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm run test:screenreader-signals
|
|
48
|
+
node scripts/run_xtend_tests.js screenreader-signals --json
|
|
49
|
+
node scripts/run_xtend_tests.js a11y-hydration --json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The gate checks the contract factory, real feedback/form/overlay components, scaffold outputs and package metadata.
|
|
53
|
+
|
|
54
|
+
## Boundaries
|
|
55
|
+
|
|
56
|
+
The contract is not a replacement for manual screenreader acceptance. It prevents relevant status, error or overlay signals from remaining unnamed.
|