Conversation
ayangweb
marked this pull request as draft
August 28, 2026 06:15
ayangweb
force-pushed
the
next
branch
3 times, most recently
from
September 7, 2026 04:44
acf3e31 to
a6208e2
Compare
ayangweb
force-pushed
the
next
branch
5 times, most recently
from
September 12, 2026 09:29
a43b8d5 to
6a5c757
Compare
Rename repository-owned files to responsibility-based names and drop the internal rewrite-era project label from documentation, CI labels, tooling and code comments. - rename core design documents, the PR workflow, the configuration contract, an ADR, and the dependency/provenance/failure-evidence tools and their tests - move CONTRIBUTING to the repository root and keep README and CONTRIBUTING as paired English/Simplified Chinese documents - rewrite the public documents around product behavior and workflows - update every reference to the renamed paths - record the rule that keeps these labels out of repository-owned names Fix the JSON Schema document metadata in the Rust generator that now produces the checked-in schemas, then regenerate them. The configuration format itself is unchanged: only $id and title differ. No user-visible behavior, default, UI or configuration-format change, so CHANGELOG is intentionally left untouched.
The window was a fixed 460px, which left most of it empty for the states that render one line of text, including "Checking for updates" — the most common path. It is now as tall as the phase it is showing, clamped between a floor and the size it already used, with a long changelog scrolling past its budget. Two things had to be settled before the height could be right rather than merely settleable: - The window no longer has a resize handle. Its height is its content's height, and a dragged height would be one the next phase change undid, so `is_resizable: false` and the user-drag override are both gone. - The window is measured, resized and painted while still hidden, then shown. Showing it at the height it was created with and correcting afterwards flashed at the wrong size for a frame. This cannot be left to the frame loop: macOS only asks for frames for a window it considers on screen, and its `resize` applies in a task, so a window waiting for a correct frame before showing itself would wait forever. The paint and the show are queued behind the resize instead, which is an ordering guarantee rather than a poll or a timeout. The measurement is exact even when the window is too short for its content, so the height is reached in one step rather than growing to the ceiling and settling back down. A half-pixel tolerance keeps the window from asking for a height the platform rounds away from. Headless render tests 13 -> 20. Not verified: the opening order on Windows (whether `resize` is equally async and a hidden window equally without frames), and 800x600 at 125-200% scaling.
The update window opened first and asked for a check afterwards, so its first frame painted the previous check's published phase, and the progress bar only appeared once the worker published Checking and the 250 ms poll noticed. The window now opens with UpdateWindowStart::Check, which asks while the view is still being built, so the first frame is the check that was asked for. A requested check is rendered by the view itself until the worker publishes a newer revision, so a poll cannot put the previous result back, and the revision it is keyed on is read at request time rather than reused from the last poll. A build that cannot update is never asked, because its worker republishes the phase it already has and a progress bar would never end. Five tests: two pure ones for the revision semantics and the request gate, three headless render ones. Each of the three parts fails when it is reverted.
Five cases where code sat outside the module that owns the concern: - The anonymous diagnostics export had two owners: the document schema, builder and writer lived in the settings command worker while the zip packaging of the same bytes lived in a separate module. The export now owns both halves, with the preview bundle in its own submodule. - The model-identity boundary (config source, model origin, settings origin) was spelled nine times across three files, one of which held a private duplicate of a mapping another file already had. All six directions now live in one module, covered by a round-trip test. - The standalone `--*-smoke` verification modes are whole processes that return before the product assembles a window, yet they sat in the binary's root next to the product entry point. They now have their own module; the scenarios that need the run loop stay in main.rs. - `bongocat-ui`'s `update` module existed only to keep a historical module path alive and held nothing but a test fixture. The fixture joined the crate's other view test data and the module is gone. - `bongocat-platform`'s root was both the facade and the home of two unrelated type definitions with their tests stranded in the re-export list. Each type now has a named owner. Also drop a duplicated Language-to-locale rule in favour of the one `bongocat-i18n` already exports. No behaviour changes: the exported document is byte-identical, the platform public API is unchanged, and the smoke flags keep their output contract.
The release profile now links with fat LTO and states the debug, check and rpath settings the installer relies on, so a toolchain default cannot add debug information to a shipped artifact. The macOS disk image is created as ULMO (LZFSE) rather than UDZO (zlib). UDZO and UDBZ compress in fixed 64 KB blocks and cannot see the repeated preset model assets, while ULMO compresses the image as one stream. The arm64 installer drops from 14,384,404 B to 10,326,065 B, and mounting and reading the image measured slightly faster than before. Preset models are staged and filtered before packaging, so packaging junk left in the working tree can no longer reach a bundle or installer, and the same models always produce the same package.
run_startup_item_smoke is gated on target_os = "macos", but the module's std import block is gated on the storage-test-injection feature, so a default-feature macOS build compiled the function without `io` in scope and failed with E0433. The mode only needs io::Error, so it takes a function-local import next to the one it already has, instead of widening the shared block's gate and leaving its other names unused.
The staged preset models exist only as an input to cargo-packager, which copies them into the bundle or the installer, and nothing downstream reads them again, so keeping a second full copy of the models in the output directory had no purpose. The cleanup runs as soon as the packager returns, before the disk image and the update payload are built, and it tolerates both an already-absent and a failing removal: the directory is rebuilt from the repository on the next build either way, and a leftover temporary directory must not fail a package that is otherwise complete.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fixed #1045 — 手柄摇杆与扳机死区已进入配置、runtime 和设置 UI,支持持久化和运行时更新。
fixed #1041 — Native 不再使用 Pixi 的两个 Ticker;runtime 与 Windows/macOS overlay 均按配置帧期限节拍,15–240 FPS 限制已接线。
fixed #1037 — Overlay 坐标和尺寸通过 window-state.json 保存,启动时恢复,已覆盖重启场景。
fixed #1003 — 当前 v1 配置优先加载,typed command 持久化后立即更新 runtime,并有重启回归测试。
fixed #967 — Windows Overlay 位置/尺寸持久化及产品重启 smoke 已覆盖“开机回到默认位置”。
fixed #940 — Native 已重新实现 Breath 与 physics3 固定步进/插值,导入模型不再因旧姿态恢复逻辑丢失头发等物理运动。
fixed #884 — 窗口实际几何和模型宽高比使用统一规则计算,window-state.json 保存尺寸,不再从持久化几何反复反算缩放。
fixed #876 — 用户模型持久化、目录扫描、选择身份和事务切换已形成完整链路,失败会保留当前模型。
fixed #784 — 预置与导入模型均支持改名、封面替换和持久化,模型管理 UI 与 product smoke 已覆盖。
fixed #613 — 启动按完整 {id, source} 恢复用户模型;恢复失败才显式回退 standard,不再随机落到默认模型。
resolved #1043 — 旧 WebView2 DOM 图层变化导致的 HDR 闪亮路径已不存在;Native 以预乘 alpha 和最终 surface opacity 合成,不再由动态 CSS/DOM 图层触发 Chromium HDR 路径。HDR 实机仍是发布门禁。
resolved #1032 — 模型行为快捷键虽然仍保存默认 Ctrl/Cmd+数字 组合,但默认关闭且启用前不注册;不再无条件抢占帝国时代等游戏的系统组合键。
resolved #697 — 旧 Tauri autostart 插件已删除,当前由 auto-launch 和当前 executable 的 Windows 当前用户启动项接管。
resolved #684 — 键盘输入已由系统级 Raw Input/CGEventTap 采集,不再绑定某个显示器窗口;旧“只接收主屏输入”的焦点路径已消失。
resolved #39 — 旧 Tauri/WebView/IPC 高频路径已退役,指针与渲染洪峰使用有界 latest-value 通道。8 小时 RSS/soak 仍是独立发布门禁。
closed #1033 — 3D 模型和多供应商 AI 对话均不属于当前 2D Live2D 产品范围;未来应作为新架构项目重新提出。
closed #1028 — Arch Linux 白窗属于首发后 Linux/X11 能力。
closed #1025 — Ubuntu 20.04/WebKit 兼容请求不在当前 Windows/macOS Native 发布范围。
closed #1016 — 正文只有 NO HVE A BUG,没有复现、预期或版本信息。
closed #1015 — 正文只有 I LOVE THE CAT,没有功能请求。
closed #1009 — 只有辱骂内容,无可执行问题。
closed #1005 — 报告环境为 32 位 Windows;当前 Native 明确不支持 i686/x86。
closed #977 — Linux 明确为首发后评估平台。
closed #970 — Linux Mint 的窗口位置/拖动问题不适用于当前首发产品;Alt 临时绕过穿透也未实现。
closed #943 — Ubuntu 22.04 AppImage/GStreamer/XCB 崩溃属于已移除的旧 Linux/Tauri 路径。
closed #877 — 报告平台为 x86;当前 Windows 仅支持 x64。x64 gilrs/WGI 路径仍需独立实机验收。
closed #840 — 第三方 Wayland AppImage 提案;Linux 首发后另做 X11/Wayland 能力矩阵。
closed #88 — Linux Wayland 支持不属于 Native Rewrite 首发范围。