Skip to content

docs: update project documentation to .NET 10.0#264

Merged
ModerRAS merged 1 commit intomasterfrom
docs/update-readme
Apr 16, 2026
Merged

docs: update project documentation to .NET 10.0#264
ModerRAS merged 1 commit intomasterfrom
docs/update-readme

Conversation

@ModerRAS
Copy link
Copy Markdown
Owner

@ModerRAS ModerRAS commented Apr 16, 2026

Summary

  • Update README.md with Anthropic support, tech stack section, and build commands
  • Update CLAUDE.md with IOnUpdate controller pattern, anti-patterns, and MCP tool definitions
  • Create AGENTS.md files for Service/, LLM/, Search/, Test/ directories
  • Update all documentation to reflect .NET 10.0 (was incorrectly showing .NET 9.0)
  • Update Docker images in Windows_Dependencies_Analysis.md to .NET 10.0
  • Update claude-swarm.yml AI agent prompts to .NET 10.0

Changes

  • README.md: Added Anthropic Claude API, Sequential Thinking, Brave Search; Added tech stack and build commands sections
  • CLAUDE.md: Complete rewrite with IOnUpdate pattern (not MediatR), MCP tool definitions, anti-patterns, gotchas
  • AGENTS.md: New files for Service/, LLM/, Search/, Test/ layers with project-specific conventions
  • Architecture_Overview.md: .NET 9.0 → 10.0
  • Build_and_Test_Guide.md: .NET 9.0 → 10.0, GitHub Actions dotnet-version
  • Windows_Dependencies_Analysis.md: Docker base images .NET 9.0 → 10.0
  • claude-swarm.yml: AI agent prompts updated to .NET 10.0

Files

  • 6 files modified, 4 new files created
  • +318 lines, -47 lines

Summary by CodeRabbit

  • Documentation
    • Updated .NET 9.0 to .NET 10.0 across all documentation and Docker configurations
    • Added support for Anthropic Claude as an AI provider alongside OpenAI
    • Added comprehensive architecture documentation for LLM, Search, Service, and Test layers
    • Expanded README with tech stack details and build/run commands
    • Enhanced developer guidance with key patterns and anti-patterns

- Update README.md with Anthropic support, tech stack, build commands
- Update CLAUDE.md with IOnUpdate pattern, anti-patterns, MCP tools
- Create AGENTS.md for Service/, LLM/, Search/, Test/ directories
- Update Architecture_Overview.md and Build_and_Test_Guide.md to .NET 10.0
- Update Windows_Dependencies_Analysis.md Docker images to .NET 10.0
- Update claude-swarm.yml AI agent prompts to .NET 10.0
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 16, 2026

📝 Walkthrough

Walkthrough

Documentation and configuration version updates reflecting .NET 10.0 adoption (from 9.0) and EF Core 10.0. Added new architecture documentation files for LLM, Search, Service, and Test layers. Updated references to include Anthropic provider support and expanded development guidance for MCP integration and scheduled task patterns.

Changes

Cohort / File(s) Summary
Version Upgrade (9.0 → 10.0)
CLAUDE.md, Docs/Architecture_Overview.md, Docs/Build_and_Test_Guide.md, Docs/Windows_Dependencies_Analysis.md, claude-swarm.yml
Updated .NET runtime and EF Core version references from 9.0 to 10.0 across documentation and configuration; updated Docker base images to aspnet:10.0 and sdk:10.0.
Architecture & Development Guidance
CLAUDE.md, README.md
Expanded CLAUDE.md with detailed architecture patterns (IOnUpdate controller model, IScheduledTask scheduler, MCP integration, multi-process OCR/ASR orchestration); updated README with tech stack details, build/run commands, and Anthropic Claude provider support; changed Lucene reference to Lucene.NET.
Layer Documentation Files
TelegramSearchBot.LLM/AGENTS.md, TelegramSearchBot.Search/AGENTS.md, TelegramSearchBot.Test/AGENTS.md, TelegramSearchBot/Service/AGENTS.md
Added four new AGENTS.md documentation files describing layer responsibilities, folder structures, key patterns, conventions, anti-patterns, and specific implementation touchpoints for LLM providers, Lucene.NET search, test infrastructure, and service implementations.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~12 minutes

Possibly related PRs

