Merge open canonical fixes and add a Homebrew MCP service - #21
Closed
philocalyst wants to merge 170 commits into
Closed
philocalyst wants to merge 170 commits into
philocalyst wants to merge 170 commits into
Conversation
…er declared. refer() on a missing id made Lowering::finish reject the whole package. Declarations now land first, and a re-export target that this package did not declare becomes a foreign key instead of an empty slot. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A target named * was never declared. export * as ns and a star that fans out to nothing now reference the module root, and no sealed symbol is named *. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…n the same package. A barrel used to see a later file's declare_ref as missing and store a foreign key. Ids this package will declare are referred first, so the later declare_ref fills the slot. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…the name. Return types and heritage clauses used to stay unresolved strings, so returnedBy and subtypes had nothing to follow. A declared name is referred; a real type parameter stays a type variable; an unknown name stays unresolved. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…e parameter. lower_ts_type passed no parameter set, so every identifier including ImportedWidget became TypeVar. Function signatures now pass their type parameters, and a name outside that set stays a nominal. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…duplicate. Re-exports and nominals refer an id only when this package will declare it; everything else is a foreign key. Twin files that share a skeleton publish once, while two different bodies in one file stay two entries or surface Error::Duplicate. CommonJS function assignments and require bindings lower as an owned function and a package reference. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A bare or dotted name this package declares becomes a nominal ref when the file imports it unambiguously or declares it in the same file. Overload branches keep each signature's parameters, and self or cls is dropped only when it is that function's receiver. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Header-only APIs were dropped because only .c/.cpp files were parsed and is_in_main_file ignores included declarations. Each package-root header is now parsed once. T&& no longer lowers as Primitive::Reference, and a type declared in the package becomes a local nominal. std:: names use nominal_import so finish does not report them undeclared. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…set-8770 Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…8770 Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
An empty returnedBy, subtypes, acceptedBy, heldBy, or usages page now carries a closed reason: an unlinked nominal, occurrences that were never attached, a true negative, or Rust-only implementors still pointing at subtypes. The note follows the queried symbol, so a package that linked Return for someone else does not hide an unlinked name. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A name plus a kind filter no longer lists every symbol of that kind, and re-exports are searchable. One engine load checks packages, search, read, refs, graph, and the schema card. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…-8770 Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Identical bodies written twice in one file stay one declaration. Different bodies sharing a name get their own discriminant, keyed by span so a later overload cannot overwrite the first. The 21 latest npm packages that used to die in finish now seal. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
axios, follow-redirects, form-data, and proxy-from-env each finish. serde 1.0.229 and serde_core 1.0.229 each finish, and serde names serde_core as a foreign package. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Interface and class skeletons now include signatures, so two namespace blocks that declare the same interface with different methods stay two overloads. Member ids put the parent overload in the name, not in a discriminant that overflows. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Two namespace blocks that differ only by an index signature or a construct signature no longer compare equal and drop the second body. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
f<T> and f<T extends string> no longer compare as the same interface and drop the bounded overload. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Variance, this-parameters, readonly parameters, function-type detail, type-alias generics, extends versus implements, decorators, accessors, modifiers, and docs all participate in body identity. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
The same key and the same query must return the same page, a graph hit must open in read, and an empty implementors edge must point at subtypes. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
…ile. Visibility and docs stay part of same-file identity. Twin files still merge on the body alone, so a repeated enum does not declare its variants twice. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Getters, setters, declare, override, definite assignment, initializers, static index signatures, optional and rest tuple elements, readonly function parameters, enum unary values, and computed keys no longer collapse onto the other declaration in the same file. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
An accessor's override, definite assignment, and initializer, and the source of a static block, are part of the class skeleton. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Two implementations that share a signature stay distinct, and object and array parameters keep the names written in the pattern. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A default value and a parameter decorator are part of the function skeleton, and override on a constructor parameter property is part of the synthesized field. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A decorator on a rest parameter, and a comment on a call, construct, or index signature, is part of the same-file skeleton. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A call, construct, or index signature stores the deprecation note and the ignore flag, not only the comment description. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
An index, call, or construct signature inside an object type keeps the block comment in front of it, so two commented shapes in one file do not collapse. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A block comment in front of a property inside an object type is part of that property's name, so two commented properties in one file do not collapse. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
go/types panics when a cgo named type is still incomplete. The oracle now recovers, records those names, and the package seals with them as gaps. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
References name the real caller, and dependencies follow the parsed Cargo.toml edge. A snapshot or product-text failure fails the command. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Package identity is the Cargo.toml name and version, and a purl that does not match fails. Explore and tree-open report the indexed declaration instead of echoing the query. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A later const with a different initializer is its own fact, and a use of that binding targets it. Identical twins still share the first fact. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Cargo and npm share one rank in the package graph. A repeated name keeps the higher scope, and dependents include only runtime and optional rows. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
IngestedVersion and TursoCatalog publish now share verify_entity_locators. An identical republish stays unchanged and a short entity slice does not append history. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Both manifests call validate_selection_admission. A duplicate present id and a reversed selection order are rejected on both lanes. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Upsert classifies the preflight readback. A matching point is not submitted, a missing point is written, and a changed vector stays a conflict. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
ExactManifestError and LexicalManifestError are aliases of SelectionAdmissionFault, so a new admission fault cannot land on only one lane. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Index sorts stay on the stack. The first fault is still the leftmost one: a missing overlap is reported before a later duplicate. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Receipt and page admission use one increasing-coordinate check and one overrun check. A bad artifact is still reported before a catalog overrun. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Direct module requires stay Runtime. A // indirect require is Development, which dependents do not count, and duplicate names collapse before admission so a direct row wins over the same module marked indirect. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
The file owner is the source path. Shelf names come from Cargo.toml, and package-versions lists only releases that were indexed. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Direct accesses and macro-receiver accesses share one emitted span, so identity!(panel).score is recorded once and access_field!(panel, score) is still kept. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Retrieve each batch before PUT. Unchanged points stay in place. Legacy points without a key are rewritten once. A different key is an immutable-vector error and is not written. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
A name this compilation pushed stays a local fact. A package that was not loaded stays a foreign key. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Package graph sync deleted every edge whenever the UI root changed. Edges are identified by facts_version, so an identical payload now stays in place. Missing edges are deleted one id at a time, and queries fence on the meta root. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Skip unchanged Qdrant HTTP upserts. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Keep unchanged package edges when the view root changes. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Keep a field access that only exists inside a macro. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Resolve a Go call when the target package is in the same image. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
List indexed packages, owners, and versions from the manifest. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
brew install --HEAD builds backend-mcp and backend-locald from a fresh clone, and brew services starts the HTTP MCP endpoint on 127.0.0.1:8741. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
The service wrapper still creates the bearer token on first start. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
Homebrew 7 rejects a formula path outside a tap. Formula/backend-mcp.rb is the file `brew tap` reads. Co-authored-by: Miles Wirht <philocalyst@users.noreply.github.com>
This was referenced Sep 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Integrates the open pull requests that already target
canonical, and adds a Homebrew formula that installs the MCP server as a loopback service from a clean clone.packaging/homebrew/backend-mcp.rbbuildsbackend-mcpandbackend-localdwithbrew install --HEADand runs them withbrew servicesonhttp://127.0.0.1:8741/mcp.#12 (
jimmy/nix-oci-backend-7a89) is not included. It is based on the pre-canonicalworkspace/indextree (merge-basemain), and closed #11 is an earlier commit on that same branch. Those paths are gone oncanonical.cargo check --workspace --locked --all-targetspassed on this branch. Targeted Turso graph tests (4) and Qdrant HTTP tests (11) passed.Test plan
cargo check --workspace --locked --all-targetscargo test -p backend-extension-turso --lib -- --test-threads=8 --skip stress_ftscargo test -p backend-extension-qdrant --lib http:: -- --test-threads=8brew install --HEAD ./packaging/homebrew/backend-mcp.rbfrom a blank Homebrew prefixbrew services start backend-mcpagainst a small Next.js TypeScript projectinitialize,backend.index,backend.search, andbackend.resolveagainst that projectNeed help on this PR? Tag
@codesmithwith what you need. Autofix is disabled.