The README had grown to 254 lines covering an overview, every command,
the Fold/SARIF and p4c import contracts, the P4 pilot, per-language
resolution rules, limits, schema history, development and the agent
skill. It is now a 70-line overview (what Brick is, evidence lanes,
languages, quick start, commands, limits, links), and the rest lives in:
- docs/usage.md: every command (build, render, check with diff and
policy gates, mcp, setup), Fold/SARIF and p4c layering, the P4 pilot,
and what the model contains.
- docs/resolution.md: per-language name resolution as the code now
implements it, what is not handled, P4 limits, the regression corpus
and schema version 4.
- docs/development.md: build and test commands, the quality gate, the
toolchain pin, and the brick-sast skill.
Architecture docs are linked, not repeated. "What v0.1 provides" and
the milestone note are folded into usage.md and the roadmap pointer.
Every relative link and anchor resolves.
The audit found README claims the code did not back: resolution was said
to respect lexical namespace everywhere (Python/Swift matched a
repo-wide unique name, Rust types their leaf name), "ambiguous targets
stay external" (not for rival using-directives or #else stubs), Dart
imports were said to resolve (no Dart symbol ever did across files), and
"C/C++" hid that C went through the C++ grammar.
The README now describes the fixed behaviour and its remaining limits:
per-language visibility rules (Python imports, Swift module-wide names,
Dart imported libraries without show/hide), Rust type identity by
declaring file, preprocessor alternatives excluded from resolution,
using-directive ambiguity, the C grammar for .c, Fold report
validation and producer-gated symbolic lane, lossy UTF-8 decoding,
diagnostic counts and empty-scan reporting, check recomputing metrics,
low call-site coverage on large C++ code, no virtual-override fan-out,
and unrecognized Catch2 TEST_CASE bodies. The research note lists the
pinned C grammar.
Adds the audit, literature rationale, experiment contract, labeled-corpus
results, Fold/Paperbridge/Brick/YAMS coverage and dead-code spot checks,
model changes, identity changes, and remaining limits.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Agents asking "is this function used?" get resolved, unknown, or
unreferenced per function instead of a bare zero in-degree. Unknown lists
why callers may exist: same-name unresolved call sites (excluding foreign
receivers and macros), name references (callbacks, address-taken, macro
bodies), virtual/trait-impl/external-base/outside-class members, framework
attributes, implicit protocol invocations, entry points, test code,
incomplete parses, and, unless assume_closed_world is set, exported or
external-linkage functions. Unreferenced is a review candidate with an
explicit heuristic/compiler evidence basis, never a dead-code proof.
The queries are read-only over validated schema-4 models and return
complete canonical nodes and edges plus metrics.resolution coverage.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
README limits now describe include-closure C++ lookup, declared-receiver
member resolution, Rust macro re-parsing, unresolved reasons, and
metrics.resolution, plus the remaining adapter gaps. The roadmap records
candidate edges, the Fold compiler call lane, and compile_commands/Cargo
module resolution as next stages; literature notes cite the call-graph and
name-resolution papers found through paperbridge.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Expand module-scoped use trees into exact import paths and bindings. Resolve renamed public symbols and module aliases without global-name fallback; keep unknown and block-local bindings conservative.
Add positive and negative integration tests and an exact three-repeat import benchmark to the quality gate.
Use pinned grammar frontends and scoped heuristic resolution to recover declarations and prevent false dependencies. Constrain filesystem traversal and normalize Fold root aliases.
Add exact multilingual fixtures, seventeen regression tests, and a three-repeat benchmark to the quality gate.