Poem

🐰 Hop, hop, the docs now gleam,
Version ten fulfills the dream!
Layers mapped from search to task,
Architecture clear at last—
Claude Claude, what a way to ask!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title clearly summarizes the main change: updating documentation to reflect .NET 10.0. The title directly relates to the changeset, which updates version references across multiple documentation files and configuration.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-readme

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.

@github-actions
Copy link
Copy Markdown
Contributor

🔍 PR检查报告

📋 检查概览

🧪 测试结果

平台 状态 详情
Ubuntu 🔴 失败 测试结果不可用
Windows 🔴 失败 测试结果不可用

📊 代码质量

  • ✅ 代码格式化检查
  • ✅ 安全漏洞扫描
  • ✅ 依赖包分析
  • ✅ 代码覆盖率收集

📁 测试产物

  • 测试结果文件已上传为artifacts
  • 代码覆盖率已上传到Codecov

🔗 相关链接


此报告由GitHub Actions自动生成

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (3)
README.md (1)

167-167: Publish command should specify the target project for reliability.

At Line 167, running from repo root can be ambiguous in multi-project solutions. Prefer an explicit .csproj path.

Suggested command tweak
-dotnet publish -r win-x64 --self-contained
+dotnet publish TelegramSearchBot/TelegramSearchBot.csproj -c Release -r win-x64 --self-contained
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 167, The README currently shows the ambiguous command
"dotnet publish -r win-x64 --self-contained"; update that line to explicitly
target the project file by adding the path to the intended .csproj before the
publish flags (for example, prepend path/to/YourProject.csproj), so the command
unambiguously publishes the correct project in multi-project solutions and is
resilient when run from the repo root; edit the occurrence in README.md
accordingly.
Docs/Build_and_Test_Guide.md (1)

101-101: Make the coverage command self-contained to avoid false failures.

At Line 101, --no-build + a hardcoded Release/net10.0 DLL path assumes a prior Release build. Consider including explicit project/config in target args so the command is reproducible from a clean checkout.

