The world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.
This report presents the forensic synthetic code analysis of ZSeven-W/openpencil, a Rust project with 5,709 GitHub stars. SynthScan v2.0 examined 920,488 lines of code across 3265 source files, recording 3015 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 5.3 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 3015 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Cargo.toml | 41 | thiserror = "1" | COMMENT |
| LOW | Cargo.toml | 61 | # release build in the graph, including the excluded vendor/* path deps (their | COMMENT |
| LOW | deny.toml | 41 | # async-openai 0.36.x still depends on backoff 0.4.x, and RustSec | COMMENT |
| LOW | tools/check-widget-boundary.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/check-widget-boundary.sh | 21 | # carry a real `impl Widget for X` — a stale file with the impl | COMMENT |
| LOW | tools/check-widget-boundary.sh | 41 | # arbitrary namespace segments) anywhere under op-host-web/src/. | COMMENT |
| LOW | tools/check-widget-boundary.sh | 61 | # Forward F2: no `fn layout(` / `fn access_node(` anywhere under | COMMENT |
| LOW | tools/check-widget-boundary.sh | 81 | # line ALSO carries the `// glue:` marker AND the file is | COMMENT |
| LOW | tools/check-widget-boundary.sh | 141 | combined_paint="${outside_module_hits}" | COMMENT |
| LOW | tools/check-jian-boundaries.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/check-jian-boundaries.sh | 21 | # widget render stack (skia-safe + jian-skia + NativeBackend + | COMMENT |
| LOW | tools/fetch-skia-artifact.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/check-wasm-bundle.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/check-wasm-bundle.sh | 21 | # Exit semantics: | COMMENT |
| LOW | tools/check-wasm-bundle.sh | 41 | WASM_OPT_CANDIDATE_FEATURES=( | COMMENT |
| LOW | tools/bundle-macos.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tools/check-web-server-headless.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/check-text-measure.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/check-text-measure.sh | 21 | # `fit_chrome` / `centered_text_x` / `measure_in_family`), which routes to | COMMENT |
| LOW | tools/check-collab-deployment-boundaries.sh | 1 | # Deployment-specific collaboration security boundaries. | COMMENT |
| LOW | tools/stage-web-assets.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | crates/op-editor-core/assets/scene_templates.toml | 1 | # Scene Template Center catalogue. | COMMENT |
| LOW | crates/op-editor-core/src/history_bench_tests.rs | 1 | //! Pathological benchmarks for the structurally-shared undo history. | COMMENT |
| LOW | crates/op-editor-core/src/variables_panel_state.rs | 1 | //! State-layer mirror of the variables panel's buttons. | COMMENT |
| LOW | crates/op-editor-core/src/hoist_app_state.rs | 1 | //! Hoist node-level `state` to one document-root `MergeAppState`. | COMMENT |
| LOW | crates/op-editor-core/src/share_routes.rs | 1 | //! Tenant-sharing HTTP route paths, shared by the web shell (client) and the | COMMENT |
| LOW | crates/op-editor-core/src/share_routes.rs | 21 | COMMENT | |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 1 | //! Editor-UI overlay + panel state for `EditorState`. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 21 | //! definitions belong in the state layer. The widget *painting / | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 81 | // `Locale` is the i18n locale enum — dependency-free + wasm-clean, so | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 101 | /// The *editor-state* subset of `UiState` (focused property field + | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 121 | /// `ChatState::agent_team_size` it seeds. `ChatSessions::new_tab` | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 141 | pub file_menu: jian_widgets::components::menu::MenuState, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 161 | pub export_dialog_open: bool, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 181 | /// + fill-picker state feed paint + the host hover update). | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 201 | /// Horizontal scroll offset (px, ≥ 0) of the LayerPanel's 图层 | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 221 | /// uses this to show a "正在解析 Figma 文件…" overlay so the user | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 241 | /// What this document IS — a deck, a carousel, a tutorial card set — | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 261 | /// documents that have a page navigator to offer. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 281 | pub account: crate::account_state::AccountState, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 301 | /// the sign-in modal. `None` when no flow is running. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 321 | /// Live text filter for the native Lucide icon picker. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 341 | /// (`drain_model_catalog_refresh`), which applies its own TTL | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 361 | /// the hover flag: the card is a read-out of a hover, so "not hovering" and | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 381 | pub component_browser_select_all: bool, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 401 | /// controls. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 421 | /// Align-toolbar button currently hovered. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 441 | pub padding_mode_popover_open: bool, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 461 | /// dropdown, so `fill_type_picker.open` plus this index identify | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 481 | /// property-panel dropdowns. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 501 | pub image_fill_popover_open: bool, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 521 | /// registered. Hosts without bundled font blobs leave this empty. | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 541 | /// raster exporter. Desktop sets it; hosts that leave it `false` | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 561 | pub html_import_diagnostics_hover: | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 581 | pub scene_template_generate_supported: bool, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 601 | pub missing_fonts_pending_detect: bool, | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 621 | /// Index (into `FontWeightChoice::ALL`) of the weight-dropdown row | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 641 | /// Separate from `ui.variables.active_theme`, which stores the | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 661 | /// Live search filter for the variables panel rows (TS | COMMENT |
| LOW | crates/op-editor-core/src/editor_ui_state.rs | 681 | pub ime_preedit: Option<crate::ime_state::ImePreedit>, | COMMENT |
| 2145 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/check-widget-boundary.sh | 39 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 45 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 60 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tools/check-widget-boundary.sh | 71 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tools/check-widget-boundary.sh | 79 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tools/check-widget-boundary.sh | 86 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 149 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 166 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 182 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 186 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 199 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 210 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 225 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-widget-boundary.sh | 227 | # --------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/check-jian-boundaries.sh | 78 | # ── Invariant 3: wasm32 has no jian-host-desktop / jian-skia. ────────── | COMMENT |
| MEDIUM | crates/op-editor-core/assets/scene_templates.toml | 247 | # ── 卡片档 · card-system spec 的活样张 ───────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/assets/scene_templates.toml | 324 | # ── 信息图档 · 第二批(+7)──────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/assets/scene_templates.toml | 412 | # ── 第三批(+27):对比 9 / 教程 9 / 轮播 9 ──────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/agent_indicators.rs | 610 | // ── Relay (daemon → browser) ──────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/property_edit_mutators.rs | 610 | // ── Multi-fill (indexed) selected-node mutators ──────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_variables_transitions.rs | 33 | // ─── Menus ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_variables_transitions.rs | 119 | // ─── Header renames ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_variables_transitions.rs | 149 | // ─── Theme / variant CRUD ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_variables_transitions.rs | 278 | // ─── Add variable ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_variables_transitions.rs | 343 | // ─── Axis resolution ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_press_transitions.rs | 10 | // ─── Toolbar shape-slot dropdown ─────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_press_transitions.rs | 31 | // ─── TopBar dropdowns ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_press_transitions.rs | 103 | // ─── Canvas ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_press_transitions.rs | 127 | // ─── History guard ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/agent_indicators_tests.rs | 563 | // ── Relay (daemon → browser) ──────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_ui_transitions.rs | 108 | // ─── Chat model-picker filter input ──────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_ui_transitions.rs | 151 | // ─── Settings-modal focused input ────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_ui_transitions.rs | 216 | // ─── Chat design-block apply ─────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 40 | // ─── Legacy draft mirrors ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 81 | // ─── Focus predicates ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 135 | // ─── Inline layer rename ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 167 | // ─── Canvas text editing ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 191 | // ─── Variables-panel search filter ───────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 225 | // ─── Chat composer ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 248 | // ─── Per-focus character gates ───────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 331 | // ─── Typed-character routing ─────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 395 | // ─── Backspace / forward-delete ──────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 483 | // ─── Caret movement ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 567 | // ─── Select-all across focused inputs ────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 623 | // ─── Selection edit ops ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/host_keyboard_transitions.rs | 739 | // ─── Import-modal chord (Cmd+Shift+F / Cmd+Shift+H) ──────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 24 | // ── helper: parse justify_content keyword ──────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 37 | // ── helper: parse align_items keyword ──────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 47 | // ── helper: parse layout keyword ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 58 | // ── helper: parse text_align keyword ───────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 70 | // ── helper: parse text_align_vertical keyword ──────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 81 | // ── helper: parse text_growth keyword ──────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 92 | // ── helper: parse sizing keyword ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 102 | // ── helper: build Padding from LayoutPropValue ──────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 123 | // ── impl EditorState ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/command_layout_prop.rs | 341 | // ── field writers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/op-editor-core/src/fills/edits.rs | 34 | // ── Multi-fill (indexed) ops ─────────────────────────────────────── | COMMENT |
| MEDIUM | …es/op-orchestrator/src/wire_screen_navigation_tests.rs | 53 | // ── Pure-helper unit tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/op-orchestrator/src/wire_screen_navigation_tests.rs | 140 | // ── Gate ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/op-orchestrator/src/wire_screen_navigation_tests.rs | 159 | // ── Screen marking ────────────────────────────────────────────────────── | COMMENT |
| 382 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/op-editor-core/src/hoist_app_state.rs | 15 | /// (agentic-loop finalize, MCP inserts). `usize::MAX` is the weakest | COMMENT |
| MEDIUM | crates/op-editor-core/src/agent_indicators.rs | 404 | /// alone would clear, but a worker mid `add_frame` loop (scaffold just | COMMENT |
| MEDIUM | crates/op-editor-core/src/page_mutators.rs | 220 | /// design) so the orchestrator's scaffold + role/cleanup passes are | COMMENT |
| MEDIUM | crates/op-editor-core/src/preview_slideshow.rs | 137 | /// That order IS the authored order — the scaffold inserts boards in order | COMMENT |
| MEDIUM | crates/op-orchestrator/src/prompt_subagent.rs | 166 | // Mobile UI guardrails live in the flag-gated `mobile-ui` skill rather than | COMMENT |
| MEDIUM | crates/op-orchestrator/src/prompt_subagent.rs | 416 | // (Mobile UI guardrails now load from the `mobile-ui` skill — see the | COMMENT |
| MEDIUM | crates/op-orchestrator/src/app_shell_evict.rs | 99 | /// placing them side by side. Measured on the agentic loop: MiniMax-M3 emits | COMMENT |
| MEDIUM | crates/op-orchestrator/src/screen_groups.rs | 16 | //! SEQUENTIALLY, one screen after another, through N scaffold roots instead | COMMENT |
| MEDIUM | crates/op-orchestrator/src/app_shell.rs | 8 | //! plan-level "dashboard bespoke scaffold" (that pre-built the two-column root) | COMMENT |
| MEDIUM | crates/op-orchestrator/src/app_shell.rs | 14 | //! passes already ran) and the agentic loop (`apply_loop_finalize` ran the | COMMENT |
| MEDIUM | crates/op-orchestrator/src/app_shell.rs | 45 | /// `dashboard_columns.rs` for parity with the removed scaffold. | COMMENT |
| MEDIUM⚡ | crates/op-orchestrator/src/cleanup.rs | 65 | /// Exposed `pub(crate)` so scaffold builders can pre-compute the same | COMMENT |
| MEDIUM⚡ | crates/op-orchestrator/src/cleanup.rs | 66 | /// baseline that [`descendant_count`] returns after applying the scaffold | COMMENT |
| MEDIUM⚡ | crates/op-orchestrator/src/cleanup.rs | 67 | /// commands — needed by the dashboard scaffold (Task C2) whose row/slot | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup.rs | 7 | //! scaffold 之后数一次,subtask 全跑完再数一次,没涨即零内容。 | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup.rs | 109 | /// Pass ①:移动端重复状态栏去重。scaffold 注入了一个固定状态栏, | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup.rs | 301 | /// orchestrator (and, in a later step, the agentic design loop) calls to run | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup.rs | 307 | /// orchestrator's cleanup stage now routes through here so a future agentic | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup.rs | 427 | // deleted sparse scaffold id can be replaced by the kept rich root id. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup.rs | 452 | // orchestrator (per-subtask role passes already ran) and the agentic | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup.rs | 463 | // horizontal layout (MiniMax-M3 in the agentic loop) — flip it to a row | COMMENT |
| MEDIUM | crates/op-orchestrator/src/types.rs | 20 | /// 只读访问当前文档 —— cleanup 判定空 scaffold、未来 S3c | COMMENT |
| MEDIUM | crates/op-orchestrator/src/ring_repair.rs | 293 | /// agentic loop's geometry echo shows the same fact the repair pass acts on. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run_tests_core.rs | 1 | //! Core `run` happy-path / scaffold / append / fallback tests. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run_tests_core.rs | 35 | // 至少有 scaffold + 两个 subtask 的 InsertSubtree。 | COMMENT |
| MEDIUM | crates/op-orchestrator/src/spacing_repair.rs | 69 | // The artboard is the only design-type signal a pass gets on the agentic | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup_desktop_dashboard.rs | 5 | //! scaffold, but weaker models can still emit a 1200px root whose main | COMMENT |
| MEDIUM | crates/op-orchestrator/src/unfilled_screens.rs | 2 | //! top-level screen the model (or a scaffold/seed pass) promised but | COMMENT |
| MEDIUM | crates/op-orchestrator/src/unfilled_screens.rs | 10 | //! detector both the agentic loop (`op-host-services::chat_agent_loop`, | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup_root_patches.rs | 19 | /// deck", which is prompt keywords and therefore blind three ways: the agentic | COMMENT |
| MEDIUM | crates/op-orchestrator/src/loop_finalize_tier_tests.rs | 1 | //! The repair-tier gate on the agentic-loop finalize path. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/cleanup_root_and_nav.rs | 160 | // agentic loop produces (measured: GLM-5.2 root 390×fit_content kept a | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run_tests_dashboard.rs | 17 | /// GOLDEN end-to-end (no LLM): dashboard plan → two-column scaffold → | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run_tests_dashboard.rs | 18 | /// scripted subtasks → finalize. The scaffold's Sidebar shell is authored | COMMENT |
| MEDIUM | crates/op-orchestrator/src/subagent.rs | 222 | // sink's state so this path and the agentic loop reach the same answer. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/app_shell_sidebar_tests.rs | 335 | // MiniMax-M3 in the agentic loop: the root already carries [Sidebar, Main] | COMMENT |
| MEDIUM | crates/op-orchestrator/src/dashboard_columns_tests.rs | 2 | //! plus section sizing. The tests for the removed bespoke-scaffold helpers | COMMENT |
| MEDIUM | crates/op-orchestrator/src/template_provenance.rs | 27 | //! (`DocSink::state()` on the orchestrator path, the live state on the agentic | COMMENT |
| MEDIUM | crates/op-orchestrator/src/template_provenance.rs | 31 | //! the plan: the agentic loop has no plan to read. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/screen_route_inventory.rs | 29 | /// after per-screen scaffold roots exist and before their workers run. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/loop_finalize_tests.rs | 1 | //! Tests for the Track-1 Step-4 agentic-loop finalize backstop. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/loop_finalize_tests.rs | 8 | /// children — the shape the agentic loop assembles by loop end (sections | COMMENT |
| MEDIUM | crates/op-orchestrator/src/loop_finalize_tests.rs | 232 | /// the realistic agentic-loop structure), the Class-A section passes run on the | COMMENT |
| MEDIUM | crates/op-orchestrator/src/concurrent.rs | 7 | //! N-root scaffold + semaphore/`join_all` worker fan-in) was collapsed into | COMMENT |
| MEDIUM | crates/op-orchestrator/src/concurrent.rs | 13 | //! (`screen_groups::group_subtasks_by_screen` + N-root scaffold, | COMMENT |
| MEDIUM | crates/op-orchestrator/src/concurrent.rs | 535 | /// each group's scaffold root via `agent_indicators::add_frame` before this | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run.rs | 7 | //! dashboard(原 sidebar+main 专用 scaffold)收敛进单根路径:它的 per-subtask | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run.rs | 8 | //! 产出与确定性后处理跟通用路径完全一致,只差 scaffold 形状(基准路径没用 | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run.rs | 97 | /// Used to re-resolve the pre-built two-column scaffold's column ids after the | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run.rs | 275 | // multiscreen-fanout-break fix (item A) — screen-group scaffold tests. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/wire_screen_navigation.rs | 36 | //! caller (orchestrator per-subtask cleanup + the agentic loop's whole-doc | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run_tests_screen_groups.rs | 2 | //! the per-screen-group N-root scaffold (item A) and the inter-group | COMMENT |
| MEDIUM | crates/op-orchestrator/src/dashboard_columns.rs | 6 | //! bespoke sidebar+main *scaffold* strategy (and the detection / surface-color / | COMMENT |
| MEDIUM | crates/op-orchestrator/src/dashboard_columns.rs | 41 | /// app-shell scaffold without requiring a dashboard-content gate. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/dashboard_columns.rs | 102 | /// structural gate for pre-building the two-column scaffold, so a landing page | COMMENT |
| MEDIUM | …s/op-orchestrator/src/prompt_subagent_content_tests.rs | 203 | // Mobile UI guardrails now load via the `mobile-ui` skill (system prompt), | COMMENT |
| MEDIUM | crates/op-orchestrator/src/run_tests_b4.rs | 7 | //! - Append mode: no scaffold `InsertSubtree` for the root, every subtask's | COMMENT |
| MEDIUM⚡ | crates/op-orchestrator/src/run_tests_b4.rs | 114 | /// (a) Append mode: run does NOT emit a scaffold-root InsertSubtree. | COMMENT |
| MEDIUM⚡ | crates/op-orchestrator/src/run_tests_b4.rs | 118 | /// (one per subtask), NOT a scaffold-root InsertSubtree. | COMMENT |
| MEDIUM⚡ | crates/op-orchestrator/src/run_tests_b4.rs | 122 | // replaces it with ctx.target_parent_id (the live id) before any scaffold call. | COMMENT |
| 145 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …-host-web/src/widget_host/image_panel_overlay_tests.rs | 44 | host.editor_state.editor_ui.image_panel.search_query.text(), | CODE |
| CRITICAL | …-host-web/src/widget_host/image_panel_overlay_tests.rs | 92 | host.editor_state.editor_ui.image_panel.search_query.text(), | CODE |
| CRITICAL | …-host-web/src/widget_host/image_panel_overlay_tests.rs | 107 | host.editor_state.editor_ui.image_panel.search_query.caret(), | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/slides_panel.rs | 181 | || self.editor_state.editor_ui.slides_panel.drag.is_some(); | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/slides_panel.rs | 232 | if self.editor_state.editor_ui.slides_panel.pressed.is_none() { | CODE |
| CRITICAL⚡ | …ates/op-host-web/src/widget_host/collab_input_tests.rs | 54 | host.editor_state.editor_ui.collab.panel.join_input.text(), | CODE |
| CRITICAL⚡ | …ates/op-host-web/src/widget_host/collab_input_tests.rs | 59 | host.editor_state.editor_ui.collab.panel.join_input.text(), | CODE |
| CRITICAL⚡ | …ates/op-host-web/src/widget_host/collab_input_tests.rs | 64 | host.editor_state.editor_ui.collab.panel.join_input.text(), | CODE |
| CRITICAL | …ates/op-host-web/src/widget_host/collab_input_tests.rs | 261 | host.editor_state.editor_ui.collab.panel.join_input.text(), | CODE |
| CRITICAL | …ates/op-host-web/src/widget_host/collab_input_tests.rs | 270 | host.editor_state.editor_ui.collab.panel.join_input.text(), | CODE |
| CRITICAL | …es/op-host-web/src/widget_host/keyboard_text_inputs.rs | 36 | && self.editor_state.editor_ui.agent_settings.focus.is_some()) | CODE |
| CRITICAL | …ost-web/src/widget_host/image_panel_selection_tests.rs | 65 | host.editor_state.editor_ui.image_panel.search_query.text(), | CODE |
| CRITICAL | …ost-web/src/widget_host/image_panel_selection_tests.rs | 169 | host.editor_state.editor_ui.image_panel.search_query.caret(), | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/keyboard_git.rs | 12 | if let Some(form) = self.editor_state.editor_ui.git_panel.clone_form.as_mut() { | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/keyboard_git.rs | 102 | if let Some(form) = self.editor_state.editor_ui.git_panel.clone_form.as_mut() { | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/keyboard_git.rs | 240 | if let Some(form) = self.editor_state.editor_ui.git_panel.clone_form.as_mut() { | CODE |
| CRITICAL | …/src/widget_host/agent_settings_compact_press_tests.rs | 126 | host.editor_state.editor_ui.agent_settings.acp_agents.len(), | CODE |
| CRITICAL | …/src/widget_host/agent_settings_compact_press_tests.rs | 147 | host.editor_state.editor_ui.agent_settings.acp_agents.len(), | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/keyboard.rs | 64 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/keyboard.rs | 169 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/keyboard.rs | 278 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/io_tests.rs | 223 | assert!(borrowed.host.editor_state.editor_ui.recent_files.is_empty()); | CODE |
| CRITICAL | …p-host-web/src/widget_host/prompt_center_host_tests.rs | 260 | host.editor_state.editor_ui.prompt_center.search.text(), | CODE |
| CRITICAL | crates/op-host-web/src/widget_host/keyboard_edit_ops.rs | 225 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | …host-web/src/widget_host/property_panel_press_tests.rs | 653 | host.editor_state.editor_ui.image_panel.search_query.text(), | CODE |
| CRITICAL | …host-web/src/widget_host/property_panel_press_tests.rs | 710 | host.editor_state.editor_ui.image_panel.search_query.text(), | CODE |
| CRITICAL | …tes/op-host-web/src/widget_host/overlay_press_tests.rs | 326 | host.editor_state.editor_ui.file_menu.hover.is_some(), | CODE |
| CRITICAL | …host-web/src/widget_host/agent_settings_press_tests.rs | 156 | assert!(host.editor_state.editor_ui.agent_settings.focus.is_none()); | CODE |
| CRITICAL | …es/op-host-web/src/widget_host/property_hover_tests.rs | 105 | host.editor_state.editor_ui.locale_picker.hover.is_some(), | CODE |
| CRITICAL | …ates/op-host-native/src/widget_host/keyboard_delete.rs | 63 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | …ates/op-host-native/src/widget_host/keyboard_delete.rs | 70 | if let Some(form) = self.editor_state.editor_ui.git_panel.clone_form.as_mut() { | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/preview_frame.rs | 628 | let pressed = self.editor_state.editor_ui.preview.switcher_pressed.take(); | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/slides_panel.rs | 282 | || self.editor_state.editor_ui.slides_panel.drag.is_some(); | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/slides_panel.rs | 306 | if self.editor_state.editor_ui.slides_panel.pressed.is_none() { | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/scroll.rs | 531 | && self.editor_state.editor_ui.git_panel.diff.is_some() | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/scroll.rs | 724 | && self.editor_state.editor_ui.git_panel.diff.is_some() | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/shortcuts.rs | 196 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/shortcuts.rs | 204 | if let Some(form) = self.editor_state.editor_ui.git_panel.clone_form.as_mut() { | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/keyboard.rs | 80 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/keyboard.rs | 92 | if let Some(form) = self.editor_state.editor_ui.git_panel.clone_form.as_mut() { | CODE |
| CRITICAL | …es/op-host-native/src/widget_host/preview_slideshow.rs | 251 | let Some(pressed) = self.editor_state.editor_ui.preview.toolbar_pressed.take() else { | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/input.rs | 55 | && self.editor_state.editor_ui.agent_settings.focus.is_some()) | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/input.rs | 79 | self.editor_state.editor_ui.agent_settings.focus.is_some() | CODE |
| CRITICAL | crates/op-host-native/src/widget_host/keyboard_send.rs | 63 | if self.editor_state.editor_ui.agent_settings.focus.is_some() { | CODE |
| CRITICAL | crates/op-editor-ui/src/widgets/scene_template_panel.rs | 303 | filtered_style_guide_cards(self.state.editor_ui.scene_template_center.search.text()) | CODE |
| CRITICAL | …/op-editor-ui/src/widgets/agent_settings_press_flow.rs | 249 | let text = state.editor_ui.agent_settings.mcp_server.port.to_string(); | CODE |
| CRITICAL | …s/op-editor-ui/src/widgets/collab_panel_interaction.rs | 327 | if self.ui.collab.panel.join_input.text().is_empty() { | CODE |
| CRITICAL | …p-host-services/src/web_canvas_server/collab_driver.rs | 245 | guard.editor.editor_ui.collab.pending_action.is_none(), | CODE |
| CRITICAL | …p-host-services/src/web_canvas_server/collab_routes.rs | 106 | if state.editor.editor_ui.collab.pending_action.is_some() { | CODE |
| CRITICAL | …-services/src/web_canvas_server/collab_routes_tests.rs | 118 | assert!(state.editor.editor_ui.collab.pending_action.is_none()); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/op-editor-core/assets/shadcn-kit.json | 2096 | "content": "John Doe", | CODE |
| LOW | crates/op-editor-core/assets/shadcn-kit.json | 2322 | "tags": ["skeleton", "loading", "placeholder", "shimmer"] | CODE |
| LOW | crates/op-html/src/special.rs | 285 | placeholder: element.attr("placeholder").map(str::to_string), | CODE |
| LOW | crates/op-html/src/special.rs | 346 | placeholder: element.attr("placeholder").map(str::to_string), | CODE |
| LOW | crates/op-html/src/special.rs | 366 | placeholder: element.attr("placeholder").map(str::to_string), | CODE |
| LOW | crates/op-html/src/special.rs | 411 | placeholder: element.attr("placeholder").map(str::to_string), | CODE |
| LOW | crates/op-html/src/special_tests.rs | 169 | vec![("type", "text"), ("placeholder", "Name")] | CODE |
| LOW | crates/op-html/src/css/selectors.rs | 552 | && element.attr("placeholder").is_some() | CODE |
| LOW | crates/op-orchestrator/src/tree_heuristics_tests.rs | 402 | {"type":"text","content":"Jane Doe"} | CODE |
| LOW | crates/op-orchestrator/src/cleanup_typography.rs | 209 | "placeholder", | CODE |
| LOW | crates/op-orchestrator/src/cleanup_typography.rs | 266 | "id": "placeholder", | CODE |
| LOW | crates/op-orchestrator/src/cleanup_typography.rs | 312 | assert!(pairs.contains(&("placeholder", 400))); | CODE |
| LOW | crates/op-orchestrator/src/orchestration_self_check.rs | 468 | "placeholder", | CODE |
| LOW | crates/op-orchestrator/src/role_infer_tests.rs | 194 | {"type":"text_input","id":"si","placeholder":"Search for food"} | CODE |
| LOW | crates/op-orchestrator/src/role_infer_tests.rs | 262 | {"type":"text_input","id":"input","placeholder":"Search"} | CODE |
| LOW | crates/op-orchestrator/src/role_infer_tests.rs | 344 | {"type":"text_input","id":"si","placeholder":"Search"} | CODE |
| LOW | crates/op-orchestrator/src/cleanup_nav_surface_tests.rs | 501 | "id": "placeholder", | CODE |
| LOW | crates/op-orchestrator/src/parse_tests.rs | 101 | {"type":"text_input","id":"input","value":"","placeholder":"Search","_parent":"root"} | CODE |
| LOW | crates/op-orchestrator/src/parse_tests.rs | 102 | {"type":"text_area","id":"area","value":"","placeholder":"Notes","_parent":"root"} | CODE |
| LOW | …es/op-orchestrator/src/cleanup_repair_summary_tests.rs | 116 | { "type": "text", "id": "placeholder", "name": "Placeholder", | CODE |
| LOW | …es/op-orchestrator/src/cleanup_repair_summary_tests.rs | 277 | { "type": "text", "id": "placeholder", "name": "Placeholder", | CODE |
| LOW | …es/op-orchestrator/src/cleanup_repair_summary_tests.rs | 329 | { "type": "text", "id": "placeholder", "name": "Placeholder", | CODE |
| LOW | crates/op-orchestrator/src/subagent_coalesce_tests.rs | 244 | {"type":"frame","id":"sb","name":"Search Bar","children":[{"type":"text_input","id":"si","placeholder":"Sear | CODE |
| LOW | …ates/op-orchestrator/src/role_post_pass/color_utils.rs | 173 | .get("placeholder") | CODE |
| LOW⚡ | crates/op-cli/assets/skill-bundle.json | 4 | "skills/openpencil-design/SKILL.md": "---\nname: openpencil-design\ndescription: Use when designing UI with OpenPenc | CODE |
| LOW | crates/op-design-lint/src/detectors/widget_a11y.rs | 87 | "type": "text_input", "id": "i1", "placeholder": "Search…" | CODE |
| LOW | crates/op-design-lint/src/detectors/widget_a11y.rs | 112 | let empty = node(json!({"type": "text_input", "id": "i1", "placeholder": ""})); | CODE |
| LOW | crates/op-design-lint/src/detectors/widget_a11y.rs | 115 | let blank = node(json!({"type": "text_input", "id": "i2", "placeholder": " "})); | CODE |
| LOW | …t-native/src/widget_host/input_tests/property_input.rs | 184 | "x":24,"y":32,"width":220,"height":40,"placeholder":"Email"} | CODE |
| LOW | …t-native/src/widget_host/input_tests/property_input.rs | 212 | "x":24,"y":32,"width":220,"height":40,"placeholder":"Email"} | CODE |
| LOW | crates/op-pen-loader/src/adapter_text_widget_tests.rs | 411 | {"type":"text_input","id":"ti","value":"hi","placeholder":"Type"}, | CODE |
| LOW | crates/op-pen-loader/src/widget_payload_tests.rs | 21 | "placeholder":"Search","cornerRadius":8, | CODE |
| LOW | crates/op-pen-loader/src/widget_payload_tests.rs | 39 | "placeholder":"0","cornerRadius":6, | CODE |
| LOW | …es/op-pen-loader/src/layout_scene_tests/tokens_refs.rs | 171 | "leadingIcon":"mail","trailingIcon":"eye","placeholder":"you@example.com"}]}]}"##, | CODE |
| LOW | …/op-pen-loader/src/layout_scene_tests/widget_stroke.rs | 45 | "placeholder":"Pick one", | CODE |
| LOW | …p-editor-ui/src/widgets/property_panel_widget_tests.rs | 28 | "x":24,"y":32,"width":220,"height":40,"placeholder":"Email"} | CODE |
| LOW | …p-editor-ui/src/widgets/property_panel_widget_tests.rs | 56 | "placeholder":"Email address","value":"kai@example.com"} | CODE |
| LOW | …p-editor-ui/src/widgets/property_panel_widget_tests.rs | 89 | "placeholder":"Email address", | CODE |
| LOW | …p-editor-ui/src/widgets/property_panel_widget_tests.rs | 240 | "x":0,"y":0,"width":220,"height":40,"placeholder":"Email"} | CODE |
| LOW | crates/op-codegen/src/codegen_targets.rs | 78 | opt_attr("placeholder", n.placeholder.as_deref()), | CODE |
| LOW | crates/op-codegen/src/codegen_targets.rs | 83 | opt_attr("placeholder", n.placeholder.as_deref()), | CODE |
| LOW | crates/op-host-services/src/design_agent_diagnostics.rs | 517 | "frame" | "rectangle" | "box" | "slot" | "shape" | "placeholder" | CODE |
| LOW | crates/op-host-services/src/design_agent_diagnostics.rs | 558 | | "placeholder" | CODE |
| LOW | …tes/op-host-services/src/chat_subprocess_exit_tests.rs | 41 | upstream=https://agent.example.test/v1/plan?api_key=fake-key-000111222&trace=abc | CODE |
| LOW | …tes/op-host-services/src/chat_subprocess_exit_tests.rs | 161 | "fake-key-000111222", | CODE |
| LOW | crates/op-acp/src/client.rs | 649 | echo 'see https://agent.example.test/setup?token=fake-token-999' >&2\n\ | CODE |
| LOW | crates/op-acp/src/client.rs | 663 | for secret in ["sk-fake-000111222333", "token=fake-token-999"] { | CODE |
| LOW | …es/op-host-desktop/src/image_search_session/targets.rs | 208 | // The generic name-derived fallback ("placeholder") loses to the | COMMENT |
| LOW | …es/op-host-desktop/src/image_search_session/targets.rs | 596 | | "placeholder" | CODE |
| LOW | …es/op-host-desktop/src/image_search_session/targets.rs | 652 | .unwrap_or("placeholder") | CODE |
| LOW | …es/op-host-desktop/src/image_search_session/targets.rs | 708 | | "placeholder" | CODE |
| LOW | …ates/op-host-desktop/src/image_search_session/fetch.rs | 109 | "placeholder", | CODE |
| LOW | crates/op-ai-skills/skills/knowledge/code-to-design.md | 229 | { "type": "text_input", "id": "email", "placeholder": "Email" } | CODE |
| LOW | …s/op-ai-skills/skills/phases/generation/design-code.md | 51 | - Never use lorem ipsum or generic "Your text here" placeholders. | CODE |
| LOW | crates/op-ai-skills/src/lib.rs | 596 | prompt.contains("placeholder"), | CODE |
| LOW | crates/op-ai-skills/src/style_guide/token_table.rs | 355 | || d.contains("placeholder") | CODE |
| LOW | packages/op-vscode/src/daemon/daemon-client.test.ts | 37 | opts(["--fake-port", "45001", "--fake-token", "abc123", "--fake-version", "1.2.3"]), | CODE |
| LOW | packages/op-vscode/src/daemon/daemon-client.test.ts | 110 | opts(["--fake-token", "SECRETTOKEN", "--echo-log"], { logger }), | CODE |
| LOW | packages/op-vscode/src/daemon/daemon-client.test.ts | 123 | opts(["--fake-token", "PLAINTEXTLEAK", "--echo-log"], { logger }), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/check-web-browser-smoke.sh | 5 | # 1. `/smoke/step-1b.html` — pure CanvasKit mount harness. | COMMENT |
| MEDIUM | tools/check-collab-security-boundaries.sh | 722 | # comprehensive secret scanning remains a repository-host responsibility. | COMMENT |
| MEDIUM | crates/op-editor-core/src/history_snapshot.rs | 59 | /// and, being a real `PenDocument`, robust against schema growth. | COMMENT |
| MEDIUM | crates/op-editor-core/src/fills/tests.rs | 9 | /// stays robust to schema growth. | COMMENT |
| MEDIUM | crates/op-orchestrator/src/app_shell_detect.rs | 54 | /// more robust than a root-name keyword (the bug root "Barbershop Client | COMMENT |
| LOW⚡ | crates/op-cli/assets/skill-bundle.json | 4 | "skills/openpencil-design/SKILL.md": "---\nname: openpencil-design\ndescription: Use when designing UI with OpenPenc | CODE |
| MEDIUM | …s/op-host-native/src/backend/skia/font_import_tests.rs | 14 | //! generation counter use strict `>` (robust to concurrent bumps from other | COMMENT |
| MEDIUM | …ost-native/src/widget_host/variables_panel_ux_tests.rs | 42 | /// panel rect — keeps the tests robust against geometry tweaks. | COMMENT |
| MEDIUM | crates/op-ai/src/design_md.rs | 13 | pub const DESIGN_MD_SYSTEM_PROMPT: &str = r##"You are a Design Systems Lead. Analyze the provided PenNode design tree an | CODE |
| MEDIUM | crates/op-host-services/src/model_discovery.rs | 483 | /// robust whether the CLI replies newline-delimited or | COMMENT |
| MEDIUM | crates/op-smoke/Cargo.toml | 64 | # Direct openai-compat HTTP client for the smoke harness (OPENPENCIL_SMOKE_DIRECT=1) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/merge-settings-i18n.py | 16 | CODE | |
| LOW | deploy/collab-relay-edge/verify-rate-rules.py | 4 | CODE | |
| LOW | templates/step0/_generators/tpl_card_spine.py | 60 | CODE | |
| LOW | templates/step0/_generators/tpl2.py | 5 | CODE | |
| LOW | templates/step0/_generators/tpl_compare_version_diff.py | 59 | CODE | |
| LOW | templates/step0/_generators/tpl_compare_time_shift.py | 62 | CODE | |
| LOW | templates/step0/_generators/tpl3.py | 5 | CODE | |
| LOW | templates/step0/_generators/tpl3.py | 5 | CODE | |
| LOW | templates/step0/_generators/tpl_bookreview_carousel.py | 84 | CODE | |
| LOW | templates/step0/_generators/scene_preview_cards.py | 20 | CODE | |
| LOW | templates/step0/_generators/tpl_tutorial_storage.py | 52 | CODE | |
| LOW | templates/step0/_generators/tpl1.py | 5 | CODE | |
| LOW | templates/step0/_generators/qa/freshcheck.py | 34 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/op-editor-core/src/editor_ui_state/groups.rs | 100 | /// True while the desktop host is waiting for an AI-generated | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/merge-settings-i18n.py | 873 | CODE | |
| LOW | scripts/ab-v9/run_matrix.py | 102 | CODE | |
| LOW | scripts/ab-v9/run_matrix.py | 328 | CODE | |
| LOW | templates/step0/_generators/deckkit.py | 240 | CODE | |
| LOW | templates/step0/_generators/qa/cjkcheck.py | 65 | CODE | |
| LOW | templates/step0/_generators/qa/freshcheck.py | 148 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/package-appimage.sh | 22 | # Usage: | COMMENT |
| LOW | scripts/install-op.sh | 8 | # Usage: | COMMENT |
| LOW | scripts/package-deb.sh | 17 | # Usage: | COMMENT |
| LOW | …es/op-chrome-extension/scripts/check-extractor-sync.sh | 12 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/op-host-web/src/figma_temp_worker.js | 460 | export function opCancelAllFigmaTempImports() { | CODE |
| LOW | crates/op-host-web/src/op_ck_bridge.js | 50 | export function opCkNormalizeFontFamilyName(family) { | CODE |
| LOW | crates/op-host-web/src/op_ck_bridge.js | 93 | export function opCkResolveRegisteredTypeface(family, importedTypefaces, systemTypefacesByFamily) { | CODE |
| LOW | crates/op-host-web/src/op_ck_bridge.js | 120 | export function opCkBuildMeshGradientData(x, y, w, h, rows, cols, colors) { | CODE |
| LOW | packages/op-chrome-extension/popup.js | 293 | function revokeWhenDownloadSettles(id, objectUrl) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/self-loop.sh | 88 | except Exception: | CODE |
| LOW | scripts/self-loop.sh | 92 | except Exception: | CODE |
| LOW | scripts/ab-g3/run.sh | 336 | except Exception: | CODE |
| LOW | scripts/ab-g3/run.sh | 432 | except Exception as err: | CODE |
| LOW | scripts/ab-g3/run.sh | 652 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | templates/step0/_generators/tpl_gradient_tech.py | 227 | mono("安装命令", "$ npm i -g edgegate && edgegate up", 28), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kills/skills/phases/planning/landing-page-predesign.md | 14 | ## Step 1: Concept Extraction | COMMENT |
| LOW | …kills/skills/phases/planning/landing-page-predesign.md | 29 | ## Step 2: Superfan Simulation | COMMENT |
| LOW | …kills/skills/phases/planning/landing-page-predesign.md | 45 | ## Step 3: Transformation Mapping | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/check-collab-deployment-boundaries.sh | 5 | # This file is a FRAGMENT, not a runnable gate. Every assertion below is a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/op-cli/assets/skill-bundle.json | 4 | "skills/openpencil-design/SKILL.md": "---\nname: openpencil-design\ndescription: Use when designing UI with OpenPenc | CODE |
| LOW⚡ | crates/op-cli/assets/skill-bundle.json | 4 | "skills/openpencil-design/SKILL.md": "---\nname: openpencil-design\ndescription: Use when designing UI with OpenPenc | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | templates/step0/_generators/tpl_deck_ledger.py | 180 | CODE | |
| LOW | templates/step0/_generators/tpl_deck_dossier.py | 186 | CODE |