@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
|
@@ -12,6 +12,7 @@ Epic 15 ist mit dem vNext Release Handoff source-ready. Die neue Syntax ist doku
|
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
npm run test:rmt-vnext-parser
|
|
15
|
+
npm run test:rmt-semantic-graph
|
|
15
16
|
npm run test:rmt-vnext-compiler
|
|
16
17
|
npm run test:rmt-vnext-lifecycle
|
|
17
18
|
npm run test:rmt-vnext-scheduler
|
|
@@ -25,10 +26,23 @@ npm run test:rmt-vnext-streaming
|
|
|
25
26
|
npm run test:rmt-vnext-tooling
|
|
26
27
|
npm run test:rmt-vnext-compatibility
|
|
27
28
|
npm run test:rmt-vnext-regression
|
|
29
|
+
npm run test:rmt-vnext-primitives:report
|
|
28
30
|
npm run test:browser
|
|
29
31
|
npm run test:references
|
|
30
32
|
```
|
|
31
33
|
|
|
34
|
+
## Optional Browser Evidence
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm run test:rmt-vnext-source-to-sea
|
|
38
|
+
npm run test:rmt-vnext-source-to-sea:evidence
|
|
39
|
+
npm run test:rmt-vnext-source-to-sea:chromedriver
|
|
40
|
+
npm run test:rmt-vnext-source-to-sea:validate-artifact
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
In GitHub Actions, this evidence runs only through manual `workflow_dispatch`
|
|
44
|
+
with `run_source_to_sea=true`.
|
|
45
|
+
|
|
32
46
|
Der Self-Gate fuer diesen Abschluss ist:
|
|
33
47
|
|
|
34
48
|
```bash
|
|
@@ -0,0 +1,629 @@
|
|
|
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
|
+
- Quelle: Media-Manager-Downstream-Transfer, `2026-05-19`
|
|
14
|
+
|
|
15
|
+
## Ziel
|
|
16
|
+
|
|
17
|
+
`RMT-VNEXT-PRIM-06` startet das Fullstack-Gate fuer vNext-authorierte
|
|
18
|
+
Primitives. Das Gate beweist nicht nur Parser- oder JSON-Output, sondern
|
|
19
|
+
rekonstruiert denselben sichtbaren Objekt-Lifecycle ueber alle Runtime-Grenzen:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
source -> kernel -> Fabric -> UI -> Browser
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Die erste PRIM-06-Scheibe bleibt im Standardlauf deterministisch und laeuft
|
|
26
|
+
ohne externen Browser-Treiber. Sie verbindet eine vNext-Fixture mit einer
|
|
27
|
+
selbstpruefenden Browser-Smoke-Fixture und erzeugt daraus maschinenlesbare
|
|
28
|
+
Evidence. Seit dem aktuellen Ausbau kann ein WebDriver-, ChromeDriver- oder
|
|
29
|
+
Safari-Driver-Pfad dieselbe Browser-Fixture oeffnen, den gleichen Result-Key
|
|
30
|
+
auslesen und das echte Browser-Ergebnis gegen Compiler-, Kernel- und Fabric-
|
|
31
|
+
Evidence vergleichen. Die Browser-Execution-Evidence ist jetzt auch als
|
|
32
|
+
Release-Artefakt unter
|
|
33
|
+
`.xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json`
|
|
34
|
+
schreibbar. In GitHub Actions ist dieser Pfad optional und laeuft nur bei
|
|
35
|
+
manuellem `workflow_dispatch` mit `run_source_to_sea=true`.
|
|
36
|
+
|
|
37
|
+
## Fixture
|
|
38
|
+
|
|
39
|
+
Die vNext-Fixture liegt unter:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
tests/rmt-language/fixtures/vnext-source-to-sea.rmt
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Sie deklariert ausschliesslich in RMT vNext:
|
|
46
|
+
|
|
47
|
+
- `state demo.feedback.status`
|
|
48
|
+
- `state demo.feedback.toast`
|
|
49
|
+
- `state demo.feedback.detail`
|
|
50
|
+
- `state demo.feedback.audit`
|
|
51
|
+
- `selector demo.feedback.status`
|
|
52
|
+
- `selector demo.feedback.toast`
|
|
53
|
+
- `selector demo.feedback.detail`
|
|
54
|
+
- `selector demo.feedback.audit`
|
|
55
|
+
- `action demo.feedback.save`
|
|
56
|
+
- `action demo.feedback.dismiss`
|
|
57
|
+
- `action demo.feedback.detail.ack`
|
|
58
|
+
- `action demo.feedback.audit.review`
|
|
59
|
+
- `portal surface.root`
|
|
60
|
+
- `resource demo.feedback.timer`
|
|
61
|
+
- `resource demo.feedback.toastTimer`
|
|
62
|
+
- `resource demo.feedback.detailTimer`
|
|
63
|
+
- `resource demo.feedback.auditTimer`
|
|
64
|
+
- `surface demo.feedback.status`
|
|
65
|
+
- `surface demo.feedback.toast`
|
|
66
|
+
- `surface demo.feedback.detail`
|
|
67
|
+
- `surface demo.feedback.audit`
|
|
68
|
+
- eine `visible` Lane mit `hydrate feedback-status`
|
|
69
|
+
- eine zweite `idle` Lane mit `hydrate feedback-toast`
|
|
70
|
+
- eine `transition` Lane mit `mount feedback-detail`
|
|
71
|
+
- eine zweite `transition` Lane mit `mount feedback-audit`
|
|
72
|
+
- ein Click-Event auf `[data-action='save']`
|
|
73
|
+
- ein Click-Event auf `[data-action='dismiss']`
|
|
74
|
+
- ein Click-Event auf `[data-action='ack-detail']`
|
|
75
|
+
- ein Click-Event auf `[data-action='review-audit']`
|
|
76
|
+
- ein Cross-Primitive-Reducer von `demo.feedback.save` nach
|
|
77
|
+
`state.demo.feedback.toast.text`
|
|
78
|
+
|
|
79
|
+
Damit sind State, Selector, Action, Event, Surface, Lane/Fiber und
|
|
80
|
+
Lifecycle-Owner in derselben Authoring-Sprache vorhanden.
|
|
81
|
+
|
|
82
|
+
## Browser Probe
|
|
83
|
+
|
|
84
|
+
Die Browser-Fixture liegt unter:
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
tests/browser/fixtures/rmt-vnext-source-to-sea-smoke.html
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Sie enthaelt einen sichtbaren DOM-Marker:
|
|
91
|
+
|
|
92
|
+
```html
|
|
93
|
+
data-rmt-primitive-id="demo.feedback.status"
|
|
94
|
+
data-rmt-primitive-id="demo.feedback.toast"
|
|
95
|
+
data-rmt-primitive-id="demo.feedback.detail"
|
|
96
|
+
data-rmt-primitive-id="demo.feedback.audit"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
und einen stabilen Result-Key:
|
|
100
|
+
|
|
101
|
+
```js
|
|
102
|
+
window.__xtendRmtVNextSourceToSeaResult
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Die Fixture prueft lokal, dass das Objekt sichtbar ist, die erwartete
|
|
106
|
+
Schedule-/Fiber-Metadaten traegt, der Click das RMT-Action-Event aufzeichnet
|
|
107
|
+
und der sichtbare Text von `Ready` auf `Saved` wechselt.
|
|
108
|
+
|
|
109
|
+
Seit `RMT-VNEXT-PRIM-05` traegt dieselbe DOM-Probe zusaetzlich sichtbare
|
|
110
|
+
Fabric-Brueckenmarker:
|
|
111
|
+
|
|
112
|
+
```html
|
|
113
|
+
data-xtend-fabric-lane="visible"
|
|
114
|
+
data-xtend-fabric-fiber="fiber:demo.feedback/demo.feedback.status/visible/0"
|
|
115
|
+
data-xtend-fabric-schedule="component.visible.hydrate"
|
|
116
|
+
data-xtend-host-adapter-telemetry="xtend.component.lifecycle-telemetry.v1"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Die Bridge haertet ausserdem eine Lane-Matrix fuer `user-blocking`,
|
|
120
|
+
`transition`, `idle`, `background` und `diagnostics`. Jede Matrix-Lane erzeugt
|
|
121
|
+
eine echte Fabric-Fiber, eine Fabric/RMT-Mapping-Entscheidung und einen
|
|
122
|
+
Telemetry-Snapshot-Eintrag.
|
|
123
|
+
|
|
124
|
+
Die Browser-Probe enthaelt zusaetzlich einen Host-Adapter-Telemetry-Record mit
|
|
125
|
+
`xtend.component.lifecycle-telemetry.v1`. Das Gate normalisiert diesen Record
|
|
126
|
+
ueber `fabric.recordComponentTelemetry(...)`, damit PRIM-05 die XTend UI Host-
|
|
127
|
+
Adapter-Ebene im Fabric-Snapshot nachweisen kann.
|
|
128
|
+
|
|
129
|
+
Seit dem Multi-Object-Ausbau projiziert das Gate die Host-Adapter-Telemetrie
|
|
130
|
+
pro Primitive. `demo.feedback.status` bleibt auf `visible` und
|
|
131
|
+
`component.visible.hydrate`, waehrend `demo.feedback.toast` ueber `idle` und
|
|
132
|
+
`component.idle.hydrate` validiert wird. `demo.feedback.detail` und
|
|
133
|
+
`demo.feedback.audit` sind getrennte Route-Targets auf der `transition`-Lane.
|
|
134
|
+
|
|
135
|
+
Zusaetzlich bindet PRIM-05 die produktiven Fiber-Instrumentations an:
|
|
136
|
+
|
|
137
|
+
- `createComponentFiberInstrumentation(...)` erzeugt `component.mount` und
|
|
138
|
+
`component.hydrate`.
|
|
139
|
+
- `createRouteFiberInstrumentation(...)` erzeugt `route.navigate` und
|
|
140
|
+
`route.render`.
|
|
141
|
+
- Die Schedule Refs `component.visible.mount`, `component.idle.hydrate`,
|
|
142
|
+
`ui.user-blocking.input` und `route.transition.render` muessen im Fabric-
|
|
143
|
+
Telemetry-Snapshot auftauchen.
|
|
144
|
+
|
|
145
|
+
## Evidence API
|
|
146
|
+
|
|
147
|
+
Das Gate wird von `tools/rmt-language/vnext-source-to-sea.js` erzeugt:
|
|
148
|
+
|
|
149
|
+
```js
|
|
150
|
+
const {
|
|
151
|
+
createRmtVNextFabricBridgeEvidence,
|
|
152
|
+
createRmtVNextSourceToSeaEvidenceReport,
|
|
153
|
+
createRmtVNextSourceToSeaEvidence,
|
|
154
|
+
runRmtVNextSourceToSeaBrowserExecution,
|
|
155
|
+
writeRmtVNextSourceToSeaEvidenceReport
|
|
156
|
+
} = require('./tools/rmt-language/vnext-source-to-sea');
|
|
157
|
+
|
|
158
|
+
const evidence = createRmtVNextSourceToSeaEvidence({
|
|
159
|
+
text,
|
|
160
|
+
filePath
|
|
161
|
+
}, {
|
|
162
|
+
browserFixtureText,
|
|
163
|
+
browserFixturePath: 'tests/browser/fixtures/rmt-vnext-source-to-sea-smoke.html'
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const browserExecution = await runRmtVNextSourceToSeaBrowserExecution(evidence, {
|
|
167
|
+
rootDir: process.cwd(),
|
|
168
|
+
browserFixturePath: 'tests/browser/fixtures/rmt-vnext-source-to-sea-smoke.html',
|
|
169
|
+
browserDriver: process.env.RMT_VNEXT_SOURCE_TO_SEA_BROWSER_DRIVER || 'chromedriver',
|
|
170
|
+
requireBrowserExecution: true
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
const evidenceReport = await createRmtVNextSourceToSeaEvidenceReport({
|
|
174
|
+
rootDir: process.cwd(),
|
|
175
|
+
evidence,
|
|
176
|
+
browserExecution
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
await writeRmtVNextSourceToSeaEvidenceReport({
|
|
180
|
+
rootDir: process.cwd()
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Die Evidence muss unter derselben Primitive-ID korrelieren:
|
|
185
|
+
|
|
186
|
+
```json
|
|
187
|
+
{
|
|
188
|
+
"schema": "xtend.rmt.vnext.source-to-sea-evidence.v1",
|
|
189
|
+
"primitiveId": "demo.feedback.status",
|
|
190
|
+
"sourcePointer": "/events/0",
|
|
191
|
+
"kernel": {
|
|
192
|
+
"scheduleRef": "schedule:demo.feedback/demo.feedback.status/visible"
|
|
193
|
+
},
|
|
194
|
+
"fabric": {
|
|
195
|
+
"schema": "xtend.rmt.vnext.fabric-bridge-evidence.v1",
|
|
196
|
+
"workpackage": "RMT-VNEXT-PRIM-05",
|
|
197
|
+
"lane": "visible",
|
|
198
|
+
"fiber": "fiber:demo.feedback/demo.feedback.status/visible/0",
|
|
199
|
+
"scheduleRef": "component.visible.hydrate",
|
|
200
|
+
"endpointName": "xtendrmt.component.hydrate",
|
|
201
|
+
"hostAdapter": {
|
|
202
|
+
"schema": "xtend.component.lifecycle-telemetry.v1",
|
|
203
|
+
"source": "xtend.component-adapter",
|
|
204
|
+
"operation": "hydrate"
|
|
205
|
+
},
|
|
206
|
+
"routeComponentFibers": {
|
|
207
|
+
"schema": "xtend.rmt.vnext.route-component-fiber-evidence.v1",
|
|
208
|
+
"component": ["component.visible.mount", "component.idle.hydrate"],
|
|
209
|
+
"route": ["ui.user-blocking.input", "route.transition.render"]
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
"ui": {
|
|
213
|
+
"selector": "[data-rmt-primitive-id=\"demo.feedback.status\"]",
|
|
214
|
+
"visible": true,
|
|
215
|
+
"text": "Saved"
|
|
216
|
+
},
|
|
217
|
+
"browser": {
|
|
218
|
+
"viewportAsserted": true,
|
|
219
|
+
"eventObserved": true
|
|
220
|
+
},
|
|
221
|
+
"browserExecution": {
|
|
222
|
+
"schema": "xtend.rmt.vnext.browser-execution-evidence.v1",
|
|
223
|
+
"status": "skipped",
|
|
224
|
+
"driver": null,
|
|
225
|
+
"resultKey": "__xtendRmtVNextSourceToSeaResult"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Der artefaktierte Report kapselt diese Evidence plus Browser-Execution-
|
|
231
|
+
Policy:
|
|
232
|
+
|
|
233
|
+
```json
|
|
234
|
+
{
|
|
235
|
+
"schema": "xtend.rmt.vnext.source-to-sea-evidence-report.v1",
|
|
236
|
+
"workpackage": "RMT-VNEXT-PRIM-06",
|
|
237
|
+
"status": "passed",
|
|
238
|
+
"artifact": {
|
|
239
|
+
"path": ".xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json",
|
|
240
|
+
"browserExecutionRequired": false,
|
|
241
|
+
"browserExecutionStatus": "skipped"
|
|
242
|
+
},
|
|
243
|
+
"ciArtifactValidation": {
|
|
244
|
+
"schema": "xtend.rmt.vnext.source-to-sea-ci-artifact-validation.v1",
|
|
245
|
+
"status": "skipped"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Seit dem Multi-Object-Ausbau enthaelt derselbe Report zusaetzlich eine
|
|
251
|
+
Object-Matrix:
|
|
252
|
+
|
|
253
|
+
```json
|
|
254
|
+
{
|
|
255
|
+
"schema": "xtend.rmt.vnext.source-to-sea-object-matrix.v1",
|
|
256
|
+
"objectCount": 4,
|
|
257
|
+
"primitiveIds": [
|
|
258
|
+
"demo.feedback.status",
|
|
259
|
+
"demo.feedback.toast",
|
|
260
|
+
"demo.feedback.detail",
|
|
261
|
+
"demo.feedback.audit"
|
|
262
|
+
],
|
|
263
|
+
"crossPrimitiveEvents": [
|
|
264
|
+
{
|
|
265
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
266
|
+
"targetPrimitiveId": "demo.feedback.toast",
|
|
267
|
+
"actionId": "demo.feedback.save",
|
|
268
|
+
"eventId": "demo.feedback.toast.promoted",
|
|
269
|
+
"targetState": "state.demo.feedback.toast.text",
|
|
270
|
+
"lane": "idle"
|
|
271
|
+
}
|
|
272
|
+
],
|
|
273
|
+
"routeSwitches": [
|
|
274
|
+
{
|
|
275
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
276
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
277
|
+
"actionId": "demo.feedback.save",
|
|
278
|
+
"from": "/rmt-vnext-source-to-sea",
|
|
279
|
+
"to": "/rmt-vnext-source-to-sea/toast",
|
|
280
|
+
"scheduleRef": "ui.user-blocking.input",
|
|
281
|
+
"renderScheduleRef": "route.transition.render",
|
|
282
|
+
"lane": "transition",
|
|
283
|
+
"targetScheduleRef": "schedule:demo.feedback/demo.feedback.detail/transition",
|
|
284
|
+
"targetFiberRef": "fiber:demo.feedback/demo.feedback.detail/transition/0",
|
|
285
|
+
"targetExpectedText": "Detail mounted"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
289
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
290
|
+
"actionId": "demo.feedback.save",
|
|
291
|
+
"from": "/rmt-vnext-source-to-sea/toast",
|
|
292
|
+
"to": "/rmt-vnext-source-to-sea/audit",
|
|
293
|
+
"scheduleRef": "ui.user-blocking.input",
|
|
294
|
+
"renderScheduleRef": "route.transition.render",
|
|
295
|
+
"lane": "transition",
|
|
296
|
+
"targetScheduleRef": "schedule:demo.feedback/demo.feedback.audit/transition",
|
|
297
|
+
"targetFiberRef": "fiber:demo.feedback/demo.feedback.audit/transition/0",
|
|
298
|
+
"targetExpectedText": "Audit mounted"
|
|
299
|
+
}
|
|
300
|
+
],
|
|
301
|
+
"routeLifecycleCycles": [
|
|
302
|
+
{
|
|
303
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
304
|
+
"from": "/rmt-vnext-source-to-sea/toast",
|
|
305
|
+
"to": "/rmt-vnext-source-to-sea",
|
|
306
|
+
"unmountScheduleRef": "ui.background.work",
|
|
307
|
+
"remountScheduleRef": "route.transition.render",
|
|
308
|
+
"resourceId": "demo.feedback.detailTimer",
|
|
309
|
+
"expectedUnmountCount": 1,
|
|
310
|
+
"expectedRemountCount": 1
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
314
|
+
"from": "/rmt-vnext-source-to-sea/audit",
|
|
315
|
+
"to": "/rmt-vnext-source-to-sea",
|
|
316
|
+
"unmountScheduleRef": "ui.background.work",
|
|
317
|
+
"remountScheduleRef": "route.transition.render",
|
|
318
|
+
"resourceId": "demo.feedback.auditTimer",
|
|
319
|
+
"expectedUnmountCount": 1,
|
|
320
|
+
"expectedRemountCount": 1
|
|
321
|
+
}
|
|
322
|
+
]
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Gate-Regeln
|
|
327
|
+
|
|
328
|
+
Das Gate schlaegt fehl, wenn eines dieser Korrelationsglieder fehlt:
|
|
329
|
+
|
|
330
|
+
- Compiler-Result ist nicht erfolgreich.
|
|
331
|
+
- PRIM-03 Semantic Graph meldet Fehler.
|
|
332
|
+
- PRIM-04 App-Platform- oder Kernel-Records fehlen.
|
|
333
|
+
- Kernel-Boundary ist nicht `no-rmt-kernel-import-of-host-runtime-types`.
|
|
334
|
+
- Schedule oder Lifecycle-Record fehlt.
|
|
335
|
+
- Aus Schedule und Operation laesst sich keine Fabric-Fiber ableiten.
|
|
336
|
+
- Die Fabric-Bruecke kann keine `xtend.fabric.fiber.v1` erzeugen.
|
|
337
|
+
- Die Fabric/RMT-Lane-Aufloesung liefert kein
|
|
338
|
+
`xtend.fabric.rmt-lane-mapping.v1`.
|
|
339
|
+
- Der Fabric-Telemetry-Snapshot enthaelt die erwartete Lane oder Schedule Ref
|
|
340
|
+
nicht.
|
|
341
|
+
- Die PRIM-05-Lane-Matrix enthaelt nicht alle erwarteten Fabric-Lanes.
|
|
342
|
+
- Die Host-Adapter-Telemetrie fehlt im Fabric-Snapshot.
|
|
343
|
+
- Route- oder Component-Fiber fehlen im Fabric-Snapshot.
|
|
344
|
+
- Die Browser-Fixture enthaelt keine sichtbaren Fabric-Lane-/Fiber-Marker.
|
|
345
|
+
- Der Fiber-Source-Kind ist nicht `selector`.
|
|
346
|
+
- Source-Map-Pointer zum Event fehlt.
|
|
347
|
+
- Browser-Fixture deklariert keinen Probe-Contract.
|
|
348
|
+
- DOM-Marker, Viewport-Assertion oder Event-Result-Key fehlen.
|
|
349
|
+
- Die Object-Matrix enthaelt weniger als vier sichtbare Primitives, keine
|
|
350
|
+
getrennten Lanes oder kein Cross-Primitive-Event.
|
|
351
|
+
- Die Object-Matrix enthaelt nicht mindestens zwei valide Route-Switches mit
|
|
352
|
+
Navigation- und Render-Schedule.
|
|
353
|
+
- Der Route-Switch mountet kein Target-Objekt oder das Target ist im echten
|
|
354
|
+
Browser-Result nicht sichtbar.
|
|
355
|
+
- Ein Route-Lifecycle-Cycle unmountet oder remountet das Target nicht, die
|
|
356
|
+
erwarteten Unmount-/Remount-Zaehler pro Target fehlen, der deklarierte
|
|
357
|
+
Resource-Cleanup ist nicht in vNext/Core nachweisbar, oder der Resource-Owner
|
|
358
|
+
passt nicht zum Route-Target.
|
|
359
|
+
- Eines der Matrix-Objekte korreliert nicht durch Source, Kernel, Fabric, UI
|
|
360
|
+
und Browser.
|
|
361
|
+
- Der optionale Browser-Execution-Pfad liefert bei aktivem Driver keinen
|
|
362
|
+
`passed`-Result-Key oder weicht bei Primitive ID, Schedule, Fiber, Fabric
|
|
363
|
+
Schedule, Host-Adapter-Telemetrie oder Event von der Evidence ab.
|
|
364
|
+
- ChromeDriver-Auto-Cleanup kann einen automatisch gestarteten Driver nach
|
|
365
|
+
erfolgreichem Browser-Result nicht ueber `/shutdown` oder Prozess-Fallback
|
|
366
|
+
beenden.
|
|
367
|
+
- Kernel-Records enthalten XTend-Host-Imports.
|
|
368
|
+
|
|
369
|
+
## Lokale Gates
|
|
370
|
+
|
|
371
|
+
Gezielte PRIM-06-Gates:
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
node --check tools/rmt-language/vnext-source-to-sea.js
|
|
375
|
+
node --check tests/rmt-language/rmt_vnext_source_to_sea_suite.js
|
|
376
|
+
node --check scripts/capture_rmt_vnext_source_to_sea_evidence.js
|
|
377
|
+
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));"
|
|
378
|
+
node scripts/capture_rmt_vnext_source_to_sea_evidence.js
|
|
379
|
+
node scripts/run_xtend_tests.js fabric-lane-mapping fabric-component-fibers fabric-runtime-bridge --json
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
Echter Browser-Lauf mit externem WebDriver:
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
RMT_VNEXT_SOURCE_TO_SEA_BROWSER_DRIVER=webdriver \
|
|
386
|
+
RMT_VNEXT_SOURCE_TO_SEA_WEBDRIVER_URL=http://127.0.0.1:9515 \
|
|
387
|
+
node scripts/capture_rmt_vnext_source_to_sea_evidence.js --require-browser
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Echter Browser-Lauf mit automatisch gestartetem ChromeDriver:
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
npm run test:rmt-vnext-source-to-sea:chromedriver
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Echter Browser-Lauf mit automatisch gestartetem Firefox/Geckodriver:
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
npm run test:rmt-vnext-source-to-sea:firefox
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
Alternativ kann derselbe Gate gegen einen beliebigen W3C-WebDriver-Endpunkt
|
|
403
|
+
laufen. `--browser-name` bzw. `RMT_VNEXT_SOURCE_TO_SEA_BROWSER_NAME` waehlt
|
|
404
|
+
dann z. B. `firefox`, `chrome`, `MicrosoftEdge` oder `safari`:
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
RMT_VNEXT_SOURCE_TO_SEA_BROWSER_DRIVER=webdriver \
|
|
408
|
+
RMT_VNEXT_SOURCE_TO_SEA_BROWSER_NAME=firefox \
|
|
409
|
+
RMT_VNEXT_SOURCE_TO_SEA_WEBDRIVER_URL=http://127.0.0.1:4444 \
|
|
410
|
+
node scripts/capture_rmt_vnext_source_to_sea_evidence.js --require-browser
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Der GitHub-Actions-Job `rmt-vnext-primitive-gates` haelt diesen ChromeDriver-
|
|
414
|
+
Pfad als optionalen Evidence-Lauf hinter `workflow_dispatch` und uploaded dann
|
|
415
|
+
dasselbe Evidence-Artefakt.
|
|
416
|
+
Der Report enthaelt zusaetzlich eine CI-Artefaktvalidierung. Im lokalen
|
|
417
|
+
Browser-Skip-Modus bleibt sie `skipped`; im ChromeDriver-Required-Pfad muss sie
|
|
418
|
+
`passed` sein und `objectCount: 4`, zwei Cross-Primitive-Events, zwei
|
|
419
|
+
Route-Switches, zwei Route-Lifecycle-Cycles, `targetMounted`, `targetVisible`,
|
|
420
|
+
`countsMatch` und die Audit-Resources `demo.feedback.auditTimer` sowie
|
|
421
|
+
`demo.feedback.auditSubscription` nachweisen.
|
|
422
|
+
|
|
423
|
+
Ein bereits geschriebenes CI-Artefakt kann ohne neuen Browser-Lauf erneut gegen
|
|
424
|
+
denselben Contract geprueft werden:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
npm run test:rmt-vnext-source-to-sea:validate-artifact
|
|
428
|
+
node scripts/capture_rmt_vnext_source_to_sea_evidence.js --validate-artifact .xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
Firefox-Artefakte koennen mit dem erwarteten Driver replayed werden:
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
npm run test:rmt-vnext-source-to-sea:validate-artifact:firefox
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
Der Replay-Pfad nutzt
|
|
438
|
+
`validateRmtVNextSourceToSeaCiArtifactFile(...)`, setzt Browser-Evidence als
|
|
439
|
+
erwartete Eingabe fuer diesen optionalen Replay voraus und faellt fuer
|
|
440
|
+
fehlende, nicht parsebare oder gedriftete Artefakte geschlossen mit
|
|
441
|
+
`status: "failed"` aus.
|
|
442
|
+
|
|
443
|
+
ChromeDriver-Auto-Cleanup nutzt fuer automatisch gestartete ChromeDriver zuerst
|
|
444
|
+
den lokalen WebDriver-Endpunkt `/shutdown`. Erst wenn dieser Pfad den Prozess
|
|
445
|
+
nicht beendet, faellt das Gate auf Prozess-Signale zurueck. Das ist wichtig fuer
|
|
446
|
+
Snap-/Chromium-Installationen, bei denen ein direkter `kill()` mit `EACCES`
|
|
447
|
+
scheitern kann.
|
|
448
|
+
|
|
449
|
+
## Naechster Handoff
|
|
450
|
+
|
|
451
|
+
`RMT-VNEXT-PRIM-06` liefert nun die erste Source-to-Sea-Evidence.
|
|
452
|
+
`RMT-VNEXT-PRIM-05` ist als eigenes Fabric-Bridge-Paket abgeschlossen: echte
|
|
453
|
+
Fabric-Runtime-Fiber, Host-Adapter-Telemetrie, Route-/Component-Fiber, ein
|
|
454
|
+
Telemetry-Snapshot und eine Lane-Matrix fuer nicht sichtbare Scheduling-
|
|
455
|
+
Klassen sind ueber `rmt-vnext-fabric-bridge` gatebar. Der aktuelle PRIM-06-
|
|
456
|
+
Ausbau haelt den Browser-Execution-Pfad in GitHub Actions als optionalen,
|
|
457
|
+
manuell aktivierten Evidence-Lauf vor. Das Release-Artefakt ist als
|
|
458
|
+
`.xtend-test-results/xtend-rmt-vnext-source-to-sea-evidence.json` angebunden.
|
|
459
|
+
Die Browser-Result-Matrix fuehrt jetzt vier Objekte, Cross-Primitive-Events
|
|
460
|
+
und zwei sequenzielle Route-Switches. Der aktuelle Runtime-Slice mountet
|
|
461
|
+
`demo.feedback.detail` und `demo.feedback.audit` erst nach Route-Wechseln und
|
|
462
|
+
verlangt im Browser-Result jeweils `targetMounted: true` sowie
|
|
463
|
+
`targetVisible: true`. Zusaetzlich fuehrt `routeLifecycleCycles` getrennte
|
|
464
|
+
Unmount-/Remount-Zyklen fuer beide Targets:
|
|
465
|
+
`demo.feedback.detailTimer` und `demo.feedback.auditTimer` muessen ueber
|
|
466
|
+
`dispose on surface.destroy` als Resource-Cleanup-Evidence vorliegen; die
|
|
467
|
+
Browser-Evidence muss pro Target `unmountCount: 1`, `remountCount: 1` und
|
|
468
|
+
`countsMatch: true` liefern. Der Audit-Zyklus prueft nun mehrere Resource-
|
|
469
|
+
Records: Neben `demo.feedback.auditTimer` muss auch
|
|
470
|
+
`demo.feedback.auditSubscription` mit `kind subscription`,
|
|
471
|
+
`owner surface.demo.feedback.audit` und `dispose on surface.destroy`
|
|
472
|
+
artefaktiert werden. Eine negative Fixture ohne Dispose-Policy muss
|
|
473
|
+
kontrolliert mit
|
|
474
|
+
`rmt.vnext.source_to_sea.cleanup_dispose_policy_missing` fehlschlagen. Eine
|
|
475
|
+
zweite negative Fixture besitzt zwar eine Dispose-Policy, bindet
|
|
476
|
+
`demo.feedback.detailTimer` aber an `surface.demo.feedback.toast`; sie muss mit
|
|
477
|
+
`rmt.vnext.source_to_sea.cleanup_owner_mismatch` fehlschlagen. Eine dritte
|
|
478
|
+
negative Fixture entfernt `demo.feedback.auditTimer` vollstaendig aus vNext,
|
|
479
|
+
laesst `demo.feedback.audit` aber als Route-Target bestehen; sie muss mit
|
|
480
|
+
`rmt.vnext.source_to_sea.cleanup_resource_missing` fehlschlagen. Der naechste
|
|
481
|
+
Schritt ist der Abgleich der lokalen `chromedriver`-Evidence mit echten
|
|
482
|
+
CI-Artefakten.
|
|
483
|
+
|
|
484
|
+
Die Cross-Primitive-Evidence ist nun zweistufig: Neben
|
|
485
|
+
`demo.feedback.save -> demo.feedback.toast` muss auch
|
|
486
|
+
`demo.feedback.detail.ack -> demo.feedback.audit` nach dem Route-Mount
|
|
487
|
+
nachgewiesen werden. Der zweite Eintrag reduziert
|
|
488
|
+
`state.demo.feedback.audit.text`, emittiert `demo.feedback.audit.escalated`
|
|
489
|
+
und muss als `stage: "route-target"` mit `sourceLane: "transition"` und
|
|
490
|
+
`targetLane: "transition"` im Browser-Result erscheinen.
|
|
491
|
+
|
|
492
|
+
Der negative Browser-Probe
|
|
493
|
+
`tests/browser/fixtures/rmt-vnext-source-to-sea-cross-route-invalid.html`
|
|
494
|
+
verschiebt den `stage: "route-target"`-Eintrag absichtlich auf
|
|
495
|
+
`targetPrimitiveId: "demo.feedback.toast"`, waehrend Event und Target-State
|
|
496
|
+
weiter auf `demo.feedback.audit` zeigen. Die Object-Matrix muss dadurch
|
|
497
|
+
geschlossen fehlschlagen und mindestens diese Guards als `false` ausweisen:
|
|
498
|
+
`cross event route-target state belongs to target primitive`,
|
|
499
|
+
`cross event route-target event belongs to target primitive` und
|
|
500
|
+
`cross event route-target stage uses transition lanes`.
|
|
501
|
+
|
|
502
|
+
## Browser Result Drift
|
|
503
|
+
|
|
504
|
+
Der WebDriver-Result-Pfad wird zusaetzlich durch
|
|
505
|
+
`xtend.rmt.vnext.source-to-sea-browser-result-validation.v1` abgesichert.
|
|
506
|
+
`createRmtVNextSourceToSeaBrowserResultValidation(...)` kapselt dieselben
|
|
507
|
+
Checks, die der echte ChromeDriver-Lauf nach dem Headless-Browser auswertet.
|
|
508
|
+
Damit koennen Route-Switch- und Lifecycle-Drifts ohne neuen Browserstart
|
|
509
|
+
deterministisch rekonstruiert werden:
|
|
510
|
+
|
|
511
|
+
- `browser execution route switches pass` muss fehlschlagen, wenn ein
|
|
512
|
+
Route-Switch zwar im Result steht, aber `status: "failed"`,
|
|
513
|
+
`targetMounted: false` oder `targetVisible: false` liefert.
|
|
514
|
+
- `browser execution route lifecycle cycles pass` muss fehlschlagen, wenn ein
|
|
515
|
+
Lifecycle-Zyklus `countsMatch: false` oder abweichende Unmount-/Remount-
|
|
516
|
+
Zaehler ausweist.
|
|
517
|
+
- `browser execution cross-primitive events pass` muss fehlschlagen, wenn ein
|
|
518
|
+
Cross-Primitive-Event im Browser-Result nicht `status: "passed"` liefert.
|
|
519
|
+
- `browser execution object matrix passes` muss fehlschlagen, wenn ein
|
|
520
|
+
sichtbares Objekt im Browser-Result nicht `status: "passed"` liefert.
|
|
521
|
+
|
|
522
|
+
## Cross-Route Event Evidence
|
|
523
|
+
|
|
524
|
+
Das positive Browser-Result muss zwei Cross-Primitive-Events enthalten:
|
|
525
|
+
|
|
526
|
+
```json
|
|
527
|
+
{
|
|
528
|
+
"sourcePrimitiveId": "demo.feedback.status",
|
|
529
|
+
"targetPrimitiveId": "demo.feedback.toast",
|
|
530
|
+
"eventId": "demo.feedback.toast.promoted",
|
|
531
|
+
"targetLane": "idle"
|
|
532
|
+
}
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
```json
|
|
536
|
+
{
|
|
537
|
+
"sourcePrimitiveId": "demo.feedback.detail",
|
|
538
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
539
|
+
"eventId": "demo.feedback.audit.escalated",
|
|
540
|
+
"stage": "route-target",
|
|
541
|
+
"sourceLane": "transition",
|
|
542
|
+
"targetLane": "transition"
|
|
543
|
+
}
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
## Multi-Resource Cleanup Evidence
|
|
547
|
+
|
|
548
|
+
Der positive Audit-Lifecycle muss mehrere Cleanup-Resources ausweisen:
|
|
549
|
+
|
|
550
|
+
```json
|
|
551
|
+
{
|
|
552
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
553
|
+
"resourceIds": [
|
|
554
|
+
"demo.feedback.auditTimer",
|
|
555
|
+
"demo.feedback.auditSubscription"
|
|
556
|
+
],
|
|
557
|
+
"resourceKinds": [
|
|
558
|
+
"timer",
|
|
559
|
+
"subscription"
|
|
560
|
+
],
|
|
561
|
+
"resourceDisposed": true
|
|
562
|
+
}
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
Die Object-Matrix muss fuer `demo.feedback.auditSubscription` denselben Owner
|
|
566
|
+
und dieselbe Dispose-Policy wie fuer den Timer pruefen. Zyklen mit nur
|
|
567
|
+
`resourceId` bleiben kompatibel; produktive Zyklen koennen `resources` mit
|
|
568
|
+
mehreren Resource IDs und erwarteten Kinds deklarieren.
|
|
569
|
+
|
|
570
|
+
## Negative Cleanup Fixtures
|
|
571
|
+
|
|
572
|
+
Die negativen Fixtures liegen unter:
|
|
573
|
+
|
|
574
|
+
```text
|
|
575
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-invalid.rmt
|
|
576
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-owner-invalid.rmt
|
|
577
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-resource-missing.rmt
|
|
578
|
+
tests/rmt-language/fixtures/vnext-source-to-sea-cleanup-kind-invalid.rmt
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
Die erste Fixture laesst `demo.feedback.detailTimer` absichtlich ohne
|
|
582
|
+
`dispose on surface.destroy`. Die zweite Fixture behaelt die Dispose-Policy,
|
|
583
|
+
bindet den Resource-Owner aber absichtlich an `surface.demo.feedback.toast`.
|
|
584
|
+
Die dritte Fixture laesst `demo.feedback.audit` als Route-Target bestehen,
|
|
585
|
+
entfernt aber `demo.feedback.auditTimer` vollstaendig aus der vNext-Quelle.
|
|
586
|
+
Die vierte Fixture behaelt `demo.feedback.auditSubscription` als Cleanup-
|
|
587
|
+
Resource, deklariert sie aber absichtlich mit `kind cache` statt
|
|
588
|
+
`kind subscription`.
|
|
589
|
+
Das positive Source-to-Sea-Gate bleibt erfolgreich, aber die negativen
|
|
590
|
+
Matrizen muessen fehlschlagen und folgende Evidence liefern:
|
|
591
|
+
|
|
592
|
+
```json
|
|
593
|
+
{
|
|
594
|
+
"code": "rmt.vnext.source_to_sea.cleanup_dispose_policy_missing",
|
|
595
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
596
|
+
"resourceId": "demo.feedback.detailTimer",
|
|
597
|
+
"dispose": null
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
```json
|
|
602
|
+
{
|
|
603
|
+
"code": "rmt.vnext.source_to_sea.cleanup_owner_mismatch",
|
|
604
|
+
"targetPrimitiveId": "demo.feedback.detail",
|
|
605
|
+
"resourceId": "demo.feedback.detailTimer",
|
|
606
|
+
"owner": {
|
|
607
|
+
"id": "demo.feedback.toast"
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
```json
|
|
613
|
+
{
|
|
614
|
+
"code": "rmt.vnext.source_to_sea.cleanup_resource_missing",
|
|
615
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
616
|
+
"resourceId": "demo.feedback.auditTimer",
|
|
617
|
+
"resource": null
|
|
618
|
+
}
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
```json
|
|
622
|
+
{
|
|
623
|
+
"code": "rmt.vnext.source_to_sea.cleanup_kind_mismatch",
|
|
624
|
+
"targetPrimitiveId": "demo.feedback.audit",
|
|
625
|
+
"resourceId": "demo.feedback.auditSubscription",
|
|
626
|
+
"expectedKind": "subscription",
|
|
627
|
+
"actualKind": "cache"
|
|
628
|
+
}
|
|
629
|
+
```
|