The official Lark/Feishu CLI tool, maintained by the larksuite team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Calendar, Mail, Tasks, Meetings, and more, with 200+ commands and 20+ AI Agent Skills.
This report presents the forensic synthetic code analysis of larksuite/cli, a Go project with 15,586 GitHub stars. SynthScan v2.0 examined 601,769 lines of code across 2360 source files, recording 931 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 2.8 places this repository in the Likely human-written 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 931 distinct pattern matches across 15 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 |
|---|---|---|---|---|
| MEDIUM | cmd/diagnose_scope_test.go | 19 | // ── Data types ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/diagnose_scope_test.go | 40 | // ── Core logic ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/diagnose_scope_test.go | 191 | // ── Snapshot generation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/bind.go | 496 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/bind.go | 498 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 132 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 134 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 212 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 214 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 268 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 270 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 333 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/binder.go | 336 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/client/api_errors_test.go | 21 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/client/api_errors_test.go | 28 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/client/api_errors_test.go | 198 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/client/api_errors_test.go | 206 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/client/api_errors_test.go | 262 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | internal/client/api_errors_test.go | 264 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 16 | # ── Layer 1: Fast Gate ───────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 50 | # ── Layer 2: Quality Gate ────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 262 | # ── Layer 3: E2E Gate ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 376 | # ── Layer 4: Security & Compliance (parallel with L2-L3) ────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 416 | # ── Results Gate (single required check for branch protection) ───── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_history_list.go | 12 | // ─── lark_sheet_history (BE-1: +history-list) ───────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_batch_update.go | 13 | // ─── lark_sheet_batch_update ────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_batch_update.go | 475 | // ─── helpers resurrected from B3 (used here + future skills) ────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 109 | // ─── type ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 120 | // ─── nullable short-circuit ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 126 | // ─── enum ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 130 | // ─── oneOf ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 135 | // ─── required ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 147 | // ─── nested properties recurse ─────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 154 | // ─── array items recurse with [i] path ─────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 166 | // ─── numeric bounds (P0 additions) ─────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 173 | // ─── array length bounds (P0 additions) ────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 179 | // ─── combined bounds inside nested array of objects ────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 186 | // ─── additionalProperties absent: lenient (default) ────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 193 | // ─── additionalProperties:false: strict mode ───────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 210 | // ─── additionalProperties:<schema>: extras must match ──────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_sheet_structure.go | 16 | // ─── lark_sheet_sheet_structure ─────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_sheet_structure.go | 118 | // ─── +dim-* (modify_sheet_structure) ────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_sheet_structure.go | 477 | // ─── A1 parsing helpers ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_sheet_structure.go | 560 | // ─── +dim-move (native v3 move_dimension, cli_status: cli-only) ────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_ergonomics.go | 19 | // ─── sheets flag ergonomics ───────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_ergonomics.go | 131 | // ─── enum vocabulary normalization ────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_object_crud.go | 18 | // ─── object CRUD shortcuts ──────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_object_crud.go | 371 | // ─── per-object instantiations ──────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_object_crud.go | 997 | // ─── filter (sheet-scoped, no separate filter_id) ───────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_range_operations.go | 16 | // ─── lark_sheet_range_operations ────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_range_operations.go | 623 | // ─── transform_range (4 shortcuts) ──────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_range_operations.go | 742 | // ─── transform_range helpers ────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_read_data.go | 14 | // ─── lark_sheet_read_data ───────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/batch_op_dispatch.go | 11 | // ─── +batch-update sub-op dispatch ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/batch_op_dispatch.go | 86 | // ─── 单元格内容 ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/batch_op_dispatch.go | 94 | // ─── 单元格合并 (merge_cells, operation 区分) ──────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/batch_op_dispatch.go | 102 | // ─── 行列结构 (modify_sheet_structure, operation 区分) ────────── | COMMENT |
| MEDIUM | shortcuts/sheets/batch_op_dispatch.go | 121 | // ─── 行高列宽 (resize_range, 无 operation 字段) ───────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/batch_op_dispatch.go | 138 | // ─── 区域操作 (transform_range, operation 区分) ───────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/batch_op_dispatch.go | 170 | // ─── 对象族 CRUD (manage_*_object, operation 区分) ───────────── | COMMENT |
| 215 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | main_noauthsidecar.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | cmd/plugin_integration_test.go | 21 | "github.com/larksuite/cli/internal/hook" | COMMENT |
| LOW | cmd/platform_bootstrap_test.go | 21 | "github.com/larksuite/cli/internal/output" | COMMENT |
| LOW | cmd/build.go | 121 | } | COMMENT |
| LOW | cmd/platform_guards_test.go | 61 | // external_provider check at internal/cmdutil/factory.go:223), | COMMENT |
| LOW | cmd/platform_guards.go | 21 | // - Plugin Restrict conflict (installPluginConflictGuard) | COMMENT |
| LOW | cmd/platform_guards.go | 141 | // 1. PersistentPreRunE (looked up from leaf, walking up; "first wins") | COMMENT |
| LOW | cmd/platform_guards.go | 161 | return | COMMENT |
| LOW | cmd/platform_guards.go | 181 | // We neutralise each step: | COMMENT |
| LOW | cmd/platform_bootstrap.go | 21 | ) | COMMENT |
| LOW | cmd/platform_bootstrap.go | 161 | COMMENT | |
| LOW | cmd/platform_bootstrap.go | 261 | // userPolicyPath returns the path of <baseConfigDir>/policy.yml. | COMMENT |
| LOW | cmd/prune.go | 41 | if len(toRemove) > 0 { | COMMENT |
| LOW | cmd/prune.go | 61 | // | COMMENT |
| LOW | cmd/cmdexample_test.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | cmd/cmdexample_test.go | 21 | COMMENT | |
| LOW | cmd/cmdexample_parse_test.go | 21 | // subcommandStart guards against false positives from prose: a real command's | COMMENT |
| LOW | cmd/root.go | 221 | } | COMMENT |
| LOW | cmd/root.go | 241 | // dispatcher no longer promotes any legacy shape here. | COMMENT |
| LOW | cmd/root.go | 361 | installUnknownSubcommandGuard(c) | COMMENT |
| LOW | cmd/config/strict_mode.go | 101 | COMMENT | |
| LOW | cmd/config/init_probe_test.go | 61 | } | COMMENT |
| LOW | cmd/config/bind_messages.go | 41 | // `auth login --recommend` flow: the CLI streams verification_url to | COMMENT |
| LOW | cmd/config/bind_messages.go | 61 | // IdentityUserDefaultDesc format: brand, brand. | COMMENT |
| LOW | cmd/config/init_probe.go | 21 | // probeTimeout is the total wall-clock budget for the credential probe step | COMMENT |
| LOW | cmd/config/bind.go | 161 | // bound. ConfigBytes is non-nil iff a previous binding existed (and the caller | COMMENT |
| LOW | cmd/config/binder.go | 61 | // | COMMENT |
| LOW | cmd/auth/login.go | 601 | // commas, spaces, tabs, or newlines (or any mix) as separators and returns the | COMMENT |
| LOW | cmd/service/affordance.go | 21 | // anything that is not such a domain. Built lazily at help time because | COMMENT |
| LOW | lint/main.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | lint/lintapi/violation.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | lint/errscontract/typecheck.go | 21 | COMMENT | |
| LOW | lint/errscontract/typecheck.go | 41 | // | COMMENT |
| LOW | lint/errscontract/typecheck.go | 141 | named.Obj().Pkg() == nil || named.Obj().Pkg().Path() != errsPkgPath { | COMMENT |
| LOW | lint/errscontract/rule_unwrap_symmetry.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | lint/errscontract/rule_typed_error_completeness.go | 21 | // - the file lives inside the canonical errs package and the type is an | COMMENT |
| LOW | lint/errscontract/rule_new_invariants_test.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | lint/errscontract/scan.go | 21 | } | COMMENT |
| LOW | lint/errscontract/scan.go | 381 | case *ast.SelectorExpr: | COMMENT |
| LOW | lint/errscontract/rule_subtype_classifier.go | 181 | // AST path it does NOT pre-filter by name prefix — a foreign constant | COMMENT |
| LOW | lint/errscontract/rule_builder_immutable.go | 21 | // e.MissingScopes = slices.Clone(scopes) | COMMENT |
| LOW | lint/errscontract/rule_no_legacy_envelope_literal.go | 21 | // The whole repo is now typed; constructing one of these composite literals | COMMENT |
| LOW | lint/errscontract/rule_no_legacy_runtime_api_call.go | 21 | // repo-wide. | COMMENT |
| LOW | extension/transport/types.go | 21 | // | COMMENT |
| LOW | extension/transport/types.go | 41 | // extension reject a request before the built-in chain runs. Extensions that | COMMENT |
| LOW | extension/transport/errors.go | 21 | // | COMMENT |
| LOW | extension/fileio/types.go | 21 | // path validation, directory creation, and atomic writes. | COMMENT |
| LOW | extension/platform/register.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | extension/platform/handler.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | extension/platform/handler.go | 21 | // Wrapper is a middleware-style hook: it receives the rest of the | COMMENT |
| LOW | extension/platform/register_testing.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | extension/platform/abort.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | extension/platform/risk.go | 21 | ) | COMMENT |
| LOW | extension/platform/plugin.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | extension/platform/doc.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | extension/platform/doc.go | 21 | // - Selector - chooses which commands a hook applies to (ByDomain / ByWrite / ByReadOnly / ByExactRisk / And / | COMMENT |
| LOW | extension/platform/lifecycle.go | 21 | // LifecycleEvent selects the temporal slot for Lifecycle hooks. These are | COMMENT |
| LOW | extension/platform/rule.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | extension/platform/rule.go | 21 | // Allow is a list of doublestar globs (slash-separated paths). An empty | COMMENT |
| LOW | extension/platform/rule.go | 41 | // annotation are handled when this Rule is active. | COMMENT |
| 268 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | cmd/config/init_interactive.go | 181 | // Step 1: Request app registration (begin) | COMMENT |
| LOW⚡ | cmd/config/init_interactive.go | 190 | // Step 2: Build and display verification URL + QR code | COMMENT |
| LOW | cmd/config/init_interactive.go | 213 | // Step 4: Poll for credentials (brand discovery lives in internal/auth); | COMMENT |
| LOW | cmd/auth/login.go | 263 | // Step 1: Request device authorization | COMMENT |
| LOW | cmd/auth/login.go | 298 | // Step 2: Show user code and verification URL. | COMMENT |
| LOW | cmd/auth/login.go | 326 | // Step 3: Poll for token | COMMENT |
| LOW | cmd/auth/login.go | 349 | // Step 6: Get user info | COMMENT |
| LOW | cmd/auth/login.go | 362 | // Step 7: Store token | COMMENT |
| LOW | cmd/auth/login.go | 378 | // Step 8: Update config — overwrite Users to single user, clean old tokens | COMMENT |
| LOW | shortcuts/whiteboard/whiteboard_query.go | 443 | // Step 1: Get final output path | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_query.go | 463 | // Step 2: Check overwrite | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_query.go | 473 | // Step 3: Save file | COMMENT |
| LOW | shortcuts/mail/mail_triage.go | 697 | // Step 1: Check if folder or label/label_id contains a system label. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 731 | // Step 2: Normal folder resolution. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 739 | // Step 3: Normal label resolution (custom labels only, since system labels handled above). | COMMENT |
| LOW | shortcuts/mail/mail_watch.go | 248 | // Step 1: subscribe mailbox events (required before WebSocket pushes mail events) | COMMENT |
| LOW⚡ | shortcuts/mail/draft/patch_test.go | 637 | // Step 1: add inline — this wraps body into multipart/related | COMMENT |
| LOW⚡ | shortcuts/mail/draft/patch_test.go | 645 | // Step 2: set_body — this restructures the MIME tree, potentially making | COMMENT |
| LOW⚡ | shortcuts/mail/draft/patch_test.go | 654 | // Step 3: set_body again dropping the CID reference — orphaned inline part | COMMENT |
| LOW | shortcuts/mail/ics/parser.go | 33 | // Step 1: line unfolding (RFC 5545 §3.1) | COMMENT |
| LOW | shortcuts/wiki/wiki_list_copy_test.go | 433 | // Step 1: resolve my_library to the real space_id. | COMMENT |
| LOW | shortcuts/wiki/wiki_list_copy_test.go | 448 | // Step 2: list nodes in the resolved space. | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 130 | // Step 1: Create presentation | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 158 | // Step 2: Add slides if provided | COMMENT |
| LOW⚡ | shortcuts/okr/okr_indicator_update.go | 144 | // Step 1: Fetch indicator ID | COMMENT |
| LOW⚡ | shortcuts/okr/okr_indicator_update.go | 150 | // Step 2: Update indicator value | COMMENT |
| LOW⚡ | shortcuts/common/runner.go | 982 | // Step 1: determine identity (--as > default-as > auto-detect). | COMMENT |
| LOW⚡ | shortcuts/common/runner.go | 990 | // Step 2: check if this shortcut supports the resolved identity. | COMMENT |
| LOW | shortcuts/vc/vc_detail.go | 51 | // Step 1: query meeting detail | COMMENT |
| LOW | shortcuts/vc/vc_detail.go | 82 | // Step 2: query minute_token via recording API | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 299 | // Step 1: Get document root block to find where to insert | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 331 | // Step 2: Create an empty block at the target position | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 371 | // Step 3: Upload media file. | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 436 | // Step 4: Bind file token to block via batch_update | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 363 | // Step 1: GET root block | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 377 | // Step 2: POST create child block | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 390 | // Step 3: POST upload_all for in-memory bytes | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 400 | // Step 4: PATCH batch_update | COMMENT |
| LOW | shortcuts/im/im_flag_list.go | 97 | // NOTE: This function modifies data["flag_items"] in place by adding a "message" key | COMMENT |
| LOW | shortcuts/drive/drive_io_test.go | 84 | // Step 1: upload_prepare | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 98 | // Step 2: upload_part (block 0) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 105 | // Step 2: upload_part (block 1) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 112 | // Step 3: upload_finish | COMMENT |
| LOW | shortcuts/drive/drive_inspect.go | 96 | // Step 2: If type is "wiki", unwrap via get_node API. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 137 | // Step 3: Call batch_query to verify and get title. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 143 | // Step 4: Build the resolved URL. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 146 | // Step 5: Build output. | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 287 | // Step 1: Prepare | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 317 | // Step 2: Upload parts | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 356 | // Step 3: Finish | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 135 | // Step 1: Upload file as media | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 143 | // Step 2: Create import task | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 149 | // Step 3: Poll task | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 294 | // Step 1: call pre_release to get TOS upload URL and tos_path. | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 322 | // Step 2: upload tar.gz to TOS via presigned URL (bypasses Lark gateway). | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 342 | // Step 3: call release-create with tos_path to trigger deployment. | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 200 | // Step 1: 收集所有唯一路径(跨字段去重) | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 206 | // Step 2: 前置校验所有文件路径安全性与可访问性,同时收集文件大小供上传使用 | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 228 | // Step 3: 并行上传,构建路径 → 附件结果映射 | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 235 | // Step 4: 根据共享结果映射,按字段组装单元格 | COMMENT |
| 39 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | cmd/config/init_interactive.go | 181 | // Step 1: Request app registration (begin) | COMMENT |
| LOW⚡ | cmd/config/init_interactive.go | 190 | // Step 2: Build and display verification URL + QR code | COMMENT |
| LOW | cmd/config/init_interactive.go | 213 | // Step 4: Poll for credentials (brand discovery lives in internal/auth); | COMMENT |
| LOW | cmd/auth/login.go | 263 | // Step 1: Request device authorization | COMMENT |
| LOW | cmd/auth/login.go | 298 | // Step 2: Show user code and verification URL. | COMMENT |
| LOW | cmd/auth/login.go | 326 | // Step 3: Poll for token | COMMENT |
| LOW | cmd/auth/login.go | 349 | // Step 6: Get user info | COMMENT |
| LOW | cmd/auth/login.go | 362 | // Step 7: Store token | COMMENT |
| LOW | cmd/auth/login.go | 378 | // Step 8: Update config — overwrite Users to single user, clean old tokens | COMMENT |
| LOW | shortcuts/whiteboard/whiteboard_query.go | 443 | // Step 1: Get final output path | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_query.go | 463 | // Step 2: Check overwrite | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_query.go | 473 | // Step 3: Save file | COMMENT |
| LOW | shortcuts/mail/mail_triage.go | 697 | // Step 1: Check if folder or label/label_id contains a system label. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 731 | // Step 2: Normal folder resolution. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 739 | // Step 3: Normal label resolution (custom labels only, since system labels handled above). | COMMENT |
| LOW | shortcuts/mail/mail_watch.go | 248 | // Step 1: subscribe mailbox events (required before WebSocket pushes mail events) | COMMENT |
| LOW⚡ | shortcuts/mail/draft/patch_test.go | 637 | // Step 1: add inline — this wraps body into multipart/related | COMMENT |
| LOW⚡ | shortcuts/mail/draft/patch_test.go | 645 | // Step 2: set_body — this restructures the MIME tree, potentially making | COMMENT |
| LOW⚡ | shortcuts/mail/draft/patch_test.go | 654 | // Step 3: set_body again dropping the CID reference — orphaned inline part | COMMENT |
| LOW | shortcuts/mail/ics/parser.go | 33 | // Step 1: line unfolding (RFC 5545 §3.1) | COMMENT |
| LOW | shortcuts/wiki/wiki_list_copy_test.go | 433 | // Step 1: resolve my_library to the real space_id. | COMMENT |
| LOW | shortcuts/wiki/wiki_list_copy_test.go | 448 | // Step 2: list nodes in the resolved space. | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 130 | // Step 1: Create presentation | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 158 | // Step 2: Add slides if provided | COMMENT |
| LOW⚡ | shortcuts/okr/okr_indicator_update.go | 144 | // Step 1: Fetch indicator ID | COMMENT |
| LOW⚡ | shortcuts/okr/okr_indicator_update.go | 150 | // Step 2: Update indicator value | COMMENT |
| LOW⚡ | shortcuts/common/runner.go | 982 | // Step 1: determine identity (--as > default-as > auto-detect). | COMMENT |
| LOW⚡ | shortcuts/common/runner.go | 990 | // Step 2: check if this shortcut supports the resolved identity. | COMMENT |
| LOW | shortcuts/vc/vc_detail.go | 51 | // Step 1: query meeting detail | COMMENT |
| LOW | shortcuts/vc/vc_detail.go | 82 | // Step 2: query minute_token via recording API | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 299 | // Step 1: Get document root block to find where to insert | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 331 | // Step 2: Create an empty block at the target position | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 371 | // Step 3: Upload media file. | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 436 | // Step 4: Bind file token to block via batch_update | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 363 | // Step 1: GET root block | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 377 | // Step 2: POST create child block | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 390 | // Step 3: POST upload_all for in-memory bytes | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 400 | // Step 4: PATCH batch_update | COMMENT |
| LOW | shortcuts/drive/drive_io_test.go | 84 | // Step 1: upload_prepare | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 98 | // Step 2: upload_part (block 0) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 105 | // Step 2: upload_part (block 1) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 112 | // Step 3: upload_finish | COMMENT |
| LOW | shortcuts/drive/drive_inspect.go | 96 | // Step 2: If type is "wiki", unwrap via get_node API. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 137 | // Step 3: Call batch_query to verify and get title. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 143 | // Step 4: Build the resolved URL. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 146 | // Step 5: Build output. | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 287 | // Step 1: Prepare | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 317 | // Step 2: Upload parts | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 356 | // Step 3: Finish | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 135 | // Step 1: Upload file as media | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 143 | // Step 2: Create import task | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 149 | // Step 3: Poll task | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 294 | // Step 1: call pre_release to get TOS upload URL and tos_path. | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 322 | // Step 2: upload tar.gz to TOS via presigned URL (bypasses Lark gateway). | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 342 | // Step 3: call release-create with tos_path to trigger deployment. | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 200 | // Step 1: 收集所有唯一路径(跨字段去重) | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 206 | // Step 2: 前置校验所有文件路径安全性与可访问性,同时收集文件大小供上传使用 | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 228 | // Step 3: 并行上传,构建路径 → 附件结果映射 | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 235 | // Step 4: 根据共享结果映射,按字段组装单元格 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cmd/event/consume_test.go | 33 | want: map[string]string{"mailbox": "user@example.com"}, | CODE |
| LOW | skill-template/domains/sheets.md | 140 | | 邮箱 | `"邮箱字符串"` | `"user@example.com"` | | CODE |
| LOW | skill-template/domains/sheets.md | 142 | | @人 | `{"type":"mention","text":"标识","textType":"email\|openId\|unionId","notify":false}` | `{"type":"mention","text":" | CODE |
| LOW | tests/cli_e2e/mail/mail_share_to_chat_dryrun_test.go | 56 | "--receive-id", "user@example.com", | CODE |
| LOW | tests/cli_e2e/mail/mail_share_to_chat_dryrun_test.go | 65 | wantSendBody: map[string]string{"receive_id": "user@example.com"}, | CODE |
| LOW | tests/cli_e2e/drive/drive_member_add_dryrun_test.go | 153 | "--member-id", "user@example.com", | CODE |
| LOW | tests/cli_e2e/drive/drive_member_add_dryrun_test.go | 160 | wantMemberID: "user@example.com", | CODE |
| LOW | internal/qualitygate/publiccontent/rules.go | 88 | case "...", "***", "****", "placeholder", "redacted", "<redacted>", "xxxx", "test-secret", "test-token", "dry-run", "dr | CODE |
| LOW | internal/qualitygate/publiccontent/scan.go | 670 | strings.Contains(normalized, "placeholder") || | CODE |
| LOW | internal/qualitygate/publiccontent/scan.go | 973 | case "placeholder", "redacted", "<redacted>", "xxxx": | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 284 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 516 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 541 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 598 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 616 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 642 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun.go | 49 | fact.SkipReason = "placeholder" | CODE |
| LOW | internal/qualitygate/rules/dryrun.go | 55 | fact.SkipReason = "placeholder" | CODE |
| LOW | internal/qualitygate/rules/dryrun.go | 83 | fact.SkipReason = "placeholder" | CODE |
| LOW | internal/cmdpolicy/aggregation_test.go | 282 | Use: "placeholder", | CODE |
| LOW | shortcuts/mail/signature_compose_test.go | 217 | got := autoResolveSignatureID(rt, "mbx-api-fail", "user@example.com", false) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 228 | got := autoResolveSignatureID(rt, "mbx-no-default", "user@example.com", false) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 237 | {"email_address": "user@example.com", "send_mail_signature_id": "sig-send-42", "reply_signature_id": "sig-reply-42"}, | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 239 | got := autoResolveSignatureID(rt, "mbx-send-id", "user@example.com", false) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 248 | {"email_address": "user@example.com", "send_mail_signature_id": "sig-send-42", "reply_signature_id": "sig-reply-42"}, | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 250 | got := autoResolveSignatureID(rt, "mbx-reply-id", "user@example.com", true) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 258 | result, err := resolveSignature(context.Background(), rt, "mbx-empty", "", "user@example.com", false, false) | CODE |
| LOW | shortcuts/mail/signature_compose_test.go | 271 | result, err := resolveSignature(context.Background(), rt, "mbx-stale-auto", "sig-stale", "user@example.com", false, fal | CODE |
| LOW | shortcuts/mail/signature_compose_test.go | 283 | _, err := resolveSignature(context.Background(), rt, "mbx-stale-explicit", "sig-stale", "user@example.com", true, false | CODE |
| LOW | shortcuts/mail/helpers_test.go | 1438 | {"plain", "user@example.com", "user@example.com"}, | CODE |
| LOW | shortcuts/mail/mail_share_to_chat_test.go | 112 | "+share-to-chat", "--thread-id", "t1", "--receive-id", "user@example.com", "--receive-id-type", "email", | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 12 | {EmailAddress: "user@example.com", SendMailSignatureID: "sig-send-1", ReplySignatureID: "sig-reply-1"}, | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 14 | if got := DefaultSendID(usages, "user@example.com"); got != "sig-send-1" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 23 | if got := DefaultSendID(usages, "user@example.com"); got != "sig-send-x" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 32 | if got := DefaultSendID(usages, "user@example.com"); got != "" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 39 | {EmailAddress: "user@example.com", SendMailSignatureID: "0"}, | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 41 | if got := DefaultSendID(usages, "user@example.com"); got != "" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 47 | if got := DefaultSendID(nil, "user@example.com"); got != "" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 54 | {EmailAddress: "user@example.com", SendMailSignatureID: "sig-send-1", ReplySignatureID: "sig-reply-2"}, | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 56 | if got := DefaultReplyID(usages, "user@example.com"); got != "sig-reply-2" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 65 | if got := DefaultReplyID(usages, "user@example.com"); got != "sig-reply-x" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 74 | if got := DefaultReplyID(usages, "user@example.com"); got != "" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 81 | {EmailAddress: "user@example.com", ReplySignatureID: "0"}, | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 83 | if got := DefaultReplyID(usages, "user@example.com"); got != "" { | CODE |
| LOW⚡ | shortcuts/mail/signature/provider_test.go | 89 | if got := DefaultReplyID(nil, "user@example.com"); got != "" { | CODE |
| LOW | shortcuts/mail/ics/parser.go | 210 | // RFC 3986 §3.1) and a bare "user@example.com" value (observed in backend-regenerated | COMMENT |
| LOW | shortcuts/im/convert_lib/merge_test.go | 58 | if got := (mergeForwardConverter{}).Convert(&ConvertContext{RawContent: `{"text":"placeholder"}`}); got != "[Merged for | CODE |
| LOW | shortcuts/im/convert_lib/card_userdsl.go | 651 | if phElem, ok := elem["placeholder"].(cardObj); ok { | CODE |
| LOW | shortcuts/im/convert_lib/card_userdsl.go | 674 | if phElem, ok := elem["placeholder"].(cardObj); ok { | CODE |
| LOW | shortcuts/im/convert_lib/card_userdsl.go | 715 | if phElem, ok := elem["placeholder"].(cardObj); ok { | CODE |
| LOW | shortcuts/im/convert_lib/card_userdsl_test.go | 317 | "placeholder": cardObj{"tag": "plain_text", "content": "请选择"}, | CODE |
| LOW | shortcuts/im/convert_lib/card_userdsl_test.go | 341 | "placeholder": cardObj{"tag": "plain_text", "content": "添加人员"}, | CODE |
| LOW | shortcuts/im/convert_lib/card_userdsl_test.go | 358 | "placeholder": cardObj{"tag": "plain_text", "content": "Type here"}, | CODE |
| LOW | shortcuts/im/convert_lib/card_userdsl_test.go | 374 | "placeholder": cardObj{"tag": "plain_text", "content": "Pick date"}, | CODE |
| LOW | shortcuts/im/convert_lib/card_test.go | 193 | if got := c.convertInput(cardObj{"label": cardObj{"content": "Reason"}, "placeholder": cardObj{"content": "Type"}, "inp | CODE |
| LOW | shortcuts/im/convert_lib/card_test.go | 817 | "placeholder": cardObj{"content": "Pick one"}, | CODE |
| LOW | shortcuts/im/convert_lib/card_test.go | 885 | if got := dc.convertDatePicker(cardObj{"placeholder": cardObj{"content": "Pick date"}}, "", "date"); got != "📅 Pick dat | CODE |
| LOW | shortcuts/im/convert_lib/card_test.go | 1340 | {name: "input", elem: cardObj{"tag": "input", "property": cardObj{"label": cardObj{"content": "Reason"}, "placeholder" | CODE |
| LOW | shortcuts/im/convert_lib/card.go | 772 | for _, path := range []string{"content", "text", "title", "label", "placeholder"} { | CODE |
| LOW | shortcuts/im/convert_lib/card.go | 1085 | if phElem, ok := prop["placeholder"].(cardObj); ok { | CODE |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/semantic-review-publish.js | 52 | function infrastructureFailureDecision(message) { | CODE |
| LOW | scripts/semantic-review-publish.js | 359 | function validateDecisionForPublish(decision) { | CODE |
| LOW | scripts/semantic-review-publish.js | 657 | async function loadExistingInlineThreads(github, context, core, pr) { | CODE |
| LOW | scripts/semantic-review-publish.js | 856 | async function publishTargetStillCurrent(github, context, core, target, phase = "publishing") { | CODE |
| LOW | scripts/install-wizard.js | 182 | function getGloballyInstalledVersion() { | CODE |
| LOW | scripts/semantic-review-publish.test.js | 2213 | function writeInlineCandidateDecisionAndFacts() { | CODE |
| LOW | scripts/semantic-review-publish.test.js | 2222 | function writeDecisionAndFactsWithoutInline() { | CODE |
| LOW | scripts/semantic-review-publish.test.js | 2242 | function existingUnresolvedFindingThread() { | CODE |
| LOW | scripts/install.js | 143 | function curlSupportsSslRevokeBestEffort() { | CODE |
| LOW | scripts/semantic-review-verify-artifact.js | 96 | function findEndOfCentralDirectory(buf) { | CODE |
| LOW | scripts/semantic-review-verify-artifact.js | 495 | function verificationFailureDecision(message, blockMode) { | CODE |
| LOW | scripts/semantic-review-verify-artifact.js | 510 | function writeFailureDecisionFromEnv(err) { | CODE |
| LOW | scripts/pr-quality-summary.js | 108 | function findQualitySummaryComment(comments) { | CODE |
| LOW | scripts/ci-quality-summary-publish.js | 42 | async function publishTargetStillCurrent(github, context, core, target, phase = "publishing") { | CODE |
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 352 | def _write_visible_ascii_separator(self, text: str, index: int) -> bool: | CODE |
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 367 | def _write_ascii_compound_token(self, text: str, start: int) -> int: | CODE |
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 398 | def _match_ascii_compound_token(self, text: str, start: int) -> str | None: | CODE |
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 1096 | def extract_lark_json_content(source: str) -> str: | CODE |
| LOW | skills/lark-slides/scripts/xml_text_overlap_lint.py | 51 | def extract_numeric_attribute(tag_source: str, name: str) -> int | float | None: | CODE |
| LOW | skills/lark-slides/scripts/xml_text_overlap_lint.py | 200 | def normalize_text_for_overlap(text: str) -> str: | CODE |
| LOW | skills/lark-slides/scripts/xml_text_overlap_lint.py | 225 | def estimate_text_visual_bbox(element: dict[str, Any]) -> dict[str, int | float] | None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 22 | def test_search_icons_finds_growth_trend(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 29 | def test_search_icons_supports_english_query(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 34 | def test_search_icons_supports_category_filter(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 42 | def test_search_icons_does_not_expand_ai_inside_words(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 50 | def test_search_icons_supports_template_icon_queries(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 67 | def test_search_icons_defaults_to_wider_candidate_set(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 71 | def test_search_icons_boosts_common_slide_terms(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 78 | def test_search_icons_keeps_high_value_top_results(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 92 | def test_search_icons_requires_query(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 96 | def test_search_icons_rejects_invalid_limit(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 100 | def test_resolve_icon_accepts_name_and_icon_type(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 106 | def test_resolve_icon_accepts_template_icon_type(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 110 | def test_resolve_icon_rejects_unknown_name(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 114 | def test_list_categories_counts_index(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 139 | def test_cli_resolve_writes_json_to_stdout(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 147 | def test_cli_list_categories_writes_json_to_stdout(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 155 | def test_cli_help_writes_usage_to_stderr(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 162 | def test_cli_invalid_argument_writes_error_to_stderr(self) -> None: | CODE |
| LOW⚡ | skills/lark-slides/scripts/iconpark_tool_test.py | 168 | def test_cli_unknown_command_writes_usage_and_error_to_stderr(self) -> None: | CODE |
| LOW | skills/lark-slides/scripts/iconpark_tool_test.py | 128 | def test_cli_search_writes_json_to_stdout(self) -> None: | CODE |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 32 | def test_xml_text_overlap_lint_accepts_inline_fixture_xml_samples(self) -> None: | CODE |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 83 | def test_lint_xml_reports_unescaped_ampersand_in_text(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 103 | def test_lint_xml_reports_unescaped_ampersand_in_attribute(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 120 | def test_lint_xml_accepts_escaped_entities_without_suspicious_entity_warning(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 135 | def test_lint_xml_accepts_chinese_full_width_punctuation(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 149 | def test_lint_xml_single_slide_uses_default_canvas_without_bounds_checks(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 165 | def test_lint_xml_detects_overlapping_text_boxes(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 185 | def test_lint_xml_does_not_check_bounds_or_text_height(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 205 | def test_lint_xml_allows_template_style_bleed_and_text_over_images(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 226 | def test_lint_xml_does_not_check_small_out_of_bounds_elements(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 240 | def test_lint_xml_ignores_obviously_misplaced_large_visuals(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 255 | def test_lint_xml_allows_reasonable_large_visual_bleed(self) -> None: | STRING |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 269 | def test_lint_xml_detects_invalid_template_text_stack_overlap(self) -> None: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | shortcuts/apps/apps_init_test.go | 313 | "git status": {stdout: " M src/app.ts\n"}, // scaffold produced changes | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 365 | // short-circuit must still skip clone/checkout/scaffold/commit ... | COMMENT |
| MEDIUM | shortcuts/apps/apps_init_test.go | 422 | "git ls-files": {stdout: ""}, // empty repo -> app init scaffold | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 423 | "git status": {}, // clean tree after scaffold -> no commit/push | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 471 | "git ls-files": {stdout: "src/x.ts\n"}, // non-empty repo -> app sync scaffold | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 942 | // commit split against a REAL git repo whose scaffold gitignores .agent. This | COMMENT |
| MEDIUM | shortcuts/apps/apps_init_test.go | 1833 | // Verify the scaffold used --app-type modern_html | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 35 | // scaffold kinds returned by runScaffold and consumed by commitAndPushIfDirty. | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 51 | // The scaffold's `git commit` would otherwise fail with "please tell me who you | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 75 | // the non-empty (`app sync`) scaffold path. | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 176 | // clone_path, branch, or scaffold kind, and route any URL through | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 332 | // scaffold's `git commit` cannot fail with "please tell me who you are". It sets | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 367 | // nothing — or only README.md — counts as empty (→ scaffold via `app init`). | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 534 | // initialized app repo -> skip clone/scaffold/commit, but still refresh | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 615 | // Ensure a committer identity exists before the scaffold commit; only sets | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 793 | // makes one `git commit --no-verify -m message`. --no-verify skips the scaffold | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 814 | // :(exclude) magic — DOES error when a scaffold template gitignores e.g. .agent, | COMMENT |
| MEDIUM | skills/lark-im/references/lark-im-messages-search.md | 96 | ### 2. Two-step orchestration is automatic | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .golangci.yml | 39 | # - staticcheck # comprehensive static analysis | COMMENT |
| MEDIUM | cmd/notice_test.go | 56 | // our own key to stay robust against unrelated pending state. | COMMENT |
| MEDIUM | lint/errscontract/rule_nil_safe_error.go | 137 | // from fn.Recv so the check is robust to renamed receivers. | COMMENT |
| MEDIUM | internal/cmdutil/secheader.go | 141 | // Using reflect.PkgPath makes this robust against Name() spoofing since | COMMENT |
| MEDIUM | internal/i18n/lang_test.go | 44 | {Lang("en"), true}, // legacy short value on disk stays robust | CODE |
| MEDIUM | internal/i18n/lang.go | 56 | // IsEnglish reports whether l uses the English TUI bundle (robust to "en_us" | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_table_io.go | 939 | // output shape isn't relied upon — the id is read back by name, which is robust | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | cmd/config/binder.go | 305 | if b.cfg.Accounts.App.Secret.IsZero() { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | internal/qualitygate/publiccontent/scan_test.go | 727 | "API_KEY=<your-api-key>", | CODE |
| HIGH | internal/qualitygate/publiccontent/scan_test.go | 1360 | "api_key: YOUR_API_KEY", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | shortcuts/sheets/lark_sheet_read_data.go | 32 | // values, formulas, styles, and other metadata as requested via --include. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/fetch_meta.py | 66 | CODE | |
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 453 | CODE | |
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 367 | CODE | |
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 859 | CODE | |
| LOW | skills/lark-slides/scripts/iconpark_tool.py | 68 | CODE | |
| LOW | skills/lark-slides/scripts/iconpark_tool.py | 170 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/lark-doc/scripts/doc_word_stat.py | 6 | CODE | |
| LOW | skills/lark-slides/scripts/iconpark_tool.py | 5 | CODE | |
| LOW | skills/lark-slides/scripts/xml_text_overlap_lint.py | 5 | CODE | |
| LOW | skills/lark-slides/scripts/iconpark_tool_test.py | 3 | CODE | |
| LOW | …ills/lark-slides/scripts/xml_text_overlap_lint_test.py | 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tag-release.sh | 20 | # Check if tag already exists locally | COMMENT |
| LOW | scripts/tag-release.sh | 26 | # Check if tag already exists on remote | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/fetch_meta.py | 40 | except Exception: | CODE |