Skip to content

chore: add Serena onboarding configuration and memories#1078

Merged
rjmurillo merged 21 commits intomainfrom
chore/serena-onboarding
Mar 15, 2026
Merged

chore: add Serena onboarding configuration and memories#1078
rjmurillo merged 21 commits intomainfrom
chore/serena-onboarding

Conversation

@rjmurillo
Copy link
Copy Markdown
Owner

@rjmurillo rjmurillo commented Mar 15, 2026

Description

Adds Serena MCP configuration and initial project memory files to bootstrap the Serena onboarding workflow for the moq.analyzers repository.

Motivation and Context

Serena provides LSP-powered symbol analysis for AI coding assistants. Configuring it for this project enables accurate, symbol-based codebase exploration rather than text-search guesses. The memory files capture institutional knowledge about the project structure, conventions, and quality standards so future sessions start with full context.

Changes Made

  • Update .serena/project.yml YAML list indentation to canonical style (no leading spaces)
  • Add line_ending configuration key to .serena/project.yml for explicit line ending control
  • Add .serena/memories/project-overview.md: purpose, tech stack, solution structure, design principles
  • Add .serena/memories/style-and-conventions.md: naming rules, analyzer/fixer patterns, testing and build conventions
  • Add .serena/memories/suggested-commands.md: common build, test, and benchmark commands
  • Add .serena/memories/task-completion-checklist.md: pre-commit quality gates and review steps
  • Add .serena/memories/code-review/reuse-analysis-diff.md: observations from code review session on reuse patterns

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)
  • Refactoring (no functional changes)
  • Documentation update
  • Build or CI configuration change
  • Build or CI configuration change

Note: .serena/ is tooling configuration, not shipped product code. No analyzer logic, tests, or build outputs are affected.

Checklist

  • I have met all requirements in CONTRIBUTING.md
  • I have added tests that prove my fix is effective or my feature works — N/A (configuration only)
  • I have updated documentation where appropriate — memory files are the documentation

Summary by CodeRabbit

  • Documentation
    • Added a comprehensive set of project documents: architecture decision records, design & patterns guidance, style and conventions, developer command quick-reference, task checklist, bug patterns, complete analyzer catalog, roadmap, release history, and various knowledge-base/observations to clarify design, testing, and contribution workflows.
  • Chores
    • Minor configuration and formatting tweaks and updated local validation hints (tool install guidance) and project metadata/settings.

- Update .serena/project.yml YAML list indentation style
- Add line_ending configuration key
- Add initial Serena memory files for project knowledge base:
  - project-overview.md
  - style-and-conventions.md
  - suggested-commands.md
  - task-completion-checklist.md
  - code-review/ directory with reuse analysis

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings March 15, 2026 01:41
@chatgpt-codex-connector
Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request integrates the Serena AI coding assistant configuration and initial project memory files into the moq.analyzers repository. The primary goal is to enhance AI coding assistant capabilities by providing LSP-powered symbol analysis and capturing crucial project knowledge. This setup will enable more accurate, context-aware assistance for developers working on the project, improving efficiency and adherence to project standards.

Highlights

  • Serena Configuration: Updated the .serena/project.yml file to standardize YAML list indentation and introduced a new line_ending configuration key for explicit control over file line endings.
  • Project Memory Files: Added five new Markdown files under .serena/memories/ to capture institutional knowledge, including a project overview, style and conventions, suggested commands, a task completion checklist, and a detailed code reuse analysis.
  • AI Assistant Onboarding: These changes collectively bootstrap the Serena onboarding workflow, providing essential context and configuration for LSP-powered symbol analysis for AI coding assistants.
Changelog
  • .serena/memories/code-review/reuse-analysis-diff.md
    • Added a new memory file detailing a code reuse review, concluding that no issues were found and highlighting good design practices.
  • .serena/memories/project-overview.md
    • Added a comprehensive overview of the Moq.Analyzers project, covering its purpose, tech stack, solution structure, and key design principles.
  • .serena/memories/style-and-conventions.md
    • Added a new memory file outlining code style and conventions, including general rules, naming conventions, analyzer/code fix conventions, testing practices, and build properties.
  • .serena/memories/suggested-commands.md
    • Added a memory file listing common and suggested commands for building, testing, benchmarking, performance comparison, linting, formatting, packaging, and basic Git utilities.
  • .serena/memories/task-completion-checklist.md
    • Added a checklist for developers to verify tasks before committing, covering build, test, code quality, analyzer-specific requirements, and formatting.
  • .serena/project.yml
    • Updated YAML list indentation for languages and ignored_paths to a canonical style (no leading spaces).
    • Added a new line_ending configuration key to explicitly define the line ending convention for source files.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 15, 2026

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: c31a5c48-3cb5-446d-ab9b-2262bbed1709

📥 Commits

Reviewing files that changed from the base of the PR and between 974425d and 354d88e.

