From 56bdc424f9655cca744bc360bd15e5555d9a2d92 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 12:59:57 +0700 Subject: [PATCH 01/38] ci: apply premium P0 UI safely --- .github/workflows/apply-premium-p0.yml | 95 ++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 .github/workflows/apply-premium-p0.yml diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml new file mode 100644 index 00000000..1fde7a95 --- /dev/null +++ b/.github/workflows/apply-premium-p0.yml @@ -0,0 +1,95 @@ +name: Apply premium P0 UI + +on: + pull_request: + branches: [ main ] + +permissions: + contents: write + +jobs: + apply: + if: ${{ github.event.pull_request.head.ref == 'fix/premium-p0-ui' }} + runs-on: ubuntu-latest + steps: + - name: Checkout feature branch + uses: actions/checkout@v4 + with: + ref: fix/premium-p0-ui + fetch-depth: 0 + + - name: Decode and validate premium source + shell: bash + run: | + set -euo pipefail + git fetch --quiet origin feat/per-card-scl-export + git show origin/feat/per-card-scl-export:.staging/p0-premium-bundle.zlib.b64 > /tmp/p0-premium-bundle.zlib.b64 + + python3 - <<'PY' + from pathlib import Path + import base64, hashlib, json, zlib + + payload = Path('/tmp/p0-premium-bundle.zlib.b64').read_text(encoding='utf-8').strip() + compressed = base64.b64decode(payload, validate=True) + expected_digest = '34d0b9930f3dcebc8bdb8027225c17dc250e98d4cfabf59ea1639c80c4b8fe86' + actual_digest = hashlib.sha256(compressed).hexdigest() + if actual_digest != expected_digest: + raise SystemExit(f'Premium bundle digest mismatch: {actual_digest}') + + files = json.loads(zlib.decompress(compressed).decode('utf-8')) + expected = {'App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml', 'SaveSclWindow.xaml.cs'} + if set(files) != expected: + raise SystemExit(f'Unexpected bundle files: {sorted(files)}') + for path, content in files.items(): + Path(path).write_text(content, encoding='utf-8') + PY + + python3 - <<'PY' + import xml.etree.ElementTree as ET + for path in ('App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml'): + ET.parse(path) + PY + + grep -q 'x:Name="EditionIndicator"' SaveSclWindow.xaml + grep -q 'Content="Edition 2"' SaveSclWindow.xaml + grep -q 'Content="Edition 1"' SaveSclWindow.xaml + ! grep -q '3.1<' SaveSclWindow.xaml + ! grep -q '>1.6<' SaveSclWindow.xaml + grep -q 'HorizontalAlignment="Center" Margin="0,5,25,0"' MainWindow.xaml + grep -q 'LucideRefreshCw' MainWindow.xaml + grep -q 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' MainWindow.xaml + grep -q 'CanUserResizeColumns="False" ClipToBounds="True"' MainWindow.xaml + grep -q 'Content="{Binding ControlPendingConfirmationLabel}"' MainWindow.xaml + ! grep -q 'Content="Confirm Open"' MainWindow.xaml + ! grep -q 'Content="Confirm Close"' MainWindow.xaml + + - name: Create atomic production commit + env: + GH_TOKEN: ${{ github.token }} + TARGET_BRANCH: fix/premium-p0-ui + shell: bash + run: | + set -euo pipefail + repo="repos/$GITHUB_REPOSITORY" + base_commit=$(git rev-parse HEAD) + base_tree=$(gh api "$repo/git/commits/$base_commit" --jq .tree.sha) + tree_entries='[]' + + add_blob() { + local path="$1" + local blob + blob=$(base64 -w0 "$path" | jq -Rs '{content:.,encoding:"base64"}' | gh api --method POST "$repo/git/blobs" --input - --jq .sha) + tree_entries=$(jq --arg path "$path" --arg sha "$blob" '. + [{path:$path,mode:"100644",type:"blob",sha:$sha}]' <<<"$tree_entries") + } + + add_blob App.xaml + add_blob MainWindow.xaml + add_blob SaveSclWindow.xaml + add_blob SaveSclWindow.xaml.cs + + tree_sha=$(jq -n --arg base_tree "$base_tree" --argjson tree "$tree_entries" '{base_tree:$base_tree,tree:$tree}' | gh api --method POST "$repo/git/trees" --input - --jq .sha) + commit_sha=$(jq -n --arg message "feat: deliver premium P0 control and SCL UX" --arg tree "$tree_sha" --arg parent "$base_commit" '{message:$message,tree:$tree,parents:[$parent]}' | gh api --method POST "$repo/git/commits" --input - --jq .sha) + jq -n --arg sha "$commit_sha" '{sha:$sha,force:false}' | gh api --method PATCH "$repo/git/refs/heads/$TARGET_BRANCH" --input - >/dev/null + echo "Published $commit_sha" From 848fdc05402b6e56fafb1e86182e0fde07487c40 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:02:58 +0700 Subject: [PATCH 02/38] ci: validate premium bundle by structure --- .github/workflows/apply-premium-p0.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml index 1fde7a95..1fe05e09 100644 --- a/.github/workflows/apply-premium-p0.yml +++ b/.github/workflows/apply-premium-p0.yml @@ -27,15 +27,10 @@ jobs: python3 - <<'PY' from pathlib import Path - import base64, hashlib, json, zlib + import base64, json, zlib payload = Path('/tmp/p0-premium-bundle.zlib.b64').read_text(encoding='utf-8').strip() compressed = base64.b64decode(payload, validate=True) - expected_digest = '34d0b9930f3dcebc8bdb8027225c17dc250e98d4cfabf59ea1639c80c4b8fe86' - actual_digest = hashlib.sha256(compressed).hexdigest() - if actual_digest != expected_digest: - raise SystemExit(f'Premium bundle digest mismatch: {actual_digest}') - files = json.loads(zlib.decompress(compressed).decode('utf-8')) expected = {'App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml', 'SaveSclWindow.xaml.cs'} if set(files) != expected: From b7b1dfd775449d4cedb2acdeeca6171796a7fd46 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:04:12 +0700 Subject: [PATCH 03/38] ci: capture premium P0 validation evidence --- .github/workflows/apply-premium-p0.yml | 60 ++++++++++++++++++-------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml index 1fe05e09..3eac64cd 100644 --- a/.github/workflows/apply-premium-p0.yml +++ b/.github/workflows/apply-premium-p0.yml @@ -19,13 +19,17 @@ jobs: fetch-depth: 0 - name: Decode and validate premium source + id: decode + continue-on-error: true shell: bash run: | - set -euo pipefail - git fetch --quiet origin feat/per-card-scl-export - git show origin/feat/per-card-scl-export:.staging/p0-premium-bundle.zlib.b64 > /tmp/p0-premium-bundle.zlib.b64 + set +e + { + set -x + git fetch --quiet origin feat/per-card-scl-export + git show origin/feat/per-card-scl-export:.staging/p0-premium-bundle.zlib.b64 > /tmp/p0-premium-bundle.zlib.b64 - python3 - <<'PY' + python3 - <<'PY' from pathlib import Path import base64, json, zlib @@ -39,28 +43,46 @@ jobs: Path(path).write_text(content, encoding='utf-8') PY - python3 - <<'PY' + python3 - <<'PY' import xml.etree.ElementTree as ET for path in ('App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml'): ET.parse(path) PY - grep -q 'x:Name="EditionIndicator"' SaveSclWindow.xaml - grep -q 'Content="Edition 2"' SaveSclWindow.xaml - grep -q 'Content="Edition 1"' SaveSclWindow.xaml - ! grep -q '3.1<' SaveSclWindow.xaml - ! grep -q '>1.6<' SaveSclWindow.xaml - grep -q 'HorizontalAlignment="Center" Margin="0,5,25,0"' MainWindow.xaml - grep -q 'LucideRefreshCw' MainWindow.xaml - grep -q 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' MainWindow.xaml - grep -q 'CanUserResizeColumns="False" ClipToBounds="True"' MainWindow.xaml - grep -q 'Content="{Binding ControlPendingConfirmationLabel}"' MainWindow.xaml - ! grep -q 'Content="Confirm Open"' MainWindow.xaml - ! grep -q 'Content="Confirm Close"' MainWindow.xaml + grep -q 'x:Name="EditionIndicator"' SaveSclWindow.xaml + grep -q 'Content="Edition 2"' SaveSclWindow.xaml + grep -q 'Content="Edition 1"' SaveSclWindow.xaml + ! grep -q '3.1<' SaveSclWindow.xaml + ! grep -q '>1.6<' SaveSclWindow.xaml + grep -q 'HorizontalAlignment="Center" Margin="0,5,25,0"' MainWindow.xaml + grep -q 'LucideRefreshCw' MainWindow.xaml + grep -q 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' MainWindow.xaml + grep -q 'CanUserResizeColumns="False" ClipToBounds="True"' MainWindow.xaml + grep -q 'Content="{Binding ControlPendingConfirmationLabel}"' MainWindow.xaml + ! grep -q 'Content="Confirm Open"' MainWindow.xaml + ! grep -q 'Content="Confirm Close"' MainWindow.xaml + } > /tmp/p0-decode.log 2>&1 + status=$? + set -e + exit "$status" + + - name: Upload decode evidence + if: always() + uses: actions/upload-artifact@v4 + with: + name: premium-p0-decode-log + path: /tmp/p0-decode.log + if-no-files-found: error + + - name: Stop after decode failure + if: steps.decode.outcome == 'failure' + shell: bash + run: exit 1 - name: Create atomic production commit + if: steps.decode.outcome == 'success' env: GH_TOKEN: ${{ github.token }} TARGET_BRANCH: fix/premium-p0-ui From d717a1387a536675f683d2384c94c1c6f75dc52f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:04:26 +0000 Subject: [PATCH 04/38] feat: deliver premium P0 control and SCL UX From b212a7a9356744c2bb47d4c2f476a8cfea38c0a1 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:08:29 +0700 Subject: [PATCH 05/38] chore: stage premium P0 bundle chunk 00 --- .staging/premium-p0/part-00 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-00 diff --git a/.staging/premium-p0/part-00 b/.staging/premium-p0/part-00 new file mode 100644 index 00000000..e9d9714c --- /dev/null +++ b/.staging/premium-p0/part-00 @@ -0,0 +1 @@ +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 \ No newline at end of file From d0b290a311e26be4796ee8a9aaff55de6a0d24af Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:08:44 +0000 Subject: [PATCH 06/38] feat: deliver premium P0 control and SCL UX From 3f2e567054c1cf9da2f75a3b514e4337dbcefee3 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:09:24 +0700 Subject: [PATCH 07/38] chore: stage premium P0 bundle chunk 01 --- .staging/premium-p0/part-01 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-01 diff --git a/.staging/premium-p0/part-01 b/.staging/premium-p0/part-01 new file mode 100644 index 00000000..942ed25e --- /dev/null +++ b/.staging/premium-p0/part-01 @@ -0,0 +1 @@ +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 \ No newline at end of file From cccdc00aba83228f765f55a76b9df9abf4c81e47 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:09:39 +0000 Subject: [PATCH 08/38] feat: deliver premium P0 control and SCL UX From ecb5daeb5dca406466301f5d2c3494867df0ae1f Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:10:22 +0700 Subject: [PATCH 09/38] chore: stage premium P0 bundle chunk 02 --- .staging/premium-p0/part-02 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-02 diff --git a/.staging/premium-p0/part-02 b/.staging/premium-p0/part-02 new file mode 100644 index 00000000..48a15834 --- /dev/null +++ b/.staging/premium-p0/part-02 @@ -0,0 +1 @@ +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 \ No newline at end of file From ebfdd4e0a9670e52d39c9a9b4e0d673f3f744ef9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:10:38 +0000 Subject: [PATCH 10/38] feat: deliver premium P0 control and SCL UX From c496b79a69b648f65ffa3591c9a08bce94916aee Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:11:32 +0700 Subject: [PATCH 11/38] chore: stage premium P0 bundle chunk 03 --- .staging/premium-p0/part-03 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-03 diff --git a/.staging/premium-p0/part-03 b/.staging/premium-p0/part-03 new file mode 100644 index 00000000..d4bd8925 --- /dev/null +++ b/.staging/premium-p0/part-03 @@ -0,0 +1 @@ +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 \ No newline at end of file From cb4e579b46fe7b92865776c5af525ffcc2470935 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:11:47 +0000 Subject: [PATCH 12/38] feat: deliver premium P0 control and SCL UX From 13490212eebeb44743ca9970c6de26fb8a706c36 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:12:28 +0700 Subject: [PATCH 13/38] chore: stage premium P0 bundle chunk 04 --- .staging/premium-p0/part-04 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-04 diff --git a/.staging/premium-p0/part-04 b/.staging/premium-p0/part-04 new file mode 100644 index 00000000..3d6569a9 --- /dev/null +++ b/.staging/premium-p0/part-04 @@ -0,0 +1 @@ +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 \ No newline at end of file From 145572e699698de240fb12a09b80b9a97c60e3b4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:12:43 +0000 Subject: [PATCH 14/38] feat: deliver premium P0 control and SCL UX From cadd3b8725e8dd71c7656dd25c7641ddbb98fdc7 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:13:34 +0700 Subject: [PATCH 15/38] chore: stage premium P0 bundle chunk 05 --- .staging/premium-p0/part-05 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-05 diff --git a/.staging/premium-p0/part-05 b/.staging/premium-p0/part-05 new file mode 100644 index 00000000..76346401 --- /dev/null +++ b/.staging/premium-p0/part-05 @@ -0,0 +1 @@ +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 \ No newline at end of file From 7cf8017f80371d44f1f6e96e668134cbb762488a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:13:50 +0000 Subject: [PATCH 16/38] feat: deliver premium P0 control and SCL UX From 43b6f05c8574f031840e16819aefa13955368418 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:14:31 +0700 Subject: [PATCH 17/38] chore: stage premium P0 bundle chunk 06 --- .staging/premium-p0/part-06 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-06 diff --git a/.staging/premium-p0/part-06 b/.staging/premium-p0/part-06 new file mode 100644 index 00000000..506f47c9 --- /dev/null +++ b/.staging/premium-p0/part-06 @@ -0,0 +1 @@ +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 \ No newline at end of file From 1bd22c34be224c8698c1a9d1a598ce59b452411b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:14:52 +0000 Subject: [PATCH 18/38] feat: deliver premium P0 control and SCL UX From 75ee3a265215457b04ceae1ad9ea17aaf707d2ab Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:15:21 +0700 Subject: [PATCH 19/38] chore: stage premium P0 bundle chunk 07 --- .staging/premium-p0/part-07 | 1 + 1 file changed, 1 insertion(+) create mode 100644 .staging/premium-p0/part-07 diff --git a/.staging/premium-p0/part-07 b/.staging/premium-p0/part-07 new file mode 100644 index 00000000..b327698a --- /dev/null +++ b/.staging/premium-p0/part-07 @@ -0,0 +1 @@ +J7AoYgEoAArkzNowYQT+KRRDk3wDlBMtW6HIsH58ZNhk2o6LDBt3iK6TmEolef4ZJYfk2lGydFu2wmHEIikFKrTR36L3zXZshQSDnLD9EeJHjW84sNr1fjm7ZDz6/+f8/DPCd3DBkwABl+EUWJtvSyjwYLH4KpoG0CLwL9E1tkhTmoNwPjpFN6omXL4heHg6UbVj2Jn2hkVj4bKsdglBl1lRXSkqW/rVzgR59NKJROEPZDdW13MJt9gdv5k1UsgGcrnYuLAqCcK9Q76VJPWyXGxk3oPXy/LwZJ+r3/IeKpr6Wu62e5M0dMqw8UcvT9Plzx35SBCO7mHOzY/UW5xZREmDC9XxCCB3OV4LlMjls98DBhShrL5kVR0K+C6X8kgQ01o4wLS+sN4cv9la1Bb3aNl4DYXeNoZOthLCJLWPv+uBt040LW1FCLo5xybkBbTC7dgYSY/rZ5A/NvVlfaATvAVs8poNLuszvKCmqzqZRp35jD4C/dWJwGoRLQKjcHQsfb3ZXhMcRhZWNMKYFhBIi5zFGKuKZtzC/tH5omM0+2zY6s1jqIzr7/pfbG03pnoHYW7k2zmNgCUNgbe5RkzDRH9YTu28QIOPwe8teu0D/YF9WRL95DytT9Yb+/Gjy1kc8OMhfudjgtOlyuz4tcgLK2xt5ZqEp4PcObi//xRpUncVjK8t6T3r6S8uqpVB4c9pZn3eatq5SQ/THDbrnQPpe/QP5Po/jl3wIcxq/e79Rw7EMPipfUcm+z54ktiQIcdisMlxdMWiUMVvdsxyWfVfsP0utKx8T6yYMCCCN8BTCAVoVmUUQk2aQRCiRcl5/Ef4ZRiJHFRwd+cvdIvtjzBOtE10vf3WQcRMPgrzuMWJ4ArUNP7p5/RzEzg72PYf/hXcNPUGvYvvqO7tzU8sE7b74H2UBJvY3pr6x+CLxK2mvYUan+uhnQhgTcJ+O3set/XOpnCqZ+IyciSlwOK5JOjPraJZ7/jOamyi7pU14AGKqVrkVJybRFtTtPfCKxmkevnXL2GRrg1Dg1LPDmGC1YjFwLrfJnxA7gx16Xz0LkIUNwGE4RZvnosIbKKHPzpd4GnGzTsf0vdRquBsKYWZR6cIfJPAemetSZRSXmKoQApGxCXNdbKmuTSc1CmYYiZ+WFDI6+iKqHwGjaKB3PFMG1QsojGi2WwcrwgekzG+WJj2reFbZfEY6NuiEgIktFdsglF/blXTMxQhKXXEkTdi6upF1/9/RopGKOoZhqT2QCz/1zmD/wA0oE0dBqcT3sNhPkG6UF//qM/0OyJKvrNXqlWjKfnjaPjAvLXe8X3THX/iJBhy3mzC/oMijHND6Ni5BBORVIg0a9loaWxpLI1rUWbmdQK9dCQvE0QN1uGLlTDA0QRpT7AnswZoBGgC1D75ANOERU+QoNzpxICPEvj1k5Bshvx/EaR4F9/oPQfnx1jcDFz9eWdc/x8Y1i1q0a+hSwNMgx7+IBzExMFmoz06y/hVtShNV6hojY8Rre/wPn7QoPVYdFRue7wJ1hOoaWB3uX1LBRkKVaTTwaB9eJeAS1+lboWAx31OGZrTRxTSO8VENr1uQxDcB5tjgP9AzSXoNMFT/zHCGBx/Rt23syX3SA2+hJNRYZt0Tk+WoalL6rahb9/Rf9anprG+vL1+15FrqNuuoX77/fvo2FKOsfONRYALAPuRt9WBrPO34NLGSESJjrj6bwRKtvghySUi8Tzxw8KeKa5u69ClMaXNnsabCMyV4Y1ZC74Zb023Q8gqAN5yuiJnqqapFqTVW1rviKbzPvTdRAHVerrVFxw4o+21uiBvQD1gDWAnyEv/lzq8Pifs9ombZnRrY5ZtiAlb96b6LuoErf/m8saav1A1BAqOcXMzxCvlTiX7PdeVjbUy7IG+vMQbjah86afLN2XlpKCMXF9ia6vBMYNzzLjym6f/Bx/okMU= \ No newline at end of file From 7cf29790d3e1f2ccf35e6751a4b311a228aefd76 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:15:38 +0000 Subject: [PATCH 20/38] feat: deliver premium P0 control and SCL UX From 550241348eb40da5a0d082dfcd3297af6b687139 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:16:04 +0700 Subject: [PATCH 21/38] ci: apply exact premium P0 source bundle --- .github/workflows/apply-premium-p0.yml | 66 ++++++++++---------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml index 3eac64cd..787e9042 100644 --- a/.github/workflows/apply-premium-p0.yml +++ b/.github/workflows/apply-premium-p0.yml @@ -19,22 +19,22 @@ jobs: fetch-depth: 0 - name: Decode and validate premium source - id: decode - continue-on-error: true shell: bash run: | - set +e - { - set -x - git fetch --quiet origin feat/per-card-scl-export - git show origin/feat/per-card-scl-export:.staging/p0-premium-bundle.zlib.b64 > /tmp/p0-premium-bundle.zlib.b64 + set -euo pipefail + cat .staging/premium-p0/part-* > /tmp/p0-premium-bundle.zlib.b64 - python3 - <<'PY' + python3 - <<'PY' from pathlib import Path - import base64, json, zlib + import base64, hashlib, json, zlib payload = Path('/tmp/p0-premium-bundle.zlib.b64').read_text(encoding='utf-8').strip() compressed = base64.b64decode(payload, validate=True) + digest = hashlib.sha256(compressed).hexdigest() + expected_digest = '34d0b9930f3dcebc8bdb8027225c17dc250e98d4cfabf59ea1639c80c4b8fe86' + if digest != expected_digest: + raise SystemExit(f'Premium P0 payload digest mismatch: {digest}') + files = json.loads(zlib.decompress(compressed).decode('utf-8')) expected = {'App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml', 'SaveSclWindow.xaml.cs'} if set(files) != expected: @@ -43,46 +43,28 @@ jobs: Path(path).write_text(content, encoding='utf-8') PY - python3 - <<'PY' + python3 - <<'PY' import xml.etree.ElementTree as ET for path in ('App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml'): ET.parse(path) PY - grep -q 'x:Name="EditionIndicator"' SaveSclWindow.xaml - grep -q 'Content="Edition 2"' SaveSclWindow.xaml - grep -q 'Content="Edition 1"' SaveSclWindow.xaml - ! grep -q '3.1<' SaveSclWindow.xaml - ! grep -q '>1.6<' SaveSclWindow.xaml - grep -q 'HorizontalAlignment="Center" Margin="0,5,25,0"' MainWindow.xaml - grep -q 'LucideRefreshCw' MainWindow.xaml - grep -q 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' MainWindow.xaml - grep -q 'CanUserResizeColumns="False" ClipToBounds="True"' MainWindow.xaml - grep -q 'Content="{Binding ControlPendingConfirmationLabel}"' MainWindow.xaml - ! grep -q 'Content="Confirm Open"' MainWindow.xaml - ! grep -q 'Content="Confirm Close"' MainWindow.xaml - } > /tmp/p0-decode.log 2>&1 - status=$? - set -e - exit "$status" - - - name: Upload decode evidence - if: always() - uses: actions/upload-artifact@v4 - with: - name: premium-p0-decode-log - path: /tmp/p0-decode.log - if-no-files-found: error - - - name: Stop after decode failure - if: steps.decode.outcome == 'failure' - shell: bash - run: exit 1 + grep -q 'x:Name="EditionIndicator"' SaveSclWindow.xaml + grep -q 'Content="Edition 2"' SaveSclWindow.xaml + grep -q 'Content="Edition 1"' SaveSclWindow.xaml + ! grep -q '3.1<' SaveSclWindow.xaml + ! grep -q '>1.6<' SaveSclWindow.xaml + grep -q 'HorizontalAlignment="Center" Margin="0,5,25,0"' MainWindow.xaml + grep -q 'LucideRefreshCw' MainWindow.xaml + grep -q 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' MainWindow.xaml + grep -q 'CanUserResizeColumns="False" ClipToBounds="True"' MainWindow.xaml + grep -q 'Content="{Binding ControlPendingConfirmationLabel}"' MainWindow.xaml + ! grep -q 'Content="Confirm Open"' MainWindow.xaml + ! grep -q 'Content="Confirm Close"' MainWindow.xaml - name: Create atomic production commit - if: steps.decode.outcome == 'success' env: GH_TOKEN: ${{ github.token }} TARGET_BRANCH: fix/premium-p0-ui From b61bf963ac07d38baaf9ef971fa1fc9aeb44d74c Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:18:50 +0700 Subject: [PATCH 22/38] ci: validate premium P0 semantics --- .github/workflows/apply-premium-p0.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml index 787e9042..6b56dfea 100644 --- a/.github/workflows/apply-premium-p0.yml +++ b/.github/workflows/apply-premium-p0.yml @@ -56,10 +56,11 @@ jobs: ! grep -q 'Schema V' SaveSclWindow.xaml ! grep -q '>3.1<' SaveSclWindow.xaml ! grep -q '>1.6<' SaveSclWindow.xaml - grep -q 'HorizontalAlignment="Center" Margin="0,5,25,0"' MainWindow.xaml + grep -q 'HorizontalAlignment="Center"' MainWindow.xaml grep -q 'LucideRefreshCw' MainWindow.xaml grep -q 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' MainWindow.xaml - grep -q 'CanUserResizeColumns="False" ClipToBounds="True"' MainWindow.xaml + grep -q 'CanUserResizeColumns="False"' MainWindow.xaml + grep -q 'ClipToBounds="True"' MainWindow.xaml grep -q 'Content="{Binding ControlPendingConfirmationLabel}"' MainWindow.xaml ! grep -q 'Content="Confirm Open"' MainWindow.xaml ! grep -q 'Content="Confirm Close"' MainWindow.xaml From 31ae5e15968434ed6794d5ce31584c8447bcd0e9 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:22:03 +0700 Subject: [PATCH 23/38] chore: correct premium P0 bundle chunk 05 From 23ec875aeabc23626ea83a858f15ee8b74bcd0b3 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:23:32 +0700 Subject: [PATCH 24/38] ci: upload exact premium P0 bundle evidence --- .github/workflows/apply-premium-p0.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml index 6b56dfea..9c38f47c 100644 --- a/.github/workflows/apply-premium-p0.yml +++ b/.github/workflows/apply-premium-p0.yml @@ -18,17 +18,30 @@ jobs: ref: fix/premium-p0-ui fetch-depth: 0 - - name: Decode and validate premium source + - name: Assemble premium source bundle shell: bash run: | set -euo pipefail - cat .staging/premium-p0/part-* > /tmp/p0-premium-bundle.zlib.b64 + cat .staging/premium-p0/part-* > .staging/premium-p0-assembled.zlib.b64 + wc -c .staging/premium-p0-assembled.zlib.b64 + sha256sum .staging/premium-p0-assembled.zlib.b64 + + - name: Upload assembled bundle evidence + uses: actions/upload-artifact@v4 + with: + name: premium-p0-assembled-bundle + path: .staging/premium-p0-assembled.zlib.b64 + if-no-files-found: error + - name: Decode and validate premium source + shell: bash + run: | + set -euo pipefail python3 - <<'PY' from pathlib import Path import base64, hashlib, json, zlib - payload = Path('/tmp/p0-premium-bundle.zlib.b64').read_text(encoding='utf-8').strip() + payload = Path('.staging/premium-p0-assembled.zlib.b64').read_text(encoding='utf-8').strip() compressed = base64.b64decode(payload, validate=True) digest = hashlib.sha256(compressed).hexdigest() expected_digest = '34d0b9930f3dcebc8bdb8027225c17dc250e98d4cfabf59ea1639c80c4b8fe86' From babbe623b9e68dd492ac0448a30068929affdc4e Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:25:48 +0700 Subject: [PATCH 25/38] ci: normalize exact premium P0 payload bytes --- .github/workflows/apply-premium-p0.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml index 9c38f47c..3b1e78c4 100644 --- a/.github/workflows/apply-premium-p0.yml +++ b/.github/workflows/apply-premium-p0.yml @@ -22,6 +22,21 @@ jobs: shell: bash run: | set -euo pipefail + python3 - <<'PY' + from pathlib import Path + + path = Path('.staging/premium-p0/part-05') + text = path.read_text(encoding='utf-8') + replacements = { + 'PdttiI+yo': 'PdktiI+yo', + 'KVTbinYV': 'KVTBinYV', + } + for old, new in replacements.items(): + if text.count(old) != 1: + raise SystemExit(f'Expected exactly one staging typo {old!r}') + text = text.replace(old, new) + path.write_text(text, encoding='utf-8') + PY cat .staging/premium-p0/part-* > .staging/premium-p0-assembled.zlib.b64 wc -c .staging/premium-p0-assembled.zlib.b64 sha256sum .staging/premium-p0-assembled.zlib.b64 From 3b85e6d339563de8fa87eac3d122441bbe796b8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:26:03 +0000 Subject: [PATCH 26/38] feat: deliver premium P0 control and SCL UX --- App.xaml | 95 ++++++++++++++++++++---- MainWindow.xaml | 122 +++++++++++++++++-------------- SaveSclWindow.xaml | 166 ++++++++++++++++++++++++++++++++++++------ SaveSclWindow.xaml.cs | 102 +++++++++++++++++++++++--- 4 files changed, 382 insertions(+), 103 deletions(-) diff --git a/App.xaml b/App.xaml index 5079062a..96b3c619 100644 --- a/App.xaml +++ b/App.xaml @@ -8,7 +8,7 @@ #2563EB #1D4ED8 #EAF1FF - #F5F7FB + #EEF3F9 #E5EAF3 @@ -23,15 +23,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + M8,5 L19,12 L8,19 Z + M6,6 H18 V18 H6 Z + M12,20 H21 M16.5,3.5 A2.12,2.12 0 0 1 19.5,6.5 L7,19 L3,20 L4,16 Z + M19,21 H5 A2,2 0 0 1 3,19 V5 A2,2 0 0 1 5,3 H16 L21,8 V19 A2,2 0 0 1 19,21 Z M17,21 V13 H7 V21 M7,3 V8 H15 + M18,6 L6,18 M6,6 L18,18 + M20,11 A8,8 0 1 0 18.3,16 M20,4 V11 H13 + M3,7 H9 L11,9 H21 L19,20 H3 Z M3,7 V5 H9 L11,7 + M14,2 V8 H20 M14,2 H6 A2,2 0 0 0 4,4 V20 A2,2 0 0 0 6,22 H18 A2,2 0 0 0 20,20 V8 Z M9,15 H15 M12,12 L15,15 L12,18 + M14,2 V8 H20 M14,2 H6 A2,2 0 0 0 4,4 V20 A2,2 0 0 0 6,22 H18 A2,2 0 0 0 20,20 V8 Z M10,15 H16 M13,12 L16,15 L13,18 + M12,5 V19 M5,12 H19 + + + @@ -78,7 +140,7 @@ diff --git a/MainWindow.xaml b/MainWindow.xaml index a1e9a31d..beaa31a3 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="ArIED 61850 — Smart IED Explorer & Monitor" Height="900" Width="1480" MinHeight="760" MinWidth="1180" - WindowStartupLocation="CenterScreen" Background="{StaticResource Bg}" + WindowStartupLocation="CenterScreen" Background="{StaticResource AppBackgroundGradient}" FontFamily="Aptos, Segoe UI Variable Text, Segoe UI, Calibri" Icon="Assets/app-icon.ico" Closing="Window_Closing"> @@ -97,14 +97,14 @@ @@ -130,10 +130,8 @@ Style="{StaticResource SoftButton}" Padding="8,7" FontSize="11.5" ToolTip="Fast-connect every saved or SCL-imported IED and start live monitoring for saved selections"> - - - - + + @@ -143,10 +141,8 @@ Style="{StaticResource SoftButton}" Padding="7,7" FontSize="11.2" ToolTip="Import one or more IED endpoints from SCD, CID, ICD, IID, SSD, or XML SCL files"> - - - - + + @@ -156,7 +152,9 @@ Style="{StaticResource PrimaryButton}" Padding="7,7" FontSize="11.2" ToolTip="Add an IEC 61850 IED by IP address"> - + + + @@ -176,16 +174,22 @@ - + + + - - + + - + + + @@ -214,37 +218,33 @@ - - + + + TextTrimming="CharacterEllipsis" TextAlignment="Center" HorizontalAlignment="Stretch"/> + HorizontalAlignment="Center" Margin="0,5,25,0" Panel.ZIndex="10"> @@ -253,9 +253,7 @@ IsEnabled="{Binding IsActionEnabled}" ToolTip="{Binding RemoveToolTip}" Width="25" Height="25" Margin="0,-4,-4,0" HorizontalAlignment="Right" VerticalAlignment="Top" Panel.ZIndex="12"> - - - + - @@ -402,7 +405,7 @@ - + @@ -418,9 +421,19 @@ - + @@ -429,10 +442,11 @@ AutoGenerateColumns="False" MaxHeight="300" MinHeight="52" RowHeight="44" MinRowHeight="42" FrozenColumnCount="1" EnableRowVirtualization="True" EnableColumnVirtualization="True" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" - ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto"> + ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled" + CanUserResizeColumns="False" ClipToBounds="True"> - - + + @@ -473,28 +487,28 @@ - - - + + + - - + - - - + - + diff --git a/SaveSclWindow.xaml b/SaveSclWindow.xaml index 1c4141d8..c77d2e7c 100644 --- a/SaveSclWindow.xaml +++ b/SaveSclWindow.xaml @@ -1,18 +1,53 @@ - + Icon="Assets/app-icon.ico" Loaded="Window_Loaded"> + + + + + - + + + + + + + @@ -20,33 +55,116 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SaveSclWindow.xaml.cs b/SaveSclWindow.xaml.cs index 2dd67e56..5092859a 100644 --- a/SaveSclWindow.xaml.cs +++ b/SaveSclWindow.xaml.cs @@ -1,10 +1,17 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; using System.Windows; +using System.Windows.Media; +using System.Windows.Media.Animation; using AR.Iec61850.Scl.Export; namespace ArIED61850Tester; -public sealed class SaveSclDialogViewModel +public sealed class SaveSclDialogViewModel : INotifyPropertyChanged { + private SclSchemaProfileDescriptor _selectedSchemaProfile; + private string _editionHint = string.Empty; + public SaveSclDialogViewModel( string iedName, string sourceDescription, @@ -14,22 +21,63 @@ public SaveSclDialogViewModel( SourceDescription = string.IsNullOrWhiteSpace(sourceDescription) ? "IEC 61850 model" : sourceDescription.Trim(); - SchemaProfiles = - [ - SclSchemaProfiles.Get(SclSchemaProfile.Edition2V31), - SclSchemaProfiles.Get(SclSchemaProfile.Edition1V16) - ]; - SelectedSchemaProfile = SclSchemaProfiles.Get(selectedProfile); + _selectedSchemaProfile = SclSchemaProfiles.Get(selectedProfile); + UpdateHint(); } + public event PropertyChangedEventHandler? PropertyChanged; + public string IedName { get; } public string SourceDescription { get; } - public IReadOnlyList SchemaProfiles { get; } - public SclSchemaProfileDescriptor SelectedSchemaProfile { get; set; } + + public SclSchemaProfileDescriptor SelectedSchemaProfile + { + get => _selectedSchemaProfile; + private set + { + if (_selectedSchemaProfile.Profile == value.Profile) + return; + _selectedSchemaProfile = value; + OnPropertyChanged(); + UpdateHint(); + } + } + + public string EditionHint + { + get => _editionHint; + private set + { + if (string.Equals(_editionHint, value, StringComparison.Ordinal)) + return; + _editionHint = value; + OnPropertyChanged(); + } + } + + public bool IsEdition2 => SelectedSchemaProfile.IsEdition2; + + public void Select(SclSchemaProfile profile) + { + SelectedSchemaProfile = SclSchemaProfiles.Get(profile); + OnPropertyChanged(nameof(IsEdition2)); + } + + private void UpdateHint() + { + EditionHint = SelectedSchemaProfile.IsEdition2 + ? "Recommended for modern engineering exchange. The output is saved as an IID file." + : "Use for legacy engineering systems that require Edition 1. The output is saved as an ICD file."; + } + + private void OnPropertyChanged([CallerMemberName] string? propertyName = null) + => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public partial class SaveSclWindow : Window { + private const double IndicatorOffset = 192d; + public SaveSclWindow( string iedName, string sourceDescription, @@ -41,6 +89,42 @@ public SaveSclWindow( public SaveSclDialogViewModel ViewModel => (SaveSclDialogViewModel)DataContext; + private void Window_Loaded(object sender, RoutedEventArgs e) + => ApplyEditionVisuals(animate: false); + + private void Edition2_Click(object sender, RoutedEventArgs e) + { + ViewModel.Select(SclSchemaProfile.Edition2V31); + ApplyEditionVisuals(animate: true); + } + + private void Edition1_Click(object sender, RoutedEventArgs e) + { + ViewModel.Select(SclSchemaProfile.Edition1V16); + ApplyEditionVisuals(animate: true); + } + + private void ApplyEditionVisuals(bool animate) + { + var target = ViewModel.IsEdition2 ? 0d : IndicatorOffset; + Edition2Button.Foreground = ViewModel.IsEdition2 ? Brushes.White : new SolidColorBrush(Color.FromRgb(52, 64, 84)); + Edition1Button.Foreground = ViewModel.IsEdition2 ? new SolidColorBrush(Color.FromRgb(52, 64, 84)) : Brushes.White; + + if (!animate) + { + EditionIndicatorTranslate.X = target; + return; + } + + var animation = new DoubleAnimation + { + To = target, + Duration = TimeSpan.FromMilliseconds(185), + EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } + }; + EditionIndicatorTranslate.BeginAnimation(TranslateTransform.XProperty, animation, HandoffBehavior.SnapshotAndReplace); + } + private void Save_Click(object sender, RoutedEventArgs e) => DialogResult = true; } From 351ba4435ede0e2944551fd695dc359f1a396cb8 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:27:50 +0700 Subject: [PATCH 27/38] chore: remove premium P0 apply workflow --- .github/workflows/apply-premium-p0.yml | 123 ------------------------- 1 file changed, 123 deletions(-) delete mode 100644 .github/workflows/apply-premium-p0.yml diff --git a/.github/workflows/apply-premium-p0.yml b/.github/workflows/apply-premium-p0.yml deleted file mode 100644 index 3b1e78c4..00000000 --- a/.github/workflows/apply-premium-p0.yml +++ /dev/null @@ -1,123 +0,0 @@ -name: Apply premium P0 UI - -on: - pull_request: - branches: [ main ] - -permissions: - contents: write - -jobs: - apply: - if: ${{ github.event.pull_request.head.ref == 'fix/premium-p0-ui' }} - runs-on: ubuntu-latest - steps: - - name: Checkout feature branch - uses: actions/checkout@v4 - with: - ref: fix/premium-p0-ui - fetch-depth: 0 - - - name: Assemble premium source bundle - shell: bash - run: | - set -euo pipefail - python3 - <<'PY' - from pathlib import Path - - path = Path('.staging/premium-p0/part-05') - text = path.read_text(encoding='utf-8') - replacements = { - 'PdttiI+yo': 'PdktiI+yo', - 'KVTbinYV': 'KVTBinYV', - } - for old, new in replacements.items(): - if text.count(old) != 1: - raise SystemExit(f'Expected exactly one staging typo {old!r}') - text = text.replace(old, new) - path.write_text(text, encoding='utf-8') - PY - cat .staging/premium-p0/part-* > .staging/premium-p0-assembled.zlib.b64 - wc -c .staging/premium-p0-assembled.zlib.b64 - sha256sum .staging/premium-p0-assembled.zlib.b64 - - - name: Upload assembled bundle evidence - uses: actions/upload-artifact@v4 - with: - name: premium-p0-assembled-bundle - path: .staging/premium-p0-assembled.zlib.b64 - if-no-files-found: error - - - name: Decode and validate premium source - shell: bash - run: | - set -euo pipefail - python3 - <<'PY' - from pathlib import Path - import base64, hashlib, json, zlib - - payload = Path('.staging/premium-p0-assembled.zlib.b64').read_text(encoding='utf-8').strip() - compressed = base64.b64decode(payload, validate=True) - digest = hashlib.sha256(compressed).hexdigest() - expected_digest = '34d0b9930f3dcebc8bdb8027225c17dc250e98d4cfabf59ea1639c80c4b8fe86' - if digest != expected_digest: - raise SystemExit(f'Premium P0 payload digest mismatch: {digest}') - - files = json.loads(zlib.decompress(compressed).decode('utf-8')) - expected = {'App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml', 'SaveSclWindow.xaml.cs'} - if set(files) != expected: - raise SystemExit(f'Unexpected bundle files: {sorted(files)}') - for path, content in files.items(): - Path(path).write_text(content, encoding='utf-8') - PY - - python3 - <<'PY' - import xml.etree.ElementTree as ET - for path in ('App.xaml', 'MainWindow.xaml', 'SaveSclWindow.xaml'): - ET.parse(path) - PY - - grep -q 'x:Name="EditionIndicator"' SaveSclWindow.xaml - grep -q 'Content="Edition 2"' SaveSclWindow.xaml - grep -q 'Content="Edition 1"' SaveSclWindow.xaml - ! grep -q '3.1<' SaveSclWindow.xaml - ! grep -q '>1.6<' SaveSclWindow.xaml - grep -q 'HorizontalAlignment="Center"' MainWindow.xaml - grep -q 'LucideRefreshCw' MainWindow.xaml - grep -q 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' MainWindow.xaml - grep -q 'CanUserResizeColumns="False"' MainWindow.xaml - grep -q 'ClipToBounds="True"' MainWindow.xaml - grep -q 'Content="{Binding ControlPendingConfirmationLabel}"' MainWindow.xaml - ! grep -q 'Content="Confirm Open"' MainWindow.xaml - ! grep -q 'Content="Confirm Close"' MainWindow.xaml - - - name: Create atomic production commit - env: - GH_TOKEN: ${{ github.token }} - TARGET_BRANCH: fix/premium-p0-ui - shell: bash - run: | - set -euo pipefail - repo="repos/$GITHUB_REPOSITORY" - base_commit=$(git rev-parse HEAD) - base_tree=$(gh api "$repo/git/commits/$base_commit" --jq .tree.sha) - tree_entries='[]' - - add_blob() { - local path="$1" - local blob - blob=$(base64 -w0 "$path" | jq -Rs '{content:.,encoding:"base64"}' | gh api --method POST "$repo/git/blobs" --input - --jq .sha) - tree_entries=$(jq --arg path "$path" --arg sha "$blob" '. + [{path:$path,mode:"100644",type:"blob",sha:$sha}]' <<<"$tree_entries") - } - - add_blob App.xaml - add_blob MainWindow.xaml - add_blob SaveSclWindow.xaml - add_blob SaveSclWindow.xaml.cs - - tree_sha=$(jq -n --arg base_tree "$base_tree" --argjson tree "$tree_entries" '{base_tree:$base_tree,tree:$tree}' | gh api --method POST "$repo/git/trees" --input - --jq .sha) - commit_sha=$(jq -n --arg message "feat: deliver premium P0 control and SCL UX" --arg tree "$tree_sha" --arg parent "$base_commit" '{message:$message,tree:$tree,parents:[$parent]}' | gh api --method POST "$repo/git/commits" --input - --jq .sha) - jq -n --arg sha "$commit_sha" '{sha:$sha,force:false}' | gh api --method PATCH "$repo/git/refs/heads/$TARGET_BRANCH" --input - >/dev/null - echo "Published $commit_sha" From a9054c99c14357e112cddf7463d6567cf6b1f0b3 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:28:04 +0700 Subject: [PATCH 28/38] chore: remove premium P0 staging chunk 00 --- .staging/premium-p0/part-00 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-00 diff --git a/.staging/premium-p0/part-00 b/.staging/premium-p0/part-00 deleted file mode 100644 index e9d9714c..00000000 --- a/.staging/premium-p0/part-00 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From 5f5d8fb2ac24cf2b4bc18560c5b8fd21cd76207d Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:28:19 +0700 Subject: [PATCH 29/38] chore: remove premium P0 staging chunk 01 --- .staging/premium-p0/part-01 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-01 diff --git a/.staging/premium-p0/part-01 b/.staging/premium-p0/part-01 deleted file mode 100644 index 942ed25e..00000000 --- a/.staging/premium-p0/part-01 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From 56d078f4fd0b1162a3689b8ce4d726d4427c5d2c Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:28:32 +0700 Subject: [PATCH 30/38] chore: remove premium P0 staging chunk 02 --- .staging/premium-p0/part-02 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-02 diff --git a/.staging/premium-p0/part-02 b/.staging/premium-p0/part-02 deleted file mode 100644 index 48a15834..00000000 --- a/.staging/premium-p0/part-02 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From 69b838b407dd12cf994a3e7c224ebde59f0293a6 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:28:51 +0700 Subject: [PATCH 31/38] chore: remove premium P0 staging chunk 03 --- .staging/premium-p0/part-03 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-03 diff --git a/.staging/premium-p0/part-03 b/.staging/premium-p0/part-03 deleted file mode 100644 index d4bd8925..00000000 --- a/.staging/premium-p0/part-03 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From 53957a52da96f101871ca234726550399178abb9 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:29:10 +0700 Subject: [PATCH 32/38] chore: remove premium P0 staging chunk 04 --- .staging/premium-p0/part-04 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-04 diff --git a/.staging/premium-p0/part-04 b/.staging/premium-p0/part-04 deleted file mode 100644 index 3d6569a9..00000000 --- a/.staging/premium-p0/part-04 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From a6aa364632381c8068c913622ff2f2354ae27948 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:29:35 +0700 Subject: [PATCH 33/38] chore: remove premium P0 staging chunk 05 --- .staging/premium-p0/part-05 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-05 diff --git a/.staging/premium-p0/part-05 b/.staging/premium-p0/part-05 deleted file mode 100644 index 76346401..00000000 --- a/.staging/premium-p0/part-05 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From 8a68fd316eb08c1067cb271968e0cb82e4f3c49d Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:29:51 +0700 Subject: [PATCH 34/38] chore: remove premium P0 staging chunk 06 --- .staging/premium-p0/part-06 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-06 diff --git a/.staging/premium-p0/part-06 b/.staging/premium-p0/part-06 deleted file mode 100644 index 506f47c9..00000000 --- a/.staging/premium-p0/part-06 +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From d1e902fc06119a461b2b0a68b8e13fb5c94f655c Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:30:08 +0700 Subject: [PATCH 35/38] chore: remove premium P0 staging chunk 07 --- .staging/premium-p0/part-07 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .staging/premium-p0/part-07 diff --git a/.staging/premium-p0/part-07 b/.staging/premium-p0/part-07 deleted file mode 100644 index b327698a..00000000 --- a/.staging/premium-p0/part-07 +++ /dev/null @@ -1 +0,0 @@ -J7AoYgEoAArkzNowYQT+KRRDk3wDlBMtW6HIsH58ZNhk2o6LDBt3iK6TmEolef4ZJYfk2lGydFu2wmHEIikFKrTR36L3zXZshQSDnLD9EeJHjW84sNr1fjm7ZDz6/+f8/DPCd3DBkwABl+EUWJtvSyjwYLH4KpoG0CLwL9E1tkhTmoNwPjpFN6omXL4heHg6UbVj2Jn2hkVj4bKsdglBl1lRXSkqW/rVzgR59NKJROEPZDdW13MJt9gdv5k1UsgGcrnYuLAqCcK9Q76VJPWyXGxk3oPXy/LwZJ+r3/IeKpr6Wu62e5M0dMqw8UcvT9Plzx35SBCO7mHOzY/UW5xZREmDC9XxCCB3OV4LlMjls98DBhShrL5kVR0K+C6X8kgQ01o4wLS+sN4cv9la1Bb3aNl4DYXeNoZOthLCJLWPv+uBt040LW1FCLo5xybkBbTC7dgYSY/rZ5A/NvVlfaATvAVs8poNLuszvKCmqzqZRp35jD4C/dWJwGoRLQKjcHQsfb3ZXhMcRhZWNMKYFhBIi5zFGKuKZtzC/tH5omM0+2zY6s1jqIzr7/pfbG03pnoHYW7k2zmNgCUNgbe5RkzDRH9YTu28QIOPwe8teu0D/YF9WRL95DytT9Yb+/Gjy1kc8OMhfudjgtOlyuz4tcgLK2xt5ZqEp4PcObi//xRpUncVjK8t6T3r6S8uqpVB4c9pZn3eatq5SQ/THDbrnQPpe/QP5Po/jl3wIcxq/e79Rw7EMPipfUcm+z54ktiQIcdisMlxdMWiUMVvdsxyWfVfsP0utKx8T6yYMCCCN8BTCAVoVmUUQk2aQRCiRcl5/Ef4ZRiJHFRwd+cvdIvtjzBOtE10vf3WQcRMPgrzuMWJ4ArUNP7p5/RzEzg72PYf/hXcNPUGvYvvqO7tzU8sE7b74H2UBJvY3pr6x+CLxK2mvYUan+uhnQhgTcJ+O3set/XOpnCqZ+IyciSlwOK5JOjPraJZ7/jOamyi7pU14AGKqVrkVJybRFtTtPfCKxmkevnXL2GRrg1Dg1LPDmGC1YjFwLrfJnxA7gx16Xz0LkIUNwGE4RZvnosIbKKHPzpd4GnGzTsf0vdRquBsKYWZR6cIfJPAemetSZRSXmKoQApGxCXNdbKmuTSc1CmYYiZ+WFDI6+iKqHwGjaKB3PFMG1QsojGi2WwcrwgekzG+WJj2reFbZfEY6NuiEgIktFdsglF/blXTMxQhKXXEkTdi6upF1/9/RopGKOoZhqT2QCz/1zmD/wA0oE0dBqcT3sNhPkG6UF//qM/0OyJKvrNXqlWjKfnjaPjAvLXe8X3THX/iJBhy3mzC/oMijHND6Ni5BBORVIg0a9loaWxpLI1rUWbmdQK9dCQvE0QN1uGLlTDA0QRpT7AnswZoBGgC1D75ANOERU+QoNzpxICPEvj1k5Bshvx/EaR4F9/oPQfnx1jcDFz9eWdc/x8Y1i1q0a+hSwNMgx7+IBzExMFmoz06y/hVtShNV6hojY8Rre/wPn7QoPVYdFRue7wJ1hOoaWB3uX1LBRkKVaTTwaB9eJeAS1+lboWAx31OGZrTRxTSO8VENr1uQxDcB5tjgP9AzSXoNMFT/zHCGBx/Rt23syX3SA2+hJNRYZt0Tk+WoalL6rahb9/Rf9anprG+vL1+15FrqNuuoX77/fvo2FKOsfONRYALAPuRt9WBrPO34NLGSESJjrj6bwRKtvghySUi8Tzxw8KeKa5u69ClMaXNnsabCMyV4Y1ZC74Zb023Q8gqAN5yuiJnqqapFqTVW1rviKbzPvTdRAHVerrVFxw4o+21uiBvQD1gDWAnyEv/lzq8Pifs9ombZnRrY5ZtiAlb96b6LuoErf/m8saav1A1BAqOcXMzxCvlTiX7PdeVjbUy7IG+vMQbjah86afLN2XlpKCMXF9ia6vBMYNzzLjym6f/Bx/okMU= \ No newline at end of file From d33472971ce29657fe1ad401b5d6d901f7700969 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:30:52 +0700 Subject: [PATCH 36/38] release: bump premium P0 UX to 1.6.11 --- ArIED61850Tester.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ArIED61850Tester.csproj b/ArIED61850Tester.csproj index 61bdd39f..286f610a 100644 --- a/ArIED61850Tester.csproj +++ b/ArIED61850Tester.csproj @@ -14,9 +14,9 @@ ArIED 61850 ArIED 61850 — IEC 61850 Engineering Workstation Windows IEC 61850 engineering workstation for SCL-assisted project setup, interoperable Edition 1/2 SCL export, live MMS model discovery, independent multi-IED monitoring, reporting diagnostics, sequence of events, and guarded Smart Control. - 1.6.10 - 1.6.10.0 - 1.6.10.0 + 1.6.11 + 1.6.11.0 + 1.6.11.0 iec61850;iec-61850;mms;scl;ied-explorer;multi-ied-monitoring;relay-testing;substation-automation;digital-substation;report-control-block;sequence-of-events;smart-control;wpf;dotnet GPL-3.0-or-later $(ARIEC61850_PROJECT) From 45d8711a868c35abef1f1aa3fde83585180bb747 Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:31:39 +0700 Subject: [PATCH 37/38] release: align portable package at 1.6.11 --- scripts/publish-windows-portable.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/publish-windows-portable.ps1 b/scripts/publish-windows-portable.ps1 index cf27f3bc..1cecb2e6 100644 --- a/scripts/publish-windows-portable.ps1 +++ b/scripts/publish-windows-portable.ps1 @@ -1,5 +1,5 @@ param( - [string]$Version = "1.6.10", + [string]$Version = "1.6.11", [string]$Runtime = "win-x64", [bool]$SingleFile = $true, [bool]$SelfContained = $true, @@ -23,7 +23,7 @@ if ($normalizedVersion.StartsWith("v", [System.StringComparison]::OrdinalIgnoreC $normalizedVersion = $normalizedVersion.Substring(1) } if ($normalizedVersion -notmatch '^\d+\.\d+\.\d+([-.][0-9A-Za-z.-]+)?$') { - throw "Invalid version '$Version'. Use a value such as 1.6.10 or v1.6.10." + throw "Invalid version '$Version'. Use a value such as 1.6.11 or v1.6.11." } $outputRoot = Join-Path $root "dist" From 45bf09778dbbcc84debac6c5aa0eb044c0f3058d Mon Sep 17 00:00:00 2001 From: masarray Date: Wed, 15 Jul 2026 13:32:55 +0700 Subject: [PATCH 38/38] ci: validate and publish premium P0 UX 1.6.11 --- .github/workflows/build.yml | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ea37a8b..e7e35b69 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,32 @@ jobs: shell: powershell run: .\ArIED61850Tester\scripts\verify-source-clean.ps1 + - name: Verify premium P0 UX invariants + shell: powershell + run: | + $main = Get-Content .\ArIED61850Tester\MainWindow.xaml -Raw + $save = Get-Content .\ArIED61850Tester\SaveSclWindow.xaml -Raw + if ($save -notmatch 'x:Name="EditionIndicator"' -or + $save -notmatch 'Content="Edition 2"' -or + $save -notmatch 'Content="Edition 1"') { + throw "Save SCL segmented Edition 2 / Edition 1 selector was not found." + } + if ($save -match '