ae7fcc35862edb366ed7775d3dc7e93e53e59290..eab3bec52af5db03d411a5e079895b3659ead524
2026-08-22 Ariver
chore: archive 8.3.7 local test build
eab3be diff | tree
2026-08-22 Ariver
fix: improve app note placeholder contrast
1ec08b diff | tree
5 files modified
3 files added
70 ■■■■■ changed files
C1.source/Apptag/AppGridSupport.swift 13 ●●●● patch | view | raw | blame | history
C1.source/Apptag/Info.plist 4 ●●●● patch | view | raw | blame | history
C1.source/CHANGELOG.md 6 ●●●●● patch | view | raw | blame | history
C1.source/Scripts/app_note_bubble_input_qa.sh 12 ●●●●● patch | view | raw | blame | history
C2.builds/LocalTest-8.3.7-20260822.2207/Archive/TagLauncher-8.3.7-build20260822.2207-localtest.dmg patch | view | raw | blame | history
C2.builds/LocalTest-8.3.7-20260822.2207/RELEASE_MANIFEST.md 30 ●●●●● patch | view | raw | blame | history
C2.builds/LocalTest-8.3.7-20260822.2207/SHA256SUMS.txt 1 ●●●● patch | view | raw | blame | history
CODEGRAPH.md 4 ●●●● patch | view | raw | blame | history
C1.source/Apptag/AppGridSupport.swift
@@ -122,6 +122,9 @@
    var isFocused: FocusState<Bool>.Binding
    let onCommit: () -> Void
    let onCancel: () -> Void
    private static let placeholderAttributes: [NSAttributedString.Key: Any] = [
        .foregroundColor: NSColor.white.withAlphaComponent(0.48)
    ]
    func makeCoordinator() -> Coordinator {
        Coordinator(
@@ -140,7 +143,10 @@
        field.focusRingType = .none
        field.font = NSFont.systemFont(ofSize: 15, weight: .medium)
        field.textColor = .white
        field.placeholderString = placeholder
        field.placeholderAttributedString = NSAttributedString(
            string: placeholder,
            attributes: Self.placeholderAttributes
        )
        field.delegate = context.coordinator
        field.target = context.coordinator
        field.action = #selector(Coordinator.submitAction(_:))
@@ -158,7 +164,10 @@
        context.coordinator.onCommit = onCommit
        context.coordinator.onCancel = onCancel
        context.coordinator.field = field
        field.placeholderString = placeholder
        field.placeholderAttributedString = NSAttributedString(
            string: placeholder,
            attributes: Self.placeholderAttributes
        )
        field.setAccessibilityLabel(placeholder)
        if !field.hasMarkedTextInput, field.stringValue != text {
C1.source/Apptag/Info.plist
@@ -19,7 +19,7 @@
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>8.3.6</string>
    <string>8.3.7</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
@@ -32,7 +32,7 @@
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>20260707.1526</string>
    <string>20260822.2207</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.utilities</string>
    <key>LSMinimumSystemVersion</key>
C1.source/CHANGELOG.md
@@ -2,6 +2,12 @@
## [Unreleased]
## [8.3.7] — 2026-08-22
- 优化 App Grid 备注气泡输入框的默认提示文字颜色,在深色浮层上保持次级提示感但不再近似不可见
- 扩展备注气泡输入 QA,防止 placeholder 回退为系统默认暗色
- 版本号更新为 `8.3.7`,Build 更新为 `20260822.2207`
## [8.3.6] — 2026-07-07
- 设置页顶部固定 Pro 状态 / 引导行移除外层圆角矩形背景和描边,保留原位置、身份文案、购买和恢复购买入口
C1.source/Scripts/app_note_bubble_input_qa.sh
@@ -43,6 +43,18 @@
    "App note bubble editor must use a native NSTextField subclass",
)
require(
    r"placeholderAttributes\s*:\s*\[NSAttributedString\.Key\s*:\s*Any\](?P<body>.*?)NSColor\.white\.withAlphaComponent\s*\(\s*0\.48\s*\)",
    support,
    "App note bubble placeholder must use an explicit readable-but-secondary white alpha color",
)
require(
    r"placeholderAttributedString\s*=\s*NSAttributedString\s*\((?P<body>.*?)attributes\s*:\s*Self\.placeholderAttributes",
    support,
    "App note bubble must apply the explicit placeholder color through placeholderAttributedString",
)
if "field.placeholderString = placeholder" in support:
    fail("App note bubble must not rely on the system default placeholderString color")
require(
    r"AppBubbleNoteTextField\s*\((?P<body>.*?)text\s*:\s*\$draftNote(?P<body2>.*?)isFocused\s*:\s*noteFocused(?P<body3>.*?)onCommit\s*:\s*onCommit(?P<body4>.*?)onCancel\s*:\s*onCancel",
    support,
    "AppNameBubble must route draft text, focus, submit, and cancel through the native note editor",
C2.builds/LocalTest-8.3.7-20260822.2207/Archive/TagLauncher-8.3.7-build20260822.2207-localtest.dmg
Binary files differ
C2.builds/LocalTest-8.3.7-20260822.2207/RELEASE_MANIFEST.md
New file
@@ -0,0 +1,30 @@
# TagLauncher 8.3.7 Local Test Build
- Type: local installation test DMG
- App version: `8.3.7`
- Build: `20260822.2207`
- Source commit: `1ec08b1dedff313e385767edb0c2b815b6dd56f3`
- Branch: `codex/slim-migration-taglauncher2`
- Artifact: `Archive/TagLauncher-8.3.7-build20260822.2207-localtest.dmg`
- SHA256: `4fef51bfa26eb1d73fbb5de4e3a336d5a2a5ed02aa658995126012ace6e04c9f`
## Scope
- App Grid 备注气泡输入框 placeholder 改为显式浅色 attributed string:`NSColor.white.withAlphaComponent(0.48)`。
- 正文颜色、计数器颜色、备注提交 / 取消、IME marked text、防超长逻辑和本地化文案不变。
## Verification
- `bash Scripts/app_note_bubble_input_qa.sh`
- `bash Scripts/macos14_availability_typecheck_qa.sh`
- `git diff --check -- C1.source/Apptag/AppGridSupport.swift C1.source/Scripts/app_note_bubble_input_qa.sh C1.source/Apptag/Info.plist C1.source/CHANGELOG.md CODEGRAPH.md`
- `plutil -lint C1.source/Apptag/Info.plist`
- `APP_BUILD=20260822.2207 bash build.sh`
- `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app`
- `bash Scripts/macos14_build_metadata_qa.sh build/TagLauncher.app`
- `hdiutil verify build/TagLauncher.dmg`
- DMG mounted read-only; verified `TagLauncher.app`, `Applications` symlink, app version/build, code signature, and non-root-readable file permissions.
## Boundary
This is an ad-hoc signed local installation test DMG for user experience validation. It is not an App Store Connect upload package and is not notarized for public distribution.
C2.builds/LocalTest-8.3.7-20260822.2207/SHA256SUMS.txt
New file
@@ -0,0 +1 @@
4fef51bfa26eb1d73fbb5de4e3a336d5a2a5ed02aa658995126012ace6e04c9f  Archive/TagLauncher-8.3.7-build20260822.2207-localtest.dmg
CODEGRAPH.md
@@ -71,7 +71,7 @@
  - `ProStatusPill`:高级功能入口的小型 Pro 胶囊;Pro / 已锁定高级功能使用金色皇冠体系,免费状态使用中性胶囊。
  - `ProUpgradePromptView`:功能被锁时的统一解锁提示,购买 / 恢复动作由调用方闭包绑定。
- `C1.source/Apptag/AppGridSupport.swift`
  - 图标气泡、基础 metrics、气泡 placement 支撑。
  - 图标气泡、基础 metrics、气泡 placement 支撑;备注编辑气泡使用原生 `NSTextField` 桥接,placeholder 需显式使用次级但可读的浅色 attributed string,避免系统默认 placeholder 在深色浮层上近似消失。
- `C1.source/Apptag/TagNavigationView.swift`
  - AppKit 标签导航栏,支持标签 hover 滚动、选中、拖放、双击进入标签设置页;标签按钮颜色优先使用 `TagDef.customColor`。
- `C1.source/Apptag/AppDragCoordinator.swift`
@@ -189,7 +189,7 @@
- `C1.source/Scripts/windowserver_event_safety_qa.sh`
  - WindowServer / TextInput 事件安全静态门禁;检查 Quick Search marked-text 输入保护、composition 期间不响应鼠标 / 背景关闭、面板置前去重,以及 TagNavigation 阻塞式事件循环兜底退出。
- `C1.source/Scripts/app_note_bubble_input_qa.sh`
  - App note 泡泡输入框 IME 安全门禁;检查备注泡泡使用原生 `NSTextField` 桥接、marked text 期间不覆盖/截断/提交,最终提交仍受备注长度上限约束。
  - App note 泡泡输入框 IME / placeholder 可读性门禁;检查备注泡泡使用原生 `NSTextField` 桥接、placeholder 使用显式次级浅色 attributed string、marked text 期间不覆盖/截断/提交,最终提交仍受备注长度上限约束。
- `C1.source/Scripts/pro_custom_hotkeys_qa.sh`
  - Pro 自定义快捷键静态与 Carbon 运行时门禁;检查 Pro gate、录制期间暂停/恢复全局快捷键、事务式注册保存、重复校验、禁用重权限键盘 API、设置页 Pro 按钮组合和 29 语种文案。
- `C1.source/Scripts/pro_tag_custom_color_qa.sh`