From eb0ce659d906b03ec42b9419ff370c6200a5ec29 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Tue, 07 Jul 2026 15:13:13 +0800
Subject: [PATCH] release: rebuild 8.3.6 app store package permissions

---
 C1.source/Apptag/Info.plist                                                                                 |    2 
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1506/RELEASE_MANIFEST.md                                         |   65 +++++++++++++
 C1.source/Scripts/macos14_build_metadata_qa.sh                                                              |   14 ++
 C1.source/CHANGELOG.md                                                                                      |    2 
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt                                              |    3 
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1506/QA_RELEASE_EVIDENCE.md                                      |   62 ++++++++++++
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1506/PKG_PREFLIGHT_REPORT.md                                     |   63 ++++++++++++
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1506/QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png |    0 
 C2.builds/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt                                                       |    2 
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg             |    0 
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1242/UPLOAD_FAILED_ASC_VALIDATION.md                             |   41 ++++++++
 K3.运营与发布资料/Release/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg            |    0 
 C2.builds/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg                     |    0 
 C1.source/build.sh                                                                                          |    3 
 C2.builds/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg                      |    0 
 15 files changed, 255 insertions(+), 2 deletions(-)

diff --git a/C1.source/Apptag/Info.plist b/C1.source/Apptag/Info.plist
index 94c96f5..bb24be8 100644
--- a/C1.source/Apptag/Info.plist
+++ b/C1.source/Apptag/Info.plist
@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>20260707.1242</string>
+	<string>20260707.1506</string>
 	<key>LSApplicationCategoryType</key>
 	<string>public.app-category.utilities</string>
 	<key>LSMinimumSystemVersion</key>
diff --git a/C1.source/CHANGELOG.md b/C1.source/CHANGELOG.md
index 0897058..e092974 100644
--- a/C1.source/CHANGELOG.md
+++ b/C1.source/CHANGELOG.md
@@ -6,7 +6,7 @@
 
 - 设置页顶部固定 Pro 状态 / 引导行移除外层圆角矩形背景和描边,保留原位置、身份文案、购买和恢复购买入口
 - 扩展 Pro 门禁 QA,防止该固定 Pro 行回退为带外框样式
-- 版本号更新为 `8.3.6`,Build 更新为 `20260707.1242`
+- 版本号更新为 `8.3.6`,Build 更新为 `20260707.1506`
 
 ## [8.3.5] — 2026-07-02
 
diff --git a/C1.source/Scripts/macos14_build_metadata_qa.sh b/C1.source/Scripts/macos14_build_metadata_qa.sh
index 77b5af7..80d7d52 100755
--- a/C1.source/Scripts/macos14_build_metadata_qa.sh
+++ b/C1.source/Scripts/macos14_build_metadata_qa.sh
@@ -17,6 +17,20 @@
 [[ -f "$INFO_PLIST" ]] || fail "Info.plist not found: $INFO_PLIST"
 [[ -x "$EXECUTABLE" ]] || fail "executable not found or not executable: $EXECUTABLE"
 
+unreadable_dirs="$(find "$APP_BUNDLE" -type d ! -perm -005 -print | head -20)"
+if [[ -n "$unreadable_dirs" ]]; then
+  fail "app bundle contains directories not readable/searchable by non-root users: $unreadable_dirs"
+fi
+
+unreadable_files="$(find "$APP_BUNDLE" -type f ! -perm -004 -print | head -20)"
+if [[ -n "$unreadable_files" ]]; then
+  fail "app bundle contains files not readable by non-root users: $unreadable_files"
+fi
+
+if find "$EXECUTABLE" -type f ! -perm -005 -print | grep -q .; then
+  fail "main executable is not readable/executable by non-root users: $EXECUTABLE"
+fi
+
 actual_minimum_system="$(/usr/libexec/PlistBuddy -c 'Print :LSMinimumSystemVersion' "$INFO_PLIST")"
 if [[ "$actual_minimum_system" != "$EXPECTED_MINIMUM_SYSTEM" ]]; then
   fail "LSMinimumSystemVersion expected $EXPECTED_MINIMUM_SYSTEM, got $actual_minimum_system"
diff --git a/C1.source/build.sh b/C1.source/build.sh
index 7cd66d7..ffc188b 100644
--- a/C1.source/build.sh
+++ b/C1.source/build.sh
@@ -317,6 +317,9 @@
 
 echo "==> Setting permissions..."
 chmod +x "$MACOS_DIR/$APP_NAME"