📒 Files selected for processing (9)
  • .githooks/hooks/Invoke-PreCommit.ps1
  • .serena/memories/codebase-analysis-observations.md
  • .serena/memories/local-and-ci-configuration.md
  • .serena/memories/observations-index.md
  • .serena/memories/pr-and-issue-patterns.md
  • .serena/memories/suggested-commands.md
  • .serena/project.yml
  • CONTRIBUTING.md
  • docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md
 ________________________________________________________________________________________________________________________________
< Test state coverage, not code coverage. Identify and test significant program states. Just testing lines of code isn't enough. >
 --------------------------------------------------------------------------------------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
📝 Walkthrough

Walkthrough

Adds many documentation and Serena memory files (ADRs, architectural patterns, style guides, checklists, roadmaps, commands, dependency-constraint guidance, and onboarding notes) plus minor formatting updates to .serena/project.yml and .serena/.gitignore, and small edits to hook/install hints. No code or public API changes.

Changes

Cohort / File(s) Summary
Architecture Decision Records
docs/architecture/ADR-001-symbol-based-detection-over-string-matching.md, docs/architecture/ADR-002-target-netstandard2-for-analyzer-assemblies.md, docs/architecture/ADR-003-pin-roslyn-sdk-to-codeanalysis-4-8.md, docs/architecture/ADR-004-cap-analyzerutilities-at-3-3-4.md, docs/architecture/ADR-005-central-package-management-with-transitive-pinning.md, docs/architecture/ADR-006-wellknown-types-pattern-for-moq-symbol-resolution.md, docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md, docs/architecture/ADR-008-benchmarkdotnet-perfdiff-for-performance-regression-detection.md, docs/architecture/ADR-009-xunit-with-roslyn-test-infrastructure.md
Adds nine ADRs capturing decisions on symbol-based detection, target TFMs, Roslyn/AnalyzerUtilities pinning, transitive pinning, MoqKnownSymbols pattern, analyzer registration choices, benchmarking/perf-diff, and test infra.
Serena Memory: Project & Guidance
.serena/memories/project-overview.md, .serena/memories/style-and-conventions.md, .serena/memories/suggested-commands.md, .serena/memories/task-completion-checklist.md, .serena/memories/open-work-roadmap.md, .serena/memories/release-history.md
Adds project overview, coding/style guidelines, developer command cheatsheet, task checklist, open roadmap, and release history documentation.
Serena Memory: Patterns, Catalogs & Indexes
.serena/memories/architectural-patterns.md, .serena/memories/bug-patterns-and-antipatterns.md, .serena/memories/complete-analyzer-catalog.md, .serena/memories/observations-index.md, .serena/memories/pr-and-issue-patterns.md, .serena/memories/dependency-constraints.md, .serena/memories/forgetful-knowledge-base.md
Adds architectural patterns, bug/anti-patterns, full analyzer catalog, reorganized observations index, PR/issue patterns, dependency constraints (pins/validation), and forgetful KB usage notes.
Serena Memory: Analysis & CI
.serena/memories/codebase-analysis-observations.md, .serena/memories/local-and-ci-configuration.md
Adds codebase analysis observations and local/CI configuration docs covering hooks, workflows, linters, build flags, and CI mappings.
Config, Hooks & Docs
.serena/project.yml, .serena/.gitignore, .githooks/hooks/Invoke-PreCommit.ps1, CONTRIBUTING.md
Minor comment/formatting edits in .serena/project.yml and .serena/.gitignore; change yamllint install hint from pip install to pipx install in hook and CONTRIBUTING.md; no behavioral code changes.

Sequence Diagram(s)

(omitted — changes are documentation-only and do not introduce new multi-component control flow)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

housekeeping

Suggested reviewers

  • MattKotsenas
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the primary change: adding Serena onboarding configuration and memory files to the repository.
Description check ✅ Passed The PR description comprehensively covers all required sections: motivation, changes made, type of change, and a completed checklist with appropriate context for configuration-only changes.
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
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/serena-onboarding
📝 Coding Plan
  • Generate coding plan for human review comments

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

@deepsource-io
Copy link
Copy Markdown

deepsource-io Bot commented Mar 15, 2026

DeepSource Code Review

We reviewed changes in b3564c5...354d88e on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Code Review Summary

Analyzer Status Updated (UTC) Details
C# Mar 15, 2026 7:26p.m. Review ↗

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request adds configuration and knowledge files for the Serena AI assistant. The changes are well-structured and clearly explained. I've identified a couple of minor inconsistencies in the new documentation files. Correcting them will improve the accuracy of the information provided to the AI tool. My feedback is focused on ensuring this documentation is precise and consistent.

Comment thread .serena/memories/project-overview.md Outdated
Comment thread .serena/memories/style-and-conventions.md
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds Serena MCP project configuration and a starter set of Serena memory documents to bootstrap symbol-based navigation/onboarding for the moq.analyzers repository.

Changes:

  • Normalizes .serena/project.yml list formatting and introduces a line_ending configuration key.
  • Adds initial Serena memory documents covering project overview, conventions, suggested commands, task completion checklist, and a prior code review note.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
