The official Lark/飞书 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 summarizes scanner evidence for larksuite/cli, a Go project with 17,898 GitHub stars. SynthScan examined 921,518 lines of code across 3297 source files, recording 1547 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 2.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 1117 finding(s).
Are imports declared and package/API names verified? 112 finding(s).
Are wrappers, guards, and repeated structures necessary? 624 finding(s).
Which changes need focused human review? 1547 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1547 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cmd/diagnose_scope_test.go | 20 | // ── Data types ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/diagnose_scope_test.go | 48 | // ── Core logic ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/diagnose_scope_test.go | 199 | // ── Snapshot generation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/bind.go | 526 | // ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/config/bind.go | 528 | // ────────────────────────────────────────────────────────────── | 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 | 23 | # ── Layer 1: Fast Gate ───────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 85 | # ── Layer 2: Quality Gate ────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 291 | # ── Layer 3: E2E Gate ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 466 | # ── Layer 4: Security & Compliance (parallel with L2-L3) ────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 504 | # ── Results Gate (single required check for branch protection) ───── | COMMENT |
| MEDIUM | shortcuts/sheets/sheet_ai_api.go | 177 | // ─── transient-failure retry (reads only) ───────────────────────────── | 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 | 16 | // ─── lark_sheet_batch_update ────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_batch_update.go | 1358 | // ─── helpers resurrected from B3 (used here + future skills) ────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 111 | // ─── type ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 122 | // ─── nullable short-circuit ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 128 | // ─── enum ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 132 | // ─── oneOf ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 137 | // ─── required ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 149 | // ─── nested properties recurse ─────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 156 | // ─── array items recurse with [i] path ─────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 168 | // ─── numeric bounds (P0 additions) ─────────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 175 | // ─── array length bounds (P0 additions) ────────────────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 181 | // ─── combined bounds inside nested array of objects ────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 188 | // ─── additionalProperties absent: lenient (default) ────────── | COMMENT |
| MEDIUM⚡ | shortcuts/sheets/flag_schema_validate_test.go | 195 | // ─── additionalProperties:false: strict mode ───────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_schema_validate_test.go | 212 | // ─── additionalProperties:<schema>: extras must match ──────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_sheet_structure.go | 17 | // ─── 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 | 808 | // ─── A1 parsing helpers ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_sheet_structure.go | 908 | // ─── +dim-move (native v3 move_dimension, cli_status: cli-only) ────── | COMMENT |
| MEDIUM | shortcuts/sheets/read_output.go | 15 | // ─── lark_sheet read → file offload ─────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_ergonomics.go | 24 | // ─── sheets flag ergonomics ───────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_ergonomics.go | 104 | // ─── intuitive flag names: silent aliases & prescriptions ─────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_ergonomics.go | 548 | // ─── alias provenance ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/flag_ergonomics.go | 1053 | // ─── enum vocabulary normalization ────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/json_repair.go | 16 | // ─── loose-JSON repair ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_object_crud.go | 21 | // ─── object CRUD shortcuts ──────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_object_crud.go | 431 | // ─── per-object instantiations ──────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_object_crud.go | 1051 | // ─── filter (sheet-scoped, no separate filter_id) ───────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_object_crud.go | 1341 | // ─── conditional-format properties acceptance ───────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/shell_payload_hint.go | 11 | // ─── shell-correct payload prescriptions ────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_range_operations.go | 16 | // ─── lark_sheet_range_operations ────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_range_operations.go | 627 | // ─── transform_range (4 shortcuts) ──────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_range_operations.go | 746 | // ─── transform_range helpers ────────────────────────────────────────── | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_read_data.go | 14 | // ─── lark_sheet_read_data ───────────────────────────────────────────── | COMMENT |
| 256 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | main_noauthsidecar.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | cmd/presentation_options.go | 21 | func (c restrictionPresentationConfig) effectiveUnavailableMessage() string { | 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 | 101 | return func(c *buildConfig) { | COMMENT |
| LOW | cmd/build.go | 121 | // references follow the composed distribution. | COMMENT |
| LOW | cmd/build.go | 361 | root.DisableFlagParsing = true | COMMENT |
| LOW | cmd/build.go | 381 | // target tree is a subtree of the full tree by construction. | COMMENT |
| LOW | cmd/build.go | 641 | finalizeRootCommandGroups(root, runtime.surface) | COMMENT |
| LOW | cmd/platform_guards_test.go | 61 | // external_provider check at internal/cmdutil/factory.go:223), | COMMENT |
| LOW | cmd/platform_guards.go | 21 | // - FailClosed plugin install failure (installPluginInstallErrorGuard) | COMMENT |
| LOW | cmd/platform_guards.go | 181 | // 3. RunE | COMMENT |
| LOW | cmd/platform_guards.go | 201 | // PersistentPreRunE is the first step cobra runs (after Args / | COMMENT |
| LOW | cmd/platform_guards.go | 221 | // cobra falls back to legacyArgs | COMMENT |
| LOW | cmd/platform_bootstrap.go | 41 | } | COMMENT |
| LOW | cmd/platform_bootstrap.go | 301 | if s[i] == ',' { | COMMENT |
| LOW | cmd/prune.go | 41 | } | COMMENT |
| LOW | cmd/prune.go | 61 | // cobra usage error instead of our strict_mode envelope. | COMMENT |
| LOW | cmd/cmdexample_test.go | 1 | // Copyright (c) 2026 Lark Technologies Pte. Ltd. | COMMENT |
| LOW | cmd/cmdexample_test.go | 21 | COMMENT | |
| LOW | cmd/root_upgrade.go | 61 | ios := f.IOStreams | COMMENT |
| LOW | cmd/cmdexample_parse_test.go | 21 | // subcommandStart guards against false positives from prose: a real command's | COMMENT |
| LOW | cmd/root.go | 281 | // render via the typed envelope writer, which lifts extension fields | COMMENT |
| LOW | cmd/root.go | 301 | // current command's declared scopes as a Hint so the user/AI sees the | COMMENT |
| LOW | cmd/config/init_probe_test.go | 61 | } | COMMENT |
| LOW | cmd/config/bind_messages.go | 41 | // the completed bind facts but uses target-free recovery when auth/login | COMMENT |
| LOW | cmd/config/bind_messages.go | 61 | // DescriptionFunc was tried first but breaks here: a longer description | 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 | 181 | } | COMMENT |
| LOW | cmd/config/bind.go | 661 | } | COMMENT |
| LOW | cmd/config/binder.go | 61 | // | COMMENT |
| LOW | cmd/auth/login_test.go | 481 | // TestEveryRegisteredDomain_HasBilingualDescription reconciles every registered | COMMENT |
| LOW | cmd/auth/login_test.go | 1141 | // Regression (P1): `--domain im --exclude im:message.send_as_user` must keep | COMMENT |
| LOW | cmd/auth/login.go | 181 | // scopeOnly is the one path that must never touch the domain catalog | COMMENT |
| LOW | cmd/auth/login.go | 241 | // space-delimited scopes in the wire request, so the device authorization | COMMENT |
| LOW | cmd/auth/login.go | 721 | COMMENT | |
| LOW | cmd/auth/login.go | 901 | // commas, spaces, tabs, or newlines (or any mix) as separators and returns the | COMMENT |
| LOW | cmd/auth/login.go | 961 | // itself contain comma- or whitespace-separated scopes. It returns the filtered | COMMENT |
| LOW | cmd/schema/schema.go | 21 | "github.com/spf13/cobra" | COMMENT |
| LOW | cmd/schema/schema.go | 161 | output.PrintJson(out, schema.Envelopes(guidance, refs)) | COMMENT |
| LOW | cmd/service/service.go | 41 | func RegisterServiceCommandsWithContext(ctx context.Context, parent *cobra.Command, f *cmdutil.Factory) { | COMMENT |
| LOW | cmd/service/affordance.go | 21 | // affordance resolver and skill surface, so help never consults process-global | COMMENT |
| LOW | cmd/service/affordance.go | 61 | COMMENT | |
| LOW | cmd/service/affordance.go | 161 | // risk/tips append. | COMMENT |
| LOW | cmd/service/paramhelp.go | 101 | // gave Chinese 120 cells but cut English mid-word at half a sentence. | COMMENT |
| LOW | cmd/event/consume.go | 261 | IsTTY: f.IOStreams.IsTerminal, | 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 | return t.Name == "Subtype" | 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 |
| 540 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 | 326 | // Step 1: Request device authorization | COMMENT |
| LOW | cmd/auth/login.go | 358 | // Step 2: Show user code and verification URL. | COMMENT |
| LOW | cmd/auth/login.go | 386 | // Step 3: Poll for token | COMMENT |
| LOW | cmd/auth/login.go | 422 | // Step 6: Get user info | COMMENT |
| LOW | cmd/auth/login.go | 441 | // Step 7: Store token | COMMENT |
| LOW | cmd/auth/login.go | 476 | // Step 8: Update config — overwrite Users to single user, clean old tokens | COMMENT |
| LOW⚡ | tests/sidecar_e2e/roundtrip_test.go | 302 | // Step 0: protocol version. | COMMENT |
| LOW⚡ | tests/sidecar_e2e/roundtrip_test.go | 309 | // Step 1: timestamp presence (matching server-demo, which enforces | COMMENT |
| LOW⚡ | tests/sidecar_e2e/roundtrip_test.go | 318 | // Step 2: body SHA256. | COMMENT |
| LOW | tests/sidecar_e2e/roundtrip_test.go | 336 | // Step 3: verify HMAC signature over the canonical request. | COMMENT |
| LOW | shortcuts/whiteboard/whiteboard_export.go | 567 | // Step 1: Get final output path | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_export.go | 587 | // Step 2: Check overwrite | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_export.go | 597 | // Step 3: Save file | COMMENT |
| LOW | shortcuts/mail/mail_triage.go | 977 | // Step 1: Check if folder or label/label_id contains a system label. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 1011 | // Step 2: Normal folder resolution. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 1019 | // Step 3: Normal label resolution (custom labels only, since system labels handled above). | COMMENT |
| LOW | shortcuts/mail/mail_watch.go | 249 | // 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 | 471 | // Step 1: resolve my_library to the real space_id. | COMMENT |
| LOW | shortcuts/wiki/wiki_list_copy_test.go | 486 | // Step 2: list nodes in the resolved space. | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 138 | // Step 1: Create presentation. The shell carries no page, so there is | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 170 | // 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 | 1174 | // Step 1: determine identity (--as > default-as > auto-detect). | COMMENT |
| LOW⚡ | shortcuts/common/runner.go | 1182 | // 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 — only meaningful once the | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 262 | // Step 1: Get document root block to find where to insert | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 274 | // Step 2: Create an empty block at the target position | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 323 | // Step 3: Upload media file. | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 385 | // Step 4: Bind file token to block via batch_update | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 531 | // Step 1: GET root block | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 545 | // Step 2: POST create child block | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 558 | // Step 3: POST upload_all for in-memory bytes | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 568 | // Step 4: PATCH batch_update | COMMENT |
| LOW | shortcuts/im/im_flag_list.go | 101 | // NOTE: This function modifies data["flag_items"] in place by adding a "message" key | COMMENT |
| LOW | shortcuts/drive/drive_io_test.go | 124 | // Step 1: upload_prepare | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 138 | // Step 2: upload_part (block 0) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 145 | // Step 2: upload_part (block 1) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 152 | // Step 3: upload_finish | COMMENT |
| LOW | shortcuts/drive/drive_inspect.go | 103 | // Step 2: If type is "wiki", resolve its underlying document. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 148 | // Step 3: Call batch_query to verify and get title. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 154 | // Step 4: Build the resolved URL. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 157 | // Step 5: Build output. | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 313 | // Step 1: Prepare | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 346 | // Step 2: Upload parts | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 385 | // Step 3: Finish | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 154 | // Step 1: Upload file as media | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 160 | // Step 2: Create import task | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 166 | // Step 3: Poll task | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 328 | // Step 1: call pre_release to get TOS upload URL and tos_path. | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 356 | // Step 2: upload tar.gz to TOS via presigned URL (bypasses Lark gateway). | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 376 | // Step 3: call release-create with tos_path to trigger deployment. | COMMENT |
| 39 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 | 156 | function curlSupportsSslRevokeBestEffort() { | CODE |
| LOW | scripts/release-preflight.js | 21 | function validateReleaseSourcePolicy(releaseChannel, sourceSha, mainSha, sourceInMain) { | 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-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⚡ | skills/lark-slides/scripts/xml_lint.py | 1167 | def text_wrap_width_tolerance() -> int | float: | CODE |
| LOW⚡ | skills/lark-slides/scripts/xml_lint.py | 1171 | def text_height_overflow_tolerance() -> int | float: | CODE |
| LOW⚡ | skills/lark-slides/scripts/xml_lint.py | 1175 | def has_explicit_height_auto_fit(element: dict[str, Any]) -> bool: | CODE |
| LOW⚡ | skills/lark-slides/scripts/xml_lint.py | 2066 | def is_edge_spanning_layout_panel( | CODE |
| LOW⚡ | skills/lark-slides/scripts/xml_lint.py | 2076 | def has_matching_image_overlay(container: dict[str, Any], elements: list[dict[str, Any]]) -> bool: | CODE |
| LOW⚡ | skills/lark-slides/scripts/xml_lint.py | 2086 | def is_nested_in_layout_panel( | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 119 | def extract_numeric_attribute(tag_source: str, name: str) -> int | float | None: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 162 | def detect_inline_style_presence(content_xml: str, style_tags: set[str]) -> bool: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 169 | def detect_any_span_bool_attribute(content_xml: str, attr_name: str) -> bool: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 209 | def solve_weighted_min_layout( | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 294 | def extract_max_span_font_size(value: str, default_font_size: int | float) -> int | float: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 382 | def should_skip_sxsd_attribute(tag_name: str, attr_name: str) -> bool: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 390 | def without_server_filled_sxsd_fields(root: ET.Element) -> ET.Element: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 514 | def _validate_sxsd_schema_constraints(xml: str, root: ET.Element) -> list[dict[str, Any]]: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 586 | def build_iconpark_icon_type_hint(icon_type: str, supported_icon_types: set[str]) -> str: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 597 | def validate_iconpark_icon_types(root: ET.Element) -> list[dict[str, Any]]: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 616 | def append_missing_fill_color_issue(current_path: str) -> None: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 706 | def validate_sml_tag_prefixes(xml: str) -> list[dict[str, Any]]: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 790 | def serialize_slide_for_layout(slide_root: ET.Element) -> str: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 860 | def extract_source_id_elements(slide_xml: str, slide_number: int) -> list[dict[str, Any]]: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 1045 | def detect_image_text_occlusions(elements: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 1090 | def normalize_text_for_overlap(text: str) -> str: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 1190 | def is_single_line_visual_candidate( | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 1213 | def estimate_text_max_line_width(element: dict[str, Any]) -> int | float: | CODE |
| LOW | skills/lark-slides/scripts/xml_lint.py | 1235 | def estimate_text_line_count_for_text( | CODE |
| 246 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 | 326 | // Step 1: Request device authorization | COMMENT |
| LOW | cmd/auth/login.go | 358 | // Step 2: Show user code and verification URL. | COMMENT |
| LOW | cmd/auth/login.go | 386 | // Step 3: Poll for token | COMMENT |
| LOW | cmd/auth/login.go | 422 | // Step 6: Get user info | COMMENT |
| LOW | cmd/auth/login.go | 441 | // Step 7: Store token | COMMENT |
| LOW | cmd/auth/login.go | 476 | // Step 8: Update config — overwrite Users to single user, clean old tokens | COMMENT |
| LOW⚡ | tests/sidecar_e2e/roundtrip_test.go | 302 | // Step 0: protocol version. | COMMENT |
| LOW⚡ | tests/sidecar_e2e/roundtrip_test.go | 309 | // Step 1: timestamp presence (matching server-demo, which enforces | COMMENT |
| LOW⚡ | tests/sidecar_e2e/roundtrip_test.go | 318 | // Step 2: body SHA256. | COMMENT |
| LOW | tests/sidecar_e2e/roundtrip_test.go | 336 | // Step 3: verify HMAC signature over the canonical request. | COMMENT |
| LOW | shortcuts/whiteboard/whiteboard_export.go | 567 | // Step 1: Get final output path | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_export.go | 587 | // Step 2: Check overwrite | COMMENT |
| LOW⚡ | shortcuts/whiteboard/whiteboard_export.go | 597 | // Step 3: Save file | COMMENT |
| LOW | shortcuts/mail/mail_triage.go | 977 | // Step 1: Check if folder or label/label_id contains a system label. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 1011 | // Step 2: Normal folder resolution. | COMMENT |
| LOW⚡ | shortcuts/mail/mail_triage.go | 1019 | // Step 3: Normal label resolution (custom labels only, since system labels handled above). | COMMENT |
| LOW | shortcuts/mail/mail_watch.go | 249 | // 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 | 471 | // Step 1: resolve my_library to the real space_id. | COMMENT |
| LOW | shortcuts/wiki/wiki_list_copy_test.go | 486 | // Step 2: list nodes in the resolved space. | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 138 | // Step 1: Create presentation. The shell carries no page, so there is | COMMENT |
| LOW | shortcuts/slides/slides_create.go | 170 | // 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 | 1174 | // Step 1: determine identity (--as > default-as > auto-detect). | COMMENT |
| LOW⚡ | shortcuts/common/runner.go | 1182 | // 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 — only meaningful once the | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 262 | // Step 1: Get document root block to find where to insert | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 274 | // Step 2: Create an empty block at the target position | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 323 | // Step 3: Upload media file. | COMMENT |
| LOW | shortcuts/doc/doc_media_insert.go | 385 | // Step 4: Bind file token to block via batch_update | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 531 | // Step 1: GET root block | COMMENT |
| LOW | shortcuts/doc/doc_media_test.go | 545 | // Step 2: POST create child block | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 558 | // Step 3: POST upload_all for in-memory bytes | COMMENT |
| LOW⚡ | shortcuts/doc/doc_media_test.go | 568 | // Step 4: PATCH batch_update | COMMENT |
| LOW | shortcuts/drive/drive_io_test.go | 124 | // Step 1: upload_prepare | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 138 | // Step 2: upload_part (block 0) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 145 | // Step 2: upload_part (block 1) | COMMENT |
| LOW⚡ | shortcuts/drive/drive_io_test.go | 152 | // Step 3: upload_finish | COMMENT |
| LOW | shortcuts/drive/drive_inspect.go | 103 | // Step 2: If type is "wiki", resolve its underlying document. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 148 | // Step 3: Call batch_query to verify and get title. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 154 | // Step 4: Build the resolved URL. | COMMENT |
| LOW⚡ | shortcuts/drive/drive_inspect.go | 157 | // Step 5: Build output. | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 313 | // Step 1: Prepare | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 346 | // Step 2: Upload parts | COMMENT |
| LOW | shortcuts/drive/drive_upload.go | 385 | // Step 3: Finish | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 154 | // Step 1: Upload file as media | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 160 | // Step 2: Create import task | COMMENT |
| LOW⚡ | shortcuts/drive/drive_import.go | 166 | // Step 3: Poll task | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 328 | // Step 1: call pre_release to get TOS upload URL and tos_path. | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 356 | // Step 2: upload tar.gz to TOS via presigned URL (bypasses Lark gateway). | COMMENT |
| LOW | shortcuts/apps/apps_html_publish.go | 376 | // Step 3: call release-create with tos_path to trigger deployment. | COMMENT |
| LOW⚡ | shortcuts/base/base_form_submit.go | 201 | // Step 1: 收集所有唯一路径(跨字段去重) | COMMENT |
| 3 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cmd/build.go | 664 | dispatch.AddCommand(&cobra.Command{Use: "placeholder"}) | CODE |
| LOW | cmd/auth/qrcode_test.go | 301 | if err := os.WriteFile(outputPath, []byte("placeholder"), 0600); err != nil { | CODE |
| LOW | cmd/event/consume_test.go | 33 | want: map[string]string{"mailbox": "user@example.com"}, | 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 | 188 | "--member-id", "user@example.com", | CODE |
| LOW | tests/cli_e2e/drive/drive_member_add_dryrun_test.go | 195 | wantMemberID: "user@example.com", | CODE |
| LOW | internal/qualitygate/publiccontent/catalog_test.go | 52 | "mailbox":{"description":"邮箱示例","example":"user@example.com"} | CODE |
| LOW | internal/qualitygate/publiccontent/rules.go | 91 | case "...", "***", "****", "placeholder", "redacted", "<redacted>", "xxxx", "test-secret", "test-token", "dry-run", "dr | CODE |
| LOW | internal/qualitygate/publiccontent/scan.go | 688 | strings.Contains(normalized, "placeholder") || | CODE |
| LOW | internal/qualitygate/publiccontent/scan.go | 1003 | case "placeholder", "redacted", "<redacted>", "xxxx": | CODE |
| LOW | internal/qualitygate/publiccontent/scan_test.go | 1159 | assertGenericCredentialFinding(t, "fixtures/source_secret.ts", `const clientSecret: string = "placeholder";`, false) | CODE |
| LOW | internal/qualitygate/publiccontent/scan_test.go | 1163 | `const clientSecret: string = "placeholder"; const clientSecret: string = "`+providerValue+`";`+"\n", | CODE |
| LOW | internal/qualitygate/publiccontent/scan_test.go | 1242 | {name: "comment middle fixture marker", text: `API_KEY=prod-fake-key`, comment: true, want: false}, | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 335 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 574 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 599 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 656 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 674 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun_test.go | 700 | if len(facts) != 1 || facts[0].Executable || facts[0].SkipReason != "placeholder" { | CODE |
| LOW | internal/qualitygate/rules/dryrun.go | 50 | fact.SkipReason = "placeholder" | CODE |
| LOW | internal/qualitygate/rules/dryrun.go | 56 | fact.SkipReason = "placeholder" | CODE |
| LOW | internal/qualitygate/rules/dryrun.go | 84 | fact.SkipReason = "placeholder" | CODE |
| LOW | internal/cmdpolicy/aggregation_test.go | 282 | Use: "placeholder", | CODE |
| LOW | internal/registry/catalog/services/mail.json | 86 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 162 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 280 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 1025 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 5240 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 5562 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 5650 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 5735 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 6071 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 6107 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 6306 | "example": "user@example.com" | CODE |
| LOW | internal/registry/catalog/services/mail.json | 6361 | "example": "user@example.com" | CODE |
| LOW | shortcuts/calendar/calendar_transfer_test.go | 275 | "--to-user-id", "user@example.com", | CODE |
| LOW | shortcuts/mail/mail_rules_test.go | 413 | if err := cmd.Flags().Set("user-mailbox-id", "user@example.com"); err != nil { | CODE |
| LOW | shortcuts/mail/mail_rules_test.go | 647 | "--user-mailbox-id", "user@example.com", | CODE |
| LOW | shortcuts/mail/signature_compose_test.go | 268 | got := autoResolveSignatureID(rt, "mbx-api-fail", "user@example.com", false) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 279 | got := autoResolveSignatureID(rt, "mbx-no-default", "user@example.com", false) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 288 | {"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 | 290 | got := autoResolveSignatureID(rt, "mbx-send-id", "user@example.com", false) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 299 | {"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 | 301 | got := autoResolveSignatureID(rt, "mbx-reply-id", "user@example.com", true) | CODE |
| LOW⚡ | shortcuts/mail/signature_compose_test.go | 309 | result, err := resolveSignature(context.Background(), rt, "mbx-empty", "", "user@example.com", false, false) | CODE |
| LOW | shortcuts/mail/signature_compose_test.go | 322 | result, err := resolveSignature(context.Background(), rt, "mbx-stale-auto", "sig-stale", "user@example.com", false, fal | CODE |
| LOW | shortcuts/mail/signature_compose_test.go | 334 | _, err := resolveSignature(context.Background(), rt, "mbx-stale-explicit", "sig-stale", "user@example.com", true, false | CODE |
| LOW | shortcuts/mail/helpers_test.go | 1470 | {"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 |
| 35 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | shortcuts/apps/apps_init_test.go | 340 | "git status": {stdout: " M src/app.ts\n"}, // scaffold produced changes | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 394 | // short-circuit must still skip clone/checkout/scaffold/commit ... | COMMENT |
| MEDIUM | shortcuts/apps/apps_init_test.go | 451 | "git ls-files": {stdout: ""}, // empty repo -> app init scaffold | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 452 | "git status": {}, // clean tree after scaffold -> no commit/push | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 501 | "git ls-files": {stdout: "src/x.ts\n"}, // non-empty repo -> app sync scaffold | CODE |
| MEDIUM | shortcuts/apps/apps_init_test.go | 979 | // commit split against a REAL git repo whose scaffold gitignores .agent. This | COMMENT |
| MEDIUM | shortcuts/apps/apps_init_test.go | 1878 | // Verify the scaffold used --app-type modern_html | COMMENT |
| MEDIUM | shortcuts/apps/apps_meta.go | 21 | // with a fallback type to avoid creating the wrong project scaffold. | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 36 | // scaffold kinds returned by runScaffold and consumed by commitAndPushIfDirty. | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 52 | // The scaffold's `git commit` would otherwise fail with "please tell me who you | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 76 | // the non-empty (`app sync`) scaffold path. | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 188 | // clone_path, branch, or scaffold kind, and route any URL through | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 344 | // scaffold's `git commit` cannot fail with "please tell me who you are". It sets | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 387 | // nothing — or only README.md — counts as empty (→ scaffold via `app init`). | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 583 | // initialized app repo -> skip clone/scaffold/commit, but still refresh | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 664 | // Ensure a committer identity exists before the scaffold commit. Uses the | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 843 | // makes one `git commit --no-verify -m message`. --no-verify skips the scaffold | COMMENT |
| MEDIUM | shortcuts/apps/apps_init.go | 864 | // :(exclude) magic — DOES error when a scaffold template gitignores e.g. .agent, | COMMENT |
| MEDIUM | skills/lark-im/references/lark-im-messages-search.md | 94 | ### 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 | 92 | // 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 | 145 | // 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 | internal/riskcontrol/osmodel_darwin.go | 11 | // legacy model key. Trying both keys is more robust than branching on a macOS | COMMENT |
| MEDIUM | shortcuts/sheets/lark_sheet_table_io.go | 1627 | // output shape isn't relied upon — the id is read back by name, which is robust | COMMENT |
| MEDIUM | shortcuts/vc/vc_detail.go | 132 | // timestamps as strings, but coercing via %v keeps parsing robust either way; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/lark-slides/scripts/iconpark_tool.py | 68 | CODE | |
| LOW | skills/lark-slides/scripts/iconpark_tool.py | 170 | CODE | |
| LOW | skills/lark-slides/scripts/xml_lint.py | 917 | CODE | |
| LOW | skills/lark-slides/scripts/xml_lint.py | 1045 | CODE | |
| LOW | skills/lark-slides/scripts/xml_lint.py | 2000 | CODE | |
| LOW | skills/lark-slides/scripts/xml_lint_test.py | 661 | CODE | |
| LOW | skills/lark-slides/scripts/sxsd_validator.py | 317 | CODE | |
| LOW | skills/lark-slides/scripts/sxsd_validator.py | 537 | CODE | |
| LOW | skills/lark-slides/scripts/sxsd_validator.py | 591 | CODE | |
| LOW | skills/lark-slides/scripts/sxsd_validator.py | 763 | CODE | |
| LOW | skills/lark-slides/scripts/sxsd_validator.py | 369 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_sheet_range.py | 75 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_chart_quality_check.py | 704 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_chart_quality_check.py | 838 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_chart_size_advisor.py | 32 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_detect_subtables.py | 61 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_detect_subtables.py | 164 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_detect_subtables.py | 262 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_detect_subtables.py | 309 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_sheet_read_cli.py | 175 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/lark-slides/scripts/iconpark_tool.py | 5 | CODE | |
| LOW | skills/lark-slides/scripts/xml_text_overlap_lint.py | 8 | CODE | |
| LOW | skills/lark-slides/scripts/iconpark_tool_test.py | 3 | CODE | |
| LOW | skills/lark-slides/scripts/xml_lint.py | 6 | CODE | |
| LOW | skills/lark-slides/scripts/xml_lint_test.py | 3 | CODE | |
| LOW | skills/lark-slides/scripts/sxsd_validator.py | 6 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_profile_table.py | 6 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_sheet_range.py | 5 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_inspect_workbook.py | 6 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_chart_size_rules.py | 6 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_chart_quality_check.py | 21 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_chart_size_advisor.py | 6 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_detect_subtables.py | 6 | CODE | |
| LOW | skills/lark-sheets/scripts/lark_sheet_read_cli.py | 5 | CODE |
| 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 | 719 | "API_KEY=<your-api-key>", | CODE |
| HIGH | internal/qualitygate/publiccontent/scan_test.go | 1628 | "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 |
|---|---|---|---|---|
| HIGH | skills/lark-sheets/scripts/lark_detect_subtables.py | 133 | except (TypeError, ValueError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/lark-sheets/scripts/lark_chart_quality_check.py | 816 | def _update_series_state(state: dict[str, Any], value: Any) -> None: | CODE |