Claude Code / Codex / OpenCode agent skills for writing Chinese web novels (网文): 扫榜、拆文、写作、去AI味、封面全流程,长篇短篇都支持 | 13 skills for novel writing and long-form fiction with file-based continuity tracking. MIT.
This report summarizes scanner evidence for zenstory-ai/oh-story-claudecode, a Python project with 7,438 GitHub stars. SynthScan examined 167,847 lines of code across 775 source files, recording 909 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 10.8 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 552 finding(s).
Are imports declared and package/API names verified? 66 finding(s).
Are wrappers, guards, and repeated structures necessary? 650 finding(s).
Which changes need focused human review? 909 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 909 distinct pattern matches across 13 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 |
|---|---|---|---|---|
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | maintain evidence-backed author preferences and deterministic markdown views. the language model supplies compact semant | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | maintain evidence-backed author preferences and deterministic markdown views. the language model supplies compact semant | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | maintain evidence-backed author preferences and deterministic markdown views. the language model supplies compact semant | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | maintain evidence-backed author preferences and deterministic markdown views. the language model supplies compact semant | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | maintain evidence-backed author preferences and deterministic markdown views. the language model supplies compact semant | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 不校验整份 state,只取书名——书级 store 一旦建立,书名以 state 为准, 书目录改名不影响。 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 不校验整份 state,只取书名——书级 store 一旦建立,书名以 state 为准, 书目录改名不影响。 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 不校验整份 state,只取书名——书级 store 一旦建立,书名以 state 为准, 书目录改名不影响。 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 不校验整份 state,只取书名——书级 store 一旦建立,书名以 state 为准, 书目录改名不影响。 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 不校验整份 state,只取书名——书级 store 一旦建立,书名以 state 为准, 书目录改名不影响。 | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | --workspace 指到的其实是多书工作区里的一本书时,返回真正的创作工作区。 认三种迹象,任一成立即是:①工作区的上一层目录叫 长篇 / 短篇(story-setup 的书 目录约定,返回再上一层);②某个祖先目录有 .active- | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | --workspace 指到的其实是多书工作区里的一本书时,返回真正的创作工作区。 认三种迹象,任一成立即是:①工作区的上一层目录叫 长篇 / 短篇(story-setup 的书 目录约定,返回再上一层);②某个祖先目录有 .active- | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | --workspace 指到的其实是多书工作区里的一本书时,返回真正的创作工作区。 认三种迹象,任一成立即是:①工作区的上一层目录叫 长篇 / 短篇(story-setup 的书 目录约定,返回再上一层);②某个祖先目录有 .active- | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | --workspace 指到的其实是多书工作区里的一本书时,返回真正的创作工作区。 认三种迹象,任一成立即是:①工作区的上一层目录叫 长篇 / 短篇(story-setup 的书 目录约定,返回再上一层);②某个祖先目录有 .active- | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | --workspace 指到的其实是多书工作区里的一本书时,返回真正的创作工作区。 认三种迹象,任一成立即是:①工作区的上一层目录叫 长篇 / 短篇(story-setup 的书 目录约定,返回再上一层);②某个祖先目录有 .active- | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 单书布局:书根就是工作区(正文/、大纲/、追踪/ 直接在工作区根)。 同一目录还可能是多书工作区里的一本书被误传成了 --workspace(书目录自己也含 .story/作者记忆/)。那时按单书布局处理会把书级 state 挪进 书级/、 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 单书布局:书根就是工作区(正文/、大纲/、追踪/ 直接在工作区根)。 同一目录还可能是多书工作区里的一本书被误传成了 --workspace(书目录自己也含 .story/作者记忆/)。那时按单书布局处理会把书级 state 挪进 书级/、 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 单书布局:书根就是工作区(正文/、大纲/、追踪/ 直接在工作区根)。 同一目录还可能是多书工作区里的一本书被误传成了 --workspace(书目录自己也含 .story/作者记忆/)。那时按单书布局处理会把书级 state 挪进 书级/、 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 单书布局:书根就是工作区(正文/、大纲/、追踪/ 直接在工作区根)。 同一目录还可能是多书工作区里的一本书被误传成了 --workspace(书目录自己也含 .story/作者记忆/)。那时按单书布局处理会把书级 state 挪进 书级/、 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 单书布局:书根就是工作区(正文/、大纲/、追踪/ 直接在工作区根)。 同一目录还可能是多书工作区里的一本书被误传成了 --workspace(书目录自己也含 .story/作者记忆/)。那时按单书布局处理会把书级 state 挪进 书级/、 | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 单书布局的自愈:旧版把书级 state(带 state.book)写在了项目级位置,此后项目级 读写一律失败。带 --book-root {工作区} 运行任一命令时,把它原子移进书级子目录, 再在项目级位置补一份空 state 重建视图。s | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 单书布局的自愈:旧版把书级 state(带 state.book)写在了项目级位置,此后项目级 读写一律失败。带 --book-root {工作区} 运行任一命令时,把它原子移进书级子目录, 再在项目级位置补一份空 state 重建视图。s | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 单书布局的自愈:旧版把书级 state(带 state.book)写在了项目级位置,此后项目级 读写一律失败。带 --book-root {工作区} 运行任一命令时,把它原子移进书级子目录, 再在项目级位置补一份空 state 重建视图。s | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 单书布局的自愈:旧版把书级 state(带 state.book)写在了项目级位置,此后项目级 读写一律失败。带 --book-root {工作区} 运行任一命令时,把它原子移进书级子目录, 再在项目级位置补一份空 state 重建视图。s | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 单书布局的自愈:旧版把书级 state(带 state.book)写在了项目级位置,此后项目级 读写一律失败。带 --book-root {工作区} 运行任一命令时,把它原子移进书级子目录, 再在项目级位置补一份空 state 重建视图。s | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 同一条偏好的身份:kind+scope+断言,scope.value 与 same_scope_value 同样按 casefold 比——否则「urban」「urban」会各建一条,两条同断言一起挤进 prompt。 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 同一条偏好的身份:kind+scope+断言,scope.value 与 same_scope_value 同样按 casefold 比——否则「urban」「urban」会各建一条,两条同断言一起挤进 prompt。 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 同一条偏好的身份:kind+scope+断言,scope.value 与 same_scope_value 同样按 casefold 比——否则「urban」「urban」会各建一条,两条同断言一起挤进 prompt。 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 同一条偏好的身份:kind+scope+断言,scope.value 与 same_scope_value 同样按 casefold 比——否则「urban」「urban」会各建一条,两条同断言一起挤进 prompt。 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 同一条偏好的身份:kind+scope+断言,scope.value 与 same_scope_value 同样按 casefold 比——否则「urban」「urban」会各建一条,两条同断言一起挤进 prompt。 | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 新建条目的断言限一句话。强化已有条目走不到这里——存量长断言必须还能 被确认,否则作者重申老偏好只会派生一条重复条目,库反而更挤。 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 新建条目的断言限一句话。强化已有条目走不到这里——存量长断言必须还能 被确认,否则作者重申老偏好只会派生一条重复条目,库反而更挤。 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 新建条目的断言限一句话。强化已有条目走不到这里——存量长断言必须还能 被确认,否则作者重申老偏好只会派生一条重复条目,库反而更挤。 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 新建条目的断言限一句话。强化已有条目走不到这里——存量长断言必须还能 被确认,否则作者重申老偏好只会派生一条重复条目,库反而更挤。 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 新建条目的断言限一句话。强化已有条目走不到这里——存量长断言必须还能 被确认,否则作者重申老偏好只会派生一条重复条目,库反而更挤。 | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | query 的 items 只带这四个字段,给主会话和脚本按 kind/scope 判断用; reason、evidence 等一律不出 store。 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | query 的 items 只带这四个字段,给主会话和脚本按 kind/scope 判断用; reason、evidence 等一律不出 store。 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | query 的 items 只带这四个字段,给主会话和脚本按 kind/scope 判断用; reason、evidence 等一律不出 store。 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | query 的 items 只带这四个字段,给主会话和脚本按 kind/scope 判断用; reason、evidence 等一律不出 store。 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | query 的 items 只带这四个字段,给主会话和脚本按 kind/scope 判断用; reason、evidence 等一律不出 store。 | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 重要度→本书例外→最近更新→确认次数→编号。 重要度必须排在 scope 之前:超编时先丢的应当是不重要的条目,而不是「凡 全局一律先丢」。scope 在前会让任意数量的 low 本书琐事挤掉 high 的全局 铁律——那恰恰是作者最不愿意 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 重要度→本书例外→最近更新→确认次数→编号。 重要度必须排在 scope 之前:超编时先丢的应当是不重要的条目,而不是「凡 全局一律先丢」。scope 在前会让任意数量的 low 本书琐事挤掉 high 的全局 铁律——那恰恰是作者最不愿意 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 重要度→本书例外→最近更新→确认次数→编号。 重要度必须排在 scope 之前:超编时先丢的应当是不重要的条目,而不是「凡 全局一律先丢」。scope 在前会让任意数量的 low 本书琐事挤掉 high 的全局 铁律——那恰恰是作者最不愿意 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 重要度→本书例外→最近更新→确认次数→编号。 重要度必须排在 scope 之前:超编时先丢的应当是不重要的条目,而不是「凡 全局一律先丢」。scope 在前会让任意数量的 low 本书琐事挤掉 high 的全局 铁律——那恰恰是作者最不愿意 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 重要度→本书例外→最近更新→确认次数→编号。 重要度必须排在 scope 之前:超编时先丢的应当是不重要的条目,而不是「凡 全局一律先丢」。scope 在前会让任意数量的 low 本书琐事挤掉 high 的全局 铁律——那恰恰是作者最不愿意 | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 按渲染后的行把条目装进 query_max_bytes:装不下的跳过而不中断(一条长的 不挡后面的短条)。返回 (结果文档, 全部漏下 id)。 只有 lines 计入预算;items、漏项清单和 `extra`(book_revision | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 按渲染后的行把条目装进 query_max_bytes:装不下的跳过而不中断(一条长的 不挡后面的短条)。返回 (结果文档, 全部漏下 id)。 只有 lines 计入预算;items、漏项清单和 `extra`(book_revision | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 按渲染后的行把条目装进 query_max_bytes:装不下的跳过而不中断(一条长的 不挡后面的短条)。返回 (结果文档, 全部漏下 id)。 只有 lines 计入预算;items、漏项清单和 `extra`(book_revision | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 按渲染后的行把条目装进 query_max_bytes:装不下的跳过而不中断(一条长的 不挡后面的短条)。返回 (结果文档, 全部漏下 id)。 只有 lines 计入预算;items、漏项清单和 `extra`(book_revision | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 按渲染后的行把条目装进 query_max_bytes:装不下的跳过而不中断(一条长的 不挡后面的短条)。返回 (结果文档, 全部漏下 id)。 只有 lines 计入预算;items、漏项清单和 `extra`(book_revision | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 真实查询与写入端估算共用的唯一装填入口:候选已按优先级排好,这里补上 book_revision 等附加字段再装填。两处装填口径一旦分叉就是假阴性——回执 说没事、query 照样丢条。 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 真实查询与写入端估算共用的唯一装填入口:候选已按优先级排好,这里补上 book_revision 等附加字段再装填。两处装填口径一旦分叉就是假阴性——回执 说没事、query 照样丢条。 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 真实查询与写入端估算共用的唯一装填入口:候选已按优先级排好,这里补上 book_revision 等附加字段再装填。两处装填口径一旦分叉就是假阴性——回执 说没事、query 照样丢条。 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 真实查询与写入端估算共用的唯一装填入口:候选已按优先级排好,这里补上 book_revision 等附加字段再装填。两处装填口径一旦分叉就是假阴性——回执 说没事、query 照样丢条。 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 真实查询与写入端估算共用的唯一装填入口:候选已按优先级排好,这里补上 book_revision 等附加字段再装填。两处装填口径一旦分叉就是假阴性——回执 说没事、query 照样丢条。 | STRING |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 0 | 真实查询的纯函数部分:项目级按 kind/scope 过滤(存量 book 条目不参与, migrate 后才回来),书级整个 store 就是这本书的,只按 status/kind 过滤; 合并后按 重要度→本书例外→最近更新 装填。 | STRING |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 0 | 真实查询的纯函数部分:项目级按 kind/scope 过滤(存量 book 条目不参与, migrate 后才回来),书级整个 store 就是这本书的,只按 status/kind 过滤; 合并后按 重要度→本书例外→最近更新 装填。 | STRING |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 0 | 真实查询的纯函数部分:项目级按 kind/scope 过滤(存量 book 条目不参与, migrate 后才回来),书级整个 store 就是这本书的,只按 status/kind 过滤; 合并后按 重要度→本书例外→最近更新 装填。 | STRING |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 0 | 真实查询的纯函数部分:项目级按 kind/scope 过滤(存量 book 条目不参与, migrate 后才回来),书级整个 store 就是这本书的,只按 status/kind 过滤; 合并后按 重要度→本书例外→最近更新 装填。 | STRING |
| HIGH | skills/story/scripts/author_memory_commit.py | 0 | 真实查询的纯函数部分:项目级按 kind/scope 过滤(存量 book 条目不参与, migrate 后才回来),书级整个 store 就是这本书的,只按 status/kind 过滤; 合并后按 重要度→本书例外→最近更新 装填。 | STRING |
| 90 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-agent-permissions.py | 132 | def assert_invalid_capabilities_fail_before_publish(capability_lines: str) -> None: | CODE |
| LOW | scripts/test-agent-permissions.py | 193 | def test_permissions_follow_capabilities_not_names() -> None: | CODE |
| LOW | scripts/test-agent-permissions.py | 244 | def test_empty_and_inherited_tools_are_distinct() -> None: | CODE |
| LOW | scripts/test-agent-permissions.py | 279 | def test_codex_recognizes_other_mutating_tools() -> None: | CODE |
| LOW | scripts/test-agent-permissions.py | 300 | def test_invalid_capability_declarations_fail_closed() -> None: | CODE |
| LOW | scripts/sync-shared-assets.py | 181 | def unmanaged_duplicate_scripts(root: Path, groups: list[Group]) -> list[tuple[str, list[Path]]]: | CODE |
| LOW | scripts/test-scan-runtime-policy.py | 52 | def mutate_filename_with_dead_local_date(fixture: Path) -> None: | CODE |
| LOW | scripts/test-scan-runtime-policy.py | 63 | def mutate_http_get_with_dead_safe_call(fixture: Path) -> None: | CODE |
| LOW | scripts/skill-numbering.py | 356 | def containing_workflow_parent(document: Document, line_index: int) -> int | None: | CODE |
| LOW | scripts/skill-numbering.py | 650 | def unparsable_step_heading_issues(document: Document) -> list[Issue]: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 99 | def test_index_existing_supported_forms() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 737 | def test_legacy_prologue_alignment() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 804 | def test_legacy_summaries_prologue_way_out() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 830 | def test_legacy_table_title_variants() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 854 | def test_fold_prologue_survives_rebuild() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 908 | def test_relation_chart_never_falls_back_to_pinyin() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 944 | def test_relation_chart_font_choice() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 997 | def test_relation_chart_mermaid_edge_cases() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 1021 | def test_digest_reads_observations_and_fields_without_whole_caches() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 1069 | def test_plan_next_prints_only_upcoming_batches() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 1086 | def test_plan_carries_every_dispatch_field() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 1122 | def test_plot_point_floor_scales_with_chapter_length() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 1162 | def test_extractor_self_check_patterns_match_commit_format() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 1182 | def test_extractor_write_guard() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 1228 | def test_invalid_root_exits_nonzero() -> None: | CODE |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 218 | def test_inspection_legacy_and_partial() -> None: | STRING |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 272 | def test_plan_commit_repair_and_state_preservation() -> None: | STRING |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 386 | def test_split_survives_replanning() -> None: | STRING |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 399 | def test_panlong_acceptance_samples() -> None: | STRING |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 513 | def test_audit_recovery_regressions() -> None: | STRING |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 599 | def test_audit_stage_and_mapping_regressions() -> None: | STRING |
| LOW | scripts/test-scan-runtime.js | 324 | function testWindowsInvocationBuilder(modulePath) { | CODE |
| LOW | scripts/test-scan-runtime.js | 475 | function testJjwxcDetailFailureIsolation() { | CODE |
| LOW | scripts/test-scan-runtime.js | 559 | function testQidianFieldContractAndDescriptionLimit() { | CODE |
| LOW | scripts/test-scan-runtime.js | 751 | function testQidianCaptchaCheckIgnoresBookText() { | CODE |
| LOW | scripts/test-scan-runtime.js | 768 | function testQidianLibraryFontDecoding() { | CODE |
| LOW | scripts/test-scan-runtime.js | 1204 | function testQimaoPartialTargetStatus() { | CODE |
| LOW | scripts/test-scan-runtime.js | 1376 | function testQimaoLibraryPagedCollection() { | CODE |
| LOW | scripts/test-scan-runtime.js | 1438 | function testQimaoLibraryPageFailures() { | CODE |
| LOW | scripts/test-scan-runtime.js | 1498 | function testQimaoLibraryFallbacksAndQuality() { | CODE |
| LOW | scripts/test-scan-runtime.js | 1522 | function testQimaoLibraryArgumentValidation() { | CODE |
| LOW | scripts/test-scan-runtime.js | 1542 | function testLongScanArgumentValidation() { | CODE |
| LOW | scripts/test-scan-runtime.js | 1575 | function testHeiyanFieldDriftAndWordFormat() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2029 | function testCdpResetRefusesStaleEndpoint() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2068 | function testCdpResetRefusesUnhealthyTcpHolder() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2085 | function testCdpResetSucceedsWhenPortActuallyFrees() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2105 | function testCdpPlainReuseUnchanged() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2123 | function testCdpRejectsEndpointNotFromThisLaunch() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2146 | function testCdpRejectsForeignHolderWhileLauncherAlive() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2183 | function testCdpRejectsPortHeldOutsideSpawnedTree() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2209 | function testCdpAcceptsPortHeldByLaunchedChildProcess() { | CODE |
| LOW | scripts/test-scan-runtime.js | 2228 | function testCdpRejectsUnverifiableIdentity() { | CODE |
| LOW | scripts/check-current-skill-contracts.py | 529 | def undecodable_source_findings(roots: Sequence[Path]) -> List[Finding]: | CODE |
| LOW | scripts/check-current-skill-contracts.py | 628 | def semantic_primary_fallback_findings( | CODE |
| LOW | scripts/check-current-skill-contracts.py | 735 | def analyze_moment_routing_findings(repo_root: Path) -> List[Finding]: | CODE |
| LOW | scripts/check-current-skill-contracts.py | 756 | def analyze_dispatch_default_findings(path: Path) -> List[Finding]: | CODE |
| LOW | scripts/check-current-skill-contracts.py | 853 | def author_note_preflight_findings(text: str, path: Path) -> List[Finding]: | CODE |
| LOW | scripts/check-current-skill-contracts.py | 945 | def parse_frontmatter_version(path: Path) -> Optional[str]: | CODE |
| LOW | scripts/check-current-skill-contracts.py | 961 | def extract_current_version_fields(text: str) -> dict[str, str]: | CODE |
| LOW | scripts/check-current-skill-contracts.py | 989 | def upgrading_version_findings( | CODE |
| 299 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/test-scan-aggregate.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test-scan-aggregate.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/test-scan-aggregate.py | 561 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | scripts/test-scan-aggregate.py | 564 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | scripts/test-ai-patterns.sh | 1044 | # ============================================================ | COMMENT |
| MEDIUM | scripts/test-ai-patterns.sh | 1047 | # ============================================================ | COMMENT |
| MEDIUM | scripts/test-ai-patterns.sh | 1300 | # ── HTML 注释不是正文 ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-ai-patterns.sh | 1360 | # ── review 分类契约:每条 finding 都带 review=semantic|mechanical ──────────────── | COMMENT |
| MEDIUM | scripts/test-prose-net-parity.sh | 296 | # ── B. 命令函数 parity(codex python vs zcode JS),CI 硬保证 ───────────────── | COMMENT |
| MEDIUM | scripts/test-prose-net-parity.sh | 515 | # ── C. 未归核面 parity(codex python vs JS core),CI 硬保证 ───────────────────── | COMMENT |
| MEDIUM | scripts/check-hook-regex-sync.sh | 148 | # ── 毒句式 / 兜底网 js↔py 正则与常量同步锁 ────────────────────────────────────── | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 412 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 414 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 672 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 674 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 720 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 722 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 962 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 964 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 1076 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 1078 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 1312 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-long-write/scripts/author_memory_commit.py | 1314 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 412 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 414 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 672 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 674 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 720 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 722 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 962 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 964 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 1076 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 1078 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 1312 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-deslop/scripts/author_memory_commit.py | 1314 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 412 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 414 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 672 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 674 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 720 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 722 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 962 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 964 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 1076 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 1078 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 1312 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/story-review/scripts/author_memory_commit.py | 1314 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …/story-setup/references/zcode/hooks/story_hook_core.js | 796 | // ── 毒句式(确定性 AI 句式指纹,写后正文网热路径)───────────────────────────── | COMMENT |
| MEDIUM | …ry-setup/references/templates/hooks/story_hook_core.js | 796 | // ── 毒句式(确定性 AI 句式指纹,写后正文网热路径)───────────────────────────── | COMMENT |
| MEDIUM | …-setup/references/antigravity/hooks/story_hook_core.js | 796 | // ── 毒句式(确定性 AI 句式指纹,写后正文网热路径)───────────────────────────── | COMMENT |
| MEDIUM | …lls/story-setup/references/opencode/story_hook_core.js | 796 | // ── 毒句式(确定性 AI 句式指纹,写后正文网热路径)───────────────────────────── | COMMENT |
| MEDIUM | …ills/story-short-write/scripts/author_memory_commit.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ills/story-short-write/scripts/author_memory_commit.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ills/story-short-write/scripts/author_memory_commit.py | 412 | # --------------------------------------------------------------------------- | COMMENT |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/test-agent-permissions.py | 384 | except json.JSONDecodeError: | CODE |
| HIGH | scripts/test-antigravity-hook-merge.py | 44 | except MODULE.MergeError: | CODE |
| HIGH | scripts/test-antigravity-skills-deploy.py | 64 | except MODULE.DeployError: | CODE |
| HIGH | scripts/test-codex-hook-merge.py | 87 | except merger.MergeError: | CODE |
| HIGH | scripts/sync-opencode.py | 212 | except ValueError: | CODE |
| HIGH | scripts/sync-opencode.py | 523 | except OSError: | CODE |
| HIGH | scripts/sync-opencode.py | 494 | except OSError: | CODE |
| HIGH | scripts/sync-opencode.py | 508 | except OSError: | CODE |
| HIGH | scripts/generate-codex-agents.py | 234 | except OSError: | CODE |
| HIGH | scripts/generate-codex-agents.py | 248 | except OSError: | CODE |
| HIGH | scripts/bench/metrics.py | 50 | except (ValueError, KeyError, TypeError): | CODE |
| HIGH | skills/story-long-write/scripts/build_writer_prompt.py | 617 | except AttributeError: | CODE |
| HIGH | skills/story-long-write/scripts/author_memory_commit.py | 219 | except FileNotFoundError: | CODE |
| HIGH | skills/story-long-write/scripts/tracking_commit.py | 263 | except FileNotFoundError: | CODE |
| HIGH | skills/story-long-write/scripts/tracking_commit.py | 300 | except FileNotFoundError: | CODE |
| HIGH | skills/story-deslop/scripts/author_memory_commit.py | 219 | except FileNotFoundError: | CODE |
| HIGH | skills/story-review/scripts/author_memory_commit.py | 219 | except FileNotFoundError: | CODE |
| HIGH | skills/story-review/scripts/tracking_commit.py | 263 | except FileNotFoundError: | CODE |
| HIGH | skills/story-review/scripts/tracking_commit.py | 300 | except FileNotFoundError: | CODE |
| HIGH | skills/story-import/scripts/tracking_commit.py | 263 | except FileNotFoundError: | CODE |
| HIGH | skills/story-import/scripts/tracking_commit.py | 300 | except FileNotFoundError: | CODE |
| HIGH | …story-setup/references/codex/hooks/story_codex_hook.py | 94 | except Exception: | CODE |
| HIGH | …story-setup/references/codex/hooks/story_codex_hook.py | 544 | except (OSError, UnicodeError): | CODE |
| HIGH | …story-setup/references/codex/hooks/story_codex_hook.py | 1630 | except Exception: | CODE |
| HIGH | …story-setup/references/codex/hooks/story_codex_hook.py | 1657 | except Exception: | CODE |
| HIGH | …story-setup/references/codex/hooks/story_codex_hook.py | 79 | except Exception: | CODE |
| HIGH | …story-setup/references/codex/hooks/story_codex_hook.py | 1272 | except ValueError: | CODE |
| HIGH | skills/story-setup/scripts/merge-antigravity-hooks.py | 59 | except FileNotFoundError: | CODE |
| HIGH | …ills/story-short-write/scripts/author_memory_commit.py | 219 | except FileNotFoundError: | CODE |
| HIGH | skills/story/scripts/author_memory_commit.py | 219 | except FileNotFoundError: | CODE |
| HIGH | …ills/story-long-analyze/scripts/build_chapter_index.py | 64 | except OSError: | CODE |
| HIGH | …ls/story-long-analyze/scripts/render_relation_chart.py | 77 | except OSError: | CODE |
| HIGH | skills/story-long-analyze/scripts/inspiration_index.py | 68 | except OSError: | CODE |
| HIGH | …ills/story-long-analyze/scripts/manage_analysis_run.py | 90 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-agent-permissions.py | 75 | CODE | |
| LOW | scripts/test-agent-permissions.py | 244 | CODE | |
| LOW | scripts/test-agent-permissions.py | 314 | CODE | |
| LOW | scripts/sync-shared-assets.py | 181 | CODE | |
| LOW | scripts/sync-shared-assets.py | 211 | CODE | |
| LOW | scripts/shared-references.py | 80 | CODE | |
| LOW | scripts/shared-references.py | 301 | CODE | |
| LOW | scripts/skill-numbering.py | 261 | CODE | |
| LOW | scripts/skill-numbering.py | 373 | CODE | |
| LOW | scripts/skill-numbering.py | 537 | CODE | |
| LOW | scripts/skill-numbering.py | 826 | CODE | |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 203 | CODE | |
| LOW | scripts/check-current-skill-contracts.py | 321 | CODE | |
| LOW | scripts/check-current-skill-contracts.py | 563 | CODE | |
| LOW | scripts/check-current-skill-contracts.py | 773 | CODE | |
| LOW | scripts/check-current-skill-contracts.py | 878 | CODE | |
| LOW | scripts/check-current-skill-contracts.py | 1205 | CODE | |
| LOW | scripts/check-current-skill-contracts.py | 1244 | CODE | |
| LOW | scripts/test-scan-aggregate.py | 612 | CODE | |
| LOW | scripts/test-writer-pipeline.py | 296 | CODE | |
| LOW | scripts/test-author-memory-commit.py | 169 | CODE | |
| LOW | scripts/sync-opencode.py | 75 | CODE | |
| LOW | scripts/sync-opencode.py | 250 | CODE | |
| LOW | scripts/sync-opencode.py | 415 | CODE | |
| LOW | scripts/static-check.py | 200 | CODE | |
| LOW | scripts/static-check.py | 300 | CODE | |
| LOW | scripts/static-check.py | 381 | CODE | |
| LOW | scripts/static-check.py | 439 | CODE | |
| LOW | scripts/test-shared-references.py | 381 | CODE | |
| LOW | scripts/generate-codex-agents.py | 34 | CODE | |
| LOW | scripts/generate-codex-agents.py | 187 | CODE | |
| LOW | scripts/bench/metrics.py | 62 | CODE | |
| LOW | scripts/bench/metrics.py | 124 | CODE | |
| LOW | skills/story-long-write/scripts/build_writer_prompt.py | 282 | CODE | |
| LOW | skills/story-long-write/scripts/author_memory_commit.py | 611 | CODE | |
| LOW | skills/story-long-write/scripts/author_memory_commit.py | 813 | CODE | |
| LOW | skills/story-long-write/scripts/author_memory_commit.py | 941 | CODE | |
| LOW | skills/story-long-write/scripts/author_memory_commit.py | 1615 | CODE | |
| LOW | skills/story-long-write/scripts/tracking_commit.py | 1357 | CODE | |
| LOW | skills/story-long-write/scripts/tracking_commit.py | 1609 | CODE | |
| LOW | skills/story-long-write/scripts/outline_view.py | 63 | CODE | |
| LOW | skills/story-long-write/scripts/outline_view.py | 126 | CODE | |
| LOW | skills/story-long-write/scripts/outline_view.py | 177 | CODE | |
| LOW | skills/story-long-write/scripts/storyctl.py | 480 | CODE | |
| LOW | skills/story-deslop/scripts/author_memory_commit.py | 611 | CODE | |
| LOW | skills/story-deslop/scripts/author_memory_commit.py | 813 | CODE | |
| LOW | skills/story-deslop/scripts/author_memory_commit.py | 941 | CODE | |
| LOW | skills/story-deslop/scripts/author_memory_commit.py | 1615 | CODE | |
| LOW | skills/story-review/scripts/author_memory_commit.py | 611 | CODE | |
| LOW | skills/story-review/scripts/author_memory_commit.py | 813 | CODE | |
| LOW | skills/story-review/scripts/author_memory_commit.py | 941 | CODE | |
| LOW | skills/story-review/scripts/author_memory_commit.py | 1615 | CODE | |
| LOW | skills/story-review/scripts/tracking_commit.py | 1357 | CODE | |
| LOW | skills/story-review/scripts/tracking_commit.py | 1609 | CODE | |
| LOW | skills/story-import/scripts/tracking_commit.py | 1357 | CODE | |
| LOW | skills/story-import/scripts/tracking_commit.py | 1609 | CODE | |
| LOW | skills/story-import/scripts/build_outline_brief.py | 222 | CODE | |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 328 | CODE | |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 900 | CODE | |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 964 | CODE | |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-agent-permissions.py | 4 | CODE | |
| LOW | scripts/test-antigravity-hook-merge.py | 4 | CODE | |
| LOW | scripts/sync-shared-assets.py | 8 | CODE | |
| LOW | scripts/shared-references.py | 4 | CODE | |
| LOW | scripts/test-scan-runtime-policy.py | 4 | CODE | |
| LOW | scripts/check-short-analysis-scope.py | 4 | CODE | |
| LOW | scripts/skill-numbering.py | 10 | CODE | |
| LOW | scripts/generate-codex-hooks.py | 4 | CODE | |
| LOW | scripts/check-author-reports.py | 20 | CODE | |
| LOW | scripts/test-long-analyze-runtime-refactor.py | 4 | CODE | |
| LOW | scripts/test-long-analyze-runtime.py | 4 | CODE | |
| LOW | scripts/check-current-skill-contracts.py | 10 | CODE | |
| LOW | scripts/check-reference-similarity.py | 4 | CODE | |
| LOW | scripts/test-storyctl.py | 2 | CODE | |
| LOW | scripts/test-claude-plugin-lifecycle.py | 7 | CODE | |
| LOW | scripts/test-scan-aggregate.py | 9 | CODE | |
| LOW | scripts/test-tracking-commit.py | 4 | CODE | |
| LOW | scripts/test-static-check.py | 4 | CODE | |
| LOW | scripts/check-agent-reference-consumers.py | 4 | CODE | |
| LOW | scripts/test-antigravity-skills-deploy.py | 4 | CODE | |
| LOW | scripts/test-author-memory-commit.py | 4 | CODE | |
| LOW | scripts/test-codex-hook-merge.py | 4 | CODE | |
| LOW | scripts/check-plugin-packaging.py | 4 | CODE | |
| LOW | scripts/test-inspiration-index.py | 4 | CODE | |
| LOW | scripts/test-inspiration-index.py | 7 | CODE | |
| LOW | scripts/test-inspiration-index.py | 9 | CODE | |
| LOW | scripts/test-current-skill-contracts.py | 4 | CODE | |
| LOW | scripts/sync-opencode.py | 9 | CODE | |
| LOW | scripts/static-check.py | 4 | CODE | |
| LOW | scripts/test-chapter-completion-lifecycle.py | 4 | CODE | |
| LOW | scripts/test-doc-budget.py | 4 | CODE | |
| LOW | scripts/test-shared-assets.py | 4 | CODE | |
| LOW | scripts/test-plugin-packaging.py | 4 | CODE | |
| LOW | scripts/test-shared-references.py | 4 | CODE | |
| LOW | scripts/generate-codex-agents.py | 9 | CODE | |
| LOW | scripts/test-style-precedence.py | 7 | CODE | |
| LOW | skills/story-long-write/scripts/author_memory_commit.py | 14 | CODE | |
| LOW | …ills/story-long-write/scripts/build_architect_brief.py | 31 | CODE | |
| LOW | skills/story-long-write/scripts/tracking_commit.py | 10 | CODE | |
| LOW | skills/story-long-write/scripts/wordcount_core.py | 4 | CODE | |
| LOW | skills/story-long-write/scripts/storyctl.py | 4 | CODE | |
| LOW | skills/story-deslop/scripts/author_memory_commit.py | 14 | CODE | |
| LOW | skills/story-review/scripts/author_memory_commit.py | 14 | CODE | |
| LOW | skills/story-review/scripts/tracking_commit.py | 10 | CODE | |
| LOW | skills/story-review/scripts/wordcount_core.py | 4 | CODE | |
| LOW | skills/story-import/scripts/tracking_commit.py | 10 | CODE | |
| LOW | skills/story-import/scripts/wordcount_core.py | 4 | CODE | |
| LOW | skills/story-import/scripts/build_outline_brief.py | 28 | CODE | |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 7 | CODE | |
| LOW | skills/story-setup/scripts/copy-path-safety.py | 4 | CODE | |
| LOW | skills/story-setup/scripts/merge-codex-hooks.py | 9 | CODE | |
| LOW | skills/story-setup/scripts/merge-claude-settings.py | 9 | CODE | |
| LOW | skills/story-setup/scripts/deploy-antigravity-skills.py | 9 | CODE | |
| LOW | skills/story-setup/scripts/merge-antigravity-hooks.py | 8 | CODE | |
| LOW | …ills/story-short-write/scripts/author_memory_commit.py | 14 | CODE | |
| LOW | skills/story/scripts/author_memory_commit.py | 14 | CODE | |
| LOW | …ills/story-long-analyze/scripts/build_chapter_index.py | 8 | CODE | |
| LOW | …ls/story-long-analyze/scripts/render_relation_chart.py | 12 | CODE | |
| LOW | skills/story-long-analyze/scripts/inspiration_index.py | 10 | CODE | |
| LOW | …ills/story-long-analyze/scripts/manage_analysis_run.py | 10 | CODE | |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check-python-invocation.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/test-hook-encoding-portable.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/test-charcount-portable.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/test-prose-net-parity.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/check-doc-budget.sh | 1 | #!/bin/bash | COMMENT |
| LOW | skills/story-long-write/scripts/author_memory_commit.py | 41 | # 真正读到的这几行,不是 JSON 外壳(编号、kind、scope 只给主会话和脚本看)。 | COMMENT |
| LOW | skills/story-long-write/scripts/check-ai-patterns.js | 181 | // either-or「不是A就是B / 不是A也是B」里紧贴的「是」是连词的一部分,不是肯定项系动词。 | COMMENT |
| LOW | skills/story-long-write/scripts/check-ai-patterns.js | 201 | COMMENT | |
| LOW | skills/story-long-write/scripts/check-ai-patterns.js | 241 | // 章尾替读者预告下一章走向是 AI 收尾腔。只扫文末窗口(剥引号后可见字数,按行取整), | COMMENT |
| LOW | skills/story-long-write/scripts/check-ai-patterns.js | 261 | // 基线天然高于长篇章中段,故两个总体分别报数。 | COMMENT |
| LOW | skills/story-long-write/scripts/check-ai-patterns.js | 281 | // not-is-comparison mechanical 固定句式模板「不是A,而是B」,blocking | COMMENT |
| LOW | skills/story-long-write/scripts/check-ai-patterns.js | 1521 | // Catch compact forms such as “不是A是B”, but only within the first clause — | COMMENT |
| LOW | skills/story-deslop/scripts/author_memory_commit.py | 41 | # 真正读到的这几行,不是 JSON 外壳(编号、kind、scope 只给主会话和脚本看)。 | COMMENT |
| LOW | skills/story-deslop/scripts/check-ai-patterns.js | 181 | // either-or「不是A就是B / 不是A也是B」里紧贴的「是」是连词的一部分,不是肯定项系动词。 | COMMENT |
| LOW | skills/story-deslop/scripts/check-ai-patterns.js | 201 | COMMENT | |
| LOW | skills/story-deslop/scripts/check-ai-patterns.js | 241 | // 章尾替读者预告下一章走向是 AI 收尾腔。只扫文末窗口(剥引号后可见字数,按行取整), | COMMENT |
| LOW | skills/story-deslop/scripts/check-ai-patterns.js | 261 | // 基线天然高于长篇章中段,故两个总体分别报数。 | COMMENT |
| LOW | skills/story-deslop/scripts/check-ai-patterns.js | 281 | // not-is-comparison mechanical 固定句式模板「不是A,而是B」,blocking | COMMENT |
| LOW | skills/story-deslop/scripts/check-ai-patterns.js | 1521 | // Catch compact forms such as “不是A是B”, but only within the first clause — | COMMENT |
| LOW | skills/story-review/scripts/author_memory_commit.py | 41 | # 真正读到的这几行,不是 JSON 外壳(编号、kind、scope 只给主会话和脚本看)。 | COMMENT |
| LOW | skills/story-review/scripts/check-ai-patterns.js | 181 | // either-or「不是A就是B / 不是A也是B」里紧贴的「是」是连词的一部分,不是肯定项系动词。 | COMMENT |
| LOW | skills/story-review/scripts/check-ai-patterns.js | 201 | COMMENT | |
| LOW | skills/story-review/scripts/check-ai-patterns.js | 241 | // 章尾替读者预告下一章走向是 AI 收尾腔。只扫文末窗口(剥引号后可见字数,按行取整), | COMMENT |
| LOW | skills/story-review/scripts/check-ai-patterns.js | 261 | // 基线天然高于长篇章中段,故两个总体分别报数。 | COMMENT |
| LOW | skills/story-review/scripts/check-ai-patterns.js | 281 | // not-is-comparison mechanical 固定句式模板「不是A,而是B」,blocking | COMMENT |
| LOW | skills/story-review/scripts/check-ai-patterns.js | 1521 | // Catch compact forms such as “不是A是B”, but only within the first clause — | COMMENT |
| LOW | skills/browser-cdp/scripts/setup-cdp-chrome.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | skills/browser-cdp/scripts/setup-cdp-chrome.js | 21 | // 就是本次启动的实例」——身份取得到且与重建前不同、spawn 出的进程还活着、端口的 LISTEN | COMMENT |
| LOW | …/story-setup/references/zcode/hooks/story_hook_core.js | 801 | // maskQuotedSpans 为何用问号而不是句号),占位后仍残留引号字符(跨行对话/未闭合) | COMMENT |
| LOW | …/story-setup/references/zcode/hooks/story_hook_core.js | 1241 | } | COMMENT |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 201 | return False | COMMENT |
| LOW | …ory-setup/references/templates/hooks/story_hook_cli.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | …ferences/templates/hooks/guard-outline-before-prose.sh | 1 | #!/bin/bash | COMMENT |
| LOW | …ferences/templates/hooks/guard-outline-before-prose.sh | 21 | # 字面量 vs UTF-8 字节相等)才稳定(issue #164)。路径抽取走 node 共享核,node 自身按 UTF-8 | COMMENT |
| LOW | …ry-setup/references/templates/hooks/story_hook_core.js | 801 | // maskQuotedSpans 为何用问号而不是句号),占位后仍残留引号字符(跨行对话/未闭合) | COMMENT |
| LOW | …ry-setup/references/templates/hooks/story_hook_core.js | 1241 | } | COMMENT |
| LOW | …up/references/templates/hooks/validate-story-commit.sh | 61 | # 冒号/空白都用交替而不是把全角字符塞进方括号字符组:含全角字符的字符组在 C 区域会被 | COMMENT |
| LOW | …/references/templates/hooks/check-prose-after-write.sh | 1 | #!/bin/bash | COMMENT |
| LOW | …-setup/references/antigravity/hooks/story_hook_core.js | 801 | // maskQuotedSpans 为何用问号而不是句号),占位后仍残留引号字符(跨行对话/未闭合) | COMMENT |
| LOW | …-setup/references/antigravity/hooks/story_hook_core.js | 1241 | } | COMMENT |
| LOW | …lls/story-setup/references/opencode/story_hook_core.js | 801 | // maskQuotedSpans 为何用问号而不是句号),占位后仍残留引号字符(跨行对话/未闭合) | COMMENT |
| LOW | …lls/story-setup/references/opencode/story_hook_core.js | 1241 | } | COMMENT |
| LOW | skills/story-setup/references/opencode/pre-commit.sh | 1 | #!/bin/sh | COMMENT |
| LOW | …ills/story-short-write/scripts/author_memory_commit.py | 41 | # 真正读到的这几行,不是 JSON 外壳(编号、kind、scope 只给主会话和脚本看)。 | COMMENT |
| LOW | skills/story-short-write/scripts/check-ai-patterns.js | 181 | // either-or「不是A就是B / 不是A也是B」里紧贴的「是」是连词的一部分,不是肯定项系动词。 | COMMENT |
| LOW | skills/story-short-write/scripts/check-ai-patterns.js | 201 | COMMENT | |
| LOW | skills/story-short-write/scripts/check-ai-patterns.js | 241 | // 章尾替读者预告下一章走向是 AI 收尾腔。只扫文末窗口(剥引号后可见字数,按行取整), | COMMENT |
| LOW | skills/story-short-write/scripts/check-ai-patterns.js | 261 | // 基线天然高于长篇章中段,故两个总体分别报数。 | COMMENT |
| LOW | skills/story-short-write/scripts/check-ai-patterns.js | 281 | // not-is-comparison mechanical 固定句式模板「不是A,而是B」,blocking | COMMENT |
| LOW | skills/story-short-write/scripts/check-ai-patterns.js | 1521 | // Catch compact forms such as “不是A是B”, but only within the first clause — | COMMENT |
| LOW | skills/story/scripts/author_memory_commit.py | 41 | # 真正读到的这几行,不是 JSON 外壳(编号、kind、scope 只给主会话和脚本看)。 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/test-skill-numbering.sh | 63 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 71 | ### Step 2: former second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 73 | #### Step 4: nested first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 77 | #### Step 8: nested second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 87 | ### Step 7: beta first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 89 | ### Step 9: beta second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 129 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 133 | ### Step 2: inserted | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 137 | ### Step 3: former second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 139 | #### Step 1: nested first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 143 | #### Step 2: nested second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 153 | ### Step 1: beta first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 155 | ### Step 2: beta second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 180 | ### Step 1: only step | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 189 | ### Step 9: should become one | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 210 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 216 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 253 | ### Step 1: alpha only | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 257 | ### Step 1: beta first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 274 | ### Step 8: alpha | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 281 | ### Step 9: beta | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 375 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 382 | ### Step 2: former second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 108 | assert_contains "$WORK/dry-run.out" "+### Step 2: inserted" | CODE |
| LOW⚡ | scripts/test-skill-numbering.sh | 109 | assert_contains "$WORK/dry-run.out" "+### Step 3: former second" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/test-skill-numbering.sh | 63 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 71 | ### Step 2: former second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 73 | #### Step 4: nested first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 77 | #### Step 8: nested second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 87 | ### Step 7: beta first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 89 | ### Step 9: beta second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 129 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 133 | ### Step 2: inserted | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 137 | ### Step 3: former second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 139 | #### Step 1: nested first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 143 | #### Step 2: nested second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 153 | ### Step 1: beta first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 155 | ### Step 2: beta second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 180 | ### Step 1: only step | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 189 | ### Step 9: should become one | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 210 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 216 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 253 | ### Step 1: alpha only | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 257 | ### Step 1: beta first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 274 | ### Step 8: alpha | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 281 | ### Step 9: beta | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 375 | ### Step 1: first | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 382 | ### Step 2: former second | COMMENT |
| LOW⚡ | scripts/test-skill-numbering.sh | 108 | assert_contains "$WORK/dry-run.out" "+### Step 2: inserted" | CODE |
| LOW⚡ | scripts/test-skill-numbering.sh | 109 | assert_contains "$WORK/dry-run.out" "+### Step 3: former second" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/generate-codex-hooks.py | 29 | 'ROOT="$(cd "$ROOT" 2>/dev/null && pwd)" || exit 0; ' | CODE |
| HIGH | scripts/test-scan-aggregate.py | 376 | u.ab = (port, cmd, target) => { url = target || url; process.stderr.write("OPEN " + url + "\n"); }; | CODE |
| HIGH | scripts/test-scan-aggregate.py | 382 | if (process.env.STUB_BLOCK_FEMALE && url.includes("audience0")) return {host: "verify.example.com", hasState: false} | CODE |
| HIGH | scripts/test-scan-aggregate.py | 393 | return null; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/skill-numbering.py | 845 | except Exception: | CODE |
| LOW | scripts/check-openclaw-skills.sh | 62 | except Exception: | CODE |
| LOW | scripts/check-openclaw-skills.sh | 88 | except Exception as exc: | CODE |
| LOW | skills/story-long-write/scripts/storyctl.py | 56 | except Exception as exc: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 39 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 61 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 79 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 94 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 102 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 151 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 475 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 586 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 596 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 1453 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 1455 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 1567 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 1630 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 1645 | except Exception: | CODE |
| LOW | …story-setup/references/codex/hooks/story_codex_hook.py | 1657 | except Exception: | CODE |
| LOW | skills/story-setup/scripts/deploy-antigravity-skills.py | 104 | except Exception: | CODE |
| LOW | …ls/story-long-analyze/scripts/render_relation_chart.py | 231 | except Exception: # noqa: BLE001 - any font loading failure means "not usable" | CODE |
| LOW | …ls/story-long-analyze/scripts/render_relation_chart.py | 391 | except Exception: # noqa: BLE001 - the Markdown chart is already written | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | demo/长篇/让你管账号,你高燃混剪炸全网/设定/文风.md | 36 | ## 六、原文 few-shot 锚点 | COMMENT |
| MEDIUM | …story-setup/references/zcode/hooks/story_zcode_hook.js | 200 | // Hook checks are defensive guardrails. Unexpected parse/filesystem failures | COMMENT |
| MEDIUM | …s/story-setup/references/antigravity/rules/oh-story.md | 25 | ## Writing guardrails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-prose-net-parity.sh | 82 | "placeholder": "他打开门。\n(此处省略三百字打斗描写)他赢了。", | CODE |