+find "$APP_BUNDLE" -type d -exec chmod 755 {} +
+find "$APP_BUNDLE" -type f -exec chmod 644 {} +
+chmod 755 "$MACOS_DIR/$APP_NAME"
 
 echo "==> Stripping debug symbols..."
 strip -x "$MACOS_DIR/$APP_NAME"
diff --git a/C2.builds/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg b/C2.builds/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg
new file mode 100644
index 0000000..84b7cd8
--- /dev/null
+++ b/C2.builds/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg
Binary files differ
diff --git a/C2.builds/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt b/C2.builds/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt
new file mode 100644
index 0000000..ee5e14d
--- /dev/null
+++ b/C2.builds/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt
@@ -0,0 +1,2 @@
+a35525d303b3ee85d40c16f595b9461fc912c5fab559d20d4881b1776fa44f35  Archive/TagLauncher-8.3.6-build20260707.1506.dmg
+933043a2dac0be016b7dfd9effdf048462456592d340f68fd3fe5653052d59b9  Upload/TagLauncher-8.3.6-build20260707.1506.pkg
diff --git a/C2.builds/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg b/C2.builds/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg
new file mode 100644
index 0000000..acd39a2
--- /dev/null
+++ b/C2.builds/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg
Binary files differ
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1242/UPLOAD_FAILED_ASC_VALIDATION.md" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1242/UPLOAD_FAILED_ASC_VALIDATION.md"
new file mode 100644
index 0000000..75d284f
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1242/UPLOAD_FAILED_ASC_VALIDATION.md"
@@ -0,0 +1,41 @@
+# Upload Failed - Do Not Upload This Package
+
+Date: 2026-07-07
+Build: `8.3.6 (20260707.1242)`
+
+## Result
+
+Do not upload:
+
+- `Upload/TagLauncher-8.3.6-build20260707.1242.pkg`
+
+Transporter / App Store Connect rejected this package with:
+
+```text
+Validation failed (409)
+The installer package includes files that are only readable by the root user.
+```
+
+## Root Cause
+
+The package payload preserved an app bundle directory with mode `700`, specifically the localization resource directory copied into:
+
+```text
+TagLauncher.app/Contents/Resources/Localization
+```
+
+After installation this would be owned by `root`, preventing non-root users from reading resources needed for code signature verification.
+
+## Replacement
+
+Use the rebuilt package instead:
+
+```text
+../AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg
+```
+
+Replacement SHA256:
+
+```text
+933043a2dac0be016b7dfd9effdf048462456592d340f68fd3fe5653052d59b9
+```
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg"
new file mode 100644
index 0000000..84b7cd8
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/Archive/TagLauncher-8.3.6-build20260707.1506.dmg"
Binary files differ
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/PKG_PREFLIGHT_REPORT.md" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/PKG_PREFLIGHT_REPORT.md"
new file mode 100644
index 0000000..dad4e55
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/PKG_PREFLIGHT_REPORT.md"
@@ -0,0 +1,63 @@
+# TagLauncher 8.3.6 App Store PKG Preflight
+
+Date: 2026-07-07
+Version: 8.3.6
+Build: 20260707.1506
+
+## Package
+
+- Upload package: `Upload/TagLauncher-8.3.6-build20260707.1506.pkg`
+- Local rollback DMG: `Archive/TagLauncher-8.3.6-build20260707.1506.dmg`
+- Replaces failed upload package: `AppStore-8.3.6-20260707.1242/Upload/TagLauncher-8.3.6-build20260707.1242.pkg`
+
+## Signing
+
+- App signing identity: `3rd Party Mac Developer Application: Hainan Wanxing Technology Co., Ltd. (CR3J54M8BQ)`
+- Installer signing identity: `3rd Party Mac Developer Installer: Hainan Wanxing Technology Co., Ltd. (CR3J54M8BQ)`
+- Embedded provisioning profile: `TagLauncher Mac App Store 20260707`
+- Provisioning profile UUID: `3ee49163-ef5c-4467-8971-f93cc1fc6b6d`
+
+## Payload Metadata
+
+- `CFBundleShortVersionString`: `8.3.6`
+- `CFBundleVersion`: `20260707.1506`
+- Bundle ID: `com.taglauncher.app`
+- Team ID: `CR3J54M8BQ`
+
+## Permission Gate
+
+The failed `20260707.1242` upload was rejected because a payload directory was only readable by root after installation. The rebuilt payload was expanded and checked with:
+
+```bash
+find "$APP" \( -type d ! -perm -005 -o -type f ! -perm -004 \) -ls
+```
+
+Result:
+
+- PASS: no app bundle directories are restricted from non-root search/read access.
+- PASS: no app bundle files are restricted from non-root read access.
+- PASS: main executable is readable and executable by non-root users.
+
+## Verification
+
+Commands completed successfully:
+
+```bash
+pkgutil --check-signature Upload/TagLauncher-8.3.6-build20260707.1506.pkg
+pkgutil --expand-full Upload/TagLauncher-8.3.6-build20260707.1506.pkg /tmp/taglauncher-836-1506-pkg-preflight/expanded
+codesign --verify --deep --strict --verbose=2 /tmp/taglauncher-836-1506-pkg-preflight/expanded/com.taglauncher.app.pkg/Payload/TagLauncher.app
+hdiutil verify Archive/TagLauncher-8.3.6-build20260707.1506.dmg
+shasum -a 256 -c SHA256SUMS.txt
+```
+
+Non-gating local distribution check:
+
+- `spctl -a -vv -t install` may reject App Store upload packages signed with `3rd Party Mac Developer Installer`.
+- This artifact is for App Store Connect upload, not Developer ID local distribution. Treat `pkgutil --check-signature`, payload `codesign --verify`, embedded provisioning profile, payload permission gate, and ASC upload validation as the release gates.
+
+## Hashes
+
+```text
+a35525d303b3ee85d40c16f595b9461fc912c5fab559d20d4881b1776fa44f35  Archive/TagLauncher-8.3.6-build20260707.1506.dmg
+933043a2dac0be016b7dfd9effdf048462456592d340f68fd3fe5653052d59b9  Upload/TagLauncher-8.3.6-build20260707.1506.pkg
+```
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png"
new file mode 100644
index 0000000..4bd6bc8
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png"
Binary files differ
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/QA_RELEASE_EVIDENCE.md" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/QA_RELEASE_EVIDENCE.md"
new file mode 100644
index 0000000..bfe25a6
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/QA_RELEASE_EVIDENCE.md"
@@ -0,0 +1,62 @@
+# TagLauncher 8.3.6 QA Release Evidence
+
+Date: 2026-07-07
+Build: `8.3.6 (20260707.1506)`
+
+## User-Facing Requirement
+
+The Settings fixed Pro status / guidance row must not have an outer rounded rectangle frame.
+
+## Transporter Regression Fix
+
+Apple Transporter rejected build `20260707.1242`:
+
+```text
+The installer package includes files that are only readable by the root user.
+```
+
+The replacement build `20260707.1506` normalizes app bundle permissions before signing and adds a QA gate that fails if any app payload directory/file is not readable by non-root users.
+
+## Visual Smoke
+
+Evidence screenshot:
+
+- `QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png`
+
+Result:
+
+- PASS: fixed Pro status / guidance row remains in the same position.
+- PASS: row has no outer rounded rectangle background or border.
+- PASS: identity text, unlock button, restore purchase button, tab layout, and app version display remain visible.
+
+## Automated / Static QA
+
+Passed:
+
+```bash
+bash Scripts/pro_feature_gate_qa.sh
+bash Scripts/pro_localization_qa.sh
+bash Scripts/macos14_availability_typecheck_qa.sh
+bash Scripts/macos14_build_metadata_qa.sh build/TagLauncher.app
+codesign --verify --deep --strict --verbose=2 build/TagLauncher.app
+pkgutil --check-signature Upload/TagLauncher-8.3.6-build20260707.1506.pkg
+hdiutil verify Archive/TagLauncher-8.3.6-build20260707.1506.dmg
+shasum -a 256 -c SHA256SUMS.txt
+```
+
+Package payload preflight:
+
+- PASS: no root-only readable app bundle directories/files in the expanded package payload.
+- PASS: expanded payload app code signature verifies.
+- PASS: embedded provisioning profile matches Team ID `CR3J54M8BQ`.
+
+Non-PASS items inherited from the previous 8.3.6 gate:
+
+- `bash Scripts/quick_search_app_name_qa.sh`: script returned `SKIP Sunlogin wrapper app not installed at /Applications/贝锐向日葵被控.app`.
+- `bash Scripts/window_logic_qa.sh`: script returned `FAIL: cliclick is required for window-position click checks.`
+
+## Release Gate Conclusion
+
+- App Store upload package: PASS.
+- Use `Upload/TagLauncher-8.3.6-build20260707.1506.pkg` for App Store Connect.
+- Do not upload the superseded `20260707.1242` package.
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/RELEASE_MANIFEST.md" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/RELEASE_MANIFEST.md"
new file mode 100644
index 0000000..804fa7b
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/RELEASE_MANIFEST.md"
@@ -0,0 +1,65 @@
+# TagLauncher 8.3.6 Release Manifest
+
+Date: 2026-07-07
+
+## Version
+
+- Version: `8.3.6`
+- Build: `20260707.1506`
+- Supersedes failed upload build: `20260707.1242`
+- Branch: `codex/slim-migration-taglauncher2`
+- Scope: Settings fixed Pro status / guidance row no longer renders the outer rounded rectangle frame.
+
+## Reason For Rebuild
+
+Transporter rejected build `20260707.1242` with:
+
+```text
+Validation failed (409)
+The installer package includes files that are only readable by the root user.
+```
+
+Root cause: `Contents/Resources/Localization` was copied into the app bundle with mode `700`, so after installation it would be owned by `root` and unreadable by ordinary users.
+
+Fix: `build.sh` now normalizes app bundle permissions before signing:
+
+- directories: `755`
+- files: `644`
+- main executable: `755`
+
+`Scripts/macos14_build_metadata_qa.sh` now fails if any app bundle directory/file is not readable by non-root users.
+
+## Artifacts
+
+- App Store upload package: `Upload/TagLauncher-8.3.6-build20260707.1506.pkg`
+- Local rollback DMG: `Archive/TagLauncher-8.3.6-build20260707.1506.dmg`
+- Visual QA screenshot: `QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png`
+- Hash file: `SHA256SUMS.txt`
+
+## Verification Summary
+
+Passed:
+
+- `bash Scripts/pro_feature_gate_qa.sh`
+- `bash Scripts/pro_localization_qa.sh`
+- `bash Scripts/macos14_availability_typecheck_qa.sh`
+- `bash Scripts/macos14_build_metadata_qa.sh build/TagLauncher.app`
+- `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app`
+- `pkgutil --check-signature Upload/TagLauncher-8.3.6-build20260707.1506.pkg`
+- expanded package payload permission check: no files/directories restricted to root-only readability
+- expanded package payload `codesign --verify --deep --strict --verbose=2`
+- `hdiutil verify Archive/TagLauncher-8.3.6-build20260707.1506.dmg`
+- `shasum -a 256 -c SHA256SUMS.txt`
+
+Non-PASS items inherited from the previous 8.3.6 gate:
+
+- `bash Scripts/quick_search_app_name_qa.sh`: skipped because the Sunlogin wrapper fixture app is not installed on this Mac.
+- `bash Scripts/window_logic_qa.sh`: blocked because `cliclick` is not installed.
+
+## Hashes
+
+```text
+a35525d303b3ee85d40c16f595b9461fc912c5fab559d20d4881b1776fa44f35  Archive/TagLauncher-8.3.6-build20260707.1506.dmg
+933043a2dac0be016b7dfd9effdf048462456592d340f68fd3fe5653052d59b9  Upload/TagLauncher-8.3.6-build20260707.1506.pkg
+c49127307de06d4be71536502bfdaece185bd0196a668f74e9c7fb55d60a6f8f  QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png
+```
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt"
new file mode 100644
index 0000000..e42f9cd
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/SHA256SUMS.txt"
@@ -0,0 +1,3 @@
+a35525d303b3ee85d40c16f595b9461fc912c5fab559d20d4881b1776fa44f35  Archive/TagLauncher-8.3.6-build20260707.1506.dmg
+933043a2dac0be016b7dfd9effdf048462456592d340f68fd3fe5653052d59b9  Upload/TagLauncher-8.3.6-build20260707.1506.pkg
+c49127307de06d4be71536502bfdaece185bd0196a668f74e9c7fb55d60a6f8f  QA/taglauncher-8.3.6-settings-about-no-pro-header-frame.png
diff --git "a/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg" "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg"
new file mode 100644
index 0000000..acd39a2
--- /dev/null
+++ "b/K3.\350\277\220\350\220\245\344\270\216\345\217\221\345\270\203\350\265\204\346\226\231/Release/AppStore-8.3.6-20260707.1506/Upload/TagLauncher-8.3.6-build20260707.1506.pkg"
Binary files differ

--
Gitblit v1.9.3