.serena/project.yml Adjusts YAML list formatting and adds a line_ending config entry.
.serena/memories/project-overview.md Captures high-level repo purpose, stack, and structure for onboarding.
.serena/memories/style-and-conventions.md Documents expected naming/style and analyzer/fixer/testing conventions.
.serena/memories/suggested-commands.md Lists common local commands for build/test/benchmarks/format/package.
.serena/memories/task-completion-checklist.md Provides a pre-commit checklist intended to reflect repo quality gates.
.serena/memories/code-review/reuse-analysis-diff.md Stores a summary of reuse-related observations from a prior diff review.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread .serena/project.yml Outdated
Comment thread .serena/memories/project-overview.md Outdated
Comment thread .serena/memories/style-and-conventions.md Outdated
Comment thread .serena/memories/suggested-commands.md
Comment thread .serena/memories/task-completion-checklist.md
Comment thread .serena/memories/code-review/reuse-analysis-diff.md Outdated
Captures 9 ADRs covering: symbol-based detection, .NET Standard 2.0 target,
Roslyn SDK version, AnalyzerUtilities version cap, central package management,
WellKnown types pattern, IOperation action preference, performance testing
strategy, and analyzer test infrastructure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@coderabbitai coderabbitai Bot added the build label Mar 15, 2026
Copy link
Copy Markdown
Contributor

@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: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.serena/memories/project-overview.md:
- Line 9: Update the project overview to remove the incorrect "C# 13, .NET 9
SDK" claim and instead reference global.json as the authoritative SDK version;
specifically, delete or replace the sentence that states "C# 13, .NET 9 SDK" and
add a short note that the SDK is pinned in global.json (currently 10.0.201) and
that C# LangVersion is left at "default" (no explicit C# 13 configured), so
consumers should consult global.json and project LangVersion settings for
accurate versions.

In @.serena/memories/suggested-commands.md:
- Around line 45-47: Update the formatting guidance to show both the mutating
and non-mutating checks: keep the existing "dotnet format" command for applying
formatting locally and add a verification command "dotnet format
--verify-no-changes" to match the completion checklist/CI pre-commit validation;
label them (e.g., "Apply formatting locally" and "Validate no pending format
changes (pre-commit/CI gate)") so readers run the correct command for their
workflow.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: bf6d152f-bf7a-4ed7-a2e8-1798c41923a9

📥 Commits

Reviewing files that changed from the base of the PR and between a2cbdcf and 4798638.

📒 Files selected for processing (6)
  • .serena/memories/code-review/reuse-analysis-diff.md
  • .serena/memories/project-overview.md
  • .serena/memories/style-and-conventions.md
  • .serena/memories/suggested-commands.md
  • .serena/memories/task-completion-checklist.md
  • .serena/project.yml

Comment thread .serena/memories/project-overview.md Outdated
Comment thread .serena/memories/suggested-commands.md
Address P0/P1 issues from architect, critic, independent-thinker, and analyst reviews:

- ADR-003: Add upgrade trigger criteria (market share, API need, 18-month cycle)
  and reversibility assessment
- ADR-004: Add exit condition and explicit dependency on ADR-003
- ADR-005: Document ValidateAnalyzerHostCompatibility target location and behavior,
  add cross-references to ADR-003/ADR-004
- ADR-007: Document base-class delegation pattern for operation action registration
- ADR-008: Expand threshold documentation with default value and contributor guidance

Add Serena memories:
- architecture-decision-records: Index of all 9 ADRs with dependencies
- architectural-patterns: Core patterns with code examples
- dependency-constraints: Version caps and transitive pinning rules
- forgetful-knowledge-base: Cross-machine bootstrapping reference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@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: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/architecture/ADR-006-wellknown-types-pattern-for-moq-symbol-resolution.md (1)

1-67: ⚠️ Potential issue | 🔴 Critical

Update broken external reference in REF-003.

The external link to Roslyn analyzer performance guidance (line 63) returns a 404 error—the dotnet/roslyn-analyzers repository is archived. Replace it with the active documentation link: https://github.com/dotnet/roslyn/blob/main/docs/analyzers/Report%20Analyzer%20Format.md, or remove the reference if performance measurement specifics are not essential to this ADR.

The ADR structure, content, and Markdown formatting are otherwise sound (markdownlint: 0 errors).

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

In
`@docs/architecture/ADR-006-wellknown-types-pattern-for-moq-symbol-resolution.md`
around lines 1 - 67, REF-003 points to a broken external link; update the
reference entry labeled REF-003 in the ADR (the References section) so it either
uses the active Roslyn documentation URL
https://github.com/dotnet/roslyn/blob/main/docs/analyzers/Report%20Analyzer%20Format.md
or remove the REF-003 bullet entirely if you decide not to include external
performance guidance; ensure the REF-003 label remains consistent and the
markdown link text is updated accordingly.
♻️ Duplicate comments (1)
.serena/memories/project-overview.md (1)

9-9: ⚠️ Potential issue | 🟡 Minor

Fix inaccurate SDK and language version claims.

Line 9 incorrectly states "C# 13, .NET 9 SDK" when global.json pins SDK version 10.0.201 (which is .NET 10), and there is no explicit C# 13 LangVersion configured in the project files.

🔧 Suggested fix
-- **Language**: C# 13, .NET 9 SDK (pinned via global.json, currently 10.0.201)
+- **Language**: .NET SDK (pinned via `global.json`; currently 10.0.201), C# language version per project defaults
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.serena/memories/project-overview.md at line 9, Update the inaccurate
SDK/language claim in .serena/memories/project-overview.md: replace "C# 13, .NET
9 SDK" with accurate info reflecting that global.json pins SDK 10.0.201 (i.e.,
.NET 10) and that no explicit C# LangVersion (e.g., C# 13) is set in project
files; reference the project's global.json and absence of a LangVersion property
in csproj files (or add a note that LangVersion is unspecified) so the statement
matches the repo configuration.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.serena/memories/forgetful-knowledge-base.md:
- Line 22: Update the "Encoded" metadata value in
.serena/memories/forgetful-knowledge-base.md to use an ISO 8601 full timestamp
(e.g., 2026-03-15T00:00:00Z or the actual encode time) instead of the current
date-only string "2026-03-15" so the Encoded field is unambiguous and auditable.
- Line 13: The storage path line currently hardcodes a Unix-style path
(`~/.forgetful/forgetful.db`); update the note in
.serena/memories/forgetful-knowledge-base.md to list OS-specific defaults or
explicitly state it's for Unix-like systems — e.g., show Windows (e.g.,
%APPDATA%\Forgetful\forgetful.db or
C:\Users\<User>\AppData\Roaming\Forgetful\forgetful.db), macOS
(~/Library/Application Support/Forgetful/forgetful.db), and Linux/Unix
(~/.forgetful/forgetful.db), or add a single clarifying sentence that the shown
path is Unix-only and will vary by OS.