Suggested doc command adjustment
-coverlet TelegramSearchBot.Test/bin/Release/net10.0/TelegramSearchBot.Test.dll --target "dotnet" --targetargs "test --no-build"
+coverlet TelegramSearchBot.Test/bin/Release/net10.0/TelegramSearchBot.Test.dll --target "dotnet" --targetargs "test TelegramSearchBot.Test/TelegramSearchBot.Test.csproj -c Release --no-build"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Docs/Build_and_Test_Guide.md` at line 101, The coverage command uses a
hardcoded Release DLL path and --no-build which assumes a prior Release build;
update the coverlet invocation to target the test project and configuration so
it builds reproducibly from a clean checkout (e.g., replace the DLL path
TelegramSearchBot.Test/bin/Release/net10.0/TelegramSearchBot.Test.dll and the
--no-build flag with --target "dotnet" and --targetargs "test
TelegramSearchBot.Test.csproj -c Release" so coverlet invokes dotnet test on the
project with an explicit configuration).
TelegramSearchBot/Service/AGENTS.md (1)

47-47: Clarify async anti-pattern wording to avoid mixed guidance.

“Don’t block on async operations without CancellationToken” is ambiguous. Blocking should be avoided entirely; cancellation applies to awaited async flows. Consider splitting into two bullets for clarity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@TelegramSearchBot/Service/AGENTS.md` at line 47, The bullet "Don't block on
async operations without CancellationToken" is ambiguous; replace it with two
clear bullets: one saying "Avoid blocking on async operations (do not call
Task.Wait/Result or block threads) — prefer fully asynchronous flows" and
another saying "When awaiting long-running asynchronous operations, accept and
propagate a CancellationToken to support cooperative cancellation" so the doc
distinguishes blocking anti-patterns from cancellation best practices.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CLAUDE.md`:
- Around line 18-33: The Markdown has two lint problems: the code fence starting
with "TelegramSearchBot.sln (8 projects)" needs a language tag (e.g., change the
opening ``` to ```text) and the table under the heading "## WHERE TO LOOK" needs
surrounding blank lines; open CLAUDE.md, update the fenced block containing
"TelegramSearchBot.sln (8 projects) ├── ..." to use a language label (text) and
add an empty line before the "## WHERE TO LOOK" heading and another empty line
after the table so the table is separated from surrounding content.
- Around line 67-77: Update the Background Task example to match the current
IScheduledTask contract: replace CronExpression and the
ExecuteAsync(CancellationToken) signature with the actual members TaskName,
Interval (timespan or cron equivalent), ExecuteAsync() (no parameters), and
include SetHeartbeatCallback(Action) usage; ensure the sample class implements
IScheduledTask and demonstrates setting the heartbeat callback and returning a
Task from ExecuteAsync to reflect the real interface (reference IScheduledTask,
TaskName, Interval, ExecuteAsync, SetHeartbeatCallback).
- Around line 43-52: The documentation example uses the wrong method signature
for IOnUpdate; update the CLAUDE.md snippet so MyController implements the
actual interface method ExecuteAsync(PipelineContext) instead of
OnUpdate(Update, PipelineContext), keeping the Dependencies property as shown
and referencing PipelineContext and PipelineCache in the example comment to
match the real IOnUpdate interface.

In `@TelegramSearchBot.LLM/AGENTS.md`:
- Around line 40-42: The example LLM provider is wrong: replace the single
GenerateAsync sample with an implementation skeleton that matches the
ILLMService contract by implementing CallAsync, CheckAsync and
GetCapabilityAsync (and any required return types) instead of GenerateAsync;
update the sample class (e.g., MyLLMService) to implement ILLMService and
include method signatures for CallAsync, CheckAsync and GetCapabilityAsync that
match the interface (use the same parameter/return types and async Task
signatures) so implementers are shown the correct API surface.

In `@TelegramSearchBot.Search/AGENTS.md`:
- Line 26: The README line incorrectly states "EF entity → Lucene document";
update the documentation to reflect the actual mapping implemented by
DocumentMessageMapper, which converts a Lucene Document into a MessageDTO (see
class DocumentMessageMapper and its Map/MapFromDocument method); replace the
wording on that line with "Lucene Document → MessageDTO (or Message DTO)" and
ensure the description matches the mapper's direction and return type.

In `@TelegramSearchBot.Test/AGENTS.md`:
- Line 9: Add a language identifier to the fenced code block under the "##
STRUCTURE" header (use ```text) and ensure the block is properly closed; then
surround the markdown table that begins with the header row "| Task | Location |
Notes |" with a blank line above and below the table so markdownlint stops
flagging spacing issues.

