Skip to content

fix: hook String-args 崩溃修复 + 发布门禁拦截空 slug - #485

Merged
sundevilyang merged 2 commits into
developfrom
fix/hook-args-slug-gate
Sep 9, 2026
Merged

fix: hook String-args 崩溃修复 + 发布门禁拦截空 slug#485
sundevilyang merged 2 commits into
developfrom
fix/hook-args-slug-gate

Conversation

@sundevilyang

Copy link
Copy Markdown
Contributor

两个独立小修复,分两个 commit

1. fix(ext): after_tool_use String-args 崩溃 (e331fc0)

  • 现象:cgc-2046 server 日志反复刷 Hook error,埋点事件丢失
  • 根因:宿主传入的工具调用 arguments 有时是未 parse 的 JSON 字符串,call.dig(:arguments, ...) 第二跳对 String 抛 TypeError
  • 修法:Cgc2046HookUse.arguments() 统一收敛(String→JSON.parse→Hash),三处调用点全走它;+String-args 回归测试
  • 验证:28 runs / 84 assertions 全绿 + 行为探针(String-args 正常推事件)

2. fix(curriculum): 发布前置门禁拦截空/非法 slug (bcd77b4)

  • 背景:slug 一经发布即锁定,draft 期是唯一可改窗口;结构门禁此前不查 slug(2026-09-09 物理课想改语义 slug 被锁,只能授权 SQL 破例)
  • 修法:PrepGate.check 新增 check_slug(空/空串/非 [a-z0-9-] 格式 → gate_violations 退回 authoring)
  • 验证:纯函数四态用例;course_prep_tools 45 passed + curriculum 37 passed

宿主传入的 arguments 有时是未 parse 的 JSON 字符串,call.dig(:arguments,...)
第二跳对 String 抛 TypeError,server 日志刷 Hook error 噪音并丢失埋点事件。

新增 Cgc2046HookUse.arguments() 统一收敛(String→JSON.parse→Hash),
call 加 is_a?(Hash) 守卫,require "json";三处调用点(tool_used/draft_saved/
章节抓取)全部走规范化访问器。新增 String-args 回归测试。
slug 一经发布即锁定(#45242d0c),draft 期是唯一可改窗口;但结构门禁
此前不查 slug——空 slug 的课可一路走过评分/review/发布,发布后公开短链
/courses/[slug] 永久缺失,只剩 SQL 直改一条路(2026-09-09 物理课实例)。

PrepGate 新增 check_slug:空/空串 → 违规退回 authoring;非 [a-z0-9-]
单段格式 → 违规。纯函数四态用例覆盖,既有 fixture 补合法 slug。
@sundevilyang
sundevilyang merged commit f8beba1 into develop Sep 9, 2026
6 checks passed
@sundevilyang
sundevilyang deleted the fix/hook-args-slug-gate branch September 9, 2026 07:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant