Repository navigation
Description
Summary
When a C# method carries two separate attribute brackets on the same declaration — e.g. an HTTP-verb attribute and a [Route(...)] attribute as distinct [...] groups rather than combined in one bracket — the decorators property returned via query_graph for that Method node only contains one of the two attributes. The other is silently dropped.
[HttpPost]
[Route("orders/{id}/confirm")]
public async Task Confirm(Guid id)
{
...
}We queried this via:
MATCH (m:Method)
WHERE m.decorators IS NOT NULL
RETURN m.name, m.file_path, m.decoratorsFor methods shaped like the example above, m.decorators came back with only the [HttpPost] entry — [Route("orders/{id}/confirm")] was missing — even though the source file on disk clearly has both attributes present. We confirmed this by diffing CBM's output against the raw source for the same file/method.
Impact
We index several ASP.NET Core / ABP-style .NET monoliths where this two-bracket style (verb attribute + route attribute as separate lines) is the dominant convention. Because of this, CBM's built-in :Route node ends up populated for only a small fraction of the routes we'd expect across our indexed repos (on the order of a handful out of tens of thousands of methods with HTTP attributes). We ended up writing a separate regex-based fallback to reconstruct API routes (merging class-level [Route] with method-level [HttpGet]/[HttpPost]) rather than relying on CBM's own decorator/route extraction, since the built-in extraction wasn't usable for this.
Version
Pinned to v0.8.1. We're stuck on this version for an unrelated reason (a separate regression where query_graph's output changed to a human-readable text table with no JSON path in later releases we tried), so we haven't been able to confirm whether this specific decorator-dropping issue still reproduces on main / the latest release. Flagging it here in case it's still present.
Expected behavior
m.decorators (or whatever the AST layer collects for a method's attributes) should include all attribute brackets attached to a method declaration, not just the first/last one found.
Activity
DeusData commentedon Sep 19, 2026
Thank you for the detailed reproduction. Current main's
query_graphschema includesformat: "json"and snapshot continuation throughcursor. That clarifies the current interface, but does not establish which release first included it or prove the original extraction problem solved. The separate-bracket C# attribute fixture remains the relevant regression case.DeusData commentedon Sep 26, 2026
Thank you for the precise two-bracket example and for diffing CBM's output against the source. That's exactly the check that settles it!
Verified on current main: for a method with
[HttpPost]and[Route("orders/{id}/confirm")]in separate brackets,m.decoratorsnow returns both:["HttpPost","Route(\"orders/{id}/confirm\")"]. The fix is 6b23078 (PR #1759, thanks to @Jumaga2015), which scans every attribute group instead of only the first. It shipped in v0.11.0, together withquery_graphformat: "json".One caveat: turning those attributes into
:Routenodes for ASP.NET Core is still missing and tracked in #1692. Could you confirm thedecoratorsresult on v0.11.0? If it matches, we'll close this one.github-actions commentedon Sep 26, 2026
Thanks for the report! To move this forward we need a bit more so we can reproduce it ourselves:
codebase-memory-mcp --versionyou're onOnce that's here we'll pick it straight back up. Heads-up: issues left
awaiting-reporterare automatically closed after a few weeks of silence, but a comment reopens the door anytime.github-actions commentedon Oct 21, 2026
This issue has been waiting on more information for 21 days (a version, exact steps, or a public repro), so it's now marked
stale. It will not be closed automatically — a maintainer reviews stale issues by hand. Adding a comment with the details clears the label and puts it straight back in the queue. We're happy to pick it back up the moment we can reproduce it.DeusData commentedon Oct 25, 2026
Thank you for the separate-bracket fixture. The outstanding check remains the decorators result on v0.11.0 or newer, distinct from route-node extraction; no new reproduction is needed.