Skip to content

[backplane] 抽取 _safe_stream 流名清洗 helper 为通用工具 #9

Description

@beachspainc

现状与证据

_safe_stream 在两处实现中承担“日志/事件流名称清洗”职责,但语义不一致、实现重复:

  • apps/server/daemon/services/log/service.py:27
  • src/cobnet/agent/eventlog/inmemory.py:36

两者均负责把输入 stream name 转成可安全使用的标识,但细节参数不同:

  • 一处做字符白名单清洗(isalnum/-/_/.)+ 小写 + 截断
  • 一处仅做 strip + 截断 + 默认值

问题

  • 语义重复:流名归一化散落在服务层和通用 agent/eventlog
  • 日后规则演进(允许字符、默认值策略、长度策略)需要同步修改多处。
  • src/cobnet/backplane 下已有通用传输/日志语义抽象方向,当前逻辑缺少统一入口。

建议

src/cobnet/backplane 新增小工具(建议 backplane/util/stream.py):

  • safe_stream(value, *, lowercase: bool = True, allow: str = "-_./", fallback: str = "log") -> str
  • sanitize_stream_token(value, *, keep_case: bool = False, max_len: int = 120)

并让:

  • apps/server/daemon/services/log/service.py 使用策略:allow 包含 -_./, lowercase=True, fallback="task"
  • src/cobnet/agent/eventlog/inmemory.py 使用策略:lowercase=False, fallback="log"

验收

  • 去除以上两处重复私有实现。
  • 保持现有行为兼容(原默认与字符策略通过参数保持)。
  • 增加单测:空值、非法字符、长度边界、大小写策略。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions