From cf1240c63d72c26f98245b5f9ca5dccb4c66392e Mon Sep 17 00:00:00 2001 From: Paul Newling Date: Wed, 27 May 2026 10:22:11 -0700 Subject: [PATCH 01/12] feat: closeable info alerts with session-only dismissal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PlAlert on the Main tab now renders a close button. Dismissals live in a local ref> — not persisted; resets when the block UI unmounts (project close, app reload, multi-client independent). Hairpin- safe: the only write is from PlAlert's close-button emit (user gesture). Minimal-change variant of the persisted-dismissal approach (paulnewling/fix/dismissable-info-messages). Useful when you want "acknowledged for this session, fresh on reopen" semantics and don't want to extend BlockData or add a migration step. --- ui/src/pages/MainPage.vue | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/ui/src/pages/MainPage.vue b/ui/src/pages/MainPage.vue index 075aef3..31b97d8 100644 --- a/ui/src/pages/MainPage.vue +++ b/ui/src/pages/MainPage.vue @@ -11,7 +11,7 @@ import { PlSlideModal, usePlDataTableSettingsV2, } from "@platforma-sdk/ui-vue"; -import { ref, watch } from "vue"; +import { computed, ref, watch } from "vue"; import { useApp } from "../app"; const app = useApp(); @@ -35,6 +35,18 @@ function setInput(ref?: PlRef) { app.model.data.tableState = createPlDataTableStateV2(); } +// Session-only dismissal of info-message alerts. Local ref → not persisted; +// resets when the block UI unmounts (project close, app reload). The write +// only happens on PlAlert's close-button user gesture, so this is not a +// hairpin. +const dismissedInfoMessages = ref(new Set()); +const visibleInfoMessages = computed(() => + (app.model.outputs.info?.messages ?? []).filter((m) => !dismissedInfoMessages.value.has(m)), +); +function dismissInfoMessage(message: string) { + dismissedInfoMessages.value = new Set(dismissedInfoMessages.value).add(message); +} + const tableSettings = usePlDataTableSettingsV2({ model: () => app.model.outputs.propertiesTable, }); @@ -62,9 +74,12 @@ const tableSettings = usePlDataTableSettingsV2({ {{ message }} From 082b684a63ec7674955cb8fd1a3d53984bbe33d8 Mon Sep 17 00:00:00 2001 From: Paul Newling Date: Wed, 27 May 2026 10:29:57 -0700 Subject: [PATCH 02/12] chore: changeset for session-only closeable info alerts --- .changeset/dismissable-info-messages-minimal.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .changeset/dismissable-info-messages-minimal.md diff --git a/.changeset/dismissable-info-messages-minimal.md b/.changeset/dismissable-info-messages-minimal.md new file mode 100644 index 0000000..7b6a73f --- /dev/null +++ b/.changeset/dismissable-info-messages-minimal.md @@ -0,0 +1,14 @@ +--- +'@platforma-open/milaboratories.sequence-properties.ui': minor +'@platforma-open/milaboratories.sequence-properties': minor +--- + +Closeable info messages on the Main tab — session-only variant. The +advisory alerts emitted by the workflow now show a close button. +Dismissals live in a local UI ref and reset when the block UI unmounts +(project close, app reload). No `BlockData` change; no migration; the +block model is unchanged. + +This is the minimal-surface alternative to a persisted-dismissal +approach. Pick this when you want "acknowledged for this session, fresh +on reopen" semantics and don't want to extend the block schema. From 3deaf797e056b78ca5e9dd9004f604204dd0f686 Mon Sep 17 00:00:00 2001 From: Paul Newling Date: Wed, 27 May 2026 10:33:44 -0700 Subject: [PATCH 03/12] chore: bump @platforma-sdk/tengo-builder to 3.0.5 CI flags the 2.5.29 pin as outdated. Build is clean against the new major version; no workflow code touched on this branch so the bump is catalog-only. --- pnpm-lock.yaml | 53 +++++++++++++++++++++++++++++++++++---------- pnpm-workspace.yaml | 2 +- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 161cf40..851f7d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,8 +37,8 @@ catalogs: specifier: 3.12.0 version: 3.12.0 '@platforma-sdk/tengo-builder': - specifier: 2.5.29 - version: 2.5.29 + specifier: 3.0.5 + version: 3.0.5 '@platforma-sdk/test': specifier: 1.77.1 version: 1.77.1 @@ -250,7 +250,7 @@ importers: devDependencies: '@platforma-sdk/tengo-builder': specifier: 'catalog:' - version: 2.5.29 + version: 3.0.5 '@platforma-sdk/test': specifier: 'catalog:' version: 1.77.1(@bytecodealliance/preview2-shim@0.17.8)(@types/node@25.3.2)(vite@8.0.8(@types/node@25.3.2)(yaml@2.8.1)) @@ -1077,6 +1077,10 @@ packages: resolution: {integrity: sha512-ADUFHvwtGDC/sOYd4btCw2GdR58gq3+Nm9yV3UUYhmH5dv3J/1tXsxJH15mv1mT9YvK0IS4vMw0eDteeQUmaiQ==} engines: {node: '>=22.19.0'} + '@milaboratories/pl-client@3.9.2': + resolution: {integrity: sha512-Bv8TvriImpt8LKPL5qIolHULKjHZfn8rQHXS//0k5wOpgSR32V6UtVi4kmtkK3xsLcXodmtl1inP2fd1Pwdpig==} + engines: {node: '>=22.19.0'} + '@milaboratories/pl-config@1.8.1': resolution: {integrity: sha512-moh8YNeSXRkBaH5IQhrzcWoehM6EMwfVFx2Y4vP6eEwphbHDqPLdhn6COkEJlYijH6kT00JdWjlUrvx+MZD9Cw==} @@ -1110,6 +1114,9 @@ packages: '@milaboratories/pl-model-backend@1.3.1': resolution: {integrity: sha512-zDWTa/AqI2YSmD3FpQavWI9OnZzMRoNQS+E8YtdSadC9LkvetqY5YI9Uu/IAGrWVonlvjD6uA0PrPX5hACOxow==} + '@milaboratories/pl-model-backend@1.3.5': + resolution: {integrity: sha512-9SWpcZg98crSx6hArAncaEqlvo3AA+ZoA4mZsZSQ7P9tEOGSmQfMTo9WuNbudkCkiAuZm6Xsxv1sKTO4ojtx+g==} + '@milaboratories/pl-model-common@1.31.1': resolution: {integrity: sha512-MLQvhXXFOykABZr8aVgzt5x0htT7ye4cvvnVy0TgOITXpct+lEmWvaVj29zirK/0VFw7wnTXDGnLwusr77NZFA==} @@ -1659,8 +1666,8 @@ packages: resolution: {integrity: sha512-bId52YqV5iLDAn9D9C3xaLD1bKyymGpHe2CDEZTqV+1yWCBh1RM6iH96JIXudVJdcmJaqwJWDw6X4WzStE6SCg==} hasBin: true - '@platforma-sdk/tengo-builder@2.5.29': - resolution: {integrity: sha512-iurwyuFCq1DynPuoud182Ebdrk8dhSjLddkOSvPQb1QZ+HVU/CcEfIx0SgZ+qOLstHQ1lB2YeHv7GCaMHsjI9A==} + '@platforma-sdk/tengo-builder@3.0.5': + resolution: {integrity: sha512-9RAd9nQrs3U5C0Ro43atN3n0pvNIbyDzJzoIF/UV569ic6NwowsxUBUgazgEczchH+4tVRMax32mGgWQGg/jIw==} engines: {node: '>=22'} hasBin: true @@ -8162,6 +8169,24 @@ snapshots: utility-types: 3.11.0 yaml: 2.8.1 + '@milaboratories/pl-client@3.9.2': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@milaboratories/pl-http': 1.2.4 + '@milaboratories/pl-model-common': 1.42.0 + '@milaboratories/ts-helpers': 1.8.2 + '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.13.4) + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + canonicalize: 2.1.0 + denque: 2.1.0 + long: 5.3.2 + lru-cache: 11.2.4 + openapi-fetch: 0.15.0 + undici: 7.16.0 + utility-types: 3.11.0 + yaml: 2.8.1 + '@milaboratories/pl-config@1.8.1': dependencies: '@milaboratories/ts-helpers': 1.8.2 @@ -8273,6 +8298,12 @@ snapshots: canonicalize: 2.1.0 zod: 3.25.76 + '@milaboratories/pl-model-backend@1.3.5': + dependencies: + '@milaboratories/pl-client': 3.9.2 + canonicalize: 2.1.0 + zod: 3.25.76 + '@milaboratories/pl-model-common@1.31.1': dependencies: '@milaboratories/helpers': 1.14.1 @@ -8378,7 +8409,7 @@ snapshots: oxfmt: 0.35.0 oxlint: 1.43.0 rolldown: 1.0.0-rc.16 - rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.6.3)) + rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)) rollup-plugin-copy: 3.5.0 rollup-plugin-sourcemaps2: 0.5.6(@types/node@25.3.2)(rollup@4.53.3) typescript: 5.9.3 @@ -8418,7 +8449,7 @@ snapshots: oxfmt: 0.35.0 oxlint: 1.43.0 rolldown: 1.0.0-rc.16 - rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.6.3)) + rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)) rollup-plugin-copy: 3.5.0 rollup-plugin-sourcemaps2: 0.5.6(@types/node@25.3.2)(rollup@4.53.3) typescript: 5.9.3 @@ -8458,7 +8489,7 @@ snapshots: oxfmt: 0.35.0 oxlint: 1.43.0 rolldown: 1.0.0-rc.16 - rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.6.3)) + rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)) rollup-plugin-copy: 3.5.0 rollup-plugin-sourcemaps2: 0.5.6(@types/node@25.3.2)(rollup@4.53.3) typescript: 5.9.3 @@ -9112,9 +9143,9 @@ snapshots: transitivePeerDependencies: - aws-crt - '@platforma-sdk/tengo-builder@2.5.29': + '@platforma-sdk/tengo-builder@3.0.5': dependencies: - '@milaboratories/pl-model-backend': 1.2.29 + '@milaboratories/pl-model-backend': 1.3.5 '@milaboratories/resolve-helper': 1.1.3 '@milaboratories/tengo-tester': 1.6.4 '@milaboratories/ts-helpers': 1.8.2 @@ -14446,7 +14477,7 @@ snapshots: dependencies: glob: 10.4.5 - rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.6.3)): + rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.16)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3)): dependencies: '@babel/generator': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 59b43ec..54f2cde 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -16,7 +16,7 @@ catalog: "@platforma-sdk/ui-vue": 1.77.0 "@platforma-sdk/test": 1.77.1 "@milaboratories/helpers": 1.14.2 - "@platforma-sdk/tengo-builder": 2.5.29 + "@platforma-sdk/tengo-builder": 3.0.5 "@platforma-sdk/package-builder": 3.12.0 "@platforma-sdk/blocks-deps-updater": 2.2.0 "@platforma-sdk/eslint-config": 1.2.0 From c5761c64d764d98da92e11428c37a82ac33d6f98 Mon Sep 17 00:00:00 2001 From: Paul Newling Date: Wed, 27 May 2026 10:37:01 -0700 Subject: [PATCH 04/12] chore: bump @platforma-sdk/block-tools to 2.9.2 --- pnpm-lock.yaml | 57 +++++++++++---------------------------------- pnpm-workspace.yaml | 2 +- 2 files changed, 14 insertions(+), 45 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 851f7d5..598cd0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ catalogs: specifier: 1.8.2 version: 1.8.2 '@platforma-sdk/block-tools': - specifier: 2.8.1 - version: 2.8.1 + specifier: 2.9.2 + version: 2.9.2 '@platforma-sdk/eslint-config': specifier: 1.2.0 version: 1.2.0 @@ -86,7 +86,7 @@ importers: version: 1.4.0(@types/node@25.3.2)(rollup@4.53.3)(vue@3.5.25(typescript@5.9.3))(yaml@2.8.1) '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.8.1 + version: 2.9.2 shx: specifier: 'catalog:' version: 0.4.0 @@ -111,7 +111,7 @@ importers: devDependencies: '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.8.1 + version: 2.9.2 model: dependencies: @@ -139,7 +139,7 @@ importers: version: 1.2.3 '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.8.1 + version: 2.9.2 vitest: specifier: 'catalog:' version: 4.1.4(@types/node@25.3.2)(@vitest/coverage-istanbul@4.1.4)(vite@8.0.8(@types/node@25.3.2)(yaml@2.8.1)) @@ -1073,10 +1073,6 @@ packages: resolution: {integrity: sha512-eVDnXExhKB4DYzqkWD49MYyi6AyBxWyG8WoDMFrB23FjyHgMTR7rSoep0iUsWEoLLGnwq4Qd8l89/hBYpAVg0A==} engines: {node: '>=22.19.0'} - '@milaboratories/pl-client@3.8.0': - resolution: {integrity: sha512-ADUFHvwtGDC/sOYd4btCw2GdR58gq3+Nm9yV3UUYhmH5dv3J/1tXsxJH15mv1mT9YvK0IS4vMw0eDteeQUmaiQ==} - engines: {node: '>=22.19.0'} - '@milaboratories/pl-client@3.9.2': resolution: {integrity: sha512-Bv8TvriImpt8LKPL5qIolHULKjHZfn8rQHXS//0k5wOpgSR32V6UtVi4kmtkK3xsLcXodmtl1inP2fd1Pwdpig==} engines: {node: '>=22.19.0'} @@ -1111,9 +1107,6 @@ packages: '@milaboratories/pl-model-backend@1.2.29': resolution: {integrity: sha512-0jL+k6z6MJha0XMFXq/e814THyvNZZNeBB6zcLYtiWKVYRCKp/iK43xOFCzGAgT1uQVz4AdhKsqgqQv5B9deBw==} - '@milaboratories/pl-model-backend@1.3.1': - resolution: {integrity: sha512-zDWTa/AqI2YSmD3FpQavWI9OnZzMRoNQS+E8YtdSadC9LkvetqY5YI9Uu/IAGrWVonlvjD6uA0PrPX5hACOxow==} - '@milaboratories/pl-model-backend@1.3.5': resolution: {integrity: sha512-9SWpcZg98crSx6hArAncaEqlvo3AA+ZoA4mZsZSQ7P9tEOGSmQfMTo9WuNbudkCkiAuZm6Xsxv1sKTO4ojtx+g==} @@ -1141,8 +1134,8 @@ packages: '@milaboratories/pl-model-middle-layer@1.19.4': resolution: {integrity: sha512-2SzgfHmTpSewPAv3WqbS6XHpObh69Mull3b1ec2bhn11ij6zSEDcBrMz0fFQ1XViAVQcafC4CjNTDZ/6s92kgQ==} - '@milaboratories/pl-model-middle-layer@1.20.0': - resolution: {integrity: sha512-RGEJD0avNEBejl1SjCqn7RWNiK15xCNWMXfNziiHUcG4n+QxYm1sk5AezfWsKE3j3y1HdzZnYaoGto9Z1RoV7A==} + '@milaboratories/pl-model-middle-layer@1.22.0': + resolution: {integrity: sha512-MvdNkgPDaAoHnVU3IeeyGfZ9SynJwjsYKnvxNi3YQ9BzztwCDmSwrDijsVvo7lUBoeqLiXvLSr9ug98frKF6yg==} '@milaboratories/pl-tree@1.11.0': resolution: {integrity: sha512-L6GYK0fff9ZsuZcuKW1wbu7uJl4I1S6zRhp4bpcnuCcLZuo3Qqf3zvmvax2bAl7e/rsRa6cMhz409PXS0c5Cww==} @@ -1633,8 +1626,8 @@ packages: resolution: {integrity: sha512-7msHgkgr3uFTitgokcOFAqdO9mtAUr9rHnmjk26WzIzO1HY/uyrs2AHWpdc/skchJHr1U7HHzNt7oQ3RdzZWpQ==} hasBin: true - '@platforma-sdk/block-tools@2.8.1': - resolution: {integrity: sha512-5PA8iAdndsxlbk4YMAJDnueFBNracOHPDV8a6Zw10mkxP6+YFvsnlA4+kJoh7ULTgI6qPpLmCYwvPdA6KFwd7g==} + '@platforma-sdk/block-tools@2.9.2': + resolution: {integrity: sha512-DXtZsma9aA5PBRaQzXqf79UMDo07NJrKZb/m4aaio7cxIG2ASG+CEgAkphzkeDcauMMRQ+o1tBQ2g9IptQvTAQ==} hasBin: true '@platforma-sdk/blocks-deps-updater@2.2.0': @@ -8151,24 +8144,6 @@ snapshots: utility-types: 3.11.0 yaml: 2.8.1 - '@milaboratories/pl-client@3.8.0': - dependencies: - '@grpc/grpc-js': 1.13.4 - '@milaboratories/pl-http': 1.2.4 - '@milaboratories/pl-model-common': 1.42.0 - '@milaboratories/ts-helpers': 1.8.2 - '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.13.4) - '@protobuf-ts/runtime': 2.11.1 - '@protobuf-ts/runtime-rpc': 2.11.1 - canonicalize: 2.1.0 - denque: 2.1.0 - long: 5.3.2 - lru-cache: 11.2.4 - openapi-fetch: 0.15.0 - undici: 7.16.0 - utility-types: 3.11.0 - yaml: 2.8.1 - '@milaboratories/pl-client@3.9.2': dependencies: '@grpc/grpc-js': 1.13.4 @@ -8292,12 +8267,6 @@ snapshots: canonicalize: 2.1.0 zod: 3.25.76 - '@milaboratories/pl-model-backend@1.3.1': - dependencies: - '@milaboratories/pl-client': 3.8.0 - canonicalize: 2.1.0 - zod: 3.25.76 - '@milaboratories/pl-model-backend@1.3.5': dependencies: '@milaboratories/pl-client': 3.9.2 @@ -8364,7 +8333,7 @@ snapshots: utility-types: 3.11.0 zod: 3.25.76 - '@milaboratories/pl-model-middle-layer@1.20.0': + '@milaboratories/pl-model-middle-layer@1.22.0': dependencies: '@milaboratories/helpers': 1.14.2 '@milaboratories/pl-model-common': 1.42.0 @@ -9051,13 +9020,13 @@ snapshots: transitivePeerDependencies: - aws-crt - '@platforma-sdk/block-tools@2.8.1': + '@platforma-sdk/block-tools@2.9.2': dependencies: '@aws-sdk/client-s3': 3.859.0 '@milaboratories/pl-http': 1.2.4 - '@milaboratories/pl-model-backend': 1.3.1 + '@milaboratories/pl-model-backend': 1.3.5 '@milaboratories/pl-model-common': 1.42.0 - '@milaboratories/pl-model-middle-layer': 1.20.0 + '@milaboratories/pl-model-middle-layer': 1.22.0 '@milaboratories/resolve-helper': 1.1.3 '@milaboratories/ts-helpers': 1.8.2 '@milaboratories/ts-helpers-oclif': 1.1.41 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 54f2cde..ec1e236 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -11,7 +11,7 @@ catalog: "@milaboratories/ts-builder": 1.4.0 "@milaboratories/ts-configs": 1.2.3 "@platforma-sdk/workflow-tengo": 5.24.0 - "@platforma-sdk/block-tools": 2.8.1 + "@platforma-sdk/block-tools": 2.9.2 "@platforma-sdk/model": 1.77.0 "@platforma-sdk/ui-vue": 1.77.0 "@platforma-sdk/test": 1.77.1 From d99e41e3b9fc1cc1f191ab40c5c959f01c05657c Mon Sep 17 00:00:00 2001 From: Paul Newling Date: Wed, 27 May 2026 10:48:59 -0700 Subject: [PATCH 05/12] feat: hoist dismissedInfoMessages to module scope for tab persistence In Vue, refs declared inside