| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
feat(core,runtime,render): carry semantics in DrawFrame (tui-output-path decision B) - SemanticsFramePayload (priv fields, copy-protected accessors) as an opt-in DrawFrame member; frames_carry_semantics flag + frame_semantics_payload() read the already-committed snapshot, so pixel hosts pay nothing and paint never re-enters layout. - RendererBackendKind::TerminalAnsiNative / RendererFamily::Terminal open extension points (ADR 0007) for moui_tui_renderer. - Contract tests in moui/core + moui/runtime (draw_frame_contract_wbtest). - Settle validate_api_surface source budget 1669->1680 (dated reason, remedy chosen in tui-hardening owner call) and the maintenance-baseline budgets for runtime.mbt 470->479 and the catalog itself. | 17 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
perf(runtime): reconcile shortcuts and dispatch outcome extraction runtime_view_node_reconcile_dirty_kind compared the 26-field ViewSemanticsInfo struct and rebuilt semantics_action_kinds arrays on every reconcile even when the semantics declaration channel is Exact and unchanged — the Exact contract already guarantees content stability; the defensive comparisons now run only for Constant/Uncacheable channels. RuntimeViewAdapter snapshots its identity once at construction instead of re-dispatching View::identity per diff, and memoizes its children wrapper array per adapter value. Whole-subtree declaration-equal skipping is intentionally not landed: children are fresh values every rebuild and must be reconciled individually, and cross-rebuild wrapper reuse would serve stale closures (identity-equal views can carry different handler messages). Equivalence wbtests pin the dirty-kind matrix against the reference path, including the Constant-kinds retained path. dispatch_event's seven duplicated dirty/rebuild/activation propagation templates collapse into apply_event_dispatch_outcome (request_activation~ variant for dismissal layers); platform-view and focused-text-command sites keep their distinct shapes. Pure refactor. New damage_region_scenario_wbtest pins per-scenario damage behavior for the perf scenarios; the investigation record in the plan documents why FullSurface remains the correct conservative result for 4 of 5 scenarios (force-full reasons on rebuild classes, sibling resizes outside the dirty set) and the lockstep-tree narrowing lever for a future slice. Plan: hot-path-invalidation-boilerplate-convergence F1, F2, F3-note. | 1 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
feat(input): carry pointer identity and pressure end to end PointerEvent had no identity, so a second finger could steal capture, hover and focus from the first, and hosts that report a finger id or force had nowhere to put it. PointerEvent.id and pressure now flow from the window decoder through every backend and the Web ABI, capture is keyed per id, and hover, focus and the stale-hover clear stay owned by the primary stream (id 0), which is what single-finger embedded hosts always report. The scaffold template deliberately keeps the published 8-parameter Web ABI: its project resolves moui from the registry, not from this workspace. | 10 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
feat(core,runtime,render): carry semantics in DrawFrame (tui-output-path decision B) - SemanticsFramePayload (priv fields, copy-protected accessors) as an opt-in DrawFrame member; frames_carry_semantics flag + frame_semantics_payload() read the already-committed snapshot, so pixel hosts pay nothing and paint never re-enters layout. - RendererBackendKind::TerminalAnsiNative / RendererFamily::Terminal open extension points (ADR 0007) for moui_tui_renderer. - Contract tests in moui/core + moui/runtime (draw_frame_contract_wbtest). - Settle validate_api_surface source budget 1669->1680 (dated reason, remedy chosen in tui-hardening owner call) and the maintenance-baseline budgets for runtime.mbt 470->479 and the catalog itself. | 17 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
feat(harmonyos): raise product class to committed with matching-device L3 evidence | 2 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
feat(views): make touch-era text selection reachable The minimum text-editing set a touch surface needs: click count selects word, hard line or all through @core.text_word_range_at (a deliberately bounded subset of UAX#29 word breaking, not a second Unicode table), caret drag extends the selection, a goal column survives vertical moves across shorter lines, and a control can request a reveal that the runtime resolves against the placed tree once the caret event is folded in. Keyboard and IME dispatch now arrive with the placed frame too, so geometry-dependent handling no longer computes against RenderNode::empty(), and the targeted dispatch marks ancestors dirty the way the pointer path already did. Showcase Interaction Lab carries the evidence. | 10 天前 | |
feat(render): add ImageRun.src_rect atlas extraction and register MarPG demo example | 7 天前 | |
feat(views): make touch-era text selection reachable The minimum text-editing set a touch surface needs: click count selects word, hard line or all through @core.text_word_range_at (a deliberately bounded subset of UAX#29 word breaking, not a second Unicode table), caret drag extends the selection, a goal column survives vertical moves across shorter lines, and a control can request a reveal that the runtime resolves against the placed tree once the caret event is folded in. Keyboard and IME dispatch now arrive with the placed frame too, so geometry-dependent handling no longer computes against RenderNode::empty(), and the targeted dispatch marks ancestors dirty the way the pointer path already did. Showcase Interaction Lab carries the evidence. | 10 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
feat(runtime): wake a held long press from the frame clock A hold produces no further pointer sample, so a recogniser that completes on elapsed time had nothing to re-evaluate against and only fired when the finger moved. The armed subtree now claims the animation frame latch and the runtime re-emits the pressed position as a Move on each frame until it settles. The wake is frame granular, there is no app-visible timer and no message for the wake itself — the app only sees the ordinary typed message when the gesture completes. | 10 天前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
feat(input): carry pointer identity and pressure end to end PointerEvent had no identity, so a second finger could steal capture, hover and focus from the first, and hosts that report a finger id or force had nowhere to put it. PointerEvent.id and pressure now flow from the window decoder through every backend and the Web ABI, capture is keyed per id, and hover, focus and the stale-hover clear stay owned by the primary stream (id 0), which is what single-finger embedded hosts always report. The scaffold template deliberately keeps the published 8-parameter Web ABI: its project resolves moui from the registry, not from this workspace. | 10 天前 | |
feat(render): add ImageRun.src_rect atlas extraction and register MarPG demo example | 7 天前 | |
Add on_hover modifier and related functionality - Implemented the on_hover modifier to allow views to respond to hover events. - Added tests for on_hover to ensure it behaves as a transparent observer without focus or semantics roles. - Enhanced the PlatformServices to include a WindowDragRegionSource for managing window drag regions. - Created a new WindowDragRegionSource struct to handle declarative drag regions for custom window chrome. - Added tests for the WindowDragRegionSource to verify its behavior and integration with platform services. - Updated API surface to reflect new methods and structures related to hover and drag functionalities. | 1 个月前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
fix(runtime): prevent duplicate pointer dispatch in nested overlay hosts When an overlay host is nested within another overlay host (e.g., a modal dialog inside a toast host), the pointer dispatch prepass and the in-flow loop both enqueue the same child. This causes the event to be delivered twice: the first pass successfully triggers a Down event, but the second pass triggers a stale-hover Exit event on the same subtree, effectively cancelling the press and preventing any on_tap or activation from occurring. This fix ensures that the in-flow loop skips children that have already been enqueued as overlay owners during the prepass. - Update dispatch_pointer_to_children in input_pointer.mbt to skip already enqueued is_overlay_owner children. - Update find_focusable_at in input_focus.mbt to skip duplicate entries in the search order. - Add regression test modal dialog inside a nested overlay host receives taps in overlay_runtime_test.mbt to verify correct single-dispatch behavior. - Update documentation in moui-studio.md and memories/repo/moui-studio.md to record the root cause and fix. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
feat(harmonyos): raise product class to committed with matching-device L3 evidence | 2 天前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
perf(runtime): per-message sync throttling and single-pass effect summary sync_commands rebuilt the whole ActionCommandMap with fresh closures after every message, including scroll/pointer storms that derive an unchanged command list. ProgramCommandSync fingerprints only the ActionCommand list and resolves messages through a latest_commands ref refreshed on every sync, so a reused map still dispatches the current model-derived message (a command's message may depend on the model while its ActionCommand fields do not); a changed fingerprint rebuilds. wbtests cover reuse, latest-message dispatch, and enabled-flag rebuild. sync_subscriptions re-keyed with O(n^2) .any scans (seen keys, reuse lookup); both are Map-backed now and reusable_subscription is deleted. The per-message effect_plan_summary walk (full effect-tree traversal for diagnostics only) is folded into the execution traversal via EffectPlanRunSummary — the hot path pays no separate diagnostic walk and diagnostics values are unchanged; effect_plan_summary stays pub for tests. Plan: hot-path-invalidation-boilerplate-convergence D1-D3. | 1 天前 | |
perf(runtime): per-message sync throttling and single-pass effect summary sync_commands rebuilt the whole ActionCommandMap with fresh closures after every message, including scroll/pointer storms that derive an unchanged command list. ProgramCommandSync fingerprints only the ActionCommand list and resolves messages through a latest_commands ref refreshed on every sync, so a reused map still dispatches the current model-derived message (a command's message may depend on the model while its ActionCommand fields do not); a changed fingerprint rebuilds. wbtests cover reuse, latest-message dispatch, and enabled-flag rebuild. sync_subscriptions re-keyed with O(n^2) .any scans (seen keys, reuse lookup); both are Map-backed now and reusable_subscription is deleted. The per-message effect_plan_summary walk (full effect-tree traversal for diagnostics only) is folded into the execution traversal via EffectPlanRunSummary — the hot path pays no separate diagnostic walk and diagnostics values are unchanged; effect_plan_summary stays pub for tests. Plan: hot-path-invalidation-boilerplate-convergence D1-D3. | 1 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
perf(runtime): per-message sync throttling and single-pass effect summary sync_commands rebuilt the whole ActionCommandMap with fresh closures after every message, including scroll/pointer storms that derive an unchanged command list. ProgramCommandSync fingerprints only the ActionCommand list and resolves messages through a latest_commands ref refreshed on every sync, so a reused map still dispatches the current model-derived message (a command's message may depend on the model while its ActionCommand fields do not); a changed fingerprint rebuilds. wbtests cover reuse, latest-message dispatch, and enabled-flag rebuild. sync_subscriptions re-keyed with O(n^2) .any scans (seen keys, reuse lookup); both are Map-backed now and reusable_subscription is deleted. The per-message effect_plan_summary walk (full effect-tree traversal for diagnostics only) is folded into the execution traversal via EffectPlanRunSummary — the hot path pays no separate diagnostic walk and diagnostics values are unchanged; effect_plan_summary stays pub for tests. Plan: hot-path-invalidation-boilerplate-convergence D1-D3. | 1 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
perf(runtime): per-message sync throttling and single-pass effect summary sync_commands rebuilt the whole ActionCommandMap with fresh closures after every message, including scroll/pointer storms that derive an unchanged command list. ProgramCommandSync fingerprints only the ActionCommand list and resolves messages through a latest_commands ref refreshed on every sync, so a reused map still dispatches the current model-derived message (a command's message may depend on the model while its ActionCommand fields do not); a changed fingerprint rebuilds. wbtests cover reuse, latest-message dispatch, and enabled-flag rebuild. sync_subscriptions re-keyed with O(n^2) .any scans (seen keys, reuse lookup); both are Map-backed now and reusable_subscription is deleted. The per-message effect_plan_summary walk (full effect-tree traversal for diagnostics only) is folded into the execution traversal via EffectPlanRunSummary — the hot path pays no separate diagnostic walk and diagnostics values are unchanged; effect_plan_summary stays pub for tests. Plan: hot-path-invalidation-boilerplate-convergence D1-D3. | 1 天前 | |
perf(runtime): reconcile shortcuts and dispatch outcome extraction runtime_view_node_reconcile_dirty_kind compared the 26-field ViewSemanticsInfo struct and rebuilt semantics_action_kinds arrays on every reconcile even when the semantics declaration channel is Exact and unchanged — the Exact contract already guarantees content stability; the defensive comparisons now run only for Constant/Uncacheable channels. RuntimeViewAdapter snapshots its identity once at construction instead of re-dispatching View::identity per diff, and memoizes its children wrapper array per adapter value. Whole-subtree declaration-equal skipping is intentionally not landed: children are fresh values every rebuild and must be reconciled individually, and cross-rebuild wrapper reuse would serve stale closures (identity-equal views can carry different handler messages). Equivalence wbtests pin the dirty-kind matrix against the reference path, including the Constant-kinds retained path. dispatch_event's seven duplicated dirty/rebuild/activation propagation templates collapse into apply_event_dispatch_outcome (request_activation~ variant for dismissal layers); platform-view and focused-text-command sites keep their distinct shapes. Pure refactor. New damage_region_scenario_wbtest pins per-scenario damage behavior for the perf scenarios; the investigation record in the plan documents why FullSurface remains the correct conservative result for 4 of 5 scenarios (force-full reasons on rebuild classes, sibling resizes outside the dirty set) and the lockstep-tree narrowing lever for a future slice. Plan: hot-path-invalidation-boilerplate-convergence F1, F2, F3-note. | 1 天前 | |
Update API surface budgets and extend functionality in documentation and playground - Increased max_count values for various API surface categories in api_surface_classification.mbt. - Adjusted max_lines and max_pub_lines for multiple packages in backend_common_budgets.mbt and main.mbt to reflect updated code metrics. - Updated line budgets in line_budget_catalog.mbt to accommodate new code additions and changes. - Enhanced docs_model.mbt with additional trait-method promotions for WebsiteDocEntry, WebsiteDocGroup, and WebsiteDocsCatalog. - Removed deprecated extends.mbt files from website/app and website/playground/app. - Added explicit trait-method promotions in pkg.generated.mbti for WebsiteDocEntry, WebsiteDocGroup, and WebsiteDocsCatalog. - Updated playground model and protocol files to include necessary JSON serialization methods and equality checks for various structs and enums. | 1 个月前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
feat: add MoMao (墨卯) bilingual visual programming studio Replace moeui_studio and moblocks_studio with a single product: examples/momao, a zh-Hans/en-US visual programming IDE where one statement-level program IR (.momao.json) drives three same-source views (form designer / Scratch-style blocks / bilingual DSL code), plus structured AI proposals with field-level diff, a gated run mode (step budget, audit log, simulated submit_data gate), and standalone MoUI app export with a byte-identical kernel snapshot and a pr-profile drift gate. - domain/{ir,momao_lang,codec,blocks,proposals}: zero-UI kernel, bilingual keyword catalog with round-trip parsing, budgets and the readability contract (bilingual handler notes, self- explanatory naming, deterministic rendering) - services/{export,model_provider,provider_native}: export bundle, OpenAI-compatible protocol, native async worker reading the gitignored examples/momao/.config.json (StepFun default) - app: TEA shell with five views, generated i18n catalogs, run spotlight, gate cards, language persistence - tools/{sync_kernel,emit_bundle}: kernel drift check and offline bundle CLI; samples with lesson plans; bilingual README, DSL spec, IR schema Repo surgery in the same change: delete examples/moeui_studio and examples/moblocks_studio, archive their plans to docs/plans/done/, drop them from moon.work and examples/catalog.json, re-register checks (momao i18n catalogs, momao export kernel sync), regenerate docs/repository-facts.md, rewrite memories/repo/momao.md. | 1 个月前 | |
perf(runtime): per-message sync throttling and single-pass effect summary sync_commands rebuilt the whole ActionCommandMap with fresh closures after every message, including scroll/pointer storms that derive an unchanged command list. ProgramCommandSync fingerprints only the ActionCommand list and resolves messages through a latest_commands ref refreshed on every sync, so a reused map still dispatches the current model-derived message (a command's message may depend on the model while its ActionCommand fields do not); a changed fingerprint rebuilds. wbtests cover reuse, latest-message dispatch, and enabled-flag rebuild. sync_subscriptions re-keyed with O(n^2) .any scans (seen keys, reuse lookup); both are Map-backed now and reusable_subscription is deleted. The per-message effect_plan_summary walk (full effect-tree traversal for diagnostics only) is folded into the execution traversal via EffectPlanRunSummary — the hot path pays no separate diagnostic walk and diagnostics values are unchanged; effect_plan_summary stays pub for tests. Plan: hot-path-invalidation-boilerplate-convergence D1-D3. | 1 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
perf(runtime): reconcile shortcuts and dispatch outcome extraction runtime_view_node_reconcile_dirty_kind compared the 26-field ViewSemanticsInfo struct and rebuilt semantics_action_kinds arrays on every reconcile even when the semantics declaration channel is Exact and unchanged — the Exact contract already guarantees content stability; the defensive comparisons now run only for Constant/Uncacheable channels. RuntimeViewAdapter snapshots its identity once at construction instead of re-dispatching View::identity per diff, and memoizes its children wrapper array per adapter value. Whole-subtree declaration-equal skipping is intentionally not landed: children are fresh values every rebuild and must be reconciled individually, and cross-rebuild wrapper reuse would serve stale closures (identity-equal views can carry different handler messages). Equivalence wbtests pin the dirty-kind matrix against the reference path, including the Constant-kinds retained path. dispatch_event's seven duplicated dirty/rebuild/activation propagation templates collapse into apply_event_dispatch_outcome (request_activation~ variant for dismissal layers); platform-view and focused-text-command sites keep their distinct shapes. Pure refactor. New damage_region_scenario_wbtest pins per-scenario damage behavior for the perf scenarios; the investigation record in the plan documents why FullSurface remains the correct conservative result for 4 of 5 scenarios (force-full reasons on rebuild classes, sibling resizes outside the dirty set) and the lockstep-tree narrowing lever for a future slice. Plan: hot-path-invalidation-boilerplate-convergence F1, F2, F3-note. | 1 天前 | |
Update API surface budgets and extend functionality in documentation and playground - Increased max_count values for various API surface categories in api_surface_classification.mbt. - Adjusted max_lines and max_pub_lines for multiple packages in backend_common_budgets.mbt and main.mbt to reflect updated code metrics. - Updated line budgets in line_budget_catalog.mbt to accommodate new code additions and changes. - Enhanced docs_model.mbt with additional trait-method promotions for WebsiteDocEntry, WebsiteDocGroup, and WebsiteDocsCatalog. - Removed deprecated extends.mbt files from website/app and website/playground/app. - Added explicit trait-method promotions in pkg.generated.mbti for WebsiteDocEntry, WebsiteDocGroup, and WebsiteDocsCatalog. - Updated playground model and protocol files to include necessary JSON serialization methods and equality checks for various structs and enums. | 1 个月前 | |
feat(perf): enforce application performance budgets | 2 个月前 | |
feat: add full cycle benchmarks and runtime hot-path micro-benchmarks | 3 个月前 | |
feat: update JSON serialization to use Json() for consistency across multiple files | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
style(moui-studio): resolve moon fmt drift and commit generated core interface - moon fmt --check now passes across the workspace: reflow the drifted studio files (stage_layout, proposal, studio_lang_test, macos_skia main, compile_report(+test), provider_native worker_test) and the pre-existing runtime_pointer_input_test.mbt pointer dispatch. - moui/core/pkg.generated.mbti: commit the missing View::on_tap_with_frame signature (added in 7091d714a but never regenerated) so the generated interface drift gate is clean. Evidence: moon fmt --check clean; check-generated-interfaces.mjs ok (209 tracked packages); sh scripts/check.sh --profile pr passed. | 1 个月前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
perf(runtime): interned environment identity and localized overlay placement Measure/place/semantics/platform caches compared the full Environment — embedding the complete Theme — structurally at every element on every pass (C1). environment_identity interns environments with monotonic, never-reused ids; passes resolve the root id once and thread it through the recursions (new environment_id~ parameters), plain passthrough nodes forward the parent id (classified once per element), and only environment-scoping modifiers resolve through the intern table. Cache checks are integer compares. Style checks stay structural (small bounded Option record). wbtests: intern content-stability/monotonicity and layout-cache hit->miss->re-hit parity across an environment change. apply_overlay_placements cleared the whole tree's place cache whenever any overlay override existed, so overlay-open UIs (dropdowns) paid a full-tree place every frame (C3). Placement now caches per node with a full input key (frame, environment id, style, clip, ADR 0035 refit flag, view-state revision), apply_overlay_placements force-re-places only the root->host spine, collect_overlay_overrides is generation-gated (skipped entirely on idle frames, once per input), and the per-node path.copy() allocations are gone. Deleting the full clear is safe because state flips that place inputs cannot observe are carried by the new state_revision key. wbtests: sibling place caches keep hitting while an open popup follows its anchor; idle frames skip collect; paint-only state flips re-place correctly. Plan: hot-path-invalidation-boilerplate-convergence C1, C3. | 1 天前 | |
perf(runtime): reconcile shortcuts and dispatch outcome extraction runtime_view_node_reconcile_dirty_kind compared the 26-field ViewSemanticsInfo struct and rebuilt semantics_action_kinds arrays on every reconcile even when the semantics declaration channel is Exact and unchanged — the Exact contract already guarantees content stability; the defensive comparisons now run only for Constant/Uncacheable channels. RuntimeViewAdapter snapshots its identity once at construction instead of re-dispatching View::identity per diff, and memoizes its children wrapper array per adapter value. Whole-subtree declaration-equal skipping is intentionally not landed: children are fresh values every rebuild and must be reconciled individually, and cross-rebuild wrapper reuse would serve stale closures (identity-equal views can carry different handler messages). Equivalence wbtests pin the dirty-kind matrix against the reference path, including the Constant-kinds retained path. dispatch_event's seven duplicated dirty/rebuild/activation propagation templates collapse into apply_event_dispatch_outcome (request_activation~ variant for dismissal layers); platform-view and focused-text-command sites keep their distinct shapes. Pure refactor. New damage_region_scenario_wbtest pins per-scenario damage behavior for the perf scenarios; the investigation record in the plan documents why FullSurface remains the correct conservative result for 4 of 5 scenarios (force-full reasons on rebuild classes, sibling resizes outside the dirty set) and the lockstep-tree narrowing lever for a future slice. Plan: hot-path-invalidation-boilerplate-convergence F1, F2, F3-note. | 1 天前 | |
feat(input): carry pointer identity and pressure end to end PointerEvent had no identity, so a second finger could steal capture, hover and focus from the first, and hosts that report a finger id or force had nowhere to put it. PointerEvent.id and pressure now flow from the window decoder through every backend and the Web ABI, capture is keyed per id, and hover, focus and the stale-hover clear stay owned by the primary stream (id 0), which is what single-finger embedded hosts always report. The scaffold template deliberately keeps the published 8-parameter Web ABI: its project resolves moui from the registry, not from this workspace. | 10 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
feat(views): make touch-era text selection reachable The minimum text-editing set a touch surface needs: click count selects word, hard line or all through @core.text_word_range_at (a deliberately bounded subset of UAX#29 word breaking, not a second Unicode table), caret drag extends the selection, a goal column survives vertical moves across shorter lines, and a control can request a reveal that the runtime resolves against the placed tree once the caret event is folded in. Keyboard and IME dispatch now arrive with the placed frame too, so geometry-dependent handling no longer computes against RenderNode::empty(), and the targeted dispatch marks ancestors dirty the way the pointer path already did. Showcase Interaction Lab carries the evidence. | 10 天前 | |
feat(core): grouped ViewSemanticsInfo constructors ViewSemanticsInfo has 26 mostly-Option fields; construction is the daily cost across controls. Clustering all 92 production construction sites yields five shapes, now non-breaking constructor helpers beside the struct (flat construction stays valid): hidden(), transparent(), leaf(role~, label?, value?, selected?, checked?, numeric?), container(composition~, role?, label?, value?), and text_field(label?, value?, multiline~, editable~). The suggested text/interactive split collapsed into leaf — button and text construct identically at HEAD; state fields are the only delta. Helpers spread from the all-default new(), so overlaying semantics compose unchanged (covered by core tests). views production construction sites: 40 -> 1; six-field spreads: 2 -> 0. The runtime root composite migrates to container; backend has no production construction sites. Plan: cohesion-governance-convergence B1. | 1 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
Update API surface budgets and extend functionality in documentation and playground - Increased max_count values for various API surface categories in api_surface_classification.mbt. - Adjusted max_lines and max_pub_lines for multiple packages in backend_common_budgets.mbt and main.mbt to reflect updated code metrics. - Updated line budgets in line_budget_catalog.mbt to accommodate new code additions and changes. - Enhanced docs_model.mbt with additional trait-method promotions for WebsiteDocEntry, WebsiteDocGroup, and WebsiteDocsCatalog. - Removed deprecated extends.mbt files from website/app and website/playground/app. - Added explicit trait-method promotions in pkg.generated.mbti for WebsiteDocEntry, WebsiteDocGroup, and WebsiteDocsCatalog. - Updated playground model and protocol files to include necessary JSON serialization methods and equality checks for various structs and enums. | 1 个月前 | |
chore: clear MoonBit toolchain-upgrade warnings workspace-wide The moonc 0.10.14 upgrade introduced new lint categories that fired ~31k warnings across the workspace. All own-code warnings are now eliminated on native and wasm-gc (moon check --warn-list +73 reports 0): - unnecessary_annotation: drop redundant @pkg.Type:: / Type:: qualifiers on constructor and variant references - test_unqualified_package: qualify cross-package types in black-box tests with the package alias (e.g. @renderer.Renderer) - implicit_impl_as_method: make the deprecated implicit trait-method promotions explicit with #doc(hidden) extend declarations collected in per-package extends_*.mbt files (trait-family split for moui/core). Promotions keep working; the generated .mbti interface is unchanged, so API-surface budgets and public declaration counts stay at baseline. - unused_package: drop unused moon.pkg imports; move test-only imports into for "test" / for "wbtest" blocks (moui/backend/common keeps its architecture-mandated core import with a targeted warnings = "-unused_package" opt-out) - deprecated APIs: Array::new -> Array, sub/view -> exact_view - misc: unused variables (_self), reserved keyword (move -> move_event), unused fields, unused type declarations, dead functions Also updates checks/source-file-policy.json ratchets (shrunk files ratchet down, tests grown by required qualification ratchet up) and the maintenance-baseline line budget for the reformatted tool catalog. examples/momark and examples/deepseek_harness_desktop carry the same cleanup as local submodule commits (not pushed). Known pre-existing issue (not caused by this change): the local .mooncakes cache holds bobzhang/pdflite@0.1.38 (a yanked package superseded by moonbitlang/pdflite), whose rijndael dependency uses toolchain-removed syntax (@strconv.from_str, fnalias). Root-level moon check and check-generated-interfaces.mjs fail on those third-party sources until the dependency is migrated. | 1 个月前 | |
feat(accessibility): Enhance accessibility features and validation scripts - Added semantic IDs to nodes in the web semantics DOM manager for better accessibility tracking. - Introduced a new script validate-accessibility-foundation.mjs for validating accessibility manifests and work packages. - Created web-accessibility-probe.sh to run accessibility probes in a headless Chrome environment. - Updated smoke tests to include new accessibility validation gates for screen-reader evidence and native accessibility client evidence. - Adjusted budgets in various MBT files to accommodate new accessibility features and ensure compliance with updated requirements. - Updated submodule reference for the window project. | 2 个月前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 | |
refactor: migrate view implementations to use ViewNode trait This commit refactors the entire codebase to adopt the new typed ViewNode extension protocol: 1. Replace all usages of @core.View::node with @core.View::from_node using concrete ViewNode implementations 2. Remove deprecated runtime_component_view and replace with new RuntimeComponentViewNode 3. Migrate test fixtures and example views to use the new ViewNode pattern 4. Update all documentation, comments, and invariant checks to reflect the new API 5. Remove erased_view_node legacy type and replace with RuntimeViewNode references 6. Fix import style and formatting across all files 7. Add new AvatarImageViewNode and ComponentHostViewNode as reference implementations | 3 个月前 | |
feat(views): make touch-era text selection reachable The minimum text-editing set a touch surface needs: click count selects word, hard line or all through @core.text_word_range_at (a deliberately bounded subset of UAX#29 word breaking, not a second Unicode table), caret drag extends the selection, a goal column survives vertical moves across shorter lines, and a control can request a reveal that the runtime resolves against the placed tree once the caret event is folded in. Keyboard and IME dispatch now arrive with the placed frame too, so geometry-dependent handling no longer computes against RenderNode::empty(), and the targeted dispatch marks ancestors dirty the way the pointer path already did. Showcase Interaction Lab carries the evidence. | 10 天前 | |
perf(runtime): reconcile shortcuts and dispatch outcome extraction runtime_view_node_reconcile_dirty_kind compared the 26-field ViewSemanticsInfo struct and rebuilt semantics_action_kinds arrays on every reconcile even when the semantics declaration channel is Exact and unchanged — the Exact contract already guarantees content stability; the defensive comparisons now run only for Constant/Uncacheable channels. RuntimeViewAdapter snapshots its identity once at construction instead of re-dispatching View::identity per diff, and memoizes its children wrapper array per adapter value. Whole-subtree declaration-equal skipping is intentionally not landed: children are fresh values every rebuild and must be reconciled individually, and cross-rebuild wrapper reuse would serve stale closures (identity-equal views can carry different handler messages). Equivalence wbtests pin the dirty-kind matrix against the reference path, including the Constant-kinds retained path. dispatch_event's seven duplicated dirty/rebuild/activation propagation templates collapse into apply_event_dispatch_outcome (request_activation~ variant for dismissal layers); platform-view and focused-text-command sites keep their distinct shapes. Pure refactor. New damage_region_scenario_wbtest pins per-scenario damage behavior for the perf scenarios; the investigation record in the plan documents why FullSurface remains the correct conservative result for 4 of 5 scenarios (force-full reasons on rebuild classes, sibling resizes outside the dirty set) and the lockstep-tree narrowing lever for a future slice. Plan: hot-path-invalidation-boilerplate-convergence F1, F2, F3-note. | 1 天前 | |
chore(release): moonc 0.10.16 refresh, module version bumps, drop browser example Toolchain and dependencies: - .moonbit-toolchain pins moonc 0.10.16+b1a0e846e (worker 0.1.202610191); the whole workspace is reformatted with the new canonical moon fmt and the pr profile's fmt --check gate enforces it from here on - third-party dependencies move to their manifest-migrated releases (async 0.22.5, x 0.5.6, svg 0.6.0, accesskit 0.4.2, zeno 0.1.5, quickcheck 0.15.0, pdflite 0.4.0, mbtexcel 0.3.0, crater/css/pixelmatch) - wzzc-dev module family bumps one patch across the board (moui 0.2.4, richtext/markdown/webview/i18n/devtools/agent/agent_mcp 0.2.2, web/sun/tui renderer 0.2.2-0.2.3, skia/sun/tui/theme/webview 0.2.2, 3d family 0.2.2, terminal_host 0.2.1, cli 0.2.5, moui_studio 0.1.2 in its submodule) with every internal pin and generated interface refreshed; the 23 public modules are published in release-stage order Adaptations the new toolchain requires: - accesskit 0.4.2: TreeUpdate::set_tree now takes the TreeInfo record - quickcheck 0.15: quick_check_silence raises; the tooling probe handles it - the views-facade and source-file ratchets move to the post-upgrade counts Product surface: - examples/browser is removed: its crater/js_engine stack depends on registry tarballs that still ship the legacy moon.mod.json manifest, which the new toolchain cannot install - checks/profiles.json and the dead-message catalog follow the ai_world -> new_world rename that the rename commit missed | 12 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 17 天前 | ||
| 12 天前 | ||
| 1 天前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 10 天前 | ||
| 12 天前 | ||
| 17 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 2 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 10 天前 | ||
| 7 天前 | ||
| 10 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 10 天前 | ||
| 1 天前 | ||
| 10 天前 | ||
| 7 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 2 天前 | ||
| 1 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 12 天前 | ||
| 1 天前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 10 天前 | ||
| 1 个月前 | ||
| 10 天前 | ||
| 1 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 12 天前 | ||
| 3 个月前 | ||
| 10 天前 | ||
| 1 天前 | ||
| 12 天前 |