Skip to content

Fix/scheduled task observability#40

Merged
LinMoQC merged 4 commits intomainfrom
fix/scheduled-task-observability
Mar 27, 2026
Merged

Fix/scheduled task observability#40
LinMoQC merged 4 commits intomainfrom
fix/scheduled-task-observability

Conversation

@LinMoQC
Copy link
Copy Markdown
Owner

@LinMoQC LinMoQC commented Mar 27, 2026

Summary

Type of change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Refactor / code cleanup
  • CI / tooling

Related issue

Closes #

Changes

How to test

Screenshots (if applicable)

Checklist

  • My code follows the project's coding conventions
  • I have run ./lyra lint and there are no type errors
  • I have added/updated tests for the changed functionality
  • I have updated the documentation if behavior changed
  • The PR title follows Conventional Commits format (feat:, fix:, etc.)
  • I have read the CONTRIBUTING.md

LinMoQC added 4 commits March 27, 2026 12:02
…ints

- Extend retrieve_chunks with exclude_notebook_id and source_id filters
- writing-context: use retrieve_chunks + notebook ownership (404)
- related-knowledge: hybrid RAG; 404 if notebook not owned
- source suggestions: semantic retrieve within source; owner-scoped source query
- summarize fallback: order chunks by created_at desc instead of random
- send_message: parallel graph_augmented_context; global conv uses global_search RAG

Made-with: Cursor
- Unit: compose_answer prepends extra_graph_context into reference message (mock llm.chat)
- HTTP: writing-context / related-knowledge 404 + short-text path (PostgreSQL only; skip on SQLite JSONB)
- Integration: send_message passes graph to compose; global conv uses global_search (PostgreSQL only)

Made-with: Cursor
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
lyra-note-web Ready Ready Preview, Comment Mar 27, 2026 7:53am

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 27, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Summary by CodeRabbit

发布说明

  • 新功能

    • 加入Celery Beat定时任务调度服务
    • 邮件投递状态追踪与错误信息显示
    • 任务运行历史展示投递结果与详情
    • 检索功能支持按笔记本和数据源过滤
    • 知识图谱上下文增强对话
  • 改进

    • 后台任务日志独立分离存储
    • 本地启动前自动清理旧进程
    • 分支名称规范化验证
  • 文档

    • 更新分支命名规范要求
    • 新增启动与任务可观测性执行计划

总览

本 PR 引入了 Celery Beat 任务调度器集成、RAG 检索参数扩展、邮件发送结果结构化以及任务交付状态细粒度跟踪。涵盖后端服务逻辑、前端 UI、Docker 组件配置、CLI 管理脚本及对应的测试与文档。

变更列表

