【架构优化】从 Engine.applyObservation 中拆出节点活动文案推导 observationActivity

Abierto
#453 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@fx-kurumi ya está trabajando en esto.

Desde el 13/11/2026.

  • #456 de @fx-kurumi — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
15/100
Tipo de issue
Refactorización
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
go
Área
backend

Línea de trabajo

The activity-text switch sits inside Engine.applyObservation in internal/engine/engine_observe.go; start by reading that switch and the branches the issue lists. Move it unchanged into a package-level observationActivity function and add a table-driven test file in the same package. Done means gofmt, go vet ./internal/engine/ and go test ./internal/engine/ pass. Note that PR #456 is already open against this issue, so the work is claimed.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

现状问题

internal/engine/engine_observe.go 中 Engine.applyObservation 约 120 行,同时负责:幂等去重、字段补全、日志记录、节点属性回填、节点活动文案推导、工具调用计数、用量累计、遥测合并与截断。

其中根据 observation.Category/Name/Phase/Level 推导节点 Activity 文案的 switch 有 6 个分支、约 35 行,内含多层嵌套(tool/sandbox 分支在某些条件下不更新文案,process 分支要拼接 provider/model 标签),是一段纯计算逻辑却嵌在有副作用的大函数里,目前也没有直接的单元测试。

重构方案

  • 把该 switch 原样抽成包级纯函数 observationActivity(observation domain.TelemetryEvent) (string, bool),返回新的活动文案以及是否需要更新(对应原来 tool 非匹配、sandbox.closed 不更新文案的情形)。
  • applyObservation 中改为:if activity, ok := observationActivity(observation); ok { nr.Activity = activity }。
  • 分支逻辑、文案逐字不变,不改其它代码。

影响范围

仅 internal/engine/engine_observe.go 一个函数内部,加一个新测试文件;无对外接口、无行为变化。

验证方式

  • 新增表驱动单测覆盖每个分支(reasoning/output/tool 开始、结束、结束报错/sandbox 普通与 closed/process.started 含与不含 provider、model/其它 process/default 有无 message)。
  • gofmt、go vet ./internal/engine/、go test ./internal/engine/ 通过。
Lenguaje dominante
Go
Estrellas
141
Forks
28
Merge medio
1 d 15 h
PR fusionados (30 d)
113

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Tencent/LoopForge

Todos los issues de Tencent/LoopForge

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.