In `@docs/architecture/ADR-001-symbol-based-detection-over-string-matching.md`:
- Line 58: Update the REF-002 entry in ADR-001 to include a direct URL to the
Roslyn API docs for the referenced symbols (e.g., the
Microsoft.CodeAnalysis.ISymbol and SymbolEqualityComparer pages); locate the
REF-002 bullet in ADR-001-symbol-based-detection-over-string-matching.md and
append the official documentation link(s) (or a single Roslyn API docs root
link) right after the text "Roslyn API documentation: `ISymbol`,
`SymbolEqualityComparer`" so readers can click through to the authoritative
docs.

In `@docs/architecture/ADR-002-target-netstandard2-for-analyzer-assemblies.md`:
- Line 61: The REF-001 bibliography entry in
ADR-002-target-netstandard2-for-analyzer-assemblies.md is missing the Microsoft
docs URL; update the reference labeled "REF-001" to include the full hyperlink
to the Microsoft documentation titled "How analyzers run in the compiler
pipeline" (for example the Microsoft Learn/Docs page) so readers can click
through directly — modify the REF-001 line to include the URL alongside the
existing title.

In
`@docs/architecture/ADR-005-central-package-management-with-transitive-pinning.md`:
- Around line 57-66: Update IMP-002 to clarify the status of the two referenced
artifacts (`build/targets/codeanalysis/ValidateHostCompatibility.targets` and
`build/targets/codeanalysis/net8-sdk-assemblies.json`): either state that these
files will be added as part of this change (and briefly describe their intended
purpose—e.g., a ValidateAnalyzerHostCompatibility MSBuild target and a JSON
manifest of .NET 8 SDK assemblies) or mark them as planned work and
remove/adjust language that implies they already exist; reference IMP-002 and
the two filenames so reviewers can locate and verify the declaration.

---

Outside diff comments:
In
`@docs/architecture/ADR-006-wellknown-types-pattern-for-moq-symbol-resolution.md`:
- Around line 1-67: REF-003 points to a broken external link; update the
reference entry labeled REF-003 in the ADR (the References section) so it either
uses the active Roslyn documentation URL
https://github.com/dotnet/roslyn/blob/main/docs/analyzers/Report%20Analyzer%20Format.md
or remove the REF-003 bullet entirely if you decide not to include external
performance guidance; ensure the REF-003 label remains consistent and the
markdown link text is updated accordingly.

---

Duplicate comments:
In @.serena/memories/project-overview.md:
- Line 9: Update the inaccurate SDK/language claim in
.serena/memories/project-overview.md: replace "C# 13, .NET 9 SDK" with accurate
info reflecting that global.json pins SDK 10.0.201 (i.e., .NET 10) and that no
explicit C# LangVersion (e.g., C# 13) is set in project files; reference the
project's global.json and absence of a LangVersion property in csproj files (or
add a note that LangVersion is unspecified) so the statement matches the repo
configuration.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e7b14799-fc1b-43b8-a155-5a9d9401d4cb