内聚组/文件 摘要
Git 分支策略
.husky/pre-commit, CONTRIBUTING.md
新增 pre-commit hook 以验证分支名称(仅允许 feature/*fix/*),更新 CONTRIBUTING.md 移除 feat/docs/chore/ 等前缀,保留 feature/fix/ 两种分支类型的说明。
本地开发与生产部署文档
README.md, README.zh-CN.md
更新启动步骤文档以包含 Celery Beat,明确在并行启动的进程列表中添加 Beat 服务,Docker Compose 命令中加入 beat 服务。
RAG 检索能力扩展
apps/api/app/agents/rag/retrieval.py
retrieve_chunks 新增 exclude_notebook_idsource_id 参数,用于精细化过滤检索结果;新增 _uuid_or_none 辅助函数标准化 UUID/str 输入。
作答生成图谱上下文集成
apps/api/app/agents/writing/composer.py
compose_answer 新增 extra_graph_context 参数,当提供时将"结构化知识关联(图谱)"部分前置于参考资料中。
知识检索端点重构
apps/api/app/domains/ai/routers/knowledge.py
从直接嵌入向量相似度查询迁移至混合 RAG 检索(retrieve_chunks),新增笔记所有权验证(404 check),简化结果构造逻辑。
建议生成检索改进
apps/api/app/domains/ai/routers/suggestions.py
优化 Source 所有权检查,将固定索引查询替换为 RAG 检索路径,添加无结果时的降级逻辑。
作答上下文端点优化
apps/api/app/domains/ai/routers/writing.py
替换嵌入向量检索为 retrieve_chunks,新增笔记存在性验证返回 404,优化返回值处理为字典式访问。
邮件发送结果结构化
apps/api/app/providers/email.py, apps/api/app/domains/config/router.py
send_email 返回类型变更为 EmailSendResult(含 okerror 字段),新增 _format_email_exception 生成稳定的 SMTP 错误消息;test_email 端点改进错误处理。
日志记录增强
apps/api/app/logging_config.py
新增 LoggerPrefixFilter 用于按日志名称前缀过滤,扩展 _make_file_handler 支持文件名前缀,添加独立的定时任务日志文件处理(scheduled-tasks- 前缀)。
对话服务 RAG 与图谱并发获取
apps/api/app/services/conversation_service.py
send_message 支持并发获取 retrieve_chunksgraph_augmented_context(笔记域内),全局搜索模式下禁用图谱;将图谱上下文传递给 compose_answer
技能总结确定性优化
apps/api/app/skills/builtin/summarize.py
将随机抽样(func.random())改为按创建时间降序确定性排列。
定时任务交付状态汇总
apps/api/app/workers/tasks/scheduler.py
新增 summarize_delivery_outcome 函数聚合邮件与笔记交付结果,结构化 run.result_summaryrun.error_message,完善 task.last_result/last_error 记录。
任务交付前端展示
apps/web/src/features/tasks/task-delivery.ts, apps/web/src/features/tasks/task-history-dialog.tsx
新增 getTaskDeliveryBadges 函数将交付状态转换为徽章对象,在任务历史对话框中展示邮件/笔记交付状态及错误详情。
前端多语言消息
apps/web/messages/en.json, apps/web/messages/zh.json
为定时任务交付添加 5 个新消息键:deliveryEmailSentdeliveryEmailFaileddeliveryEmailSkippedNoAddressdeliveryNoteCreateddeliveryNoteSkippedNoNotebook
Docker 容器编排
docker-compose.yml, docker-compose.prod.yml
新增 beat 服务运行 Celery Beat,与 API 服务共享环境和存储卷,依赖 API 健康检查后启动。
CLI 本地启动与维护
packages/cli/src/commands/local.js, packages/cli/src/commands/status.js, packages/cli/src/commands/logs.js
local.js 新增预清理流程(cleanupStaleProcesses)移除旧进程与容器,并添加 Beat 进程到启动列表;status.js 加入 Beat 容器监控;logs.js 添加 Beat 日志查看选项。
测试覆盖
apps/api/tests/integration/test_conversation_service.py, apps/api/tests/unit/test_compose_answer_extra_graph.py, apps/api/tests/unit/test_config_test_email.py, apps/api/tests/unit/test_email_provider.py, apps/api/tests/unit/test_logging_config.py, apps/api/tests/unit/test_retrieve_routers_auth.py, apps/api/tests/unit/test_scheduler_delivery.py, apps/web/src/features/tasks/task-delivery.test.ts
增加集成与单元测试:验证对话服务 RAG 与图谱集成、作答图谱上下文前置、邮件结果结构化、日志分离、路由端点认证与交付状态汇总等功能。
执行计划文档
docs/exec-plans/active/local-startup-cleanup.md, docs/exec-plans/active/scheduled-task-email-delivery-status.md, docs/exec-plans/active/scheduled-task-email-error-fallback.md, docs/exec-plans/active/scheduled-task-observability-fix.md
新增四份执行计划文档追踪本地启动预清理、定时任务邮件交付状态、邮件错误兜底、定时任务可观测性修复等工作项。

代码审查工作量评估

🎯 4 (复杂) | ⏱️ ~60 分钟

原因:涉及多个相互关联的后端业务逻辑变更(RAG 检索、邮件结果结构化、任务交付跟踪、对话服务并发获取),前后端协调(UI 消息键新增),基础设施配置(Docker Compose、CLI),以及广泛的测试覆盖。逻辑密度中等至较高,文件跨度大(约 30+ 个文件),变更类型多样化(功能、测试、文档、配置),需要对各模块独立推理以确保集成正确性。

可能相关的 PR

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning PR描述为空,仅包含代码库的标准模板,未提供任何具体的变更摘要、相关问题、测试步骤或其他实质性内容。 请填写PR描述,包括:变更摘要(2-3句话)、变更清单、测试说明、相关issue链接、以及任何必要的截图或说明。
Docstring Coverage ⚠️ Warning Docstring coverage is 32.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed 标题"Fix/scheduled task observability"与实际变更内容部分相关,但未能准确反映PR的主要变更。PR涵盖了多个重要功能:分支名称强制规范、任务邮件交付状态、日志配置、RAG检索统一、图谱上下文集成等,而标题仅提及"scheduled task observability"。

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/scheduled-task-observability

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@LinMoQC LinMoQC merged commit ad58f55 into main Mar 27, 2026
4 of 5 checks passed
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