@supersoniks/concorde 5.1.2 → 5.1.3-immutable.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/concorde-docs/SKILL.md +1 -1
- package/.claude/skills +1 -0
- package/.github/workflows/ci.yml +21 -0
- package/.github-export-ignore +30 -0
- package/CONTRIBUTING.md +59 -0
- package/DEV.md +54 -0
- package/LICENSE +21 -0
- package/OPEN_SOURCE_CHECKPOINT.md +133 -0
- package/README.md +1 -1
- package/ai/README.md +29 -41
- package/ai/skills/concorde/SKILL.md +54 -324
- package/ai/skills/concorde/rules/composition.md +32 -0
- package/ai/skills/concorde/rules/data.md +47 -0
- package/ai/skills/concorde/rules/http.md +25 -0
- package/ai/skills/concorde/rules/lists-forms.md +35 -0
- package/ai/skills/concorde/rules/styling.md +46 -0
- package/ai/skills/concorde/rules/troubleshooting.md +45 -0
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +177 -177
- package/concorde-core.es.js +4993 -4833
- package/custom-elements-manifest.public.config.mjs +8 -0
- package/{.tmp-cem/custom-elements.json → custom-elements.json} +11722 -8868
- package/dist/concorde-core.bundle.js +177 -177
- package/dist/concorde-core.es.js +4993 -4833
- package/dist/docs-mock-api-sw.js +58 -223
- package/dist/docs-mock-api-sw.js.map +4 -4
- package/dist/img/og-concorde.jpg +0 -0
- package/dist/robots.txt +11 -10
- package/docs/assets/index-CD4WyL6o.css +1 -0
- package/docs/assets/index-D_alEsng.js +12122 -0
- package/docs/crawl/core/components/functional/date/date.html +190 -0
- package/docs/crawl/core/components/functional/fetch/fetch.html +109 -0
- package/docs/crawl/core/components/functional/if/if.html +27 -0
- package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
- package/docs/crawl/core/components/functional/list/list.html +70 -0
- package/docs/crawl/core/components/functional/mix/mix.html +45 -0
- package/docs/crawl/core/components/functional/queue/queue.html +96 -0
- package/docs/crawl/core/components/functional/router/router.html +106 -0
- package/docs/{core → crawl/core}/components/functional/sdui/sdui-extension-points.html +8 -9
- package/docs/crawl/core/components/functional/sdui/sdui.html +368 -0
- package/docs/crawl/core/components/functional/states/states.html +66 -0
- package/docs/crawl/core/components/functional/submit/submit.html +160 -0
- package/docs/{core → crawl/core}/components/functional/subscriber/subscriber.html +5 -6
- package/docs/crawl/core/components/functional/value/value.html +51 -0
- package/docs/{core → crawl/core}/components/ui/alert/alert.html +63 -53
- package/docs/{core → crawl/core}/components/ui/alert-messages/alert-messages.html +5 -6
- package/docs/{core → crawl/core}/components/ui/badge/badge.html +33 -33
- package/docs/crawl/core/components/ui/button/button.html +150 -0
- package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
- package/docs/{core → crawl/core}/components/ui/card/card.html +11 -12
- package/docs/{core → crawl/core}/components/ui/divider/divider.html +14 -14
- package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +73 -0
- package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +266 -0
- package/docs/{core → crawl/core}/components/ui/form/form-actions/form-actions.html +23 -23
- package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +121 -0
- package/docs/crawl/core/components/ui/form/input/input.html +109 -0
- package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +38 -0
- package/docs/crawl/core/components/ui/form/radio/radio.html +56 -0
- package/docs/crawl/core/components/ui/form/select/select.html +73 -0
- package/docs/crawl/core/components/ui/form/switch/switch.html +56 -0
- package/docs/crawl/core/components/ui/form/textarea/textarea.html +59 -0
- package/docs/crawl/core/components/ui/group/group.html +104 -0
- package/docs/{core → crawl/core}/components/ui/icon/icon.html +9 -10
- package/docs/crawl/core/components/ui/image/image.html +298 -0
- package/docs/{core → crawl/core}/components/ui/link/link.html +11 -12
- package/docs/crawl/core/components/ui/loader/loader.html +124 -0
- package/docs/{core → crawl/core}/components/ui/menu/menu.html +33 -34
- package/docs/crawl/core/components/ui/modal/modal.html +342 -0
- package/docs/crawl/core/components/ui/pop/pop.html +296 -0
- package/docs/{core → crawl/core}/components/ui/progress/progress.html +7 -8
- package/docs/crawl/core/components/ui/table/table.html +545 -0
- package/docs/crawl/core/components/ui/theme/theme.html +131 -0
- package/docs/crawl/core/components/ui/toast/toast.html +233 -0
- package/docs/crawl/core/components/ui/tooltip/tooltip.html +140 -0
- package/docs/{docs/getting-started → crawl/docs/_core-concept}/dataFlow.html +29 -26
- package/docs/crawl/docs/_core-concept/overview.html +66 -0
- package/docs/crawl/docs/_core-concept/subscriber.html +75 -0
- package/docs/crawl/docs/_decorators/ancestor-attribute.html +117 -0
- package/docs/crawl/docs/_decorators/auto-subscribe.html +202 -0
- package/docs/crawl/docs/_decorators/bind.html +141 -0
- package/docs/crawl/docs/_decorators/get.html +149 -0
- package/docs/crawl/docs/_decorators/handle.html +165 -0
- package/docs/crawl/docs/_decorators/on-assign.html +355 -0
- package/docs/crawl/docs/_decorators/patch.html +78 -0
- package/docs/crawl/docs/_decorators/post.html +139 -0
- package/docs/crawl/docs/_decorators/publish.html +61 -0
- package/docs/crawl/docs/_decorators/put.html +78 -0
- package/docs/crawl/docs/_decorators/subscribe.html +109 -0
- package/docs/crawl/docs/_decorators/wait-for-ancestors.html +137 -0
- package/docs/crawl/docs/_directives/sub.html +93 -0
- package/docs/{docs/getting-started → crawl/docs/_getting-started}/ai-agents.html +11 -12
- package/docs/crawl/docs/_getting-started/concorde-manual-install.html +100 -0
- package/docs/crawl/docs/_getting-started/concorde-outside.html +58 -0
- package/docs/{docs/getting-started → crawl/docs/_getting-started}/create-a-component.html +14 -11
- package/docs/{docs/getting-started → crawl/docs/_getting-started}/my-first-component.html +22 -13
- package/docs/crawl/docs/_getting-started/my-first-subscriber.html +110 -0
- package/docs/crawl/docs/_getting-started/pubsub.html +62 -0
- package/docs/crawl/docs/_getting-started/start.html +76 -0
- package/docs/{docs/getting-started → crawl/docs/_getting-started}/theming.html +9 -10
- package/docs/{docs/misc → crawl/docs/_misc}/api-configuration.html +18 -18
- package/docs/{docs/misc → crawl/docs/_misc}/dataProviderKey.html +11 -12
- package/docs/{docs/misc → crawl/docs/_misc}/docs-mock-api.html +28 -25
- package/docs/{docs/misc → crawl/docs/_misc}/dynamic-path.html +15 -16
- package/docs/{docs/misc → crawl/docs/_misc}/endpoint.html +15 -16
- package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
- package/docs/{docs/misc → crawl/docs/_misc}/html-integration.html +15 -12
- package/docs/crawl/hubs/decorators.html +547 -0
- package/docs/crawl/hubs/form-components.html +381 -0
- package/docs/crawl/hubs/remote-data.html +452 -0
- package/docs/crawl/index.html +103 -0
- package/docs/docs-mock-api-sw.js +223 -58
- package/docs/docs-mock-api-sw.js.map +4 -4
- package/docs/index.html +68 -95
- package/docs/llms-full.txt +3610 -2231
- package/docs/llms.txt +86 -94
- package/docs/robots.txt +10 -11
- package/docs/sitemap.xml +84 -78
- package/docs/src/core/components/functional/date/date.md +231 -91
- package/docs/src/core/components/functional/fetch/fetch.md +83 -66
- package/docs/src/core/components/functional/if/if.md +3 -28
- package/docs/src/core/components/functional/jsonata/jsonata.md +37 -42
- package/docs/src/core/components/functional/list/list.md +43 -99
- package/docs/src/core/components/functional/mix/mix.md +26 -31
- package/docs/src/core/components/functional/queue/queue.md +61 -40
- package/docs/src/core/components/functional/router/router.md +65 -64
- package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
- package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
- package/docs/src/core/components/functional/sdui/example.json +86 -19
- package/docs/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
- package/docs/src/core/components/functional/sdui/sdui.md +358 -187
- package/docs/src/core/components/functional/states/states.md +61 -86
- package/docs/src/core/components/functional/submit/submit.md +72 -64
- package/docs/src/core/components/functional/value/value.md +22 -34
- package/docs/src/core/components/ui/alert/alert.md +58 -48
- package/docs/src/core/components/ui/badge/badge.md +34 -27
- package/docs/src/core/components/ui/button/button.md +106 -139
- package/docs/src/core/components/ui/captcha/captcha.md +32 -17
- package/docs/src/core/components/ui/card/card.md +6 -6
- package/docs/src/core/components/ui/divider/divider.md +11 -8
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +42 -90
- package/docs/src/core/components/ui/form/fieldset/fieldset.md +75 -31
- package/docs/src/core/components/ui/form/form-actions/form-actions.md +16 -14
- package/docs/src/core/components/ui/form/form-layout/form-layout.md +29 -19
- package/docs/src/core/components/ui/form/input/input.md +95 -95
- package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +29 -0
- package/docs/src/core/components/ui/form/radio/radio.md +34 -55
- package/docs/src/core/components/ui/form/select/select.md +45 -60
- package/docs/src/core/components/ui/form/switch/switch.md +34 -57
- package/docs/src/core/components/ui/form/textarea/textarea.md +38 -55
- package/docs/src/core/components/ui/group/group.md +33 -35
- package/docs/src/core/components/ui/icon/icon.md +4 -4
- package/docs/src/core/components/ui/image/image.md +107 -41
- package/docs/src/core/components/ui/link/link.md +6 -6
- package/docs/src/core/components/ui/loader/loader.md +55 -30
- package/docs/src/core/components/ui/menu/menu.md +27 -27
- package/docs/src/core/components/ui/modal/modal.md +96 -72
- package/docs/src/core/components/ui/pop/pop.md +158 -80
- package/docs/src/core/components/ui/progress/progress.md +2 -2
- package/docs/src/core/components/ui/table/table.md +255 -91
- package/docs/src/core/components/ui/theme/theme.md +36 -11
- package/docs/src/core/components/ui/toast/toast.md +117 -48
- package/docs/src/core/components/ui/tooltip/tooltip.md +62 -27
- package/docs/{docs/getting-started → src/docs/_core-concept}/dataFlow.md +18 -17
- package/docs/src/docs/_core-concept/overview.md +57 -0
- package/docs/src/docs/_core-concept/subscriber.md +75 -0
- package/docs/src/docs/_decorators/ancestor-attribute.md +128 -0
- package/docs/src/docs/_decorators/auto-subscribe.md +202 -0
- package/docs/src/docs/_decorators/bind.md +167 -0
- package/docs/src/docs/_decorators/get.md +162 -0
- package/docs/src/docs/_decorators/handle.md +175 -0
- package/docs/src/docs/_decorators/on-assign.md +390 -0
- package/docs/src/docs/_decorators/patch.md +70 -0
- package/docs/src/docs/_decorators/post.md +146 -0
- package/docs/src/docs/_decorators/publish.md +55 -0
- package/docs/src/docs/_decorators/put.md +70 -0
- package/docs/src/docs/_decorators/subscribe.md +100 -0
- package/docs/src/docs/_decorators/wait-for-ancestors.md +163 -0
- package/docs/src/docs/_directives/sub.md +91 -0
- package/docs/src/docs/{getting-started → _getting-started}/ai-agents.md +3 -3
- package/docs/src/docs/_getting-started/concorde-manual-install.md +133 -0
- package/docs/src/docs/_getting-started/concorde-outside.md +33 -0
- package/docs/{docs/getting-started → src/docs/_getting-started}/create-a-component.md +6 -3
- package/docs/src/docs/{getting-started → _getting-started}/my-first-component.md +14 -5
- package/docs/src/docs/_getting-started/my-first-subscriber.md +120 -0
- package/docs/src/docs/_getting-started/pubsub.md +37 -0
- package/docs/src/docs/{getting-started → _getting-started}/start.md +13 -1
- package/docs/src/docs/{getting-started → _getting-started}/theming.md +2 -2
- package/docs/src/docs/{misc → _misc}/api-configuration.md +12 -10
- package/docs/src/docs/{misc → _misc}/dataProviderKey.md +4 -4
- package/docs/{docs/misc → src/docs/_misc}/docs-mock-api.md +13 -12
- package/docs/{docs/misc → src/docs/_misc}/dynamic-path.md +8 -8
- package/docs/{docs/misc → src/docs/_misc}/endpoint.md +8 -8
- package/docs/src/docs/_misc/formelement-subscriber-removal.md +115 -0
- package/docs/{docs/misc → src/docs/_misc}/html-integration.md +5 -4
- package/docs/src/docs/search/docs-search.json +4375 -2420
- package/docs/src/tsconfig.declarations.json +22 -0
- package/docs/src/tsconfig.emit.json +23 -0
- package/docs/src/tsconfig.json +2 -23
- package/gitlab/job_github_mirror.sh +39 -0
- package/index.html +89 -0
- package/package.json +22 -4
- package/public/img/og-concorde.jpg +0 -0
- package/scripts/ai-init.mjs +104 -379
- package/scripts/ai-init.test.mjs +81 -239
- package/scripts/docs-markdown-vite-plugin.ts +11 -5
- package/scripts/docs-public-url.mjs +6 -0
- package/scripts/docs.htaccess +7 -0
- package/scripts/generate-cem.mjs +244 -0
- package/scripts/generate-cem.test.mjs +122 -0
- package/scripts/generate-crawl-docs.mjs +29 -5
- package/scripts/generate-sdui-catalog.mjs +11 -10
- package/scripts/github-export.mjs +150 -0
- package/scripts/post-build-docs.js +3 -0
- package/scripts/post-build.mjs +0 -0
- package/scripts/pre-publish.mjs +2 -1
- package/scripts/site-pages.mjs +212 -0
- package/scripts/site-pages.test.mjs +116 -0
- package/site-pages/about.md +22 -0
- package/site-pages/privacy.md +32 -0
- package/src/core/components/functional/date/date.md +1 -1
- package/src/core/components/functional/example/example.ts +3 -1
- package/src/core/components/functional/if/if.ts +0 -0
- package/src/core/components/functional/list/list.demo.ts +0 -0
- package/src/core/components/functional/list/list.md +6 -2
- package/src/core/components/functional/list/list.ts +17 -4
- package/src/core/components/functional/mix/mix.md +0 -0
- package/src/core/components/functional/router/router.demo.ts +0 -0
- package/src/core/components/functional/router/router.ts +0 -0
- package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
- package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
- package/src/core/components/functional/sdui/component-catalog.json +2 -2
- package/src/core/components/functional/sdui/example.json +0 -0
- package/src/core/components/functional/sdui/sdui-immutable.spec.ts +74 -0
- package/src/core/components/functional/sdui/sdui.ts +33 -8
- package/src/core/components/functional/sdui/types.ts +0 -0
- package/src/core/components/functional/states/states.ts +0 -0
- package/src/core/components/functional/submit/submit.spec.ts +60 -0
- package/src/core/components/functional/submit/submit.ts +6 -3
- package/src/core/components/functional/subscriber/subscriber.ts +0 -0
- package/src/core/components/functional/value/value.md +0 -0
- package/src/core/components/functional/value/value.ts +0 -0
- package/src/core/components/ui/_css/size.ts +0 -0
- package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
- package/src/core/components/ui/card/card.md +1 -1
- package/src/core/components/ui/form/input/input.md +19 -1
- package/src/core/components/ui/form/input/input.ts +8 -2
- package/src/core/components/ui/form/radio/radio.md +14 -0
- package/src/core/components/ui/image/image.md +17 -17
- package/src/core/components/ui/modal/modal.md +2 -2
- package/src/core/decorators/subscriber/bind.ts +9 -14
- package/src/core/decorators/subscriber/subscribe.ts +15 -9
- package/src/core/decorators/subscriber/subscribe.type-test.ts +14 -5
- package/src/core/mixins/Subscriber.ts +0 -0
- package/src/core/utils/DataBindObserver.ts +0 -0
- package/src/core/utils/Objects.ts +0 -0
- package/src/core/utils/PublisherProxy.ts +166 -125
- package/src/core/utils/deepReadonly.spec.ts +66 -0
- package/src/core/utils/deepReadonly.ts +71 -0
- package/src/core/utils/immutableValue.spec.ts +54 -0
- package/src/core/utils/immutableValue.ts +102 -0
- package/src/core/utils/nestedDotForm.spec.ts +88 -0
- package/src/core/utils/publisherImmutable.spec.ts +76 -0
- package/src/core/utils/route.ts +0 -0
- package/src/core/utils/strictGet.spec.ts +61 -0
- package/src/core/utils/strictGet.ts +102 -0
- package/src/css.d.ts +19 -0
- package/src/docs/components/docs-demo-sources.ts +3 -3
- package/src/docs/decorators/bind.md +23 -24
- package/src/docs/docs-location.spec.ts +10 -0
- package/src/docs/docs-location.ts +10 -0
- package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
- package/src/docs/example/docs-toggle-demos.ts +1 -1
- package/src/docs/example/users.ts +0 -0
- package/src/docs/getting-started/ai-agents.md +29 -55
- package/src/docs/getting-started/dataFlow.md +2 -2
- package/src/docs/home/home.ts +3 -1
- package/src/docs/misc/publisher-get-immutability-docs-crawl.json +902 -0
- package/src/docs/misc/publisher-get-immutability-docs-recheck.json +13 -0
- package/src/docs/misc/publisher-get-immutability-study.md +229 -0
- package/src/docs/navigation/navigation.ts +5 -1
- package/src/docs/search/docs-search.json +358 -58
- package/src/docs/search/markdown-renderer.ts +6 -1
- package/src/docs/tailwind/css/docs/content.css +4 -5
- package/src/tsconfig.declarations.json +22 -0
- package/src/tsconfig.emit.json +23 -0
- package/src/tsconfig.json +53 -5
- package/src/tsconfig.tsbuildinfo +1 -1
- package/.taste-skill/after/desktop-fold.jpg +0 -0
- package/.taste-skill/after/desktop-page-01.jpg +0 -0
- package/.taste-skill/after/desktop-page-02.jpg +0 -0
- package/.taste-skill/after/desktop-page-03.jpg +0 -0
- package/.taste-skill/after/mobile-fold.jpg +0 -0
- package/.taste-skill/after/mobile-page-01.jpg +0 -0
- package/.taste-skill/after/report.json +0 -4103
- package/.taste-skill/after/tablet-fold.jpg +0 -0
- package/.taste-skill/after/tablet-page-01.jpg +0 -0
- package/.taste-skill/after/tablet-page-02.jpg +0 -0
- package/.taste-skill/before/desktop-fold.jpg +0 -0
- package/.taste-skill/before/desktop-page-01.jpg +0 -0
- package/.taste-skill/before/desktop-page-02.jpg +0 -0
- package/.taste-skill/before/mobile-fold.jpg +0 -0
- package/.taste-skill/before/mobile-page-01.jpg +0 -0
- package/.taste-skill/before/report.json +0 -2556
- package/.taste-skill/before/tablet-fold.jpg +0 -0
- package/.taste-skill/before/tablet-page-01.jpg +0 -0
- package/.taste-skill/direction.json +0 -510
- package/.taste-skill/notes.md +0 -84
- package/.taste-skill/prod/desktop-fold.jpg +0 -0
- package/.taste-skill/prod/desktop-page-01.jpg +0 -0
- package/.taste-skill/prod/desktop-page-02.jpg +0 -0
- package/.taste-skill/prod/desktop-page-03.jpg +0 -0
- package/.taste-skill/prod/mobile-fold.jpg +0 -0
- package/.taste-skill/prod/mobile-page-01.jpg +0 -0
- package/.taste-skill/prod/mobile-page-02.jpg +0 -0
- package/.taste-skill/prod/report.json +0 -1973
- package/.taste-skill/prod/tablet-fold.jpg +0 -0
- package/.taste-skill/prod/tablet-page-01.jpg +0 -0
- package/.taste-skill/prod/tablet-page-02.jpg +0 -0
- package/AUDIT.md +0 -228
- package/PLAN-AMELIORATION.md +0 -220
- package/PLAN-DOCS-AGENTS.md +0 -80
- package/ai/AGENTS.md +0 -56
- package/ai/cursor/rules/concorde-menu.mdc +0 -15
- package/ai/cursor/rules/concorde-scope.mdc +0 -14
- package/ai/cursor/rules/concorde-theme.mdc +0 -13
- package/ai/cursor/rules/concorde.mdc +0 -66
- package/ai/jetbrains/rules/concorde.md +0 -53
- package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
- package/ai/skills/concorde-imports/SKILL.md +0 -78
- package/ai/skills/concorde-menu/SKILL.md +0 -74
- package/ai/skills/concorde-scope/SKILL.md +0 -70
- package/ai/skills/concorde-theme/SKILL.md +0 -57
- package/docs/.htaccess +0 -75
- package/docs/404.html +0 -15
- package/docs/404.md +0 -5
- package/docs/assets/index-BgG6FFPt.js +0 -11765
- package/docs/assets/index-x89XINSG.css +0 -1
- package/docs/core/components/functional/date/date.html +0 -211
- package/docs/core/components/functional/date/date.md +0 -150
- package/docs/core/components/functional/fetch/fetch.html +0 -180
- package/docs/core/components/functional/fetch/fetch.md +0 -108
- package/docs/core/components/functional/if/if.html +0 -65
- package/docs/core/components/functional/if/if.md +0 -34
- package/docs/core/components/functional/jsonata/jsonata.html +0 -110
- package/docs/core/components/functional/jsonata/jsonata.md +0 -61
- package/docs/core/components/functional/list/list.html +0 -198
- package/docs/core/components/functional/list/list.md +0 -121
- package/docs/core/components/functional/mix/mix.html +0 -78
- package/docs/core/components/functional/mix/mix.md +0 -46
- package/docs/core/components/functional/queue/queue.html +0 -155
- package/docs/core/components/functional/queue/queue.md +0 -51
- package/docs/core/components/functional/router/router.html +0 -154
- package/docs/core/components/functional/router/router.md +0 -93
- package/docs/core/components/functional/sdui/sdui-extension-points.md +0 -94
- package/docs/core/components/functional/sdui/sdui.html +0 -397
- package/docs/core/components/functional/sdui/sdui.md +0 -307
- package/docs/core/components/functional/states/states.html +0 -141
- package/docs/core/components/functional/states/states.md +0 -112
- package/docs/core/components/functional/submit/submit.html +0 -178
- package/docs/core/components/functional/submit/submit.md +0 -106
- package/docs/core/components/functional/subscriber/subscriber.md +0 -91
- package/docs/core/components/functional/translation/translation.html +0 -60
- package/docs/core/components/functional/translation/translation.md +0 -38
- package/docs/core/components/functional/value/value.html +0 -81
- package/docs/core/components/functional/value/value.md +0 -47
- package/docs/core/components/ui/alert/alert.md +0 -186
- package/docs/core/components/ui/alert-messages/alert-messages.md +0 -85
- package/docs/core/components/ui/badge/badge.md +0 -181
- package/docs/core/components/ui/button/button.html +0 -309
- package/docs/core/components/ui/button/button.md +0 -216
- package/docs/core/components/ui/captcha/captcha.html +0 -80
- package/docs/core/components/ui/captcha/captcha.md +0 -56
- package/docs/core/components/ui/card/card.md +0 -215
- package/docs/core/components/ui/divider/divider.md +0 -126
- package/docs/core/components/ui/form/checkbox/checkbox.html +0 -200
- package/docs/core/components/ui/form/checkbox/checkbox.md +0 -125
- package/docs/core/components/ui/form/fieldset/fieldset.html +0 -238
- package/docs/core/components/ui/form/fieldset/fieldset.md +0 -161
- package/docs/core/components/ui/form/form-actions/form-actions.md +0 -98
- package/docs/core/components/ui/form/form-layout/form-layout.html +0 -115
- package/docs/core/components/ui/form/form-layout/form-layout.md +0 -109
- package/docs/core/components/ui/form/input/input.html +0 -235
- package/docs/core/components/ui/form/input/input.md +0 -142
- package/docs/core/components/ui/form/radio/radio.html +0 -144
- package/docs/core/components/ui/form/radio/radio.md +0 -78
- package/docs/core/components/ui/form/select/select.html +0 -178
- package/docs/core/components/ui/form/select/select.md +0 -86
- package/docs/core/components/ui/form/switch/switch.html +0 -146
- package/docs/core/components/ui/form/switch/switch.md +0 -80
- package/docs/core/components/ui/form/textarea/textarea.html +0 -162
- package/docs/core/components/ui/form/textarea/textarea.md +0 -82
- package/docs/core/components/ui/group/group.html +0 -113
- package/docs/core/components/ui/group/group.md +0 -77
- package/docs/core/components/ui/icon/icon.md +0 -214
- package/docs/core/components/ui/image/image.html +0 -194
- package/docs/core/components/ui/image/image.md +0 -167
- package/docs/core/components/ui/link/link.md +0 -81
- package/docs/core/components/ui/loader/loader.html +0 -114
- package/docs/core/components/ui/loader/loader.md +0 -87
- package/docs/core/components/ui/menu/menu.md +0 -370
- package/docs/core/components/ui/modal/modal.html +0 -324
- package/docs/core/components/ui/modal/modal.md +0 -211
- package/docs/core/components/ui/pop/pop.html +0 -250
- package/docs/core/components/ui/pop/pop.md +0 -216
- package/docs/core/components/ui/progress/progress.md +0 -109
- package/docs/core/components/ui/table/table.html +0 -333
- package/docs/core/components/ui/table/table.md +0 -267
- package/docs/core/components/ui/theme/theme.html +0 -116
- package/docs/core/components/ui/theme/theme.md +0 -97
- package/docs/core/components/ui/toast/toast.html +0 -185
- package/docs/core/components/ui/toast/toast.md +0 -147
- package/docs/core/components/ui/tooltip/tooltip.html +0 -112
- package/docs/core/components/ui/tooltip/tooltip.md +0 -89
- package/docs/docs/decorators/ancestor-attribute.html +0 -71
- package/docs/docs/decorators/ancestor-attribute.md +0 -59
- package/docs/docs/decorators/auto-subscribe.html +0 -61
- package/docs/docs/decorators/auto-subscribe.md +0 -40
- package/docs/docs/decorators/bind.html +0 -86
- package/docs/docs/decorators/bind.md +0 -77
- package/docs/docs/decorators/get.html +0 -166
- package/docs/docs/decorators/get.md +0 -160
- package/docs/docs/decorators/handle.html +0 -139
- package/docs/docs/decorators/handle.md +0 -119
- package/docs/docs/decorators/on-assign.html +0 -72
- package/docs/docs/decorators/on-assign.md +0 -63
- package/docs/docs/decorators/patch.html +0 -76
- package/docs/docs/decorators/patch.md +0 -44
- package/docs/docs/decorators/post.html +0 -150
- package/docs/docs/decorators/post.md +0 -134
- package/docs/docs/decorators/publish.html +0 -74
- package/docs/docs/decorators/publish.md +0 -56
- package/docs/docs/decorators/put.html +0 -83
- package/docs/docs/decorators/put.md +0 -51
- package/docs/docs/decorators/subscribe.html +0 -91
- package/docs/docs/decorators/subscribe.md +0 -87
- package/docs/docs/decorators/wait-for-ancestors.html +0 -82
- package/docs/docs/decorators/wait-for-ancestors.md +0 -76
- package/docs/docs/directives/sub.html +0 -79
- package/docs/docs/directives/sub.md +0 -75
- package/docs/docs/directives/t.html +0 -91
- package/docs/docs/directives/t.md +0 -73
- package/docs/docs/getting-started/ai-agents.md +0 -76
- package/docs/docs/getting-started/components.html +0 -27
- package/docs/docs/getting-started/components.md +0 -5
- package/docs/docs/getting-started/installation.html +0 -69
- package/docs/docs/getting-started/installation.md +0 -36
- package/docs/docs/getting-started/my-first-component.md +0 -227
- package/docs/docs/getting-started/start.html +0 -47
- package/docs/docs/getting-started/start.md +0 -35
- package/docs/docs/getting-started/theming.md +0 -253
- package/docs/docs/index.html +0 -99
- package/docs/docs/misc/api-configuration.md +0 -79
- package/docs/docs/misc/dataProviderKey.md +0 -168
- package/docs/hubs/decorators.html +0 -443
- package/docs/hubs/form-components.html +0 -404
- package/docs/hubs/remote-data.html +0 -371
- package/docs/img/archive/concorde-001-2cv.webp +0 -0
- package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
- package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
- package/docs/img/archive/credits.json +0 -28
- package/docs/index.md +0 -22
- package/docs/src/core/components/functional/translation/translation.md +0 -38
- package/docs/src/docs/decorators/ancestor-attribute.md +0 -59
- package/docs/src/docs/decorators/auto-subscribe.md +0 -40
- package/docs/src/docs/decorators/bind.md +0 -77
- package/docs/src/docs/decorators/get.md +0 -160
- package/docs/src/docs/decorators/handle.md +0 -119
- package/docs/src/docs/decorators/on-assign.md +0 -63
- package/docs/src/docs/decorators/patch.md +0 -44
- package/docs/src/docs/decorators/post.md +0 -134
- package/docs/src/docs/decorators/publish.md +0 -56
- package/docs/src/docs/decorators/put.md +0 -51
- package/docs/src/docs/decorators/subscribe.md +0 -87
- package/docs/src/docs/decorators/wait-for-ancestors.md +0 -76
- package/docs/src/docs/directives/sub.md +0 -75
- package/docs/src/docs/directives/t.md +0 -73
- package/docs/src/docs/getting-started/components.md +0 -5
- package/docs/src/docs/getting-started/create-a-component.md +0 -136
- package/docs/src/docs/getting-started/dataFlow.md +0 -87
- package/docs/src/docs/getting-started/installation.md +0 -36
- package/docs/src/docs/misc/docs-mock-api.md +0 -62
- package/docs/src/docs/misc/dynamic-path.md +0 -71
- package/docs/src/docs/misc/endpoint.md +0 -45
- package/docs/src/docs/misc/html-integration.md +0 -14
- /package/{docs → dist}/img/concorde/plane_01.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_02.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_03.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_04.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_05.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_06.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_07.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_08.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_09.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_10.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_11.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_12.jpg +0 -0
- /package/{docs → dist}/img/concorde/plane_13.jpg +0 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Étude — immutabilité DataProvider / `get()` (REDMINE-79567)
|
|
2
|
+
|
|
3
|
+
> **Nature :** étude d’opportunité + ADR de direction.
|
|
4
|
+
> Branche : `79567_publisher_get_immutability_study`.
|
|
5
|
+
> **Recadrage (oct. 2026) :** la cible n’est plus un empilement de gardes opt-in, mais un **store immutable** clair.
|
|
6
|
+
|
|
7
|
+
## 0. Décision de direction (ADR)
|
|
8
|
+
|
|
9
|
+
### Contrat cible
|
|
10
|
+
|
|
11
|
+
> **Le publisher possède les données. On ne mute jamais. On remplace.**
|
|
12
|
+
|
|
13
|
+
| API | Comportement |
|
|
14
|
+
|-----|----------------|
|
|
15
|
+
| `set(value)` / `update(recipe)` | Ownership à l’entrée : copie (clone / Immer `produce`), commit, puis **freeze** (ou équivalent) de la valeur stockée |
|
|
16
|
+
| `get()` | Vue **lecture seule** de la valeur commitée — muter → erreur nette |
|
|
17
|
+
| Écritures | Uniquement `set` / `setIn` / `update` — plus de patch in-place de `_value_` |
|
|
18
|
+
| Comportement | **Un seul** en prod (pas de mode « soft » comme design final) |
|
|
19
|
+
|
|
20
|
+
### Ce qu’on ne garde pas comme design produit
|
|
21
|
+
|
|
22
|
+
Empiler `DeepReadonly` + `strictGet` warn/throw + clone parfois = **pansements** autour d’un moteur encore mutable. Utile en **radar de migration**, pas comme architecture cible.
|
|
23
|
+
|
|
24
|
+
### Conséquence technique
|
|
25
|
+
|
|
26
|
+
Refonte du moteur `PublisherProxy` : plus de `_value_[k] = …` / `delete _value_[k]` / sync parent par mutation. Updates **immutables** (Immer ou `setIn` maison) sur tout chemin d’écriture (y compris traps Proxy / sous-proxies).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 1. Problème (rappel)
|
|
31
|
+
|
|
32
|
+
Aujourd’hui `get()` renvoie la **référence live** de `_value_`. Une mutation locale (`cart.items.push…`) contourne `set` et les listeners → état partagé / UI désynchronisés.
|
|
33
|
+
|
|
34
|
+
Écritures « officielles » (`set`, sous-proxies, `publisher.clé = …`) notifient ; le trou est **get + mutation** et **réutilisation de la ref passée à `set`**.
|
|
35
|
+
|
|
36
|
+
Fichier central : `src/core/utils/PublisherProxy.ts`.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 2. Alternatives évaluées
|
|
41
|
+
|
|
42
|
+
| | Approche | Verdict |
|
|
43
|
+
|---|----------|---------|
|
|
44
|
+
| A | Freeze live **sans** refonte `set` | **Non** — casse le moteur actuel |
|
|
45
|
+
| B | Clone / Proxy readonly à chaque `get()` | **Non** comme défaut — cher, identité cassée |
|
|
46
|
+
| C | Clone défensif seul sans freeze | **Insuffisant** — n’enseigne pas le contrat |
|
|
47
|
+
| D | `strictGet` opt-in warn/throw | **Outil de migration** seulement |
|
|
48
|
+
| E | Lint / convention seule | **Complément**, pas une garantie |
|
|
49
|
+
| F | **Store immutable** (set ownership + get readonly + updates immutables) | **Cible** |
|
|
50
|
+
|
|
51
|
+
### Perf (ordre de grandeur)
|
|
52
|
+
|
|
53
|
+
1. Status quo / typage seul — 0 runtime
|
|
54
|
+
2. Proxy `strictGet` — faible, sur `get`
|
|
55
|
+
3. Freeze **après** commit immutable — lectures cheap ; coût sur **écritures**
|
|
56
|
+
4. Deep clone à chaque `get` — à éviter
|
|
57
|
+
5. Freeze live + mute in-place — incompatible
|
|
58
|
+
|
|
59
|
+
Le modèle F met le coût là où il est acceptable (écritures), avec une sémantique nette.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 3. Cible — store immutable (détail)
|
|
64
|
+
|
|
65
|
+
### 3.1 Moteur Concorde à réécrire
|
|
66
|
+
|
|
67
|
+
- `set` / traps Proxy / sync parent-enfant : **immutable updates** uniquement.
|
|
68
|
+
- Après commit : freeze deep (ou structure déjà immutable).
|
|
69
|
+
- `get()` / `onAssign` : renvoient la valeur frozen (même ref tant que le commit n’a pas changé → `get() === get()` OK entre deux `set`).
|
|
70
|
+
- API `update(draft => { … })` (Immer) recommandée pour les updates nested ergonomiques.
|
|
71
|
+
- Valeurs non clonables (`EventSource`, instances, fonctions) : **hors store** ou wrappers documentés (ex. Mercure / laqueue).
|
|
72
|
+
|
|
73
|
+
### 3.2 Surface apps
|
|
74
|
+
|
|
75
|
+
- Interdit : muter après `get`, muter la ref passée à `set`, `.sort()` in-place dans `onAssign`.
|
|
76
|
+
- Obligatoire : `const next = …; set(next)` ou `update(draft => …)`.
|
|
77
|
+
|
|
78
|
+
### 3.3 Rôle du spike actuel sur cette branche
|
|
79
|
+
|
|
80
|
+
Déjà présent (ne pas confondre avec la cible) :
|
|
81
|
+
|
|
82
|
+
- `DeepReadonly` sur `get` / `onAssign` (typage).
|
|
83
|
+
- `PublisherManager.strictGet = "off" | "warn" | "throw"` (Proxy sur le résultat de `get`, **sans** freeze de `_value_`).
|
|
84
|
+
|
|
85
|
+
→ **Radar** pour lister les mutations pendant la migration vers F. Destiné à disparaître ou à se réduire une fois le moteur immutable en place.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 4. Canal de livraison — dist-tag npm (reco)
|
|
90
|
+
|
|
91
|
+
Oui : publier le chantier sur un **dist-tag npm dédié**, pas sur `latest`, le temps d’un usage approfondi.
|
|
92
|
+
|
|
93
|
+
### Pourquoi c’est adapté ici
|
|
94
|
+
|
|
95
|
+
- Breaking **moteur + contrat** : les apps ne doivent pas le prendre par un bump semver « normal » par erreur.
|
|
96
|
+
- Billetterie / smart-belt / lecovoit / laqueue peuvent opter **explicitement** :
|
|
97
|
+
`"@supersoniks/concorde": "npm:@supersoniks/concorde@immutable"`
|
|
98
|
+
ou version `5.x.x-immutable.n` + tag `immutable`.
|
|
99
|
+
- CI / smokes sur le tag sans bloquer prod `latest`.
|
|
100
|
+
- Feedback réel (perf panier, Mercure, placement) avant major.
|
|
101
|
+
|
|
102
|
+
### Proposition de tags
|
|
103
|
+
|
|
104
|
+
| Tag | Usage |
|
|
105
|
+
|-----|--------|
|
|
106
|
+
| `latest` | Ligne stable actuelle (mutable + éventuellement radar `strictGet` si un jour mergé à part) |
|
|
107
|
+
| `immutable` (ou `next-immutable`) | Ligne de dev du store immutable — **usage approfondi** |
|
|
108
|
+
| (plus tard) `latest` major | Quand la migration Billetterie + checklist sont vertes |
|
|
109
|
+
|
|
110
|
+
Versions du type `6.0.0-immutable.1`, `.2`, … (prerelease) : claires dans le lockfile, republish fréquentes OK.
|
|
111
|
+
|
|
112
|
+
### Ce qu’il ne faut pas faire
|
|
113
|
+
|
|
114
|
+
- Remplacer `latest` trop tôt.
|
|
115
|
+
- Multiplier les tags flous (`test`, `julien`, …) — **un** tag métier `immutable`.
|
|
116
|
+
- Laisser `strictGet` opt-in comme « la » release : ce n’est pas le produit final.
|
|
117
|
+
|
|
118
|
+
### Avis
|
|
119
|
+
|
|
120
|
+
**Go dist-tag `immutable`.** C’est le bon niveau de netteté : chantier puissant isolé, adoption volontaire, mesure avant major. Le spike `strictGet` peut vivre sur la même branche/tag comme aide à la migration, documenté comme temporaire.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 5. Impact consommateurs (rappel audit)
|
|
125
|
+
|
|
126
|
+
| Projet | Volume / note | Priorité migration |
|
|
127
|
+
|--------|----------------|-------------------|
|
|
128
|
+
| **la-billetterie** | ~860 fichiers dp, ~216 get / ~392 set ; cart, AC, placing, forms | **P0** |
|
|
129
|
+
| smart-belt-drive | Peu de get ; `onAssign` + `.sort()` in-place | P1 |
|
|
130
|
+
| lecovoit | Peu de get, surtout set | P2 |
|
|
131
|
+
| laqueue | Très peu ; Mercure / non-clonables à traiter | P2 |
|
|
132
|
+
| link / starter | Faible | P3 |
|
|
133
|
+
|
|
134
|
+
Zones Billetterie chaudes : `access-control/**`, `utils/cart.ts` + `components/cart/**`, `placing/**`, subscription / tarifs, forms, ~300 `onAssign`, legacy `lb_placement` JS.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 6. Plan recadré
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
Phase 0 Étude + ADR direction immutable ✅
|
|
142
|
+
Phase 1 Radar DeepReadonly + strictGet ✅
|
|
143
|
+
Phase 2 Moteur immutable sur branche ✅ → publish npm tag `immutable`
|
|
144
|
+
Phase 3 App pilote sur le tag
|
|
145
|
+
Phase 4 Billetterie (puis SBD, lecovoit, laqueue) sur le tag
|
|
146
|
+
Phase 5 Major Concorde sur `latest` quand go-live OK
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Critères go-live major
|
|
150
|
+
|
|
151
|
+
- Smokes Billetterie (panier, placing, AC, forms, abonnements, submit, localStorage) verts sur le tag.
|
|
152
|
+
- Pas de régression perf au-delà du seuil convenu sur écritures panier / scan.
|
|
153
|
+
- Doc dataFlow = contrat immutable uniquement.
|
|
154
|
+
- Stratégie explicite pour non-clonables.
|
|
155
|
+
- `strictGet` retiré ou réduit à un assert interne inutile en prod.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 7. Verdict
|
|
160
|
+
|
|
161
|
+
| Question | Réponse |
|
|
162
|
+
|----------|---------|
|
|
163
|
+
| Problème de contrat réel ? | **Oui** |
|
|
164
|
+
| Design cible ? | **Store immutable** (F), pas la pile de gardes |
|
|
165
|
+
| Freeze live sans refonte ? | **Non** |
|
|
166
|
+
| Clone à chaque `get` ? | **Non** |
|
|
167
|
+
| `strictGet` / `DeepReadonly` ? | **Radar de migration**, pas la cible |
|
|
168
|
+
| Publier sur un tag npm dédié pendant le dev ? | **Oui — `immutable`** |
|
|
169
|
+
| Ce ticket 79567 | Étude + direction ; chantier moteur = ticket(s) d’implémentation + tag |
|
|
170
|
+
|
|
171
|
+
## 8. Suite immédiate
|
|
172
|
+
|
|
173
|
+
1. Publish dist-tag npm `immutable` depuis cette branche.
|
|
174
|
+
2. App pilote (starter / module Billetterie borné).
|
|
175
|
+
3. Migration Billetterie + smokes.
|
|
176
|
+
4. Major sur `latest` quand critères § go-live OK.
|
|
177
|
+
|
|
178
|
+
## 9. Implémenté sur la branche
|
|
179
|
+
|
|
180
|
+
- Helpers : `src/core/utils/immutableValue.ts` (`takeOwnership`, `deepFreeze`, `setAtKey`, `deleteAtKey`)
|
|
181
|
+
- `PublisherProxy.set` : ownership + freeze ; sync parent immutable (plus de `_value_[k] =`)
|
|
182
|
+
- Traps Proxy `set` / `deleteProperty` : via `set` / rebuild
|
|
183
|
+
- `get()` : valeur frozen (même ref jusqu’au prochain `set`)
|
|
184
|
+
- Non-clonable : warn + stocké tel quel sans freeze
|
|
185
|
+
- Specs : `immutableValue.spec.ts`, `publisherImmutable.spec.ts`, etc.
|
|
186
|
+
- Correctifs doc/runtime déjà livrés sur la branche : boucle `sonic-list` / `_metadata_`, clone SDUI, shallow-copy submit, `sameValueAs` en dot-notation
|
|
187
|
+
|
|
188
|
+
## 10. Crawl docs rendu — branche vs `master` (29 oct. 2026)
|
|
189
|
+
|
|
190
|
+
Comparaison automatisée des pages de la nav docs : **A** = branche `79567_publisher_get_immutability_study`, **B** = `master`.
|
|
191
|
+
|
|
192
|
+
Métriques : `bodyChars`, sections `h2`, blocs `sonic-code` (radios/inputs/lists/sdui + hauteurs interactives), `docs-lit-demo`, erreurs console (hors bruit SW 404).
|
|
193
|
+
|
|
194
|
+
Artefacts JSON (bruts) :
|
|
195
|
+
|
|
196
|
+
- `src/docs/misc/publisher-get-immutability-docs-crawl.json` — 68 pages (crawl parallèle initial)
|
|
197
|
+
- `src/docs/misc/publisher-get-immutability-docs-recheck.json` — 43 pages à risque (crawl séquentiel)
|
|
198
|
+
|
|
199
|
+
### Résultat
|
|
200
|
+
|
|
201
|
+
| Passe | Pages | Diffs structurantes (error) | Notes |
|
|
202
|
+
|-------|------:|----------------------------:|-------|
|
|
203
|
+
| Recheck séquentiel | 43 | **0** | Pas de contrôle disparu, pas de preview collapsée, pas d’erreur freeze |
|
|
204
|
+
| Crawl parallèle 68 | 68 | **0** error | 5 pages avec diffs info/warn uniquement |
|
|
205
|
+
|
|
206
|
+
### Diffs relevés (pas de régression immutable)
|
|
207
|
+
|
|
208
|
+
| Page | Nature | Action |
|
|
209
|
+
|------|--------|--------|
|
|
210
|
+
| `/core/components/ui/form/radio` | Section **Nested keys** ajoutée sur la branche | Doc volontaire — à garder ou retirer selon review doc |
|
|
211
|
+
| `/core/components/ui/form/input` | Idem Nested keys + `sameValueAs` dot-notation | Idem |
|
|
212
|
+
| `/docs/directives/t` | Contenu plus riche sur A (sections Import/Usage/…) | Hors immutable — écart de contenu markdown ; vérifier si attendu sur la branche |
|
|
213
|
+
| `/docs/misc/dataProviderKey` | Faux positif crawl parallèle (`bodyChars: 0`) | **Revalidé OK** au recheck / visite manuelle (2615 chars, 9 codes) |
|
|
214
|
+
| `/docs/misc/html-integration` | Console `498` ponctuelle au crawl parallèle | **Revalidé OK** (même rendu A/B, 838 chars) — bruit réseau, pas un gel publisher |
|
|
215
|
+
|
|
216
|
+
### Correctifs déjà faits (hors crawl, signalés avant)
|
|
217
|
+
|
|
218
|
+
- `sonic-list` boucle infinie (`_metadata_`)
|
|
219
|
+
- SDUI mute sur descripteur frozen
|
|
220
|
+
- Submit `delete` sur `get()` frozen
|
|
221
|
+
|
|
222
|
+
### À corriger ultérieurement (backlog crawl)
|
|
223
|
+
|
|
224
|
+
1. **Décider** du sort des sections Nested keys radio/input (ajoutées pendant le debug) — doc only.
|
|
225
|
+
2. **Vérifier** l’écart markdown `docs/directives/t` vs `master` (pas lié au store).
|
|
226
|
+
3. Rejouer le crawl séquentiel après les prochains correctifs moteur avant publish tag `immutable`.
|
|
227
|
+
4. Optionnel : intégrer le script de crawl dans un smoke CI docs (ports dédiés + Chromium system).
|
|
228
|
+
|
|
229
|
+
**Verdict crawl :** pas de régression de rendu docs imputable au store immutable sur l’échantillon recheck (43 pages). Les seuls écarts stables sont documentaires (Nested keys, éventuellement `t`).
|
|
@@ -26,7 +26,7 @@ export const docsNavigation: Array<string | { label: string; href: string }> = [
|
|
|
26
26
|
href: "/docs/getting-started/dataFlow",
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
|
-
label: "AI agents (
|
|
29
|
+
label: "AI agents (skill)",
|
|
30
30
|
href: "/docs/getting-started/ai-agents",
|
|
31
31
|
},
|
|
32
32
|
"Functional components",
|
|
@@ -216,6 +216,10 @@ export const docsNavigation: Array<string | { label: string; href: string }> = [
|
|
|
216
216
|
label: "Local API demos",
|
|
217
217
|
href: "/docs/misc/docs-mock-api",
|
|
218
218
|
},
|
|
219
|
+
{
|
|
220
|
+
label: "get() immutability study",
|
|
221
|
+
href: "/docs/misc/publisher-get-immutability-study",
|
|
222
|
+
},
|
|
219
223
|
];
|
|
220
224
|
|
|
221
225
|
const tagName = "docs-navigation"; // For Astro.build
|