📥 Commits

Reviewing files that changed from the base of the PR and between 4798638 and 53b5de6.

📒 Files selected for processing (16)
  • .serena/memories/architectural-patterns.md
  • .serena/memories/architecture-decision-records.md
  • .serena/memories/dependency-constraints.md
  • .serena/memories/forgetful-knowledge-base.md
  • .serena/memories/observations-index.md
  • .serena/memories/project-overview.md
  • .serena/memories/style-and-conventions.md
  • docs/architecture/ADR-001-symbol-based-detection-over-string-matching.md
  • docs/architecture/ADR-002-target-netstandard2-for-analyzer-assemblies.md
  • docs/architecture/ADR-003-pin-roslyn-sdk-to-codeanalysis-4-8.md
  • docs/architecture/ADR-004-cap-analyzerutilities-at-3-3-4.md
  • docs/architecture/ADR-005-central-package-management-with-transitive-pinning.md
  • docs/architecture/ADR-006-wellknown-types-pattern-for-moq-symbol-resolution.md
  • docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md
  • docs/architecture/ADR-008-benchmarkdotnet-perfdiff-for-performance-regression-detection.md
  • docs/architecture/ADR-009-xunit-with-roslyn-test-infrastructure.md

Comment thread .serena/memories/forgetful-knowledge-base.md
Comment thread .serena/memories/forgetful-knowledge-base.md Outdated
rjmurillo and others added 5 commits March 14, 2026 22:00
Correct .NET SDK version (10 not 9), project count (7 not 10),
and remove parenthetical file counts that were inaccurate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…erns memory

Correct MoqKnownSymbols instantiation (constructor not factory method),
registration pattern (RegisterCompilationStartAction with closure capture),
early exit guard (IsMockReferenced not null check), and ConfigureGeneratedCodeAnalysis
method name. Update wrong vs correct examples to match actual implementation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…7, ADR-009

ADR-006: correct IMP-001 to show constructor pattern with closure capture
instead of factory method. ADR-007: add IMP-004 table listing 7 analyzers
that use RegisterSyntaxNodeAction with justification. ADR-009: fix REF-003
URL (tree/src -> tree/main/src).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ries

dependency-constraints: note that the netstandard2.0 host constraint
differs from the .NET 10 build SDK. forgetful-knowledge-base: consolidate
redundant environment-specific warning; clarify DB path. suggested-commands:
distinguish dotnet format (style) from build-time Roslyn diagnostics.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delete reuse-analysis-diff.md which contained a one-off diff review with
stale line references. Remove its entry from observations-index.md index.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Autofix Details

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Machine-specific database IDs committed to shared repository
    • Removed hardcoded SQLite row IDs (project ID 27, memory IDs 511-532, entity IDs 25-38, document IDs 4-5) and replaced them with descriptive topic/entity lists and instructions to query local database.

Comment thread .serena/memories/forgetful-knowledge-base.md
Remove hardcoded SQLite row IDs (project ID, memory IDs, entity IDs,
document IDs) that are local to a single developer's machine. The file
now documents the topics and entities encoded without specific IDs,
and instructs contributors to query their own local database.
Copy link
Copy Markdown
Contributor

@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: 5

♻️ Duplicate comments (2)
.serena/memories/forgetful-knowledge-base.md (1)

13-13: 🧹 Nitpick | 🔵 Trivial

Add cross-platform storage path guidance.

The storage path ~/.forgetful/forgetful.db is Unix-specific. To improve onboarding across different operating systems, consider adding platform-specific paths or a note clarifying this is the Unix/Linux/macOS default.

🗂️ Suggested clarification
-Storage: `~/.forgetful/forgetful.db` (SQLite, local to each machine).
+Storage locations (SQLite, local to each machine):
+- **Unix/Linux/macOS**: `~/.forgetful/forgetful.db`
+- **Windows**: `%APPDATA%\Forgetful\forgetful.db` (typically `C:\Users\<User>\AppData\Roaming\Forgetful\forgetful.db`)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.serena/memories/forgetful-knowledge-base.md at line 13, Replace the
hard-coded Unix path string `~/.forgetful/forgetful.db` with a cross-platform
guidance sentence: state that `~/.forgetful/forgetful.db` is the UNIX/macOS
default, add the Windows equivalent (e.g., under
`%APPDATA%\\Forgetful\\forgetful.db`), and mention using XDG_BASE_DIRS or an
environment variable / OS-specific data directory (or an OS-aware helper) to
choose the path at runtime; update the markdown entry to show the Unix default
and a short note with the Windows path and suggestion to use an OS-agnostic
storage location.
.serena/memories/suggested-commands.md (1)

45-47: 🧹 Nitpick | 🔵 Trivial

Document both formatting commands for complete workflow coverage.

Currently only the mutating dotnet format command is shown. Consider adding the verification command dotnet format --verify-no-changes to support both local formatting and pre-commit/CI validation workflows.