In `@TelegramSearchBot/Service/AGENTS.md`:
- Around line 9-21: Update the fenced code block in AGENTS.md that contains the
service directory tree to include a plain-text language hint (e.g., change the
opening fence from ``` to ```text or ```plaintext) so Markdown linters treat it
as plain text; keep the block contents unchanged and only modify the opening
fence token.

---

Nitpick comments:
In `@Docs/Build_and_Test_Guide.md`:
- Line 101: The coverage command uses a hardcoded Release DLL path and
--no-build which assumes a prior Release build; update the coverlet invocation
to target the test project and configuration so it builds reproducibly from a
clean checkout (e.g., replace the DLL path
TelegramSearchBot.Test/bin/Release/net10.0/TelegramSearchBot.Test.dll and the
--no-build flag with --target "dotnet" and --targetargs "test
TelegramSearchBot.Test.csproj -c Release" so coverlet invokes dotnet test on the
project with an explicit configuration).

In `@README.md`:
- Line 167: The README currently shows the ambiguous command "dotnet publish -r
win-x64 --self-contained"; update that line to explicitly target the project
file by adding the path to the intended .csproj before the publish flags (for
example, prepend path/to/YourProject.csproj), so the command unambiguously
publishes the correct project in multi-project solutions and is resilient when
run from the repo root; edit the occurrence in README.md accordingly.

In `@TelegramSearchBot/Service/AGENTS.md`:
- Line 47: The bullet "Don't block on async operations without
CancellationToken" is ambiguous; replace it with two clear bullets: one saying
"Avoid blocking on async operations (do not call Task.Wait/Result or block
threads) — prefer fully asynchronous flows" and another saying "When awaiting
long-running asynchronous operations, accept and propagate a CancellationToken
to support cooperative cancellation" so the doc distinguishes blocking
anti-patterns from cancellation best practices.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d17e6de5-e5b2-4730-9ada-9b07ef1233a9

📥 Commits

Reviewing files that changed from the base of the PR and between 5e13300 and ea3cac0.

📒 Files selected for processing (10)
  • CLAUDE.md
  • Docs/Architecture_Overview.md
  • Docs/Build_and_Test_Guide.md
  • Docs/Windows_Dependencies_Analysis.md
  • README.md
  • TelegramSearchBot.LLM/AGENTS.md
  • TelegramSearchBot.Search/AGENTS.md
  • TelegramSearchBot.Test/AGENTS.md
  • TelegramSearchBot/Service/AGENTS.md
  • claude-swarm.yml

Comment thread CLAUDE.md
Comment on lines +18 to +33
```
TelegramSearchBot.sln (8 projects)
├── TelegramSearchBot # Main console app (entry: Program.cs)
├── TelegramSearchBot.Common # Shared config (Env.cs), attributes, models
├── TelegramSearchBot.Database # EF Core DbContext, migrations
├── TelegramSearchBot.Search # Lucene.NET search engine封装
├── TelegramSearchBot.LLM # LLM services, MCP client/manager
├── TelegramSearchBot.Test # Core unit/integration tests
├── TelegramSearchBot.Search.Test # Search engine tests
└── TelegramSearchBot.LLM.Test # LLM service tests
```

## WHERE TO LOOK
| Task | Location | Notes |
|------|----------|-------|
| Bot commands | `Controller/` | Implement IOnUpdate, declare Dependencies |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix markdownlint issues in code fence and table spacing.

Add a language to the fenced block at Line 18 (e.g., text) and ensure the table has surrounding blank lines under ## WHERE TO LOOK.

🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 18-18: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 31-31: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CLAUDE.md` around lines 18 - 33, The Markdown has two lint problems: the code
fence starting with "TelegramSearchBot.sln (8 projects)" needs a language tag
(e.g., change the opening ``` to ```text) and the table under the heading "##
WHERE TO LOOK" needs surrounding blank lines; open CLAUDE.md, update the fenced
block containing "TelegramSearchBot.sln (8 projects) ├── ..." to use a language
label (text) and add an empty line before the "## WHERE TO LOOK" heading and
another empty line after the table so the table is separated from surrounding
content.

Comment thread CLAUDE.md
Comment on lines +43 to +52
### Controller (IOnUpdate) Pattern
```csharp
public class MyController : IOnUpdate {
public List<Type> Dependencies => new() { typeof(DependencyController) };

public async Task OnUpdate(Update update, PipelineContext context) {
// Use context.PipelineCache to share data across controllers
}
}
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the actual IOnUpdate contract and common implementation signatures.

rg -n -C3 --type=cs '\binterface\s+IOnUpdate\b'
rg -n -C3 --type=cs '\bclass\s+\w+.*:\s*IOnUpdate\b'
rg -n -C3 --type=cs '\b(OnUpdate|ExecuteAsync)\s*\('

Repository: ModerRAS/TelegramSearchBot

Length of output: 50383


Align documentation example with actual IOnUpdate interface signature.

The sample in CLAUDE.md uses OnUpdate(Update update, PipelineContext context), but the actual interface method is ExecuteAsync(PipelineContext). Update the code example to:

public class MyController : IOnUpdate {
    public List<Type> Dependencies => new() { typeof(DependencyController) };
    
    public async Task ExecuteAsync(PipelineContext context) {
        // Use context.PipelineCache to share data across controllers
    }
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CLAUDE.md` around lines 43 - 52, The documentation example uses the wrong
method signature for IOnUpdate; update the CLAUDE.md snippet so MyController
implements the actual interface method ExecuteAsync(PipelineContext) instead of
OnUpdate(Update, PipelineContext), keeping the Dependencies property as shown
and referencing PipelineContext and PipelineCache in the example comment to
match the real IOnUpdate interface.

Comment thread CLAUDE.md
Comment on lines +67 to +77
### Background Task
```csharp
[Injectable(ServiceLifetime.Singleton)]
public class MyTask : IScheduledTask {
public string CronExpression => "0 * * * *"; // hourly

public async Task ExecuteAsync(CancellationToken ct) {
SetHeartbeatCallback(() => { /* keep alive */ });
// Task logic
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Background-task example does not match the current IScheduledTask contract.

The sample shows CronExpression and ExecuteAsync(CancellationToken ct), but the actual interface uses TaskName, Interval, ExecuteAsync(), and SetHeartbeatCallback(...). This will mislead implementers.

Proposed doc fix
 [Injectable(ServiceLifetime.Singleton)]
 public class MyTask : IScheduledTask {
-    public string CronExpression => "0 * * * *"; // hourly
-    
-    public async Task ExecuteAsync(CancellationToken ct) {
-        SetHeartbeatCallback(() => { /* keep alive */ });
-        // Task logic
-    }
+    private Func<Task>? _heartbeat;
+    public string TaskName => "MyTask";
+    public TimeSpan Interval => TimeSpan.FromHours(1);
+
+    public void SetHeartbeatCallback(Func<Task> heartbeatCallback) {
+        _heartbeat = heartbeatCallback;
+    }
+
+    public async Task ExecuteAsync() {
+        if (_heartbeat != null) await _heartbeat();
+        // Task logic
+    }
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### Background Task
```csharp
[Injectable(ServiceLifetime.Singleton)]
public class MyTask : IScheduledTask {
public string CronExpression => "0 * * * *"; // hourly
public async Task ExecuteAsync(CancellationToken ct) {
SetHeartbeatCallback(() => { /* keep alive */ });
// Task logic
}
}
[Injectable(ServiceLifetime.Singleton)]
public class MyTask : IScheduledTask {
private Func<Task>? _heartbeat;
public string TaskName => "MyTask";
public TimeSpan Interval => TimeSpan.FromHours(1);
public void SetHeartbeatCallback(Func<Task> heartbeatCallback) {
_heartbeat = heartbeatCallback;
}
public async Task ExecuteAsync() {
if (_heartbeat != null) await _heartbeat();
// Task logic
}
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CLAUDE.md` around lines 67 - 77, Update the Background Task example to match
the current IScheduledTask contract: replace CronExpression and the
ExecuteAsync(CancellationToken) signature with the actual members TaskName,
Interval (timespan or cron equivalent), ExecuteAsync() (no parameters), and
include SetHeartbeatCallback(Action) usage; ensure the sample class implements
IScheduledTask and demonstrates setting the heartbeat callback and returning a
Task from ExecuteAsync to reflect the real interface (reference IScheduledTask,
TaskName, Interval, ExecuteAsync, SetHeartbeatCallback).

Comment on lines +40 to +42
public class MyLLMService : ILLMService {
public async Task<string> GenerateAsync(string prompt, ...) { }
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

LLM provider example does not match ILLMService contract.

At Line 40-Line 42, the sample shows GenerateAsync, but ILLMService uses CallAsync/CheckAsync/GetCapabilityAsync (TelegramSearchBot.LLM/Interface/AI/LLM/ILLMService.cs:11-20). This example will mislead implementers.

Suggested example correction
 public class MyLLMService : ILLMService {
-    public async Task<string> GenerateAsync(string prompt, ...) { }
+    public Task<string> CallAsync(string prompt, Channel channel, IEnumerable<Tool>? tools = null, CancellationToken cancellationToken = default) { ... }
+    public Task<bool> CheckAsync(Channel channel, CancellationToken cancellationToken = default) { ... }
+    public Task<ModelCapability> GetCapabilityAsync(string model, CancellationToken cancellationToken = default) { ... }
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public class MyLLMService : ILLMService {
public async Task<string> GenerateAsync(string prompt, ...) { }
}
public class MyLLMService : ILLMService {
public Task<string> CallAsync(string prompt, Channel channel, IEnumerable<Tool>? tools = null, CancellationToken cancellationToken = default) { ... }
public Task<bool> CheckAsync(Channel channel, CancellationToken cancellationToken = default) { ... }
public Task<ModelCapability> GetCapabilityAsync(string model, CancellationToken cancellationToken = default) { ... }
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@TelegramSearchBot.LLM/AGENTS.md` around lines 40 - 42, The example LLM
provider is wrong: replace the single GenerateAsync sample with an
implementation skeleton that matches the ILLMService contract by implementing
CallAsync, CheckAsync and GetCapabilityAsync (and any required return types)
instead of GenerateAsync; update the sample class (e.g., MyLLMService) to
implement ILLMService and include method signatures for CallAsync, CheckAsync
and GetCapabilityAsync that match the interface (use the same parameter/return
types and async Task signatures) so implementers are shown the correct API
surface.


## CONVENTIONS
- Index stored in `Env.WorkDir/lucene_index/`
- Use `DocumentMessageMapper` to convert EF entities to Lucene docs
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

DocumentMessageMapper direction is documented incorrectly.

At Line 26, the mapper is described as EF entity → Lucene document, but current implementation maps Lucene DocumentMessageDTO (TelegramSearchBot.Search/Tool/DocumentMessageMapper.cs:9-49).

Suggested wording fix
-- Use `DocumentMessageMapper` to convert EF entities to Lucene docs
+- Use `DocumentMessageMapper` to convert Lucene documents to `MessageDTO`
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Use `DocumentMessageMapper` to convert EF entities to Lucene docs
- Use `DocumentMessageMapper` to convert Lucene documents to `MessageDTO`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@TelegramSearchBot.Search/AGENTS.md` at line 26, The README line incorrectly
states "EF entity → Lucene document"; update the documentation to reflect the
actual mapping implemented by DocumentMessageMapper, which converts a Lucene
Document into a MessageDTO (see class DocumentMessageMapper and its
Map/MapFromDocument method); replace the wording on that line with "Lucene
Document → MessageDTO (or Message DTO)" and ensure the description matches the
mapper's direction and return type.

Three test projects: TelegramSearchBot.Test, TelegramSearchBot.Search.Test, TelegramSearchBot.LLM.Test

## STRUCTURE
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Resolve markdownlint warnings in fenced block and table spacing.

At Line 9, add a language to the fenced block. Around Line 27, surround the table with blank lines.

Suggested markdown cleanup
-## STRUCTURE
-```
+## STRUCTURE
+```text
 TelegramSearchBot.Test/
 ├── Service/        # Service layer tests
 ├── View/           # View tests
 ├── Helper/         # Utility tests
 └── RunVectorTests.ps1  # Vector test runner
 
 TelegramSearchBot.Search.Test/    # Search-specific tests
 TelegramSearchBot.LLM.Test/       # LLM service tests

WHERE TO LOOK

Task Location Notes
Vector tests Service/Vector/*.cs FAISS integration
DB context Service/Database/DataDbContextTests.cs Entity mapping
LLM tests TelegramSearchBot.LLM.Test/ Service mocking
</details>


Also applies to: 27-27

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.22.0)</summary>

[warning] 9-9: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @TelegramSearchBot.Test/AGENTS.md at line 9, Add a language identifier to the
fenced code block under the "## STRUCTURE" header (use ```text) and ensure the
block is properly closed; then surround the markdown table that begins with the
header row "| Task | Location | Notes |" with a blank line above and below the
table so markdownlint stops flagging spacing issues.


</details>

<!-- fingerprinting:phantom:triton:hawk:e9cd357d-44f5-460e-8ec2-1b519e1afe32 -->

<!-- This is an auto-generated comment by CodeRabbit -->

Comment on lines +9 to +21
```
Service/
├── AI/ # OCR, ASR, QR processing
├── BotAPI/ # Telegram API integration
├── Bilibili/ # B站视频/动态处理
├── Common/ # Shared utilities (URL, config)
├── Manage/ # Admin configuration services
├── Scheduler/ # Background tasks & cron jobs
├── Search/ # Search query processing
├── Storage/ # Message persistence
├── Tools/ # MCP tool implementations
└── Vector/ # FAISS vector operations
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add a language hint to the fenced block for markdown lint compatibility.

Use text (or plaintext) for the directory tree block.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@TelegramSearchBot/Service/AGENTS.md` around lines 9 - 21, Update the fenced
code block in AGENTS.md that contains the service directory tree to include a
plain-text language hint (e.g., change the opening fence from ``` to ```text or
```plaintext) so Markdown linters treat it as plain text; keep the block
contents unchanged and only modify the opening fence token.

@ModerRAS ModerRAS merged commit eefb020 into master Apr 16, 2026
20 checks passed
@ModerRAS ModerRAS deleted the docs/update-readme branch April 16, 2026 10:41
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