📝 Suggested addition
 ## Format

 ```bash
+# Apply formatting locally
 dotnet format
+
+# Validate no pending format changes (pre-commit/CI gate)
+dotnet format --verify-no-changes
</details>

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

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

In @.serena/memories/suggested-commands.md around lines 45 - 47, Summary:
Document both the mutating and verification dotnet-format commands for local and
CI workflows. Update .serena/memories/suggested-commands.md to keep the existing
"dotnet format" entry and add a second entry documenting "dotnet format
--verify-no-changes" with a short heading like "Validate no pending format
changes (pre-commit/CI gate)"; ensure the two items appear together so
developers know to run the first locally and the second in CI/pre-commit checks.


</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🤖 Prompt for all review comments with AI agents</summary>

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

Inline comments:
In @.serena/memories/project-overview.md:

  • Line 9: Update the project overview text that currently reads "C# 13, .NET 10
    SDK (pinned via global.json, currently 10.0.201)" to state "C# 14" instead of
    "C# 13" so the language version reflects the effective compiler version when
    using LangVersion=default; change the phrase in the line containing "C# 13" to
    "C# 14".

In
@docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md:

  • Around line 64-72: The ADR table is missing reasons for why these analyzers
    use RegisterSyntaxNodeAction instead of IOperation; update documentation or
    source comments to explain the limitation for each analyzer: open each analyzer
    class (ConstructorArgumentsShouldMatchAnalyzer,
    EventSetupHandlerShouldMatchEventTypeAnalyzer,
    RaiseEventArgumentsShouldMatchEventSignatureAnalyzer,
    RaisesEventArgumentsShouldMatchEventSignatureAnalyzer,
    ReturnsAsyncShouldBeUsedForAsyncMethodsAnalyzer,
    ReturnsDelegateShouldReturnTaskAnalyzer,
    SetupShouldNotIncludeAsyncResultAnalyzer), inspect their use of syntax node
    kinds (e.g., ObjectCreationExpression, InvocationExpression, LambdaExpression,
    Async method returns, etc.), and add a concise reason stating why IOperation
    cannot express the needed implicit/explicit syntax distinctions or required
    syntactic context (or add a TODO note in the analyzer source if you cannot
    determine it) and then populate the corresponding "Reason" cells in the ADR
    table to match those explanations.
  • Line 59: The long single line containing the rule and base-class delegation
    text should be wrapped into multiple shorter lines for readability; split the
    sentence that mentions OperationKind.Invocation, OperationKind.ObjectCreation,
    OperationKind.SimpleAssignment / OperationKind.PropertyReference and the
    Base-class delegation clause (referencing MockBehaviorDiagnosticAnalyzerBase)
    into two or three logical lines so each line stays within typical limits and the
    meaning is preserved.
  • Line 76: The REF-001 link in the ADR is broken; update the reference under
    REF-001 to point to the correct Roslyn IOperation documentation by replacing the
    invalid GitHub URL with either the Microsoft Learn API page
    (https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.ioperation)
    or the Roslyn source file on GitHub
    (https://github.com/dotnet/roslyn/blob/main/src/Compilers/Core/Portable/Operations/IOperation.cs)
    so the REF-001 reference resolves correctly.

In @docs/architecture/ADR-009-xunit-with-roslyn-test-infrastructure.md:

  • Line 52: Replace the phrase "file loading convention" with the hyphenated
    compound modifier "file-loading convention" in the ALT-004 bullet (the line
    containing "ALT-004: Rejection Reason") of
    ADR-009-xunit-with-roslyn-test-infrastructure.md so the sentence reads
    "...Requires a file-loading convention that adds indirection without benefit.",
    ensuring consistent, clearer technical phrasing.

Duplicate comments:
In @.serena/memories/forgetful-knowledge-base.md:

  • Line 13: Replace the hard-coded Unix path string ~/.forgetful/forgetful.db
    with a cross-platform guidance sentence: state that ~/.forgetful/forgetful.db
    is the UNIX/macOS default, add the Windows equivalent (e.g., under
    %APPDATA%\\Forgetful\\forgetful.db), and mention using XDG_BASE_DIRS or an
    environment variable / OS-specific data directory (or an OS-aware helper) to
    choose the path at runtime; update the markdown entry to show the Unix default
    and a short note with the Windows path and suggestion to use an OS-agnostic
    storage location.

In @.serena/memories/suggested-commands.md:

  • Around line 45-47: Summary: Document both the mutating and verification
    dotnet-format commands for local and CI workflows. Update
    .serena/memories/suggested-commands.md to keep the existing "dotnet format"
    entry and add a second entry documenting "dotnet format --verify-no-changes"
    with a short heading like "Validate no pending format changes (pre-commit/CI
    gate)"; ensure the two items appear together so developers know to run the first
    locally and the second in CI/pre-commit checks.

</details>

---

<details>
<summary>ℹ️ Review info</summary>

<details>
<summary>⚙️ Run configuration</summary>

**Configuration used**: Repository UI

**Review profile**: ASSERTIVE

**Plan**: Pro

**Run ID**: `fefe7394-1962-4b01-a6f4-513dbee14b74`

</details>

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 53b5de651f357a16fc2771328aee405ffa5a9b40 and 6f2a3ca71568cc565ab30580a37fe8b76af4cd25.

</details>

<details>
<summary>📒 Files selected for processing (9)</summary>

* `.serena/memories/architectural-patterns.md`
* `.serena/memories/dependency-constraints.md`
* `.serena/memories/forgetful-knowledge-base.md`
* `.serena/memories/observations-index.md`
* `.serena/memories/project-overview.md`
* `.serena/memories/suggested-commands.md`
* `docs/architecture/ADR-006-wellknown-types-pattern-for-moq-symbol-resolution.md`
* `docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md`
* `docs/architecture/ADR-009-xunit-with-roslyn-test-infrastructure.md`

</details>

</details>

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

Comment thread .serena/memories/project-overview.md Outdated
Comment thread docs/architecture/ADR-009-xunit-with-roslyn-test-infrastructure.md
rjmurillo and others added 5 commits March 15, 2026 08:18
… examples

.NET 10 SDK with LangVersion=default resolves to C# 14, not C# 13.
DiagnosticAnalyzer class count is 24 (verified), not 23. Remove hard-coded
SDK patch version from project-overview; point to global.json instead.
Fix misleading interface naming example in style-and-conventions.
Remove per-operation MoqKnownSymbols construction from architectural-patterns;
show only the correct RegisterCompilationStartAction pattern.
Add clarifying note that Name pre-filter in early exit is a performance hint,
not a semantic check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
IMP-005 records the pinned version (0.15.8) and points to
Directory.Packages.props as the authoritative source, consistent
with the version citation pattern used in ADR-003 and ADR-004.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 5 new Serena memories from comprehensive analysis of all 200 issues,
200 PRs, 14 releases, and full codebase architecture:
- bug-patterns-and-antipatterns: 6 recurring failure modes with prevention checklist
- complete-analyzer-catalog: all 24 rules, 5 fixers, registration patterns
- open-work-roadmap: 44 open issues prioritized by effort
- pr-and-issue-patterns: PR/issue distribution, label signals
- release-history: 14 releases, 4 project phases, CS8032 lesson

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: AI session working artifacts committed without PR mention
    • Deleted the three AI session working artifacts in .agents/ directory that contained internal tool references and were not part of the intended PR changes.

Comment thread .agents/analysis/001-adr-verification-analysis.md Outdated
Remove .agents/ directory containing internal AI tool session outputs that were unintentionally included in the commit.
Copy link
Copy Markdown
Contributor

@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: 2

♻️ Duplicate comments (2)
docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md (1)

76-76: ⚠️ Potential issue | 🟡 Minor

Replace REF-001 with a valid IOperation documentation link.

Line 76 points to a Roslyn path that is not a stable API-doc target.

🔗 Proposed fix
-- **REF-001**: Roslyn IOperation documentation: <https://github.com/dotnet/roslyn/blob/main/docs/compilers/CSharp/IOperation.md>
+- **REF-001**: Roslyn IOperation documentation: <https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.ioperation>
#!/bin/bash
set -euo pipefail
curl -sI "https://github.com/dotnet/roslyn/blob/main/docs/compilers/CSharp/IOperation.md" | head -n 1
curl -sI "https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.ioperation" | head -n 1

As per coding guidelines, "Validate all links before committing markdown changes".

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

In
`@docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md`
at line 76, Replace the unstable GitHub path referenced by REF-001 with the
stable Microsoft Docs API page for IOperation: update the markdown entry labeled
**REF-001** so its URL points to
https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.ioperation
(or equivalent regional docs) and ensure the link text remains descriptive
(e.g., "Roslyn IOperation documentation") so the reference in
ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md resolves
to the stable API doc.
docs/architecture/ADR-001-symbol-based-detection-over-string-matching.md (1)

58-58: ⚠️ Potential issue | 🟡 Minor

Add direct API URLs for REF-002.

Line 58 names Roslyn APIs but does not provide clickable references.

🔗 Proposed fix
-- **REF-002**: Roslyn API documentation: `ISymbol`, `SymbolEqualityComparer`
+- **REF-002**: Roslyn API documentation: [`ISymbol`](https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.isymbol), [`SymbolEqualityComparer`](https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.symbolequalitycomparer)
Provide the official Microsoft Learn API reference URLs for `Microsoft.CodeAnalysis.ISymbol` and `Microsoft.CodeAnalysis.SymbolEqualityComparer`.

As per coding guidelines, "Validate all links before committing markdown changes".

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

In `@docs/architecture/ADR-001-symbol-based-detection-over-string-matching.md` at
line 58, REF-002 currently lists Roslyn types without links; update the ADR to
include direct Microsoft Learn API reference URLs for
Microsoft.CodeAnalysis.ISymbol and Microsoft.CodeAnalysis.SymbolEqualityComparer
(refer to REF-002 and the symbol names ISymbol and SymbolEqualityComparer to
locate the text), insert the official Learn dotnet API page links next to each
type, and validate both links work before committing the markdown change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.serena/memories/architectural-patterns.md:
- Around line 63-68: The examples currently over-highlight by calling
invocationSyntax.Expression.GetLocation() and objectCreation.Type.GetLocation();
change the invocation case to target the method name by casting to
MemberAccessExpressionSyntax and using .Name.GetLocation() (e.g.,
((MemberAccessExpressionSyntax)invocationSyntax.Expression).Name.GetLocation()),
and change the object-creation case to target the sealed type by extracting the
type argument via objectCreation.TypeArgumentList.Arguments[0].GetLocation() (or
its Type node) instead of objectCreation.Type.GetLocation(); update the examples
accordingly so they match the patterns used in
EventSetupHandlerShouldMatchEventTypeAnalyzer.cs and
CallbackSignatureShouldMatchMockedMethodAnalyzer.cs.

In @.serena/memories/pr-and-issue-patterns.md:
- Line 22: The percentage on line 22 ("49.5% of all PRs are dependency updates")
is inconsistent with the counts shown on line 13 (113 dependency PRs out of 200
= 56.5%); recalc and update the text to the correct value (56.5%) or adjust the
counts so they match; specifically edit the sentence containing "49.5% of all
PRs are dependency updates" to reflect the correct percentage (56.5%) and verify
any other references to dependency PR percentage in this document for
consistency.

---

Duplicate comments:
In `@docs/architecture/ADR-001-symbol-based-detection-over-string-matching.md`:
- Line 58: REF-002 currently lists Roslyn types without links; update the ADR to
include direct Microsoft Learn API reference URLs for
Microsoft.CodeAnalysis.ISymbol and Microsoft.CodeAnalysis.SymbolEqualityComparer
(refer to REF-002 and the symbol names ISymbol and SymbolEqualityComparer to
locate the text), insert the official Learn dotnet API page links next to each
type, and validate both links work before committing the markdown change.

In
`@docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md`:
- Line 76: Replace the unstable GitHub path referenced by REF-001 with the
stable Microsoft Docs API page for IOperation: update the markdown entry labeled
**REF-001** so its URL points to
https://learn.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.ioperation
(or equivalent regional docs) and ensure the link text remains descriptive
(e.g., "Roslyn IOperation documentation") so the reference in
ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md resolves
to the stable API doc.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: fa4fc730-af3d-4699-bae1-efa1a3428ee1

📥 Commits

Reviewing files that changed from the base of the PR and between 6f2a3ca and 974425d.

📒 Files selected for processing (13)
  • .serena/.gitignore
  • .serena/memories/architectural-patterns.md
  • .serena/memories/bug-patterns-and-antipatterns.md
  • .serena/memories/complete-analyzer-catalog.md
  • .serena/memories/open-work-roadmap.md
  • .serena/memories/pr-and-issue-patterns.md
  • .serena/memories/project-overview.md
  • .serena/memories/release-history.md
  • .serena/memories/style-and-conventions.md
  • .serena/project.yml
  • docs/architecture/ADR-001-symbol-based-detection-over-string-matching.md
  • docs/architecture/ADR-007-prefer-registeroperationaction-over-registersyntaxnodeaction.md
  • docs/architecture/ADR-008-benchmarkdotnet-perfdiff-for-performance-regression-detection.md

Comment thread .serena/memories/architectural-patterns.md
Comment thread .serena/memories/pr-and-issue-patterns.md Outdated
rjmurillo and others added 5 commits March 15, 2026 12:08
- Fix dependency PR percentage: 49.5% -> 56.5% in pr-and-issue-patterns
- Add manual lint commands (markdownlint, yamllint, shellcheck) to suggested-commands
- Fix broken Roslyn IOperation URL in ADR-007 (was 404, now points to Microsoft Learn)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove blank lines between mapping keys and sequence values that were
introduced by the whitespace normalization commit, causing yamllint
CI failure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add local-and-ci-configuration: git hooks, CI workflows, linter
  configs, build flags, AI editor rules, known broken configs
- Add codebase-analysis-observations: session learnings on memory
  accuracy, YAML validation, and AI reviewer verification
- Update observations-index with new memory references

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
yamllint requires sequence items to be indented under their parent
mapping key. Unindented items at column 1 fail the indentation rule.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
coderabbitai[bot]
coderabbitai Bot previously approved these changes Mar 15, 2026
Modern Debian/Ubuntu blocks pip install in externally-managed
environments (PEP 668). pipx handles virtual environment isolation
automatically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@rjmurillo rjmurillo merged commit 2356a3a into main Mar 15, 2026
38 of 39 checks passed
@rjmurillo rjmurillo deleted the chore/serena-onboarding branch March 15, 2026 19:37
@rjmurillo rjmurillo added this to the vNext milestone Mar 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants